西门子smart200与台达MS300变频器通讯程序 器件:西门子s7 200 smart PLC,台达MS300变频器,昆仑通态触摸屏(带以太网),中途可以加路由器 控制方式:触摸屏与plc以太网通讯,PLC与变频器通讯485口相连 功能:触摸屏控制变频器设定频率,启停,读取输出频率,电压 说明:是程序,非硬件。 程序有注释,变频器设置,接线都有,一应俱全

最近搞了个西门子 Smart200 与台达 MS300 变频器通讯的项目,还涉及到昆仑通态触摸屏控制,这里跟大家分享下整个程序实现过程。

硬件连接概述

咱们硬件方面,触摸屏通过以太网和西门子 S7 - 200 smart PLC 相连,而 PLC 的 485 口和台达 MS300 变频器的通讯口相接。要是距离远或者设备多,中途加个路由器来保证通讯稳定。不过这次重点讲程序,硬件接线简单提下就好。

变频器设置

台达 MS300 变频器要进行一些关键设置才能和 PLC 愉快通讯。

  1. 通讯协议设置:设置为 Modbus RTU 协议,这是工业通讯常用协议啦。一般在变频器参数里找到类似“通讯协议选择”的参数,设为 Modbus RTU 模式。
  2. 站号设置:设定变频器的站号,比如设为 1 。这就像每个设备的身份证,PLC 靠这个找到变频器。
  3. 波特率等参数:要和 PLC 侧设置一致,常见的波特率如 9600bps ,还有数据位、停止位、校验位等参数,两边得匹配。

PLC 程序编写(以西门子 S7 - 200 smart 为例)

初始化部分

// 定义变量区域
VAR
    // 定义 Modbus 主站库相关变量
    MB_HoldRegs : ARRAY[0..99] OF WORD; // 保持寄存器数组,用于存储读写的数据
    MB_Addr : USINT := 1; // 变频器站号,和变频器设置的站号一致
    MB_Baud : USINT := 6; // 波特率设置,6 代表 9600bps
    MB_Parity : USINT := 0; // 校验位设置,0 代表无校验
    MB_DataBits : USINT := 8; // 数据位 8 位
    MB_StopBits : USINT := 1; // 停止位 1 位
    MB_Master_DB : DB; // Modbus 主站数据块
END_VAR

// 初始化 Modbus 主站
MBUS_INIT(
    MB_DB := MB_Master_DB, // Modbus 主站数据块
    Mode := 1, // 模式 1 为初始化并启用
    Baud := MB_Baud, // 波特率
    Parity := MB_Parity, // 校验位
    DataBits := MB_DataBits, // 数据位
    StopBits := MB_StopBits, // 停止位
    SlaveAddr := MB_Addr, // 从站地址(变频器站号)
    MaxIQ := 125, // 最大输入/输出点数
    MaxAI := 125, // 最大模拟量输入点数
    MaxHoldReg := 100, // 最大保持寄存器数,和上面数组大小对应
    MaxInputReg := 125, // 最大输入寄存器数
    Timeout := 1000, // 超时时间 1000ms
    Done => MB_Init_Done, // 初始化完成标志
    Error => MB_Init_Error // 初始化错误标志
);

在这段初始化代码里,我们先定义了一系列和 Modbus 通讯相关的变量。像变频器站号、波特率这些参数,要根据变频器实际设置来。然后通过 MBUSINIT 指令来初始化 Modbus 主站,这个指令会设置好通讯的各种参数,等它执行完,根据 MBInitDoneMBInit_Error 标志,就能知道初始化有没有成功。

读变频器数据部分

// 读变频器输出频率(保持寄存器地址假设为 40002 ,实际按变频器手册)
MBUS_READ_HOLDING_REG(
    MB_DB := MB_Master_DB, // Modbus 主站数据块
    SlaveAddr := MB_Addr, // 变频器站号
    ReadAddr := 1, // 起始寄存器地址,这里按实际映射,假设输出频率对应寄存器地址偏移 1
    ReadCount := 1, // 读取寄存器数量,这里只读 1 个
    DataPtr := MB_HoldRegs[0], // 数据存储指针,存到数组第一个元素
    Done => MB_Read_Done, // 读取完成标志
    Error => MB_Read_Error // 读取错误标志
);

