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。

相关推荐
phantom_1114 天前
Cursor 分析 bug 记录
bug·cursor
Direction_Wind5 天前
Flinksql bug: Heartbeat of TaskManager with id container_XXX timed out.
大数据·flink·bug
AIBigModel8 天前
智能情趣设备、爆 bug:可被远程操控。。。
网络·安全·bug
Direction_Wind8 天前
flinksql bug: Received resultset tuples, but no field str
bug
远瞻。8 天前
【bug】diff-gaussian-rasterization Windows下编译 bug 解决
windows·bug
中草药z8 天前
【测试】Bug+设计测试用例
功能测试·测试工具·测试用例·bug·压力测试·测试
我又来搬代码了8 天前
【Android】【bug】Json解析错误Expected BEGIN_OBJECT but was STRING...
android·json·bug
葵野寺9 天前
【软件测试】BUG篇 — 详解
bug·测试
青青子衿越11 天前
微信小程序右上角分享页面找不到路径bug
微信小程序·小程序·bug
刘火锅12 天前
Bug 记录:SecureRandom.getInstanceStrong()导致验证码获取阻塞
spring boot·spring·spring cloud·bug