1.应用的基本信息
基本应用信息描述
我在项目中是主要编程调试人员,现场调试中,经常碰到各种第三方产品使用MODBUS-Ascii协议。
Step7和博图软件中偏偏没有Modbus-Ascii协议的库和指令。
2.问题描述
原S7-300程序中,使用指针ANY作为一个发送和接收数据的LRC校验的传递参数,在新的项目中想使用S7-1200/1500 变址寻址方式替代ANY作为变换发送和接收数据的LRC校验。
3.问题的分解和解决
3.1 问题分析
由于MODBUS Ascii中发送和接收的都是Ascii字符,和1200/1500程序中的数据需要额外转换。比如设备地址1,需要转换为两个Ascii[30H+31H]。
对于Int类型的数据则需要拆分高低位后转换为4个Ascii。
3.2 问题处理
使用Variant在读写参数时需要整体读回,然后修改某个变量后在写回,但是在读回再写时,原有变量发生变化。
由于转换前后数据长度发生变化,使用Variant比较不方便。
思考和测试后,决定使用Peek读取数据、Poke写入转换后的Ascii。
4.经验总结
4.1遗留的问题
暂无
4.3 对S7-1500新功能或者更新替代的方式和方法的一些看法和建议
在SCL中使用Peek需要指定读取的数据长度,例如Byte。而Poke指令不需要指定长度。
5.程序分享
程序数据接口定义:
SCL程序