C# TCP/IP与基恩士PLC通讯的最简方式

您所在的位置:网站首页 扫码枪和plc怎么连接 C# TCP/IP与基恩士PLC通讯的最简方式

C# TCP/IP与基恩士PLC通讯的最简方式

2024-07-10 04:23| 来源: 网络整理| 查看: 265

使用基恩士的上位链路通讯方式

本人实际项目中在用的。 官方通讯文档下载地址,直接看第8章即可。 说明文档下载地址

通讯使用TCP/IP协议,代码比较简单就直接贴了。

代码如下:

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace WindowsFormsApp4 { class TCP { readonly object obj = new object(); string Str; public string STR//接收到的消息 { get { return Str; } set {; } } Socket socketSend;//= new Socket (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); public bool Connect(string ip, int port) { try { socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress IP = IPAddress.Parse(ip); IPEndPoint point = new IPEndPoint(IP, port); ; socketSend.Connect(point); ShowMsg("PLC连接成功"); //开启新的线程,不停的接收服务器发来的消息 //Thread c_thread = new Thread(Received); //c_thread.IsBackground = true; //c_thread.Start(); return true; } catch (Exception) { ShowMsg("请填写正确的IP地址和端口号!"); return false; } } void ShowMsg(string str) { Str = str; } /// /// 接收服务端返回的消息 /// void Received() { try { //3M的缓存区 byte[] buffer = new byte[1024]; //实际接收到的有效字节数 int len = socketSend.Receive(buffer);// 将接受到的数据存入到输入buffer中 if (len == 0) { //断连 } Str = ""; String str = Encoding.UTF8.GetString(buffer, 0, len); ShowMsg(str); } catch (Exception ex) { //MessageBox.Show("接收数据出现异常!" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// /// 向服务器发送消息 /// /// /// public void Send(string msg) { lock (obj) { try { byte[] buffer = new byte[1024]; buffer = Encoding.UTF8.GetBytes(msg + "\r"); socketSend.Send(buffer); Thread.Sleep(10); Received(); } catch (Exception ex) { //MessageBox.Show(" 发送数据出现异常!" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } } 连接PLC代码如下: TCP PLC; //PLC连接 public void PLC_link() { PLC = new TCP(); PLC.Connect("192.168.1.1", 8501); }

这边演示读写,其他命令可以看文档解决。 举例只是方便大家看懂文档,需要注意的是空格和换行符不能少; 返回的数据是包含换行符和回车的。

读取PLC寄存器数据

格式:命令+空格+寄存器地址.数据格式+换行符(换行符写在Send方法里了) 数据格式

//格式:命令+空格+寄存器地址.数据格式+换行符(换行符写在Send方法里了) PLC.Send("RD DM300"); if (PLC.STR =="00001\r\n") { //寄存器DM300为1 } else if(PLC.STR.Length == 4)//plc返回的非数据代码长度为4带有换行符和回车 例如:OK\r\n { } 写入PLC寄存器

写单个格式:命令+空格+寄存器地址.数据格式+空格+数据+换行符(换行符写在Send方法里了) 写多个格式:命令+空格+寄存器地址.数据格式+写入数量+空格+数据+空格+数据+。。。+换行符(换行符写在Send方法里了) 数据格式

//写单个格式:命令+空格+寄存器地址.数据格式+空格+数据+换行符(换行符写在Send方法里了) PLC.Send("WR DM390 2");//改信号为2,扫码信号返回 if (PLC.STR.Length == 4)//plc返回的非数据代码长度为4例如:OK\r\n { MessageBox.Show("PLC写入出错:" + PLC.STR); } // 写多个格式:命令+空格+寄存器地址.数据格式+写入数量+空格+数据+空格+数据+。。。+换行符(换行符写在Send方法里了) PLC.Send("WRS DM350.H 5 " + "数据1" + " " + "数据2" + " " + "数据3" + " " + "数据4" + " " + "数据5");//把分割好的信息发给plc

如有需要下面的是代码的下载链接: 下载连接



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3