本帖最后由 zhouyezuishuai 于 2018-4-10 07:50 编辑
关于欧姆龙的PLC,目前个人接触过两款,一款是CP1H,用485转USB跟PC通讯,这个就是标准的MODBUS协议,去官网找协议,发读写命令就可以,记得要加FCS码(我记得一个读D区好像是@00RD后面跟PLC地址寄存器地址和读取个数然后加FCS码的) 这个有需要的同学可以留言深入探讨 这次主要想讲讲CJ2M的TCP通讯 本来以为这个也可以走MODBUS协议的,但是后来咨询了欧姆龙说欧姆龙的PLC走网线是用FINS协议的,各位嫌协议解析麻烦可以直接用OPC通讯。由于我做的设备一般都涉及到压力,对时间要求比较高,再加上个人不是很喜欢用OPC那种东西,所以一般都是分析协议,直接发读写命令实现读写PLC的操作的。 关于欧姆龙的FINS协议,这里我讲一下 首先,你得先用一根网线连接电脑和PLC,设置PLC的IP地址和端口号,如果不更改的话欧姆龙一般默认是192.168.250.1 端口号9600,更改电脑的IP地址和PLC在同一个网段, 然后在电脑上运行命令提示符(CMD此处就不多讲了,如果不懂还是跳过本帖去学计算机基础吧)ping一下PLC地址,确保能ping通 在本通讯中,我们把PLC做服务端进行通讯,即PLC位Server端,PC位Client端,然后进行下一步 ; 下一步,FINS协议里规定,通讯前需要先发送握手指令,这里个人的理解就是两个人要见面首先需要沟通确定时间和地点,得到双方同意后才能见面,这里握手就是沟通时间地点的步骤,并且只能发一次握手指令(这里是TCP协议和UDP协议的主要区别之一,TCP是面向连接的可靠的数据交换,因此发送数据前双方必须先建立连接,也就是下面的握手) 握手指令:46494E53 0000000C 00000000 00000000 00000008(注意:此处全部是16进制发送) 下面解析一下握手指令: 由于是16进制,两个字符占一个字节,因此我们每4个字节分开分析 首先:第一个4个字节“46494E53”这个就是固定的,是字符串“FINS”的ASCII码,不需要改变; 第二个4个字节:0000000C 这里就是指字节长度,指的是功能码(后面会说)开始算起到命令结束的所有字符加起来的字节数以16进制表示,此处后面还有“00000000 00000000 00000008”共计24个字符也就是12个字节,12的HEX表示位C,所以此处为“0000000C“; 第三个4个字节:”00000000“功能码 功能码主要包含以下几个: 00000000-客户端到服务端的指令; 00000001-服务端到客户端的指令;00000002-FINS帧发送命令,这个应该是用的最多的;00000003-FINS帧发送错误通讯命令,这个我也不是很理解,但是用不到就跳过;00000006-确立通讯连接,这个应该是跟握手命令功能差不多,但是没用过 第四个4个字节:“00000000”错误码 就是通过改字节判断数据是否正常,常见错误如下(省掉前面几个字节,直接以最后两位数为名): 00-通讯正常; 01-数据头不是FINS或者ASCII不匹配; 02-数据长度过长;03-命令(功能码)错误;20-连接通信被占用; 第五个4个字节: “00000008” 电脑(客户端的IP地址最后一个字段的16进制表示,由于我的电脑端IP地址设置为:192.168.250.8) 所以此处为00000008,如果电脑地址为192.168.250.100,最后这4个字节字符应为“00000064”
|