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。

相关推荐
qq_544329174 天前
CRM项目的开发与调试整体策略
前端·后端·bug
程序员小寒8 天前
由于请求的竞态问题,前端仔喜提了一个bug
前端·javascript·bug
Golinie8 天前
记一次Linux共享内存段排除Bug:key值为0x0000000的共享内存段删除不了
linux·bug·共享内存段
谢尔登9 天前
【Bug 记录】el-sub-menu 第一次进入默认不高亮
bug
qq_5443291710 天前
下载一个项目到跑通的大致过程是什么?
javascript·学习·bug
Algorithm-00711 天前
软件测试入门—软件缺陷 Bug 详解
软件测试·bug
从int开始12 天前
加速排查线上bug
bug
LilySesy12 天前
【业务案例】F.13——SAP系统标准的清帐程序有BUG?
运维·bug·sap·abap·esb·internet服务
guhy fighting12 天前
原生toFixed的bug
前端·javascript·bug