文章目录

PLC与扫码枪TCP/IP通信的程序实现

发布于 2026-03-28 21:34:59 · 浏览 11 次 · 评论 0 条

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 的连接请求。


第三阶段:通信流程逻辑

理解数据流向有助于排查故障。通信过程分为建连、传数、断连三个核心环节。下图展示了标准交互时序:

sequenceDiagram participant PLC as PLC(客户端) participant Net as 局域网 participant Scanner as 扫码枪(服务器) Note over PLC, Scanner: 准备阶段 PLC->>Net: ping 测试连通性 Scanner-->>PLC: 响应成功 Note over PLC, Scanner: 握手阶段 PLC->>Scanner: TCP 三次握手请求 Scanner-->>PLC: 接受连接 ACK Note over PLC, Scanner: 数据交换 alt 扫码动作 Scanner->>PLC: 发送条码数据字符串 PLC->>Scanner: 回复处理完成确认 else 超时未扫码 PLC->>PLC: 内部定时器到期 PLC->>Scanner: 发送心跳包保活 end Note over PLC, Scanner: 断开阶段 PLC->>Scanner: 关闭 Socket 连接 Scanner-->>PLC: 释放资源 OK

此流程表明,保持连接状态是关键。若长时间不扫码,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 基于字节流,但字符集必须统一(建议全用 ASCIIUTF-8)。若出现丢包,增大缓冲区溢出阈值或调整 PLC 扫描周期,确保其快于扫码枪上报频率。

最终压力测试。连续扫描 1000 次条码,观察 PLC 程序内存占用率和 CPU 负载。确认长期运行下连接不会意外中断,数据解析准确率保持在 100%。确认无误后,导出正式程序固件至主站控制器,投入生产环境使用

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文