施耐德 M340、M580、昆腾 PLC CPU 及网卡模块 NOC、NOE 配置 ModbusTCP 通信方法

本文介绍了施耐德 M340、M580 PLC 的 ModbusTCP 通信方法。包括通过【I/O 扫描器】服务读写,其无需额外编程但扫描周期不定;通过内部程序调用功能块读写,可控制数据刷新时序但需额外编程;还介绍了通过 DTM 配置通信,配置后模块自动周期性读写,PLC 无需额外编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总体介绍

施耐德 M340、M580、昆腾 PLC 及网卡模块,支持 Modbus-TCP 协议进行数据读写,PLC 本身支持做客户端或服务端

  • 作为客户端时:PLC 模块主动发起请求,向其他设备读写数据
  • 作为服务端时:外部设备主动发起请求,读写 PLC 中的数据

1. 做客户端,通过【I/O扫描器】服务(DTM 中配置 DIO)进行读写

概述

相关文档

各模块说明书

这种配置的特点

  • 配置完成后对应模块作为 Modbus 客户端自动周期性读写,PLC 中无需额外编写通讯程序
    “扫描器”名称估计是来源于 Ethernet/IP 中的 IO Scanner 功能,这里类似 Modbus 协议中的扫描器
  • 这个功能需要打开编程软件的【DTM 管理器】,在 DTM 界面中配置 DIO
    在这里插入图片描述

具有此功能的模块

  • 老 Quantum 系统(Quantum IO 平台)中的 NOE、NOC 网卡
  • 老 Quantum 系统(140 系列 CPU)、新 M580 系统中的 CPU 网口
  • 新 M580、M340 系统(X80 IO 平台)中的 NOE、NOC 网卡
    M340 CPU 自带的网口一般不支持此功能

总结:大型 PLC 的网口、额外买的网卡模块一般都支持(加钱就能变得更强)

注意,这个功能在新旧两代平台上的叫法可能略有不同,但本质的配置方法、特点是一致的(都是在 DTM 里边进行配置,配置好后无需额外编写通讯程序)

这种方法的优缺点

  • 优点

    • 不需要额外编程,系统自动周期型读写数据
    • 对应模块自动进行轮询、错误处理
      在大批量读写数据时可以节省编写通讯程序耗费的大量时间
    • 新一代平台(M580)使用这种读写方法,数据暂存在【非定位变量】数组中,可以很方便的进行数据与 PLC 内部地址的映射,未映射的数据不会占用 PLC 宝贵的对外通信的寄存器地址资源 。
  • 缺点

    • 数据更新的周期相对程序是异步的,程序无法控制数据刷新的时序
    • 只支持内部寄存器(功能码 03、06、16,%MW数据)的读写
      若要读写其他类型的数据,还得老老实实写程序来读
    • 部分硬件使用这种方法有通讯数据量的限制(详见最后一章中的描述)
      如果想用这种方式进行大数据量通讯,需要额外采购 NOE、NOC 网卡模块进行通讯(得加钱)

非定位变量:没绑定 PLC 内部地址(如%MWXXX%MXXX)的变量,类似西门子博途中优化的数据块中的变量,PLC 内部的程序可通过变量名称进行读写,但外部设备无法访问。非定位变量在保证内部的程序正常读写的情况下,不会占用 PLC 宝贵的对外通信的寄存器地址资源 。

定位变量:绑定了 PLC 内部寄存器地址的变量,PLC 内部可通过内部寄存器地址 或 变量名读写此变量,外部设备可通过内部寄存器地址度读写数据(这是施耐德 PLC 的特点,详见客户端的特点)

DTM 总体配置流程

  1. 项目设置(M580 建议进行的一些配置)
  2. 在 DTM 管理器中,对应模块下【添加从站设备(DIO 设备)】
  3. 在 DTM 管理器中的对应模块下,【配置每个 DIO 设备的参数】:名称、IP 地址等
  4. 在 DTM 管理器每个从站设备下,【配置每个 DIO 的“请求”参数】:每个请求读写的寄存器数量、读写的寄存数量、错误处理、读写周期等(一个“请求” = 一个 Modbus 数据包)

