...
log日志在握手中返回了错误码:36(0x24)。查询下表,得到错误信息为:相同的FINS节点地址已经被使用。
这个意思是说,客户端地址码在服务端已经注册了。客户端地址码应该是IP的最后1段,服务端已经登记了这段IP给其他客户端使用
- 解决方法:程序中握手返回错误码时,会自动重新生成1个客户端码,这样总能遇到1个未登记在服务端的客户端码
- log日志下面是正常的提示,不是错误: [INFO][2424] **************成功解析一个完整包,握手返回,返回的客户端地址:197 ,服务端地址:15!(设备名:YPLC15,块名:CIO_group_17, 事务号:31597)
- log提示错误,读取不到数据:[ERROR][29fc] 收到读写响应包, 操作号:257, 操作结果:64<>0(设备名:YPLC12,块名:D_group_15, 事务号:1)
- 查询通信文档英文版,这个64=0x40=01000000,该位表示的可能是:1: Special I/O Unit error
...
模拟
安装官方CX-Simulator,CX-Programer,可以模拟数据。
...
注意:测试是,不能让CX-Simulator Run起来,否则会将PLC中数据都置0,导致无法修改数据进行测试。PLC/操作模式应该处于调试状态,不要点击“运行”,否则会强制清空数据。
...
驱动读取不到错误FAQ
...
FINS-TCP协议分析
参考:http://blog.sina.com.cn/s/blog_539cee190102wr4t.html
...
例2-5、强制W212.01=Off:
发送:
46 49 4E 53 00 00 00 1C 00 00 00 02 00 00 00 00 80 00 02 00 20 00 00 05 00 FF 23 01 00 01 00 00 31 00 D4 01
20 00 00 05:20是目标地址,05是源地址;
00 FF 23 01:2301是强制操作代码;
00 01 00 00:0001是数量,00 00代表强制复位操作;
31 00 D4 01:31是W位代码,00 D4 01是起始地址,Hex00D4.01=212.01。
回应:
46494E53 00000016 00000002 00000000 C0000200 05000020 00FF2301 0000
2301后面紧跟的0000表示操作成功。
http://blog.sina.com.cn/hulx
例2-6、取消W212.01强制:
发送:
46494E53 0000001C 00000002 00000000 80000200 20000005 00FF2301 0001FFFF 3100D401
20000005:20是目标地址,05是源地址;
00FF2301:2301是强制操作代码;
0001FFFF:0001是数量,FFFF代表取消强制操作;
3100D401:31是W位代码,00D401是起始地址,Hex00D4.01=212.01。
http://blog.sina.com.cn/hulxhttp://blog.sina.com.cn/hulx
回应:
46494E53 00000016 00000002 00000000 C0000200 05000020 00FF2301 0000
2301后面紧跟的0000表示操作成功。
注意在CX-Programmer查看窗口中W212.01的值0后面的(强制)字样不见了,表示已经成功地取消了强制。
...
FINS-串口协议分析
串口通信格式:起始标记@,unitNo,HeaderCode(FA,1个字节),ResponseTime(2,1个字节), ICF(00,1个字节),DA2(00,1个字节),SA2(00,1个字节),SID(可当做事务号用,1个字节), FINScommandCode(读写命令号,1个字节),Text(请求或应答内容区),FCS(FCS验证码),*
Unit No:单元号,对应PLC内置串口或串行通讯单元设置的Hostlink单元号.缺省为0
Header code:在PC主机直连PLC的情况下,头代码为FA
Response wait time:设置范围为0~F,单位为10ms,例如设置为2,则响应等待时间为20ms
ICF、DA2、SA2:在PC主机直连PLC的情况下,固定为00
Fins command code:参考Fins通讯手册P125,读命令:0101; 写命令:0102
Text:具体操作内容,读写区域、读取起始地址、数据长度等内容
FCS校验码,1个字节
帧结束标志*
- 读取D0开始1个通道的值:
请求:@00FA0000000000101B1000A0000087D*
说明:@(起始代码) 00(PLC单元号) FA(头部代码) 00(响应时间) 00(ICF) 00(DA2) 00(SA2) 00(SID,事务号) 0101(读取功能码) B1(WR区) 000A(起始地址10) 00(通道中的第几位) 0008(读取8个通道) 7D(校验码)*(结束标记)
返回:@00FA004000000001010000123447*
说明:@(起始代码) 00(PLC单元号) FA(头部代码) 00(响应时间) 40(ICF) 00(DA2) 00(SA2) 00(SID,事务号) 0101(读取功能码) 0000(返回状态?) 1234(读取到的1个字) 47(校验码)*(结束标记)
- 读取W10开始的8个通道:
请求:@00FA00000000001018200000000017C*
说明:@(起始代码) 00(PLC单元号) FA(头部代码) 00(响应时间) 00(ICF) 00(DA2) 00(SA2) 00(SID,事务号) 0101(读取功能码) 82(DM区) 0000(起始地址) 00(通道中的第几位) 0001(读取1个通道) 7C(校验码)*(结束标记)
返回:@00FA00400000000101000011112311AAAADDDDFFFF12323243A12337*
说明:@(起始代码) 00(PLC单元号) FA(头部代码) 00(响应时间) 40(ICF) 00(DA2) 00(SA2) 00(SID,事务号) 0101(读取功能码) 0000(返回状态?) 11112311AAAADDDDFFFF12323243A123(读取到的16个字) 37(校验码)*(结束标记)
- 读取W区的一个位W20.5:???
- 写W20开始的5个通道
请求:@00FA0000000000102B100140000050001000200030004000506*
说明:@(起始代码) 00(PLC单元号) FA(头部代码) 00(响应时间) 00(ICF) 00(DA2) 00(SA2) 00(SID,事务号) 0102(写入功能码) B1(WR区) 0014(起始地址) 00(通道中的第几位) 0005(写入5个字到通道)00010002000300040005(写入的值,5个字) 06(校验码)*(结束标记)
返回:@00FA00400000000102000040*
说明:@(起始代码) 00(PLC单元号) FA(头部代码) 00(响应时间) 40(ICF) 00(DA2) 00(SA2) 00(SID,事务号) 0102(写入功能码) 0000(返回状态?) 40(校验码)*(结束标记)
- 写W20.5开始的第6位
FINS-UDP协议分析
- UDP访问方式:
- 读取示例:读取DM区20个字, 从DM100H开始
命令:80 00 02 00 41 00 00 0B 00 00 01 01 82 00 64 00 00 14
说明:
80 00 02 固定帧头
00 41 00 设备的网络号,节点号,单元号
00 0B 00 PC的网络号,节点号,单元号
00 01 01 SID+MRC+SRC
82 表示DM区
00 64 首地址
00 固定
00 14 读取数量 - 响应: D100=0x1388, D101=0x1770, D102=0x1b58
c0 00 02 00 0b 00 00 41 00 00 01 01 00 00 13 88 17 70 1b 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
说明:
C0 00 02 固定帧头
00 0B 00 PC网络号,节点号,单元号
00 41 00 设备网络号,节点号,单元号
00 01 01 SID+MRC+SRC
00 00
数据区:
13 88 17 70 1b 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...