Java和西门子S7-1200通讯调试记录
这是很久以前做的一个项目,工业现场一个agv,主要作用的清扫摇床(一种选矿设备),选用的S7-1200的CPU。工作原理是agv上面放一个机械臂,机械臂上面装一个扫把,到固定位置以后,执行清扫动作,模拟人工清扫。见下图:
上位软件部分,服务端采用springboot,前端使用vue。主要功能:
1:对接主控plc,下发控制指令。
2:监控设备状态,任务状态。
3:手动下发清扫任务,以及制定自动清扫任务。
软件界面见下图:
调试过程中,发现bit位写入不成功。这个通讯协议已经在其他项目上使用过了,很稳定。
- 可能原因
西门子S7协议并不通用。万山项目上,称重的plc和散装机plc虽然都是smart200,但是订货号不同,协议稍微有一点不同。具体表现在链接的时候,一个参数不一样。
散装机PLC链接,最后一个参数为2
称重PLC链接,最后一个参数1
- 尝试解决
程序链接云南华联PLC,从0开始测试,发现第三个参数应该为0,
清扫AGV,PLC链接代码
Plc链接成功,测试都数据没有问题,写单个字节和多个字节都没有问题。但是写一个bit不成功。
尝试解决
使用抓包工具WSexplore.exe进行抓包。对比以后的程序发现问题。
抓包工具
写位数据时实际发送的数据
程序里面对协议的解析为:
程序里面相同的位
对比以后,发现写入长度位不一致。将这个地方改成0x65,经测试,写入bit成功。
- 总结
S7系列plc,不同plc型号,以及订货号,协议稍有不同。slot是插槽的意思,按我的理解,应该是在导轨上的位置。一遍情况下,应该都是在最左侧,就是位置0或者1。但是为什么有时候写0,有时候写1,有时候写2,完全搞不清楚,一头雾水。有知道的大佬可以帮忙指点一下,感谢。
对于写bit位,目前总结下面的几个经验:
Slot=1 或者slot =2 ,就是链接的时候最后一个参数。这个时候写位必须按长度为1
Slot=0 ,这个时候写位,长度是0x65,就是101。