M580与ATV930以太网通讯实战:从端口识别到寄存器读写
简介以施耐德M580可编程逻辑控制器与ATV930系列变频器为对象围绕Modbus TCP/IP和Ethernet/IP两种工业以太网通讯方式整理出一份从设备认识、接线、参数配置到实验操作全流程的指导文档压缩包内含一个docx格式文件大小约三点五五兆字节携带方便该实验指南已有四千四百零八人学习参考。文档结构完整依次包含实验目的、设备清单、准备工作、实验内容和注意事项五个部分实验目的部分明确解读了Modbus TCP/IP与Ethernet/IP的实现原理及区别设备清单部分则列出了M580 PLCBME H58 2040、ATV930变频器U07M3、网络电缆和Mini USB接口电缆等具体型号并详细介绍了M580 CPU正面和背面的LED诊断显示面板、Mini USB接口、RJ45以太网连接端口、双重连接端口、SFP光纤插座、SD卡插槽以及A/B/清除旋转开关等部件的用途同时说明了ATV930控制模块上拨码开关和扩展插槽的位置。在变频器参数设置环节结合SoMove软件演示了在完整设置菜单中将参考频率通道1设为嵌入式以太网、控制模式配置为组合通道模式以及为变频器分配固定IP地址、子网掩码和网关地址的操作实验正文分别针对两种协议给出了多种实现方法例如通过读写功能块实现数据交互同时涵盖新建工程、硬件组态、解锁安全、设置IP地址、添加DTM连接等关键步骤文末还总结了使用DTM在线修改时必须使用网线连接、区分RJ45端口用途等注意事项并强调参数修改后需对变频器断电重新送电才能生效可有效减少调试中的常见错误适合自动化工程师、电气维修人员及工业自动化专业学生作为实验参考。1. M580 与 ATV930 以太网通讯先认清端口和寄存器再动手M580 与 ATV930 的以太网通讯实验是不少人接触 PLC 与变频器以太网联调的第一课。指导书给出的路径很清晰Modbus TCP/IP 和 Ethernet/IP两条线都能实现对变频器的启停控制和转速给定。但这个实验真正考验人的地方不在协议本身而在三个容易被忽略的细节ATV930 上有三个长得一样的 RJ45只有中间那个是网口M580 自带以太网口在软件里的地址是 0.0.3不是 0.0.0变频器 IP 参数改完必须断电重启才能生效。把这些细节搞清楚后面用 READ_VAR、WRITE_VAR 还是 DTM 浏览器都只是套参数的事。这套内容适合正在做 M580 网关联调、ATV930 变频器以太网控制的电气工程师和调试员。2. 硬件准备与变频器参数BME H58 2040 和 ATV930 的网口识别2.1 BME H58 2040 端口布局为什么自带以太网口是 0.0.3拿到 BME H58 2040 先别急着插线把 CPU 上的接口认一遍能省很多事。指导书里给了一张端口功能表我在实际联调中也习惯按这个顺序核对编号接口在以太网通讯实验中的角色1LED 诊断显示面板看运行状态、故障代码2Mini USB 接口下载程序、连接 PLC 编程软件3RJ45 以太网连接端口常规以太网通讯入口4RJ45 以太网双重连接端口支持分布式设备、RIO 子站也可用于本实验5SFP 插座热备链路用的铜缆或光纤模块6热备状态链路 LED热备状态显示7SD 存储卡插槽程序与数据备份8A/B/清除旋转选择开关热备时指定 CPU 为 A 或 B或清除应用做以太网通讯实验网线插 3 或 4 都可以但软件寻址时不能按直觉来。Control Expert 里对 M580 自带以太网口做通讯寻址用的地址是 ADDM(0.0.3{IP})而不是我们习惯的 0.0.0。原因在于 M580 的嵌入式以太网口不是挂在某个机架插槽上的模块它在系统编址里被固定安排在第三个通道位置。如果按“机架号位置号通道号”去填 0.0.0功能块会在通讯超时后报错而且这种错很难从表象看出来因为 CPU 的以太网口本身是亮的容易让人误以为地址没问题。我一般会在新建项目后顺手做一个硬件检查先看 CPU 正面以太网口旁边有没有 IP 地址标签再对照 Control Expert 里以太网配置界面的 “IP 主地址” 是否一致。这个环节别跳过后面所有 READ_VAR、WRITE_VAR 的 ADDR 参数都依赖这个地址。2.2 ATV930 控制模块上的三个 RJ45控制面板、以太网、Modbus RTUATV930 控制模块正面有三个 RJ45单独看长得一模一样但功能完全不同。指导书里说得非常明确1 号口用于控制面板连接2 号口是两个以太网通讯端口4 号口是 Modbus RTU 通讯口。这个区分在实际操作里非常容易翻车。第一次做的时候如果顺手把网线插到 1 号口SoMove 会一直找不到变频器控制面板也可能失去响应。正确的接线方式是一头插到 BME H58 2040 的 3 号或 4 号 RJ45另一头插到 ATV930 的 2 号口中任意一个两个口是并联的随便接哪个都行。PC 和 PLC 之间用 Mini USB 电缆连接。这里有一个前置条件需要注意如果后面打算用 DTM 浏览器添加设备并且要在 PLC 在线状态下修改变频器的 DTM 参数PC 和 PLC 必须通过网线连接不能只靠 Mini USB。这是指导书特别标注的也是我在现场经常被同事问到的一点。Mini USB 只负责编程下载不能承担 DTM 在线修改的以太网通道。2.3 变频器通讯参数设置SoMove 里的四步变频器侧必须先把控制通道和 IP 参数配好否则 PLC 发再多的 Modbus 请求也是白费。打开 SoMove在“参数列表”里选择“完整设置”按下面四步操作第一步进入“命令和参考”把“参考频率通道 1”设置为“嵌入式以太网”。这一步决定给定频率从哪里来如果不改变频器仍然按照面板电位计或者端子给定去运行PLC 给的转速自然不起作用。第二步在同一个界面里把“控制模式配置”设置为“组合通道模式”。组合通道模式意味着控制字和参考频率可以分别来自不同通道适合用以太网同时做启停命令和速度给定。第三步进入“通信”下的“端口-Modbus TCP/以太网 IP”在“常规设置”里把“IP 分配模式”改为“固定地址”然后填入 IP 地址 192.168.1.99、子网掩码 255.255.255.0、网关地址 192.168.1.1。第四步在“协议和变频器配置文件”里选择本实验要用的协议Modbus TCP/IP 或者 Ethernet/IP 二选一。参数设置汇总如下参数路径设置值说明命令和参考 参考频率通道 1嵌入式以太网频率给定来源切换到以太网命令和参考 控制模式配置组合通道模式控制字与给定可分离通信 端口-Modbus TCP/以太网 IP 常规设置IP 分配模式 固定地址避免 DHCP 导致地址漂移通信 端口-Modbus TCP/以太网 IP 常规设置IP 192.168.1.99掩码 255.255.255.0网关 192.168.1.1网段必须与 PLC 一致通信 端口-Modbus TCP/以太网 IP 协议和变频器配置文件按实验选择 Modbus TCP/IP 或 Ethernet/IP切换协议时先断电2.4 断电重启与 PC 地址规划通讯参数写入变频器后需要把变频器断电再重新送电参数才会实际生效。这个动作不能省。SoMove 里写的 IP 分配模式、固定 IP 这类配置往往是在变频器启动阶段加载的运行中直接改不会立即生效甚至会让你误判成网线或端口的问题。PC 的网卡地址也要提前规划好。我会把 PC 网卡固定到 192.168.1.100子网掩码 255.255.255.0网关不用填。然后先用 ping 把三层连通性验证一遍再进 PLC 编程软件避免后面把“网线没插好”和“程序配置错误”混在一起排查。# Windows 下先把网卡固定到实验网段再做连通性检查 ping 192.168.1.9 # PLC 的 IP按实际工程设置 ping 192.168.1.99 # ATV930 的 IP正常情况下两个 IP 都能 ping 通。如果 PLC 的 ping 不通先看 Control Expert 里以太网口是否解锁安全、IP 是否分配如果变频器 ping 不通多半是上一步断电重启没做或者网线插到了 1 号口。3. Modbus TCP/IP 之 I/O Scanner 映射用 READ_VAR / WRITE_VAR 驱动变频器运转3.1 I/O Scanner 默认映射状态字、输出转速、控制字、给定转速M580 和 ATV930 走 Modbus TCP/IP 时最省事的做法是把变频器挂到 CPU 的 I/O Scanner 上。I/O Scanner 相当于一个自动轮询表它会周期性地把输入寄存器和输出寄存器同步到 PLC 的内存里不需要你在程序里逐个地址去读。ATV930 被识别到 I/O Scanner 后默认的输入寄存器有两个数据状态字和输出转速。默认的输出寄存器也有两个控制字和给定转速。这四个数据在 Control Expert 动态数据表里的对应关系如下PLC 变量内容说明%MW0状态字反映变频器当前运行状态%MW1输出转速变频器实际输出的转速值%MW10控制字PLC 下发启动、停止、方向等命令%MW11给定转速PLC 下发的转速设定值做实验之前先在 Control Expert 菜单“工具”→“项目设置”→“变量”里勾选三个选项“直接以数组变量表示”、“允许动态数组ANY_ARRAY_XXX”、“禁用数组大小兼容性检查”。这一步很多人会漏掉漏掉之后后面功能块里用 %MW0:2 这种写法时编译会报数组长度不匹配之类的错误。这三个选项的作用是让 M580 能用连续内存块做读写交换属于功能块通信的前置条件。3.2 Control Expert 工程预配置三个复选框和一个 IP新建项目时选择 CPU 型号 BME H58 2040双击“项目浏览器”中的“项目”打开硬件组态再双击 CPU 上的以太网端口进去配置。以太网配置界面里有几个标签页操作顺序建议按下面来。先进入“安全”标签点击“解锁安全”把服务和访问控制打开。不解锁的话外部设备无法通过以太网访问 CPUREAD_VAR 和 WRITE_VAR 发出去的报文会被直接丢弃。再进入“IP 配置”标签把 IP 主地址设置为 192.168.1.9子网掩码设置为 255.255.255.0网关地址设置为 192.168.1.1。在“IP 地址 A”和“IP 地址 B”里分别填 192.168.1.11 和 192.168.1.12这两个是交换机或冗余链路的备用地址本实验不用深究但最好按指导书填上避免后面改动配置时漏掉。IP 配置完成后在“程序”→“任务”→“MAST”→“段”上新建一个段命名为 ModbusTCP语言选择 LD。这里用梯形图还是结构化文本不影响功能块本身我习惯在 LD 里放功能块因为现场同事看着更直观。3.3 功能块引脚参数ADR、OBJ、NUM、NB、RECP/EMIS、GEST在 LD 段里添加 READ_VAR 和 WRITE_VAR 功能块用 %S6 秒脉冲接到两个功能块的 EN 脚让它们每个周期自动执行一次。功能块的引脚参数可以直接抄指导书但每个引脚的含义必须清楚否则改一个地址就不知道该动哪里。(* 段名 ModbusTCP语言 LD这里用 ST 伪代码展示引脚对应关系 *) (* 读 ATV930 状态字和输出转速 *) READ_VAR( EN : %S6, (* 秒脉冲周期性触发 *) ADR : ADDM(0.0.3{192.168.1.99}), OBJ : %MW, (* 对象类型是内存字 *) NUM : 0, (* I/O Scanner 读区起始偏移 *) NB : 2, (* 读 2 个字 *) RECP : %MW0:2, (* 读到的数据送到 %MW0、%MW1 *) GEST : %MW100:4 (* 交换管理区必须 4 个字 *) );(* 写 ATV930 控制字和给定转速 *) WRITE_VAR( EN : %S6, ADR : ADDM(0.0.3{192.168.1.99}), OBJ : %MW, NUM : 0, (* I/O Scanner 写区起始偏移 *) NB : 2, (* 写 2 个字 *) EMIS : %MW10:2, (* 发送数据取自 %MW10、%MW11 *) GEST : %MW104:4 (* 交换管理区与读块分开 *) );逐个参数说ADR 是子站地址两个功能块都写 ADDM(0.0.3{192.168.1.99})。ADDM 是寻址命令0.0.3 指定的是 M580 自带的以太网口192.168.1.99 是 ATV930 的 IP。这里 0.0.3 是 M580 的特殊编址不是机架号加插槽号的常规写法。OBJ 是对象类型这里固定用 %MW意思是读写对象是 PLC 的保持性寄存器区。NUM 是起始地址。在 I/O Scanner 映射方式下读和写都从 0 开始因为 I/O Scanner 的输入区、输出区默认从偏移 0 开始排列。NB 是读写数量。ATV930 默认输入寄存器有状态字和输出转速两个输出寄存器有控制字和给定转速两个所以数量都是 2。RECP 是接收地址读块用 %MW0:2意思是把读到的两个寄存器按顺序放到 %MW0 和 %MW1。EMIS 是发送地址写块用 %MW10:2意思是把 %MW10 和 %MW11 里的数据发出去。GEST 是交换数据管理区必须定义 4 个字。读块用 %MW100:4写块用 %MW104:4两块分开避免交换数据互相覆盖。如果把两个功能块的 GEST 写成同一块通讯会随机报错而且错误位置不好定位。3.4 动态数据表验证控制字 6→7→F状态字跟着变程序写完后点击“生成”里的“重新生成所有项目”做一次全量编译然后通过“PLC”→“连接”→“将项目传输到 PLC”下载程序再点击“PLC”→“运行”。下载完成后在“项目浏览器”里右键“动态数据表”新建数据表添加 %MW0、%MW1、%MW10、%MW11 四个变量。右键把 %MW0 和 %MW10 的显示格式改成 16 进制%MW1 和 %MW11 保持十进制就行。然后点击“修改”把 %MW11 的值改成 1500对应 1500 rpm 的给定转速。接下来把 %MW10 的值按顺序改成 6、7、F。每改一次观察 %MW0 的 16 进制值尾数变化依次从 50 变为 31、33、37同时 %MW1 的值从 0 逐步爬升到 1500。这说明变频器已经收到控制字和给定并进入运行状态。%MW10 里的 6、7、F 其实就是控制字的不同状态组合最关键的几位是启动、使能和方向控制。到这一步Modbus TCP/IP 的 I/O Scanner 通路就算打通了。3.5 扩展通过 SoMove 改 I/O Scanner 地址如果需要监视更多数据比如母线电压、输出电流可以通过 SoMove 编辑 I/O Scanner 内的地址。打开 SoMove 的参数列表找到 I/O Scanner 配置把要监视的寄存器地址加到输入映射表里把要下发的寄存器加到输出映射表里。改完之后程序里的 NB、RECP、EMIS 必须跟着改。举例来说如果输入区从 2 个字扩成 4 个字READ_VAR 的 NB 要改成 4RECP 要从 %MW0:2 改成 %MW0:4。如果输出区多了一个加速时间给定WRITE_VAR 的 NB 要改成 3EMIS 要改成 %MW10:3。这个对应关系不复杂但最容易漏改漏改后数据会整体错位看着像是通讯数据混乱实际上是映射长度没对上。4. 直接读写变频器寄存器跳过 I/O Scanner更接近 Modbus 本相4.1 为什么需要跳过 I/O ScannerI/O Scanner 方式适合常规控制但它有一个限制映射表是固定的或者说是由 SoMove 侧预先定义的。如果你只想临时读一个状态字、一个故障码不想去动 I/O Scanner 配置直接用 READ_VAR 和 WRITE_VAR 对变频器寄存器地址读写反而更灵活。这种做法的本质是走标准 Modbus 的寄存器地址不再经过 I/O Scanner 的映射中转。它更接近协议底层也更能帮助理解 ATV930 的寄存器分布。4.2 在 SoMove 里设置 Modbus 通讯格式跳过 I/O Scanner 之前需要在变频器侧设置 Modbus 通讯格式。打开 SoMove 的“参数列表”在通信配置里找到 Modbus 相关的设置项把变频器 Modbus 地址设置为 3波特率设置为 19200 bps格式设置为 8E1也就是 8 个数据位、偶校验、1 个停止位。这里有个细节需要注意8E1 是很多变频器默认使用的 Modbus 串口格式但 ATV930 在以太网通路上的 Modbus TCP/IP 并不直接受这个串口格式影响。设置它的真正意义在于当你要在 ADR 里追加从站地址时变频器的 Modbus 从站身份必须有一个明确编号而地址 3 就是这个编号。同时如果你后续需要通过网关转串口或者用其他 Modbus 主站访问19200 8E1 也是一个兼容性很好的配置。4.3 修改功能块参数ADDM 追加从站地址NUM 指向寄存器程序侧只有两处必须改。第一处是 ADR第二处是 NUM、NB、RECP、EMIS。ADR 需要从 ADDM(0.0.3{192.168.1.99}) 改成 ADDM(0.0.3{192.168.1.99}3)也就是在 IP 地址后面直接追加一个数字 3这个 3 就是刚才在 SoMove 里设置好的变频器 Modbus 地址。很多第一次上手的人会漏掉这个后缀结果就是功能块全部显示通讯超时因为主站拿不到准确的从站单元地址。(* 直接读变频器 3201 状态字放到 %MW0 *) READ_VAR( EN : %S6, ADR : ADDM(0.0.3{192.168.1.99}3), (* 末尾的 3 是 Modbus 从站地址 *) OBJ : %MW, NUM : 3201, (* ATV930 状态字寄存器地址 *) NB : 1, RECP : %MW0:1, GEST : %MW100:4 ); (* 直接写 8501 控制字和 8502 给定转速 *) WRITE_VAR( EN : %S6, ADR : ADDM(0.0.3{192.168.1.99}3), OBJ : %MW, NUM : 8501, (* 控制字起始地址8502 是给定转速 *) NB : 2, EMIS : %MW10:2, GEST : %MW104:4 );读块里NUM 改成 3201这是 ATV930 的状态字寄存器地址NB 改成 1只读一个状态字RECP 改成 %MW0:1把读到的值单独放到 %MW0。写块里NUM 改成 8501因为 8501 是控制字寄存器8502 紧跟其后是频率给定寄存器所以 NB 保持 2EMIS 保持 %MW10:2用 %MW10 存放控制字、%MW11 存放转速给定。通过动态数据表修改 %MW11 为 1500再把 %MW10 按 6、7、F 的顺序修改同样能实现变频器启动和提速现象与 I/O Scanner 方式完全一致。区别在于这次的数据不是经过映射表自动搬移的而是功能块直接对寄存器发起的读写请求。4.4 两种方式的取舍特性I/O Scanner 方式直接寄存器方式配置复杂度低映射表自动同步中需要熟悉寄存器地址数据刷新方式主站周期轮询功能块按 EN 触发适合场景常规启停、速度给定、持续监视读故障码、读自定义参数、临时调试扩展性修改映射后要同步修改程序改 NUM 即可无需动映射表排错难度地址错位时不明显从站地址漏写时直接超时我一般会这样选做正式项目用 I/O Scanner因为它有确定的刷新周期数据一致性更好做临时诊断或者查故障码用直接寄存器方式因为只要知道寄存器地址读起来更直接不需要去动变频器的映射配置。5. 避坑与排查以太网通讯实验中最常见的五个翻车点5.1 插错 RJ45 口变频器面板无响应现象网线插到变频器后SoMove 搜索设备一直超时控制面板也不亮。原因ATV930 上有三个 RJ451 号口是控制面板专用4 号口是 Modbus RTU只有 2 号的两个端口才是以太网通讯口。插到 1 号口后网口链路根本不会建立。解决把网线换到 2 号口的任意一个端口即可。判断方法是看对应 RJ45 的指示灯是否亮起不亮就说明插得不对。5.2 IP 配置后给变频器上电还是不通现象SoMove 里 IP 地址已经配置成 192.168.1.99断电重新上电后 ping 依然不通。原因SoMove 写入参数后没有真正断电只是点击了停止或者复位按钮。部分网口配置在启动阶段才加载运行中写入后仍使用旧配置。解决断开变频器主电源等 LED 完全熄灭后重新送电。注意断电要断主回路电源不是只断控制电源。5.3 PC 能连 PLC但 DTM 的变频器节点无法在线修改现象PC 通过 Mini USB 连接 PLC 后功能块可以正常执行但在 DTM 浏览器里想在线修改 ATV930 的参数一直提示不可用。原因DTM 在线编辑需要走以太网通道Mini USB 只承担编程下载的职责不能作为 DTM 的在线数据通道。指导书里明确写了添加 DTM 并在线修改变频器时PC 和 PLC 必须通过网线连接。解决给 PC 加一根网线连到 BME H58 2040 的 RJ45 口把 PC 网卡固定到 192.168.1.100/24然后再打开 DTM 浏览器进行在线修改。5.4 READ_VAR 的 ADDR 一直是 0.0.0导致通讯超时现象功能块没有报语法错误但每次执行都超时GEST 管理区里的错误代码反正不是正常值。原因M580 自带以太网口的软件地址是 0.0.3不是按机架加插槽推测出来的 0.0.0。ADR 如果填成 ADDM(0.0.0{192.168.1.99})报文发不出去CPU 根本找不到对应的网络通道。解决把 ADR 改为 ADDM(0.0.3{192.168.1.99})。如果变频器侧设置了 Modbus 从站地址还要在 IP 后追加地址数字比如 ADDM(0.0.3{192.168.1.99}3)。5.5 普通网线干扰导致运行中偶发掉线现象变频器空载时通讯正常一带负载就会出现偶发的通讯报警频率不定重启后又恢复。原因实验环境里用的是普通网线距离近、现场电磁干扰小问题不明显。但如果在配电柜旁边走线或者网线跟动力电缆同槽普通网线的抗干扰能力不够支撑长时间运行。解决现场应用按指导书建议换成超六类网线并且与动力线分开走线槽。同时检查 P C 网卡是否开启了节能模式有时候掉线不是线的锅而是网卡节能把链路休眠了。6. 用 DTM 浏览器把 Modbus 设备变成在线的变量表前面两章用的都是功能块方式适合理解协议过程。如果你更关心调试效率可以用 DTM 浏览器的方式来做这也是指导书里安排的第二条 Modbus TCP/IP 通路。在 Control Expert 里点击菜单栏“工具”在下拉菜单中选择“DTM 浏览器”。在 DTM 浏览器中右键添加一个 Modbus Device 设备填入名称和 IP 地址 192.168.1.99协议选 Modbus TCP/IP。添加成功后DTM 会自动把 ATV930 挂到 M580 的以太网口下面并生成对应的 I/O Scanner 映射。这个过程不需要手动写 READ_VAR 和 WRITE_VAR变量是自动生成的调试时直接在变量表里读写即可。这个方式最实用的场景是排查故障码。变频器报警后你需要在 DTM 设备树下找到状态字和故障码寄存器直接在线查看数值再对照 ATV930 手册里的寄存器定义来定位故障原因。相比功能块方式省去了在动态数据表里人肉核对地址的时间。但 DTM 方式有一个硬性前提PC 和 PLC 必须通过网线连接。指导书里特别强调了这一点我在项目里也验证过只插 Mini USB 时DTM 里的变频器节点能看到但无法在线操作功能块的读写却不受影响。这个区别容易让人以为 DTM 坏了其实只是通道问题。我个人更推荐把 DTM 方式和功能块方式结合使用用 DTM 做参数监视、故障排查用 READ_VAR、WRITE_VAR 做程序里的正式控制逻辑。这样既保留了程序的可读性又能在调试阶段快速拿到变频器内部数据。最后分享一个习惯。从那以后我每次做 M580 与 ATV930 的通讯实验都强制把“端口核对—断电重启—IP 连通性测试”这三件事走一遍再进程序填功能块参数。顺序不乱Modbus TCP/IP 基本半小时内能通顺序乱了就很容易陷入“哪里都像是对的哪里都不通”的僵局。希望帮到你。本文还有配套的精品资源点击获取