// 这里可以把读取到的频率数据做进一步处理,比如转换为实际工程值
// 假设变频器输出频率范围 0 - 50Hz ,对应寄存器值 0 - 65535
Frequency := (MB_HoldRegs[0] / 65535.0) * 50.0;

这段代码用 MBUSREADHOLDINGREG 指令从变频器读取数据。我们要指定站号、起始寄存器地址和读取数量,数据会存到之前定义的 MBHoldRegs 数组里。读完后,根据变频器手册提供的寄存器值和实际物理量的映射关系,把寄存器值转换为实际的输出频率。

写变频器数据部分(控制启停和设定频率)

// 控制变频器启停
// 假设变频器启停控制寄存器地址为 40001 ,0 停止,1 启动
IF Start_Button THEN // Start_Button 为触摸屏传来的启动按钮信号
    MB_HoldRegs[1] := 1; // 启动
ELSE
    MB_HoldRegs[1] := 0; // 停止
END_IF;

MBUS_WRITE_HOLDING_REG(
    MB_DB := MB_Master_DB, // Modbus 主站数据块
    SlaveAddr := MB_Addr, // 变频器站号
    WriteAddr := 0, // 起始寄存器地址,按实际映射,假设启停控制对应寄存器地址偏移 0
    WriteCount := 1, // 写入寄存器数量,这里只写 1 个
    DataPtr := MB_HoldRegs[1], // 数据存储指针,数组第二个元素存启停控制值
    Done => MB_Write_Done, // 写入完成标志
    Error => MB_Write_Error // 写入错误标志
);

// 设置变频器设定频率
// 假设设定频率寄存器地址为 40003 ,范围 0 - 65535 对应 0 - 50Hz
Set_Frequency_Reg := (Set_Frequency / 50.0) * 65535.0; // Set_Frequency 为触摸屏传来的设定频率值
MB_HoldRegs[2] := Set_Frequency_Reg;

MBUS_WRITE_HOLDING_REG(
    MB_DB := MB_Master_DB, // Modbus 主站数据块
    SlaveAddr := MB_Addr, // 变频器站号
    WriteAddr := 2, // 起始寄存器地址,按实际映射,假设设定频率对应寄存器地址偏移 2
    WriteCount := 1, // 写入寄存器数量,这里只写 1 个
    DataPtr := MB_HoldRegs[2], // 数据存储指针,数组第三个元素存设定频率值
    Done => MB_Write_SetFreq_Done, // 写入设定频率完成标志
    Error => MB_Write_SetFreq_Error // 写入设定频率错误标志
);

这部分代码实现了通过 PLC 控制变频器启停和设定频率。先根据触摸屏传来的启停按钮信号,在数组里设置好对应的启停控制值,然后用 MBUSWRITEHOLDING_REG 指令写入变频器对应的寄存器。设定频率也是类似的流程,先把触摸屏传来的设定频率值,按寄存器和实际物理量的映射关系转换为寄存器值,再写入变频器。

触摸屏程序关联

昆仑通态触摸屏这边,主要就是建立和 PLC 的以太网连接,然后创建变量和画面。把控制变频器的启停按钮、设定频率输入框,以及显示输出频率、电压的数值显示组件关联到 PLC 对应的变量。这个过程在触摸屏的组态软件里操作,根据软件提示一步步来就行,主要是建立好通讯连接和变量映射关系。

西门子smart200与台达MS300变频器通讯程序 器件:西门子s7 200 smart PLC,台达MS300变频器,昆仑通态触摸屏(带以太网),中途可以加路由器 控制方式:触摸屏与plc以太网通讯,PLC与变频器通讯485口相连 功能:触摸屏控制变频器设定频率,启停,读取输出频率,电压 说明:是程序,非硬件。 程序有注释,变频器设置,接线都有,一应俱全

这样,整个从触摸屏控制变频器设定频率、启停,到读取输出频率、电压的功能就通过程序实现啦。希望对大家有类似项目需求的有所帮助!

更多推荐