s7 200smart进行TCP通讯OUC解析收到的字符串出现问题

1现象:

OUC使用tcp_recv接收指令的时候,收到的字符串放在vb4000中,接收的字符最大值500,vb4000初始化为40个字符。每次tcp_recv的done置位的上升沿后对字符串进行协议解析,解析的时候使用字符串函数进行特殊符号定位,这部分一致出现错误。收到的vb4000中11个字符串,7#90,1*A%08,我解析的时候vb6000为“,”,vb6010为"#",vb6020为"*"。实际结果是将vb4000收到的值进行sstr-cpy截取11个字符赋值到vb6100中,然后对vb6100中的字符串进行定位关键特殊字符,进而截取需要的字符进行转换为实数进行处理。

2问题:

进行截取后的定位查找字符使用char_find查找特殊关键字符,但是这部分代码监控的时候显示的是红色,查找的结果一直定位为0.若是单独将vb4000不赋值截取给vb6100,直接单独运行这段查找匹配代码,改变vb6100的字符串,定位char_find是可以找到位置的。跑了两天了,一直没找到原因

图片说明:

s7 200smart进行TCP通讯OUC解析收到的字符串出现问题    s7 200smart进行TCP通讯OUC解析收到的字符串出现问题   

最佳答案

每次tcp_recv的done置位的上升沿后对字符串进行协议解析,建议再加上一个未出错条件(TCP_RECV 的status=0)
TCP_RECV接收到的字符,存放于VB4000起始地址,VB4000并不算是字符串
SSTR_CPY 指令的IN参数需要为字符串,可以这样修改下程序,TCP_RECV接收到的字符,存放于VB4001起始地址,即DataPtr=&vb4001,Length 实际接收的字节数mw23作为字符串长度放入VB4000(最大254个字符)
修改tcp2_interpret子程序如截图

图片说明:

s7 200smart进行TCP通讯OUC解析收到的字符串出现问题  

提问者对于答案的评价:
处理好了字符串的首地址为字符数后就没问题了

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc279293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日 下午5:39
下一篇 2020年10月30日 下午5:39

相关推荐

发表回复

登录后才能评论