本文详细介绍如何使用欧姆龙NJ系列PLC通过MODBUS-RTU协议控制两台台达变频器,包含硬件配置、软件组态、参数设置以及ST语言编程示例。
硬件配置
所需设备
欧姆龙NJ系列PLC(如NJ501-1500)台达变频器(如VFD-M系列)2台RS485通信模块(如NJ系列CJ1W-SCU21/41-V1)RS485通信电缆(双绞屏蔽线)终端电阻(120Ω)接线方式
采用RS485总线型连接方式:
软件组态
Sysmac Studio配置
1. 创建新项目,选择对应的NJ系列PLC型号
2. 在"配置"窗口中添加CJ1W-SCU模块
3. 配置串行端口:
o通信模式:RS485
o波特率:9600 bps
o数据位:8位
o停止位:1位
o校验位:偶校验
4. 设置Modbus主站功能
参数设置
台达变频器参数设置
两台变频器需要设置不同的站号:
参数 | 变频器1 | 变频器2 | 说明 |
P00 | 03 | 03 | 频率指令来源:RS485通信 |
P01 | 03 | 03 | 运转指令来源:RS485通信 |
P88 | 01 | 02 | RS485地址(站号) |
P89 | 01 | 01 | 通信速率:9600bps |
P92 | 02 | 02 | 通信校验:偶校验 |
ST语言程序设计
变量定义(标签形式)
VAR_GLOBAL
// 变频器1控制字
VFD1_Run : BOOL; (* 启动/停止 *)
VFD1_Forward : BOOL; (* 正转 *)
VFD1_Reverse : BOOL; (* 反转 *)
VFD1_Frequency : INT; (* 频率设定 0-6000表示0.0-60.00Hz *)
VFD1_Status : WORD; (* 状态读取 *)
VFD1_OutputFrequency : INT; (* 输出频率 *)
// 变频器2控制字
VFD2_Run : BOOL;
VFD2_Forward : BOOL;
VFD2_Reverse : BOOL;
VFD2_Frequency : INT;
VFD2_Status : WORD;
VFD2_OutputFrequency : INT;
// Modbus通信状态
MB_Comm_Error : BOOL;
MB_Error_Code : WORD;
END_VAR
Modbus通信程序
FUNCTION_BLOCK VFD_Control
VAR_INPUT
Run : BOOL;
Forward : BOOL;
Reverse : BOOL;
Frequency : INT;
END_VAR
VAR_OUTPUT
Status : WORD;
OutputFrequency : INT;
CommError : BOOL;
END_VAR
VAR
// 内部变量
ControlWord : WORD;
MB_Result : ARRAY[0..1] OF UINT;
END_VAR
// 构建控制字
ControlWord := 0;
ControlWord := ControlWord OR (BOOL_TO_WORD(Run) * 16#1);
ControlWord := ControlWord OR (BOOL_TO_WORD(Forward) * 16#2);
ControlWord := ControlWord OR (BOOL_TO_WORD(Reverse) * 16#4);
// 写入控制字和频率到变频器
MB_WRITE_SINGLE_REGISTER(
slaveAddress := 1, // 站号,根据实际设置调整
address := 16#2000, // 控制字地址
value := ControlWord,
result => MB_Result[0]
);
MB_WRITE_SINGLE_REGISTER(
slaveAddress := 1,
address := 16#2001, // 频率设定地址
value := Frequency,
result => MB_Result[1]
);
// 读取状态和输出频率
MB_READ_HOLDING_REGISTERS(
slaveAddress := 1,
address := 16#2100, // 状态字地址
quantity := 2,
data := ADR(Status),
result => MB_Result[2]
);
// 检查通信错误
CommError := (MB_Result[0] <> 0) OR (MB_Result[1] <> 0) OR (MB_Result[2] <> 0);
END_FUNCTION_BLOCK
主程序调用
PROGRAM Main
VAR
VFD1 : VFD_Control;
VFD2 : VFD_Control;
END_VAR
// 控制变频器1
VFD1(
Run := VFD1_Run,
Forward := VFD1_Forward,
Reverse := VFD1_Reverse,
Frequency := VFD1_Frequency,
Status => VFD1_Status,
OutputFrequency => VFD1_OutputFrequency,
CommError => MB_Comm_Error
);
// 控制变频器2
VFD2(
Run := VFD2_Run,
Forward := VFD2_Forward,
Reverse := VFD2_Reverse,
Frequency := VFD2_Frequency,
Status => VFD2_Status,
OutputFrequency => VFD2_OutputFrequency,
CommError => MB_Comm_Error
);
注意:
1. 实际应用中需要根据变频器型号调整Modbus地址映射。
2. 建议添加通信超时和错误处理机制。
3. 频率值需要根据变频器参数进行缩放,通常为0-6000对应0.0-60.00Hz。
调试与故障排除
使用Sysmac Studio的串行监控功能检查通信数据确认所有设备通信参数一致(波特率、数据位、停止位、校验)检查RS485接线是否正确,终端电阻是否安装使用万用表检查RS485线路的通断和电压
免责声明:本文内容源于网络内容整理优化而成,内容仅供学习参考,尊重版权侵权速删,歉意致谢!