DTM 配置实例

DTM 配置实例 1:使用 M580 CPU 自带网口

参考文章(还没写完):AAA

DTM 配置实例 2:使用 NOC 网卡自带网口

参考文章:

  1. https://m.gkong.com/bbs/468223.ashx
  2. 自己写的文章(还没写完):AAA

2. 做客户端,通过内部程序调用功能块进行读写

概述

相关文档

  1. 《EcoStruxure™ Control Expert - 通讯 , 功能块库》
    https://www.schneider-electric.cn/zh/download/document/33003683K01000/
  2. 《EcoStruxure™ Control Expert - 通讯服务和架构、参考手册》
    https://www.schneider-electric.cn/zh/download/document/35012196K01000/
  3. 《用于 Ethernet 的 Modicon M340 - 通讯模块和处理器 , 用户手册》
    https://www.schneider-electric.cn/zh/download/document/31007493K01000

这种配置的优缺点

  • 优点
    • 程序可以控制数据刷新的时序及逻辑
    • 理论上不限制通讯的数据总量
    • 支持各种功能码数据的读写(不同功能码的调用对应的功能块即可)
  • 缺点
    • 需要额外编程,程序中需要编写参数初始化、轮询、错误处理等逻辑
    • 不同型号的 PLC 使用的程序各不相同,移植性较差(参考上面一小节)

2.1 不同型号 PLC 使用的通讯功能块

参考文档:《EcoStruxure™ Control Expert - 通讯 , 功能块库》
https://www.schneider-electric.cn/zh/download/document/33003683K01000/

一些常用指令如下
在这里插入图片描述

看上面的图就知道咱们用施耐德的中大型 PLC 有多煎熬了😂这个文档写的还不如国内贴牌的小厂🤬🤬🤬

  • 同一个软件平台还能有这么多种指令,每种指令的配置、适用的 PLC 型号都不太一样
    移植性简直就是灾难,这还是单个品牌内部哦,真的难绷😂
  • 这么多指令也没个归类,就只是列个表格,也不说明一下具体指令有啥功能,一般每个型号的 PLC 应该怎么配合使用、调用的顺序如何

个人总结,施耐德进行通讯调用的功能块如下:

  • 首先【指定功能块使用的通讯端口】
    一个大型系统一般规模较大,会扩展多个 IO 模块、网络模块,因此要在程序中指定通讯功能块使用的网口是哪个(应该没有人用这套系统还一个网卡模块都不扩展吧?)
    上图中的ADDMADDMXADDR功能块用于实现此功能(不同型号使用不同指令,参数形式也不同)
  • 然后根据读写的寄存器类型/功能、PLC 型号,【选择合适的功能块】进行通讯
    上图中的CREAD_REG / CWRITE_REGREAD_VAR / WRITE_VAR / DATA_EXCH用于实现此功能
    • CREAD_REG / CWRITE_REG 用于 Quantum PLC 批量读写
    • READ_VAR / WRITE_VAR / DATA_EXCH 用于 M340/M580/X80 IO 读写

项目上使用的是M580 + M340 的新一代 X80 IO 系统,下面主要介绍新系统相关的通讯块及配置

2.2 M340、M580 ModbusTCP 通信相关程序块

参考文档:《EcoStruxure™ Control Expert - 通讯 , 功能块库》
https://www.schneider-electric.cn/zh/download/document/33003683K01000/
image.png
Modbus 功能码如下:

  • 读取内部寄存器(%MW、%MD,03 功能码):ADDM + READ_VAR
    ADDM 用于地址转换,READ_VAR 执行读寄存器指令
  • 写入内部寄存器(%MW、%MD,06 功能码):ADDM + WRITE_VAR
    ADDM 用于地址转换,WRITE_VAR 执行写寄存器指令
  • 批量写入内部寄存器(%MW、%MD,16 功能码)ADDM + DATA_EXCH
    ADDM 用于地址转换,DATA_EXCH 执行写寄存器指令(有些设备不支持这个功能码,就只能使用 WRITE_VAR 进行写入)

2.3 程序块读写的示例程序(M340 / M580 / X80 IO 平台)

