字符数据处理SCL
今天有一些空闲,想起来前一段时间帮公司同事处理过的通讯数据问题,问题的焦点是双方设备对字符格式的各自描述,这个问题相对有一定的代表性,根据具体的过程,可以拿来写写供大家来参考。
事情是这样的,一个项目中HMI是第三方的,在第三方HMI设备上给西门子s7-1500写产品代码的字符过程中(字符串长度定义为统一的12个字符)。当在触摸屏写入假设“12A”的字符后,监控s7-1500plc的DB数据区,会在”12A“的后面会自动添加‘$00’的字符,长度符合12个字符,这个“自动”生成的空字符‘$00’并不是项目需要的,需要处理。如何处理这个问题,我想到了SCL编程处理方式,也符合数据连续性这个特点。
我先在测试项目中做了如下测试:
1) 创建一个s7-1214C的项目,版本V4.2,图示:

2) 在测试程序中,新建一个FC1,并定义接口参数,图示:为调用FC中的AT,我通过几次验证,需要把这个勾取消掉,FC可以调用AT指令:


3) 编辑SCL编程,老方法FOR与IF的配合使用,图示:

程序非常简单,调用FC1后进来,进入FOR循环,目的是判断12个字符中,是否有‘$00’字符,如果有,则跳出FOR循环不处理(数据)。
4) 创建一个测试数据块DB1,用于字符数据的测试,图示:

5) 将程序下载后,在监控表上监控并反复修改,图示:

我在现场没有拍摄带字符‘$00’的照片,问过同事可以使用,能够满足要求。