电工学习网

 找回密码
 立即注册
查看: 2752|回复: 0
打印 上一主题 下一主题

PLC实现TCP通讯

[复制链接]
跳转到指定楼层
楼主
发表于 2020-4-16 08:28:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
首先设置plc的IP地址,设置为ASSII码通讯。
PLC实现TCP通讯
设置PLCIP地址
打开PLC中TCP MC协议,并设置端口
PLC实现TCP通讯
打开MC协议
然后重新启动PLC,就可以通过IP进行PLC的访问了
PLC实现TCP通讯
IP访问PLC
我们对PLC通过TCP编程进行通讯访问。在VS2010中新建类,建立TcpClient实例,传入IP地址及端口参数,测试其连接状态。
        ///
        /// 连接PLC
        ///
        /// IP地址
        /// port1接口
        ///
        public string connect_PLC(string IpAddress, int port1Num)
        {
            string s = "OK";
            TcpClient Client = new TcpClient();
            try
            {
                Client.Connect(IpAddress, port1Num);
                Client.GetStream().Close();
                Client.Close();
            }
            catch (Exception ex)
            {
                s = "连接服务器失败!原因:" + ex.ToString();
            }

            return s;
        }
测试PLC通讯连接
PLC实现了TCP通讯后,接下来就可以传命令实现读取或修改PLC内数值了。按照说明书的MC协议指令进行拼接指令就可以了。
PLC实现TCP通讯
MC协议说明
实现写入PLC指定区域数据命令
        ///
        /// 写入PLC数据
        ///
        /// IP地址
        /// port接口
        /// 软件元名称(DXC..)
        /// 开始位置
        /// 写入数量
        /// 写入的数值(int数组与数量匹配)
        /// 延后时间(time*250ms)
        ///
        public string write_PLC(string plc_IP1, int port1, string memory, int qishi, int cnt, int[] s, int time)
        {
            byte[] buffer;
            byte[] inbuff = new byte[1532];
            string RxResponse;
            string key = "";
            TcpClient Client = new TcpClient();
            try
            {
                Client.Connect(plc_IP1, port1);
            }
            catch (Exception ex)
            {
                key = "连接服务器失败!原因:" + ex.ToString();
            }
            if (key == "")
            {
                StringBuilder str = new StringBuilder();
                str.Append("03FF" + time.ToString("x4"));
                if (memory.ToUpper() == "C")
                {
                    str.Append("434E");
                }
                else if (memory.ToUpper() == "D")
                {
                    str.Append("4420");
                }
                else
                { }
                str.Append(qishi.ToString("x8"));
                str.Append(cnt.ToString("x2") + "00");
                for (int i = 0; i < s.Length; i++)
                    str.Append(s.ToString("x4"));
                buffer = System.Text.Encoding.Default.GetBytes(str.ToString());
                Client.GetStream().Write(buffer, 0, buffer.Length);
                System.Threading.Thread.Sleep(1500);
                if (Client.GetStream().DataAvailable)
                {
                    Client.GetStream().Read(inbuff, 0, inbuff.Length);
                    RxResponse = System.Text.Encoding.Default.GetString(inbuff);
                    key = RxResponse;
                }
                Client.GetStream().Close();
                Client.Close();
            }
            return key;
        }读取文本处理后,写入数据库功操作,这里设置了Timer定时器,自动读取PLC的数值
PLC实现TCP通讯
自动读取PLC数值


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-5-6 20:47

Powered by © 2011-2022 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表