示例参考程序:

  1. READ_VAR 和 WRITE_VAR:https://blog.csdn.net/zhouwl72/article/details/131410211
  2. DATA_EXCH:https://blog.csdn.net/weixin_39559463/article/details/137343652

自己写的 READ_VAR 和 WRITE_VAR 示例程序截图:
image.png

2.4 功能块的参数配置

这里只介绍有可能引起困惑的配置项,完整的配置项请参考上面的【示例参考程序】或【相关文档】

参数变量 GEST:READ_VAR 和 WRITE_VAR 中使用(M340、M580、X80 IO)

使用READ_VARWRITE_VAR 功能块时,每个功能块都需要配置一个GEST参数

GEST = 长度为 4 的 INT 数组image.png

其中,第 3 个字(GEST[2])需要写入一个时间变量,定义最长相应时间,单位 100 ms
如果不定义,则认为响应时间 = 0,则在发送请求时可能会因为超时导致报通讯失败

若令 GEST[2] = 10,则定义最长相应时间 = 10 * 100ms = 1000ms = 1s

ADDM 功能块:指定功能块使用的通讯端口(M340、M580、X80 IO)

通过ADDM功能块,指定进行通信的端口,则此功能块的输入参数需要配置
image.png
各个参数的意义

在这里插入图片描述

2.4 ADDM 功能块配置实例

ADDM 配置实例 1:使用 M340 CPU 自带网口

使用的 ADDM 地址:r.m.c{IP}node.TCP.MBS

  • r = 机架编号。通常 CPU 所在的主机架,机架编号 r = 0
  • m = 模块位置。CPU 模块 m = 0,其他模块从左往右 m 从 1 开始算
  • c = 此模块上通道编号,CPU 模块上的网口编号 c = 3
  • IP = 请求的 Modbus 设备的 IP 地址
  • node = ModbusTCP 读写的站号(可省略,省略则使用默认站号 1)
  • TCP.MBS = 固定后缀,指定使用 ModbusTCP 协议进行通信
  • 注意,此指令(即所有使用此软件编程的施耐德 PLC)端口固定为标准的 502 端口,不能修改
    image.png
    参考文档:《通讯服务和架构、参考手册》
    https://www.schneider-electric.cn/zh/download/document/35012196K01000/
    image.png

ADDM 配置实例 2:使用 NOE 网卡模块的网口

NOE 模块的通道编号 = 0,可从 NOE 模块的组态配置中看到
image.png
参考文档:《用于 Ethernet 的 Modicon M340 - 通讯模块和处理器 , 用户手册》
https://www.schneider-electric.cn/zh/download/document/31007493K01000image.png

  • 使用的 ADDM 地址(与 M340 CPU 通讯基本相同,但是模块位置、通道等参数要根据实际情况更改):r.m.c{IP}node.TCP.MBS
    • 模块所在机架编号 r、模块编号 m 根据模块位置决定
    • 通道编号 c = 0 (可通过上面软件组态界面中查看)
    • IP = 请求的 Modbus 设备的 IP 地址
    • node = ModbusTCP 读写的站号(可省略,省略则使用默认站号 1)
    • TCP、MBS 为固定后缀,加在地址最后,表明使用 ModbusTCP 协议
    • 注意,此指令(即所有使用此软件编程的施耐德 PLC)端口固定为标准的 502 端口,不能修改

ADDM 配置实例 3:使用 NOC 网卡模块的网口

image.png

  • 使用的 ADDM 地址 = r.m.c{IP}node.TCP.MBS
    • 模块所在机架编号 r、模块编号 m 根据模块位置决定
    • 通道编号 c = 0
    • IP = 请求的 Modbus 设备的 IP 地址
    • node = ModbusTCP 读写的站号(可省略,省略则使用默认站号 1)
    • TCP、MBS 为固定参数,加在地址最后,表面使用的是 ModbusTCP 协议
    • 注意,此指令(即所有使用此软件编程的施耐德 PLC)端口固定为标准的 502 端口,不能修改

3. 做服务端,进行数据交换

3.1 概述

相关文档

各模块说明书

