最近一个项目有用到手持式扫码枪,在调试过程遇到一些问题分享个大家。
扫码枪是232接口,如果PLC直接和扫描枪通讯需要增加232通讯模块,这个模块会增加项目成本,改成了通过第三方网关来将232转换成TCP通讯。通过网关转换后通讯就出现一些问题。下面一一介绍出现哪些问题和怎样解决这些问题。
手持式扫码枪是扫二维码,通讯数据都是字符串格式。扫码枪做客户端,PLC做服务器端。首先用网关软件设置客户端参数,和扫码枪通讯的波特率,这不比较简单,而且每家网关制造商都不一样,我就不截图说明,网关是买深圳三旺这家公司的产品,型号是NP302T系列串口服务器。设置完网关的参数后,再到PLC建立通讯接收数据DB块。接收数据格式你可以设置成字符(Char)数组格式或是字符串(String)格式。我下面图一是设置字符格式,图二是字符串格式,图二是另一款产品通讯也是有和喷码机一样的问题,处理方法都是一样。下图是我两个TCP通讯的DB块地址,两个产品不是一样,但是都是同样问题,处理方法思路一样,程序编程稍有不同。由于调试周期比较紧没有来得及拍照,一些图片无法提供。

图1

图2
下面我就详细说明问题。
西门子字符串格式定义:数据类型为 string 的操作数可存储多个字符,最多可包括 254 个字符。字符串中的第一个字节为总长度,第二个字节为有效字符数量。
字符串(string)在存储上类似字符的数组,所以它每一个元素都是可以提取的字符,如:"abcdefg"叫字符串,而其中的每个元素叫字符。
正因为西门子字符串格式是这样,和第三方通讯接接收到字符串格式不是这样,就会导致接收到数据,没有有效长度无法在触摸屏显示。如果是西门子自己产品就不会出现这样问题。出现这样情况就需要自己编程将接收到有效长度写入到字符串有效长度里面后才能通过触摸屏显示出来。触摸屏显示字符串需要有效长度后才能显示字符串来,哪怕你PLC能接收到完整的数据,可以在DB块里面监视到完整数据,只要你字符串里面没有有效长度,就不能再触摸屏显示字符串。这个问题解决方法是西门子触摸屏技术支持提供方法,中途打过几次PLC技术支持没有找打问题,后来PLC技术支持建议打触摸屏技术支持,通过两次和触摸屏电话后来触摸屏支持给了我这样的解决方案,我试了一下就解决。这个问题前后花了我两天时间才解决。解决此问题感谢西门子PLC和触摸屏技术支持。
编程第一步是要使用到接收指令中的接收长度管脚。
编程第二步将接收到长度减一的结果数据格式转。通讯指令长度格式是UDINT格式,要将UDINT格式减1的原因是网关会自带发送一个结束字符,这个字符是不需要的需要去掉。将UDINT转换成DINT原因是,字符转换成字符串指令的长度格式是DINT格式。通过这样转换后的字符串格式才能正常显示。
下面是详细编程截图。

图3
如果用图二数据格式,你就只要将接收到数据长度减1后的结果转换成字节格式后,再将转换后的结果长度传送到字符串第二有效长度里面既可以,不需要像图三编程。这样编程就少一步。