Skip to content

Melsec 驱动

dc3-driver-melsec 把三菱(Mitsubishi)PLC 通过 MC 协议接入 IoT DC3——按软元件地址周期性读取 PLC 内存值,并支持向软元件写值的命令。

MC 协议(MELSEC Communication)是三菱 PLC 的原生通信协议,A、QnA、Q/L、iQ-R 等系列 PLC 广泛在用。本驱动作为 MC 客户端,通过 TCP 主动连接 PLC,按位号上配置的软元件地址采数、写值。底层基于 iot-communication 协议库实现,读写时按位号的数据类型自动选用对应的字宽。

  • 驱动名 / codeMitsubishi Melsec Driver / MelsecDriver
  • 类型DRIVER_CLIENT(主动连 PLC)

先认识几个 MC 概念

软元件(Device,亦称内存地址):三菱 PLC 里按用途划分的数据单元——如 D(数据寄存器,最常用)、M(内部继电器)、X(输入继电器)、W(链接寄存器)。软元件地址:区前缀加编号组成的一个完整地址字符串,如 D100M0X10W200——区和编号写在一起,不拆成两个字段。PLC 系列(Series):不同系列的 MC 帧格式略有差异,需按实际 PLC 选 A / QnA / Q_L / IQ_R

驱动配置(设备级 driver-attribute

接入一台 Melsec PLC 时,在设备上填这些属性

属性code类型默认值说明
HosthostSTRING192.168.0.20Ip
PortportINT6000Port
PLC SeriesseriesSTRINGQnAPLC series (A/QnA/Q_L/IQ_R)

位号配置(point-attribute

每个位号上填:

属性code类型默认值说明
Device AddressaddressSTRINGD100Device memory address (D100, M0, X10, W200 etc.)
String LengthlengthINT0String read length (0 for non-string types)

数据类型决定读几个字、怎么解码

驱动按位号的数据类型(PointpointTypeFlag)自动选用读写宽度:BOOLEAN 读位,SHORT 读 16 位、INT/FLOAT 读 32 位、LONG/DOUBLE 读 64 位。只有 STRING 类型才用到 length(读取的字符串长度);非字符串位号保持 length=0 即可,驱动会忽略它。

写命令配置

本驱动支持向位号写值(数值、布尔、字符串均可),但没有单独的 command-attribute——写命令复用位号上已配置的 address,目标软元件即位号的 address,写值的字宽由下发值的数据类型决定。因此可写位号无需额外配置,只要在物模型里把该位号设为可写即可。

采集与健康

  • 采集周期:默认 cron 0/30 * * * * ?(每 30 秒读一轮)。
  • 自定义任务:默认 cron 0/5 * * * * ?(Melsec 驱动当前未使用自定义任务,保留该调度位)。
  • 健康/在线:设备健康检查默认 cron 0/15 * * * * ?,租约超时 45 秒——驱动以 TCP 连接是否存活判定在线,读写失败会主动断开并重连,在线状态机制见设备

最小接入示例

把 IP 192.168.0.30:6000 的一台 QnA 系列三菱 PLC 接进来,采集 D100 的一个 16 位整数:

  1. Mitsubishi Melsec Driver 创建设备,driver 属性填 host=192.168.0.30port=6000series=QnA
  2. 给设备绑定的物模型加一个位号pointTypeFlag=SHORTREAD_ONLY),point 属性填 address=D100length=0
  3. 启动驱动,30 秒内就能在位号值里看到 D100 的采集值。

易错点

address 写成完整软元件地址,区和编号不拆开

address 直接填三菱习惯的整体写法,如 D100M0X10W200——区前缀和编号写在同一个字符串里。这与按"区 + 数字偏移"两字段配置的协议(如 FINS)不同,不要把区和编号拆成两项填。

series 必须匹配真实 PLC 系列

series 取值仅限 A / QnA / Q_L / IQ_R,决定 MC 帧的封装格式。填错(或填了识别不了的值)时驱动会回退到 QnA,对其它系列 PLC 可能读不到正确数据——接入前请按实机型号确认系列。

一个驱动实例可接多台 PLC

同一个 Melsec 驱动进程可服务多台设备,每台设备各自维护一条 TCP 连接(按设备 ID 缓存)。多台 PLC 用各自的 host 区分。

延伸阅读

Released under the AGPL-3.0 License · 基于 AGPL-3.0 协议发布