这种配置的特点

  1. CPU 模块、网卡模块做服务端:其他设备主动发起请求读取 PLC 中的数据
  2. 无需额外的通讯配置,保证外部能正常与对应网口做 MODBUS-TCP 通讯即可(只需做安全性配置)
  3. 寄存器地址 = PLC 中变量表的地址(还可指定是否使用偏移地址,详见最后一章)

具有此功能的模块

不论新旧平台(Quantum / M580 / M340 / X80 IO),各种模块/CPU上的网口都支持这种通讯

这种功能的优缺点

我只能说这个特性是施耐德 PLC 让我感觉最爽的地方,建议其他 PLC 赶紧借鉴照抄(bushi)

硬要写点缺点也有,但个人感觉是鸡蛋里挑骨头

  • 优点:
    • 无需额外的通讯配置,只需做安全性配置,保证外部能正常与对应网口做 MODBUS-TCP 通讯即可
    • 寄存器地址 = PLC 中变量表的地址,不需要做任何额外的地址映射、转换工作
    • 理论上不限制通讯的数据总量(实际上会受硬件支持的连接数、Modbus 协议每包最多支持的寄存器数量限制)
  • 缺点:
    • 无法在程序中实时控制通讯的权限
      如:指定条件下允许/禁止其他机器读写、只允许读写某些寄存器区域等
    • 只支持对内部寄存器%M(功能码 01、05、15,不支持 02)和%MW(功能码 03、06、16、23)的读写
      其他功能码(如 01、04)只能使用特别的服务端指令实现,详情自己去啃手册吧

3.2 实例:使用 modbus-poll 对仿真的 M340 中的数据进行读写

参考

  1. 我的文章 – 最后部分的通讯实例:https://blog.csdn.net/weixin_44112083/article/details/137443541

4. 一些小问题

4.1 PLC 做服务器时寄存器起始地址设置

施耐德 PLC 全系(M340、M580、Quantum)做服务器时默认寄存器起始地址从 0 开始
而西门子等 PLC 则默认寄存器地址从 1 开始,这些厂商称这种地址为“PLC形式地址”

对于 M580 和 M340,如果在作为服务端(其他设备主动读写此 PLC)时,想使用“PLC形式地址”,可以修改内部寄存器实现

参考文章:https://www.schneider-electric.cn/zh/faqs/FA500598/
在这里插入图片描述

图文步骤如下:
M340 寄存器地址:
在这里插入图片描述

M580 寄存器地址:%SW139%SW141
在这里插入图片描述

  • %SW139配置线圈基地址(功能码 01、05、15,PLC 变量表中%W变量)
  • %SW138(仅 M340 支持)配置离散量输入基地址(功能码 02,只读,PLC 变量表中%IW变量)
  • %SW141配置保持寄存器基地址(功能码 03、06、16,PLC 变量表中%MW变变量)
  • %SW140(仅 M340 支持)配置输入寄存器基地址(功能码 04 ,只读,PLC 变量表中%IW变量)

按照上面的介绍,这两个寄存器不能在运行时被赋值,只能在变量表中以“初始值”的形式赋值,具体操作如下

  1. 在变量表 --> 变量表格中,添加%SW139%SW141变量

  2. 变量表显示“初始值”列。在表格中任意位置,右键 --> 选择【自定义列】
    在这里插入图片描述

  3. 弹窗中,勾选【值】,然后点击【确定】
    在这里插入图片描述

  4. 在对应变量的【值】一列,填 1(这里的注释是我自己加的)
    在这里插入图片描述

  5. (只有 M580 需要配置)配置 PLC “冷启动时复位 %MW” :
    在这里插入图片描述

4.2 CPU 自带网口通信的限制: CPU 网口作客户端使用 I/O 扫描器进行 Modbus-TCP 通信)

参考文章:https://blog.csdn.net/weixin_39559463/article/details/137345753

M580 CPU 自带网口,配置 DTM 进行 Modbus 通信【I/O 扫描器】,最多只支持(读 + 写总共) 1024 个寄存器
超过 1024 个寄存,则编译项目会报错

在这里插入图片描述

若要使用 DTM 扫描器进行大量数据交换,需要使用额外的网卡模块(NOC、NOE)进行通讯(得加钱)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值