PLC 与扫码枪 TCP/IP 通信的程序实现
第一阶段:硬件准备与网络规划
实施通信前,必须确保物理链路畅通且网络参数冲突为零。你需要准备好标准的工业以太网线和两台待调试的设备(一台可编程逻辑控制器,一台带网口的扫码枪)。
分配静态 IP 地址。为了避免 DHCP 动态分配导致连接中断,固定每台设备的 IP 地址和子网掩码。建议将 PLC 设为客户端,扫码枪设为服务器,这样 PLC 主动发起连接更稳定。
| 设备角色 | 设备名称 | IP 地址 | 子网掩码 | 端口号 | 模式 |
|---|---|---|---|---|---|
| 客户端 | PLC | 192.168.1.10 | 255.255.255.0 | 8080 | TCP 客户端 |
| 服务器 | 扫码枪 | 192.168.1.20 | 255.255.255.0 | 5000 | TCP 服务器 |
连接网线。使用交叉线或直连以太网线,将 PLC 的 Ethernet 端口与扫码枪的 LAN 接口物理连通。观察网口指示灯,若绿色常亮表示链路正常,橙色闪烁表示数据正在传输。
配置电脑网卡。如果通过笔记本电脑调试,需将笔记本的本地连接 IP 修改为同网段地址(如 192.168.1.5),确保能同时访问 PLC 和扫码枪的管理界面。
第二阶段:扫码枪服务端配置
进入扫码枪的配置界面通常有两种方式:网页配置或串口指令。这里以网页配置为例,因其直观且不易出错。
登录管理后台。在浏览器地址栏输入扫码枪的 IP 地址 192.168.1.20,按回车键进入登录页。输入出厂默认用户名和密码(通常为 admin/admin),进入系统设置菜单。
开启 Socket 服务。在网络设置选项卡中,找到“数据传输”或“高级接口”区域。勾选启用 TCP 监听功能。设定监听端口号为 5000。将此连接模式选为“服务器(Server)”,允许外部设备发起连接。
配置数据包格式。在数据输出设置中,选择“字符串模式”。设置结束符为“空”或“换行符 \\r\\n"。这决定了 PLC 如何判断一条码读完。若选择十六进制模式,需在 PLC 端做额外转换,新手建议选择文本模式。
保存并重启。点击保存按钮,扫码枪会自动重启网络模块。此时扫码枪已就绪,等待接收来自 PLC 的连接请求。
第三阶段:通信流程逻辑
理解数据流向有助于排查故障。通信过程分为建连、传数、断连三个核心环节。下图展示了标准交互时序:
此流程表明,保持连接状态是关键。若长时间不扫码,PLC 应定时发送“心跳包”防止防火墙切断空闲连接。若每次扫码都重新建连,会消耗大量时间,降低效率。
第四阶段:PLC 程序编写
不同品牌 PLC 指令不同,但底层逻辑一致。以结构化文本为例,展示关键通信函数的调用顺序。假设使用开放式通信库函数。
初始化连接。在 PLC 启动首步,调用 OpenSocket 函数。传入扫码枪 IP 192.168.1.20 和端口 5000。定义接收缓冲区 RX_Buf 大小为 256 字节,足以容纳绝大多数条码数据。
发送读取指令。连接成功后,PLC 可主动发送查询指令,例如 REQ_DATA,或直接被动等待扫码枪上传。若采用推式传输,PLC 只需监控接收缓冲区是否有数据标志位变高。
// PLC 通信循环示例逻辑
IF Scan_Connect_Done THEN
Read_Socket(Data_Buf, Buffer_Size, Bytes_Read);
IF Bytes_Read > 0 THEN
// 解析数据
Parse_Barcode(Data_Buf);
// 标记数据有效
Tag_Data_Valid := TRUE;
// 清空缓冲防止重复处理
Clear_Buffer(Data_Buf);
END_IF;
ELSE
// 连接断开尝试重连
Connect_To_Scanner(IP_Str, PORT_Int);
END_IF;
数据处理校验。接收到数据后,截取有效字符串。由于网络传输可能产生粘包(多条条码合并)或断包,必须在数据前后加上特定头尾标识(如 STX ETX)。PLC 程序中需编写逻辑,仅在检测到完整头尾时才判定条码有效。
超时保护机制。设置一个看门狗定时器,若 5 秒内未收到新数据且未收到断开信号,PLC 应自动复位接收状态机。这能防止死锁导致的系统假死。
第五阶段:联调与故障排除
代码编写完成后,必须进行实地联调。按照从底向上原则,先通网络,再通协议,最后跑业务。
Ping 测试。在电脑的 CMD 命令行中输入 ping 192.168.1.20 -t。若持续显示 TTL=xxx time<1ms,说明物理层和网络层无问题。若显示 Request timed out,检查网线水晶头和交换机 VLAN 设置。
Telnet 验证。利用 Windows 自带的 Telnet 工具测试端口是否开放。输入命令 telnet 192.168.1.20 5000。屏幕变黑光标闪烁表示端口已监听;若提示无法打开连接,检查扫码枪防火墙设置。
模拟收发。在 PLC 编程软件中在线监控变量表。手动置位“发送连接”标志,观察 PLC 内部寄存器 Connection_State 的变化。正常情况下应迅速变为 1(连接中)。接着触发扫码枪扫描动作,查看 Rx_Count 计数是否增加。
日志记录异常。若在 PLC 运行中发现数据乱码,通常是波特率或编码集不匹配。虽然 TCP 基于字节流,但字符集必须统一(建议全用 ASCII 或 UTF-8)。若出现丢包,增大缓冲区溢出阈值或调整 PLC 扫描周期,确保其快于扫码枪上报频率。
最终压力测试。连续扫描 1000 次条码,观察 PLC 程序内存占用率和 CPU 负载。确认长期运行下连接不会意外中断,数据解析准确率保持在 100%。确认无误后,导出正式程序固件至主站控制器,投入生产环境使用。

暂无评论,快来抢沙发吧!