花两天半纯手敲的代码,代码有点乱,周五就要出差了,没时间整理了
,原本只是帮同事用小助手测个MC协议,也不知道脑袋一热敲了一堆代码,收益匪浅啊,分享给大家
测试工具:
R04 CPU,3E帧通讯(理论支持Q系列,可打开Gxwork3 e-Manual搜索3E帧得到手册内容)
TCP通讯小助手(测试报文用)
Python环境编写代码 版本3.10.4
Gxwork3(配置CPU参数,理论上Q系列使用Gxwork2也可)
整体的一个思路如下:
1.用小助手报文测试进行报文测试,如果有响应,无论对错,至少通讯上了,再根据发送的报文和响应的报文,根据手册帧定义进行拆分解读.
2.参考网上代码,用Python实现Socket通讯到PLC,为下一个环节做准备.
3.先直接把前面测试成功的报文,以字符串形式(需解码成字节)用Socket直接发给PLC
4.如果前面测试成功,就开始封装帧,以某个元件(我是以"D元件")开始,编辑指令,再根据需要,扩展其他元件,反复优化,迭代
目前实现:
D元件单双字写入,单进度浮点数写入,可正负,浮点数可能有精度丢失
M元件0,1 写入
TN 将其当成D理解去处理
TC,TS,X,Y将其当成M去处理,注意M地址是10进制而X,Y是16进制,需对类型进行区分
限制:
1.帧有部分内容暂时写死,软元件有部分子指令暂时写死
2.目前只封装批量读写指令,个人认为只需要这两个即可,随机读写指令实际应用中应该比较少就没写了.
总结:
1.纯练习项目,还未实际应用,目前测试数据还算正常.发出来只是给大家做个参考
2.说来惭愧,干自动化那么多年,还没接触上位机开发,为了实现这些代码也是网上参考了很多函数技巧,后面有机会再尝试试试多线程,做数据库相关的内容3
3.主要困难点在于
1.float数据如何传到PLC,又如何读出来解读.(参考规格化浮点数定义)
,网上没有实用的函数参考,为了实现并测试我足足研究了一个下午
2.数据正负的实现
4.临时敲的代码,可能还有很多Bug,望指正.