最近在学PLC的使用,本人是初学者,只是记录一下解决的问题,如有错误还请见谅。
目录
1 CW-3L62模块部分
1.1 CW-3L62模块简单介绍
我使用 CW-3L62 模块作为网关,将 PLC(通过以太网)与 RS485 连接的模拟量模块通讯,将模拟量模块采集到的信号传递给 PLC。这里就只讲PLC如何通过CW-3L62与模拟量模块通讯,CW-3L62模块的相关资料连接为:产品资料-晨为通信

该系统主要采用TCP Server模式运行,通过交换机将PLC与CW-3L62模块相连(也可直接连接PLC网口),同时CW-3L62模块通过RS485接口连接模拟量模块

1.2 CW-3L62模块配置
配置CW-3L62模块时,请按照以下步骤操作:访问初始IP地址192.168.0.80,然后在网页界面输入您的账号和密码。
将IP地址改为与PLC同网段,或者改PLC的IP到同网段。我的 PLC IP 地址已设置为 192.168.0.4,与 CW-3L62 的初始 IP (192.168.0.80) 在同一网段 (192.168.0.*),因此无需修改 CW-3L62 的 IP 地址。

端口参数设置中,我主要修改了波特率,将其设置为与模拟量模块的 RS485 波特率一致,以确保 CW-3L62 能与模拟量模块正常通信。工作模式选了TCP Server,PLC是主动与该模块连接通讯。

将数据转换改成使能Modbus RTU转Modbus TCP
操作完成后请重启模块,并登录网页检查修改后的模块信息是否生效。若修改了模块IP,需使用新IP地址登录。如忘记新IP,可通过模块右侧的初始化按钮恢复默认设置。
2、PLC部分
2.1 硬件标识符
博图软件最基本的添加设备我就不说了,选择自己型号的PLC添加后,更改PLC的IP地址到同网段,再点击以太网口,然后查看系统常数,记住这个硬件标识符,后面需要用到。

2.2 MB_CLIENT模块配置
配置MB_CLIENT模块信息,REQ和DISCONNECT都是和通讯相关开关,这里我使用时钟脉冲来触发 REQ 管脚。当 REQ 被置为 TRUE 时,MB_CLIENT 指令会发起通讯请求(执行读写操作)。DISCONNECT 管脚用于控制连接状态:当其为 FALSE (默认/未激活) 时,MB_CLIENT 会尝试建立并保持 TCP 连接;当其为 TRUE (激活) 时,MB_CLIENT 会主动断开当前的 TCP 连接。
MB_MODE到RD_MB_DATA_LEN都是与通讯功能相关的:
MB_MODE | MB_DATA_ADDR | MB_DATA_LEN | Modbus 功能 | 功能和数据类型 |
---|---|---|---|---|
0 | 1 到 9999 | 1 到 2000 | 01 | 在远程地址 0 到 9998 处,读取 1 到 2000 个输出位 |
0 | 10001 到 19999 | 1 到 2000 | 02 | 在远程地址 0 到 9998 处,读取 1 到 2000 个输入位 |
0 | 1 到 125 | 03 | ||
0 | 30001 到 39999 | 1 到 125 | 04 | 在远程地址 0 到 9998 处,读取 1 到 125 个输入字 |
RD_MB_DATA_LEN:要从远程设备读取的寄存器数,允许值:1 到 125
我需要读取模拟量模块的温度数据,根据模块的通讯协议要求,从MB_MODE到RD_MB_DATA_LEN这些参数都要按规范设置。
因为,根据我的模拟量模块手册,向其发送 Modbus RTU 查询帧:01 03 00 00 00 04 44 09 (从站地址1, 功能码03读保持寄存器, 起始地址0, 寄存器数4, CRC校验44 09),它会返回包含温度数据的响应帧。所以,对于读取模拟量模块的保持寄存器值(对应Modbus功能码03),应设置 MB_MODE = 0, MB_DATA_ADDR = 1 (对应Modbus RTU地址40001), MB_DATA_LEN = 4 (要读取的寄存器数量)。

MB_DATA_PTR 指向一个用于存储从 CW-3L62 模块(即从模拟量设备)读取回来的数据缓冲区。需要确保该缓冲区(如一个数组)的大小足够容纳 RD_MB_DATA_LEN 参数指定数量的数据。
2.3 CONNECT 配置
CONNECT是该模块的核心组件,作为指向描述结构的指针。使用时需按照以下步骤配置:
- 创建背景数据块(或IN/OUT区域变量)用于存储连接参数
- 取消该数据块(或变量所在DB)的"优化块访问"选项
- 新建数据名称并手动输入数据类型为TCON_IP_v4 完成设置后,系统将完整显示结构体所有成员。
各个数据含义为:
- Interfaceld填写的是硬件标识符(前面有说明)。
- ID 用于在 PLC 内部唯一标识一个 Modbus TCP 连接,范围是 1 到 4095。每个独立的 MB_CLIENT/MB_SERVER 连接都需要一个唯一的 ID。这里我只连接了一个设备,所以设置为 1。
- ConnectionType 设置为 16#0B (11),表示使用 TCP 协议。
- ActiveEstablished 必须设置为 TRUE,表示 PLC 作为 TCP 客户端主动发起连接。
- 下面的ADDR四个就是CW-3L62模块的IP地址了,这里填写的含义为:192.168.0.80。
- RemotePort写502,是因为这是PLC的标准Modbus端口。
- LocalPort 设置为 0,表示由 PLC 操作系统自动分配一个可用的本地端口号。CONNECT 配置不对则会导致无法通讯。
检验上述配置的最简单方法,就是把CW-3L62模块通过串口和电脑连接,电脑打开串口助手,如果电脑能接收到你想要的信息就是没问题了。
我是将这个CW-3L62模块的说明书喂给Deepseek,然后通过反复提问、修改、查看说明书等,终于完成了这个通讯过程。
以上就是CW-3L62模块与PLC通讯的全部内容,如有遗漏和错误,敬请指正,谢谢!