前几天工作需要学习了一下欧姆龙TCP通讯协议。专注了几天吧,现在总结一下,顺便和大家分享一下欧姆龙plcTCP通讯协议和注意要点,我用的那款 PLC是 NJ501-1300,我也不清楚欧姆龙别的系列 PLC通讯协议有没有区别,我觉得大体应该差不多了吧!朋友们有条件可以试试哈。我电脑是建立客户端的,plc做位服务器。这样做有个弊端,每次通讯失败就要重新连接。TCP通讯有个特点每次通讯前都要先握手,握手成功后才可以发数据。因为以前没有接触过,不懂,在上面打了好多圈圈,不管是复制别人的通讯格式还是手抄,都通讯失败。还有一点就是找的通讯手册全是英文的,实在是有点心有余而力不足的感觉。所以作为新接触TCP通讯协议的朋友一定要注意这点。下面我们来介绍一下通讯协议,分两部分:1.FINS节点地址数据发送(客户端->服务器)握手命令发送握手格式:上面是从手册上摘的握手格式。下面我们具体分析一下:FINS(包头)数据长度功能码错误码末位 IP地址发送:46494E530000000C000000000000000000000002(本机 IP地址末位为02)。ABCDEA: FINS命令(固定包头)B: 数据长度=从功能码数起至数据结尾(以字节为单位,一个字节占用两位 )C: 功能码分为00000000:客户端服务端00000001:服务端客户端00000002:FINS贞发送命令00000003:FINS贞发送错误通知命令00000006:确立通信连接D:错误码分为00000000:为正常00000001:数据头不是FINS或ASCII格式00000002:数据长度过长00000003:命令(C功能码)错误00000020:连接/通信被占用E:000000C7为本机IP地址末位(十六进制表示),如PLC为客户端:192.168.250.1本机IPC(服务器)IP:192.168.250.02。再重申一遍,发数据前一定要先发握手数据。下面是plc应答反馈的内容:握手反馈格式:下面是错误码,也可以看看:FINS数据长度功能码错误码应答返回地址握手成功反馈:46494E530000001000000001000000000000000200000001;发送的数据格式都是以十六进制发送的。2.握手成功了,就可以开始读或写寄存器了下面是读写格式:1.如读DM0开始的2个通道:FINS包头数据长度功能码错误码发送FINS帧格式读取码发送:46494E530000001A0000000200000000800002000100000200FF0101读DM区(功能码)起首地址个数820000000002注:01为 PLC的IP地址 ;02为本机的IP地址字起首地址位起首地址FINS包头数据长度功能码错误码应答 FINS帧格式读取码返回:46494E530000001A000000020000000C00002000200000100FF0101接收正常接...