s7-1200PLC和第三方扫码枪走以太网通信

前段时间因为客户需求 让我调试一个霍尼韦尔扫码枪 要走以太网通信

之前调的扫码枪基本都是走串口 在网上没查到什么资料 虽然有些小问题 但是最后也算调出来了

后来又遇到一些同行询问扫码枪走以太网的方式 索性就写一篇小教程吧 

知识有限 难免出错 欢迎指出

 

1200走以太网通信一般就是TCP/IP 可能有的会用到UDP 

简单来说 TCP通信就是三步 1.建立连接  2.发送/接收数据  3.断开连接  博图对这三个步骤都做了封装 我们只需要填出入库参数即可

博图中有两种TCP通信函数 一种是将3步整合在一起 一种是三步分开调用的函数 如下图

s7-1200PLC和第三方扫码枪走以太网通信_第1张图片 

为了更清楚的理解TCP的三个步骤 先讲讲第二种

(1)TCON

TCON就是三步中用来建立连接的函数 调用TCON函数 点击右上角组态

s7-1200PLC和第三方扫码枪走以太网通信_第2张图片

在下方的属性页面出现如下图界面 在伙伴栏选择未指定  然后在连接数据中选择新建

s7-1200PLC和第三方扫码枪走以太网通信_第3张图片

填写伙伴方IP地址 以及伙伴端口号 若扫码枪采用以太网通信 都需要提前配置好IP地址和端口号 端口号要从2000开始

s7-1200PLC和第三方扫码枪走以太网通信_第4张图片

配置好后TCON需要一个使能信号 

s7-1200PLC和第三方扫码枪走以太网通信_第5张图片

这里解释一下ID的含义 当客户需要多台设备(不仅仅是扫码枪)都使用同一个IP地址时,就需要通过ID号来区分不同的设备 但是一般情况下IP地址是绝对够用的 所以就为每一个设备分配了单独的地址 因此ID号保持缺省状态就行

(2)TRCV_DB  

数据接收函数 需要接入一个使能信号  这里建议使用1s的时钟来进行1s接收一次数据 ID号要与前面建立连接的ID一致

s7-1200PLC和第三方扫码枪走以太网通信_第6张图片

关键点是这个DATA参数 我第一次建立的是200长度的Array of Word类型数据 但是接收到的数据怎么都不对

后来我直接把扫描枪和笔记本用网线连起来  通过网络调试助手直接在电脑上显示扫到的数据 以16进制显示的情况下 发现扫码枪发送的是ASCII码 一个AXCII码是由8个二进制数组成的 所以我将  "Data.接收的数据" 的类型改为Array[1..200] of Byte 

结果进行一次扫码后数组里全是空的 但是数据接收显示已经完成 我就多扫了几次 结果发现只有在将数组全部填满时才会一次性都显示出来 这就造成了另外一个问题

当你的条形码长度为13时 200个长度的数组并不能刚好装下 结果就导致了最后一次扫码时超过200的数据会覆盖数组里前面的数值 文字说的不清楚 就用算式来说明一下

200 ÷ 13 = 15 余 5

当扫码15次时 数组不会显示数据    

第16次扫码时 前5个数据填充在200长度数组的最后5位

剩余的8个数据则依次覆盖了从1开始的8个数据

因此 在读条码前需要先确定要读条码的长度 然后建立相应长度的数组

造成这种现象的原因还没有搞清楚 客户也不关心这个 数据读出来后就把扫码枪拿走了 我也没用机会再去好好研究了

如果有网友也发现这个问题并且解决了 欢迎给我留言

发送和断开指令基本同上面两个一致 这里就不再做介绍了 

你可能感兴趣的:(s7-1200PLC和第三方扫码枪走以太网通信)