简介:围绕施耐德M580 PLC与ATV930变频器以太网通讯的实战型实验指导文档,面向工业自动化、PLC编程与变频器调试领域的工程师及电气专业学生。文档以Modbus TCP/IP和Ethernet IP两种通讯方式为主线,依次梳理实验目的、设备清单、M580与ATV930的通讯端口、变频器参考频率及IP分配参数设置,并分别演示通过READ_VAR/WRITE_VAR功能块实现Modbus TCP/IP通讯、通过嵌入式以太网配置实现Ethernet IP通讯的实验过程。其中特别强调了RJ45端口区分、DTM在线修改时PC与PLC必须网线连接、断电重启使参数生效等常见注意事项,可帮助读者少走弯路并快速搭建同类通讯实验。资源为docx格式,压缩包内共1个文件,大小3.55MB,已有4408人浏览学习,适合作为从入门到进阶的实操参考。
1. 一条网线能省掉几十根控制线:这个实验到底在做什么
一台 M580 PLC 和一台 ATV930 变频器之间,如果不走以太网,常规做法是启停、方向、给定、故障复位一路硬接线,算下来二十多根线。这个实验要把这些信号全部塞进一根网线:M580 用自带以太网口周期轮询 ATV930,通过 Modbus TCP 交换控制字和频率给定,同时读回状态字和输出频率。适合手里正好有 M580 CPU 和 ATV930、想用网络通道替代离散量 IO 的同行,也适合第一次做施耐德系 PLC 与变频器通讯、需要一个半天内能跑通样板的人。读完你会得到一份从 IP 规划、寄存器映射到 IO Scanner 配置的作业模板,外加几条靠手册查不出来的坑。
2. 先选协议再谈接线:Modbus TCP 与 IO Scanner 的取舍
2.1 为什么是 Modbus TCP,而不是 Profinet 或硬线 IO
ATV930 这台变频器上其实同时支持好几种以太网协议,Modbus TCP、EtherNet/IP、Profinet 都能跑。选型时先看对端是谁:M580 的 CPU 自带以太网口,原生就是 Modbus TCP 主站,不需要加任何协议模块,配置入口就在 Control Expert 的以太网口属性里,这对搭建样板实验来说是最短路径。如果走 Profinet,M580 侧要额外配 Profinet 主站模块,涉及设备名、GSD 文件、IO 周期和实时性等级,调试工具链也重;如果你手头没有 Profinet 主站,实验根本推不动。
EtherNet/IP 在 M580 上也能做,通过 Ethernet/IP 扫描器配置,但要理解 Assembly 实例、CPR 和 RPI 那套概念,同样是把简单问题变复杂。做实验的目的不是展示协议多,而是用最短时间把电机转起来、把速度读回来。Modbus TCP 的报文本就是透明的,用 Wireshark 抓包能看到每一个读写的寄存器地址,对排查问题极其友好。
硬线 IO 方案的问题在于:启停、方向、复位、故障、给定、反馈全是独立点,线多不说,点位定义一旦变了就要改柜内接线,故障定位全靠万用表在端子上量。而 Modbus TCP 把需要交互的数据集中到几个寄存器里,PLC 程序里改一个位、改一个系数就能调整行为,实验阶段改参数比改线快一个数量级。我的观点是:如果你的项目里同时存在多台 ATV930,或者未来要读电流、功率、能耗这类附加数据,这个实验方向值得投入;如果永远只有一台且控制逻辑极其简单,硬线也够用,但学习价值不在同一层面。
2.2 ATV930 侧要用的 4 个寄存器:CMD、状态字、给定、反馈
打通 Modbus TCP 最少只需要 4 个保持寄存器,这 4 个地址是整个实验的骨架。我一般先把它们写在一张纸条上贴在变频器面板旁边,因为 IO Scanner 配置和 PLC 程序都要反复引用:
| 寄存器地址(十进制) | 十六进制 | 名称 | 读写方向 | 实验中的作用 |
|---|---|---|---|---|
| 8501 | 0x2135 | CMD(控制字) | PLC -> 变频器 | 启停、方向、故障复位 |
| 8503 | 0x2137 | ETAst(状态字) | 变频器 -> PLC | 就绪、运行、故障标志 |
| 8601 | 0x2199 | LFRD(频率给定) | PLC -> 变频器 | 给定速度参考 |
| 8603 | 0x219B | RFRD(输出频率反馈) | 变频器 -> PLC | 实际输出频率 |
这里有一个新手最容易踩的坑:ATV930 的寄存器体系和老款 ATV71/ATV61 不一样,老款习惯用 40152 当控制字、40153 当状态字,直接套用手册里的旧表格会把数据写到完全不相干的位置,轻则变频器无响应,重则误触发写入故障。ATV930 使用的是新平台地址,CMD 在 8501,状态字在 8503。我每次做实验前都会在面板的通讯菜单里再确认一次当前固件的映射表,因为个别早期固件的地址偏移会有差异,不信图省事。
另外要注意“4x”前缀的含义。Modbus 里 4x 指保持寄存器,IO Scanner 和大多数组态工具填地址时写成 4x08501,而不是把寄存器编号换算成 40000 + 8501 再填。实际操作中有人把 8501 写成 48501,这就错得更离谱了——48501 是 4 区偏移 8500 的另一种写法吗?是,但如果工具自动加 40001,就可能变成 88502 之类的越界地址。我的习惯是:在 Control Expert 的 IO Scanner 里严格按“4x + 4 位数字 + 寄存器号”填,例如 4x08501;如果工具里是单独填寄存器号,就填 8501,同样写 4x 和不写 4x 效果一样。
2.3 IO Scanner 与 READ_VAR/WRITE_VAR 的区别:周期和 CPU 占用
M580 读写 Modbus 从站有两条路:一条是程序里调用 READ_VAR / WRITE_VAR 功能块,另一条是配置 IO Scanner 扫描表。很多第一次做的人上来就用 READ_VAR,结果发现程序扫描周期稍长一点,变频器那边就报通讯超时,这是因为 READ_VAR 是“按需访问”,程序跑到才发报文,被打断就被推迟。IO Scanner 则完全不一样,它是网口硬件后台按固定周期自动收发,不占用 MAST 任务时间,也不受程序扫描周期抖动影响,这一点在控制变频器时特别重要。
我一般这样分工:读写要求稳定周期的信号走 IO Scanner,例如控制字、状态字、频率给定、输出频率;偶发的一次性请求,例如读变频器型号、读累计运行时间、写一套完整参数,用 READ_VAR/WRITE_VAR 在程序里触发。实验阶段全部数据都可以走 IO Scanner,先把循环数据打通,再根据需要补充功能块调用。
还要说清 IO Scanner 在 M580 上的地位:它不是一个单独的模块,而是 CPU 内置以太网口的一组扫描条目,每个条目定义一个远程 IP 上的一段寄存器。扫描周期可以设为 10ms、20ms、50ms,对变频器这种对象,50ms 足够平滑,实际项目我也常用 50ms,因为 ATV930 的给定斜坡本身就会过滤掉给定值的跳变。周期太快反而容易在网线松动或交换机拥塞时触发通讯故障,没必要追求极值。
3. 网络组态实操:把 ATV930 变成 M580 的一个 IO 从站
3.1 ATV930 面板上要做的四步设置
拿到一台新的 ATV930,我建议先恢复一次出厂设置,避免上一手留下的参数影响判断。在面板主菜单里找“管理 / 诊断”一类的入口执行恢复出厂,完成后变频器会回到默认配置。接着按下面四步设置通讯参数,全程可以在面板上完成,不需要额外软件:
第一步,固定 IP。ATV930 出厂的以太网默认 IP 通常是 10.10.0.1,这个地址在实验环境里不一定和 PLC 同网段,必须改成自己规划的固定地址。我的规划是:PLC 用 192.168.10.1,变频器用 192.168.10.30,子网掩码 255.255.255.0。在面板菜单里找到“通讯 - 以太网 - IP 配置”,把 DHCP 关掉,手动填入 IP、子网掩码和网关。网关可以留空,因为实验环境只有两台设备直连。
第二步,确认 Modbus TCP 服务开启。ATV930 的以太网口默认就启用 Modbus TCP,一般不需要额外打开。但我在现场遇到过固件被改过、服务被关掉的情况,所以在同一个“以太网”菜单里检查“Modbus 服务”或“协议”项是否处于启用状态。如果这里显示的是禁用,后面 PLC 怎么扫都扫不到。
第三步,设置给定源。变频器要能接收网络下发的频率,必须把“给定通道 1”切到 Modbus TCP。在参数菜单里找到 Fr1 或者“频率给定 1”这一项,把值改为“Modbus”(或“网络”)。我习惯连“组合模式”一起检查:如果控制模式里跑的是本地面板,给定改成网络也启动不了。简单做法是直接把命令通道也设为“Modbus TCP”,让启停、给定全部从网络来。
第四步,设置通讯超时行为。ATV930 有个参数决定“网络连接丢失后变频器怎么办”,默认一般是报故障并自由停车。实验初期可以保留这个默认行为,方便暴露问题。调试完成后如果你的现场不允许掉线就停车,再把该参数改成“保持上次给定”或“按斜坡停止”。这一步先不用纠结,知道它在哪里就行。
3.2 M580 以太网口固定 IP 与直连网线
M580 CPU 前面板有两个以太网口,一个用于编程和 IO 扫描,另一个通常保留给其他用途。实验为了减少干扰因素,我用一根普通超五类直连网线把 PLC 的一个网口和 ATV930 的以太网口直接连起来,中间不经过交换机。
M580 CPU 上有旋转开关 SW1 和 SW2,出厂时如果拨在非零位置,CPU 上电后会按旋钮组合生成固定 IP,而不是使用工程里的 IP 配置。实验前我把这两个旋钮都拨到 0,表示“使用 Control Expert 中保存的配置”。拨完旋钮再上电,不然改了不生效。
然后在 Control Expert 里给 CPU 的以太网口分配固定 IP。双击设备树里的 CPU,在“以太网口”属性里禁用 DHCP,填入 192.168.10.1,子网掩码 255.255.255.0。下载工程前检查一下“IP 分配”是不是真的写进了工程,有些项目里 CPU 的 IP 还在用默认值 10.10.10.x,下载后 PLC 可能连不上,下载完成后再次上电确认。
直连后先别急着配 IO 扫描表,先做一次连通性测试。电脑的网线临时也接到同一台调试网里,或者直接用 M580 的编程口隧道去 ping 变频器。我用电脑 ping 变频器时习惯一直开着持续模式:
ping 192.168.10.30 -t正常情况下回包时间应该在 1ms 以内,如果超时或者丢包,先查网线、查 IP、查面板上有没有“网络故障”提示,不要一头扎进 IO Scanner 配置。连通性是后面所有工作的前提,我见过有人扫了半个小时,最后发现 ATV930 的 IP 输错了一位。
3.3 在 Control Expert 的 IO Scanner 里登记寄存器
连通之后,在 Control Expert 里配置 IO Scanner。路径一般是:设备树 -> PLC 总线 -> CPU -> 以太网口,右键打开“IO Scanner”。打开后里面是一张扫描表,每一行对应一个远程寄存器段。我在实验里建立 4 个扫描条目:
| 条目 | 方向 | 远程设备 | 起始地址 | 长度(字) | 周期 | 用途 |
|---|---|---|---|---|---|---|
| 1 | 读 | 192.168.10.30 | 4x08503 | 1 | 50ms | 状态字 |
| 2 | 读 | 192.168.10.30 | 4x08603 | 1 | 50ms | 输出频率 |
| 3 | 写 | 192.168.10.30 | 4x08501 | 1 | 50ms | 控制字 |
| 4 | 写 | 192.168.10.30 | 4x08601 | 1 | 50ms | 频率给定 |
填表时有个细节:读和写不要试图合并进同一个条目。ATV930 的保持寄存器虽然都是 4x 区,但读操作和写操作在 Modbus 里是不同功能码,M580 的 IO Scanner 对每个条目只能选择一种方向。控制字和给定虽然相邻,也必须是两个独立的写条目。我就见过有人把 8501、8601 放在一个长度 2 的条目里,结果 PLC 端报交换超时。
每条扫描入口可以关联一个符号变量。我给四个条目分别起名:STATUS_W、RFRD_W、CMD_W、LFRD_W,这样程序里只碰符号名,不纠结具体 IO 地址。IO Scanner 的实际数据区会由 Control Expert 自动分配,一般落在 %IW 或 %QW 区域,你不需要手动记。
3.4 打通前的可观测性:先把状态字读回来
IO Scanner 配置完成后不要立刻写控制逻辑,先把程序下载到 PLC,打开在线监控,看 STATUS_W 这个变量有没有变化。变频器上电且网络通讯正常时,状态字的 bit0(就绪)应该是 1,也就是说 STATUS_W 的值至少是 1。如果看到 STATUS_W 一直是 0,或者 IO Scanner 条目报通讯超时,直接去排查网络层,例如 IP 网段、网线、Unit ID。
Unit ID 是这里最容易被忽略的一项。ATV930 做 Modbus TCP 从站时,默认的 Unit ID 一般可以填 0 或者 255,具体由变频器的“设备地址”参数决定。我第一次做这个实验时 IO Scanner 里填的是 0,结果变频器完全没有反应,面板上也没有错误码,后来把 Unit ID 改成和变频器面板里显示的设备地址一致,数据立刻开始刷新。建议实验前先到变频器“以太网 - Modbus TCP - 设备地址”里看一眼,把 IO Scanner 里的 Unit ID 对齐。
状态字能读到,就说明整条链路已经打通:PLC 的 IO Scanner 在用 Modbus TCP 周期访问 ATV930,变频器每 50ms 回一次状态。这时候再往下写控制字和给定,做起来就有底了。
4. 启停逻辑与频率给定换算:从写寄存器到电机转起来
4.1 控制字的位操作:启停、反向、自由停车、故障复位
CMD 是一个 16 位字,ATV930 新平台的控制字采用按位定义的方式。以我这次实验用的固件为例,各 bit 的含义如下:
| 位 | 含义 | 置 1 时的行为 |
|---|---|---|
| bit0 | 运行 | 命令变频器启动,按给定方向运行 |
| bit1 | 方向 | 1 为反向,0 为正转 |
| bit2 | 自由停车 | 封锁输出,电机滑行停止 |
| bit8 | 故障复位 | 给出一个脉冲清除当前故障 |
使用前最好和手里的固件手册核对一次位定义,不同版本存在差异。实验里我把控制字放到 MAST 任务里,用位访问的方式拼接,不直接写整数值,这样将来加功能也清晰:
(* 启停与方向逻辑:MAST 任务中持续执行 *) CMD_W.%X0 := bCmdRun; (* bit0:运行命令 *) CMD_W.%X1 := bCmdReverse; (* bit1:方向选择 1=反转 *) CMD_W.%X2 := bCmdCoast; (* bit2:自由停车 *) (* 故障复位只执行一个扫描周期 *) IF bFaultResetCmd THEN CMD_W.%X8 := TRUE; ELSE CMD_W.%X8 := FALSE; END_IF;这段代码的逻辑说明:四个位分开控制,互不影响。正常启动时把 bCmdRun 置 TRUE,bit0 为 1 变频器开始运行;要停止时把 bCmdRun 清 FALSE,bit0 变 0,变频器按停车模式减速停机。bit1 控制方向,注意在运行中切换方向应先停机再反向,不要直接翻转,否则会报过流或反倒转故障。bit2 是自由停车,适合急停场景。bit8 是故障复位,PLC 这边给一个扫描周期的 TRUE 脉冲就够了,持续置 1 没有意义。
有一个细节值得强调:IO Scanner 的写周期是 50ms,而 MAST 任务可能跑得比 50ms 快。MAST 里对 CMD_W 的修改并不会立刻送出去,而是由 IO Scanner 按自己的周期取最新值发送。所以故障复位脉冲在 MAST 里只持续了一个周期也不怕,IO Scanner 会在下个 50ms 周期把带 bit8=1 的控制字发出去。但如果 MAST 里置位和复位只隔了一个周期,且这个周期小于 IO Scanner 的发送周期,发送方实际看到的可能只有复位后的值,故障就没复掉。稳妥做法是用一个定时器把复位脉冲拉长到 200ms 以上,确保至少被发送一次。
4.2 频率给定的 16 位带符号百分比换算
ATV930 的频率给定寄存器 LFRD(8601)既不是直接的 Hz 整数,也不是 BCD 码,而是带符号的 16 位百分比。换算规则是:32767 对应 100% 的正向额定频率,0 对应 0Hz,负值用补码表示反向。以电机额定频率 50Hz 为例,想要 30Hz,需要算 30/50 * 32767 ≈ 19660,写入寄存器的是十进制 19660。
我第一次做这个实验时在这里翻过车:直接往 LFRD 里写了个 500,以为就是 50.00Hz,结果电机慢悠悠转了不到 1Hz,当时还以为是变频器坏了。后来查手册才明白,通信给定走的是百分比标度,不是定点小数。这也是整个实验里最容易被误解的地方。
正确换算代码:
(* 频率给定换算:额定频率 50.0Hz,目标 30.0Hz *) rPercent := (rTargetHz / rRatedHz) * 100.0; (* 先转百分比 *) iGivenInt := REAL_TO_INT(rPercent * 327.67); (* 再缩放为 16 位带符号值 *) (* 限幅保护 *) IF iGivenInt > 32767 THEN iGivenInt := 32767; END_IF; IF iGivenInt < -32767 THEN iGivenInt := -32767; END_IF; LFRD_W := INT_TO_WORD(iGivenInt);这里有个更直观的记忆方法:把 32767 想象成“满刻度”,给 10% 就写 3277,给 50% 就写 16384,给 100% 就写 32767。反向时写负值,INT 转 WORD 会自动变成补码形式。再说明一点,这里的 100% 对应的是电机的额定频率,不是 100Hz,如果你的电机额定频率是 60Hz,那么 32767 对应的就是 60Hz,公式里一定用电机铭牌上的额定频率做分母。
调试时可以先给一个很小的值验证比例关系:目标 5Hz、额定 50Hz,算出来是 3277。启动后看反馈寄存器 RFRD_W 读回来的值换算成频率是不是接近 5Hz,再慢慢加大,不要上来就给 32767 满转,怕机械或对中没检查就出危险。
4.3 首次通电要看的三个现象:面板、状态字、反馈
逻辑写完后第一次上电,我建议不要急着按启动,先观察三个地方。第一个是变频器面板:正常情况下会显示“网络控制”或类似图标,说明命令源和给定源都已经切到了 Modbus TCP。如果面板上仍然显示“终端控制”或本地面板图标,说明 CM1 或 Fr1 没有真正切过去,控制字写过去也不会有反应。
第二个是状态字的 bit0 和 bit1。bit0 为 1 表示变频器就绪,可以在程序里先把这个状态做进面板或触摸屏;bit1 为 1 表示正在运行。如果 bit0 一直为 0,可能是变频器处于故障状态或者没有使能,先看面板有没有故障码。
第三个是反馈频率 RFRD_W。启动后反馈值会跟着给定值走,电机的实际频率和给定频率之间的偏差取决于加速时间和负载。如果反馈完全不动,先看是不是 IO Scanner 里把 8603 的地址填错了。按规定写 4x08603,有的人想当然填成 8503,结果读回来的其实是状态字,反馈看起来就是乱的。
这三个现象配合起来能快速定位一大半问题:面板代表参数配置,状态字代表链路,反馈代表执行结果。每次实验我都按这个顺序检查,而不是一上来就逮着某一个寄存器猜。
5. 以太网通讯实验避坑:现象、原因和解决办法
5.1 现象 1:面板一直报 nLP,变频器根本不响应
现象:ATV930 面板上显示通讯故障代号,类似 nLP 或通讯断线,变频器不收任何 Modbus 请求,IO Scanner 条目状态显示超时。 原因:这个故障码是 ATV930 在“规定时间内没收到主站请求”时触发的。常见原因有三个:PLC 侧 IO Scanner 没启动、IP 网段不通、Unit ID 对不上。我实验里遇到最多的是第三种,因为 ATV930 默认设备地址和 PLC 侧填的 Unit ID 不一致,而且 IO Scanner 报错的提示并不直接告诉你是地址问题。 解决:先面板进“以太网-Modbus TCP-设备地址”确认当前值,再把 IO Scanner 里的 Unit ID 改成一致。同时把通讯超时参数 tCO 从默认值调大,例如 1000ms,避免因为偶尔一次扫描超时就让变频器掉线。改完之后断电重启变频器,让新参数生效。
5.2 现象 2:控制字明明写了 1,电机却不转
现象:监控程序里 CMD_W 已经是 1,状态字也正常,但电机纹丝不动,触摸屏上也没有故障码。 原因:多半不是通讯问题,而是命令通道没有切到网络。ATV930 出厂默认的命令源可能是端子排或面板,控制字只能通过“当前有效的命令通道”触发启动。另一种可能是你写的 CMD_W 是 16 位字,但 IO Scanner 写条目配置成了“读”,数据实际没发出去。 解决:先看面板上是不是“网络控制”图标亮,没有就检查 CM1 参数,把命令通道 1 改成 Modbus TCP。再回 Control Expert 里检查 IO Scanner 里第四个写条目的方向是不是写,地址是不是 4x08501。如果方向错了,把条目删掉重建,避免只改方向保留缓存。
5.3 现象 3:给定值 50,输出频率对不上
现象:给了某个数字,电机转了,但频率完全不在预期范围内,例如写 500 只转出 0.49Hz,或者写 16384 转了 50Hz 而你本意是给 16.384Hz。 原因:给定寄存器用的不是整数 Hz,也不是千分比,而是带符号 16 位百分比。500 对应的是 500/32767 * 50Hz ≈ 0.76Hz,所以输出低频是正常的。很多人第一次接触这个格式都会在这里困惑,因为它和模拟量通道里 0-10V 对应 0-50Hz 的线性标度是两回事。 解决:统一按“百分比-满刻度”换算,控制器里把目标赫兹先除以额定频率,再乘以 32767。建议把这段换算封装成一个函数块,所有变量都用实际工程单位(Hz、rpm),寄存器里才做标度转换,这样程序里其他人都能看懂。
5.4 现象 4:IO 扫描表填完 PLC 报数据交换超时
现象:Control Expert 在线监控里,IO Scanner 的某个条目显示交换超时,对应的输入变量不刷新。 原因:条目配置问题居多。常见的包括:起始地址格式写错,例如填 8501 却漏了 4x 前缀;读写方向写错;寄存器长度写错;还有前面提过的 Unit ID 不匹配。另外有一种情况:你同时配置了多个写条目指向同一个 IP,但其中一个地址超出了 ATV930 允许的范围,整个设备的扫描会话都会被拖垮。 解决:先删掉所有条目,只保留一条读状态字的试试。能通再逐个加回写条目。这样能把问题锁定在哪一行配置上,而不是几个条目一起排查。ATV930 的通讯手册里通常会写明支持的寄存器范围和功能码,填之前扫一眼边界值。
5.5 现象 5:拔网线掉线后重新上线,变频器不进运行状态
现象:实验过程中拔了网线或者 PLC 重启,网线插回去之后,状态字恢复了,但变频器停在就绪状态,给启动命令也不动。 原因:ATV930 在检测到网络丢失后,根据 tCO 参数选择报故障并停止输出。虽然后续网络恢复,但故障锁存还在,必须做一次故障复位才能清除。PLC 重启时 IO Scanner 必然有一段空窗,这个空窗超过 tCO 就会触发同样的机制。 解决:程序里做一个上电自动复位:PLC 启动后延时 2 秒,给 CMD_W 的 bit8 一个脉冲。如果现场不允许掉电重启后自动复位,那就保留手动复位按钮。另一个更治本的做法是把 tCO 改成“网络丢失后保持上次给定”,但这样有安全风险,电机会在通讯中断时一直保持运行,是否符合现场安全要求要单独评估。
6. 进阶:把整个实验封装成一个 DFB,多台变频器批量管理
实验跑通后,建议把“起停 + 给定 + 状态反馈”这组逻辑封装成一个 DFB,而不是散落在主程序里。我通常给这个块起名叫 ATV930_CTRL,对外接口按工程单位定义:
| 接口 | 方向 | 类型 | 说明 |
|---|---|---|---|
| bCmdRun | 输入 | BOOL | 运行命令 |
| bCmdReverse | 输入 | BOOL | 反向命令 |
| bCmdCoast | 输入 | BOOL | 自由停车 |
| bFaultReset | 输入 | BOOL | 故障复位脉冲 |
| rTargetHz | 输入 | REAL | 目标频率 |
| STATUS_W | 输入 | WORD | IO Scanner 读回的状态字 |
| RFRD_W | 输入 | WORD | IO Scanner 读回的频率反馈 |
| CMD_W | 输出 | WORD | 写入的控制字 |
| LFRD_W | 输出 | WORD | 写入的频率给定 |
| bReady | 输出 | BOOL | 就绪状态 |
| bRunning | 输出 | BOOL | 运行状态 |
| bFault | 输出 | BOOL | 故障状态 |
| rOutputHz | 输出 | REAL | 实际输出频率 |
块内部做三件事:把状态字按位拆成 bReady、bRunning、bFault;把 rTargetHz 用 16 位带符号百分比公式换算成 LFRD_W;把启停、方向、自由停车、故障复位按位拼装到 CMD_W。比例换算参数(额定频率)做成块的输入或实例变量,这样同一套块既可以驱动 50Hz 电机,也可以驱动 60Hz 电机。
多台变频器场景下别复制粘贴一堆变量。Control Expert 里可以建一个结构体数据类型,字段就是上面那十几个接口,然后定义一个数组,比如 [1..8] OF ATV930_DATA,IO Scanner 里每个变频器占四个条目,每条目关联到数组元素的一个字段。MAST 任务里再用一个 FOR 循环批量执行换算和位拼装,代码量基本不随台数增长。IO Scanner 有一个健康位或错误码标识每条扫描是否正常,这个要放到报警画面里,不然变频器掉线了操作员也不知道。
这个实验做完最大的收益不是省了二十根线,而是建立了一个可以复用的通讯模板。后续接第二台、第三台变频器,只需要改 IP 和数组下标,不用重新设计通讯逻辑。做个实验时我习惯把参数和现象记录成一张表,先写寄存器预期值,再写实际读到值,那种“好像通了又说不上哪里通”的状态最容易掩盖问题。希望这篇笔记能帮你少走几趟弯路,顺着这套路径顺利把实验跑通。
本文还有配套的精品资源,点击获取