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

最近在项目里用西门子1200 PLC和台达MS300变频器搭了一套控制系统,核心是通过RS485实现Modbus RTU通讯。整个过程不算复杂,但细节坑点不少,直接上干货。


系统架构

整个系统分三层:

  1. 触摸屏层:西门子KTP700和昆仑通态屏通过以太网和PLC交互;
  2. PLC控制层:1200 PLC作为通讯枢纽,用CM 1241 RS485模块接变频器;
  3. 执行层:台达MS300变频器负责电机驱动。

!


PLC程序篇

硬件组态先走起:在博途里添加CM 1241模块,设置端口参数——波特率9600、8数据位、1停止位、偶校验。变频器站地址设为1(后面参数设置会对应)。

关键代码段

// 数据块定义
DATA_BLOCK "Modbus_Data"
VAR
    SendData: ARRAY[0..5] OF BYTE;  // 发送缓冲区
    RecvData: ARRAY[0..9] OF BYTE;  // 接收缓冲区
    Frequency_Set: REAL := 50.0;    // 设定频率
END_VAR

Modbus主站初始化

// 初始化Modbus主站
CALL "MB_COMM_LOAD" 
    REQ         := TRUE,
    PORT        := 1,               // 对应CM1241端口号
    BAUD        := 9600,
    MB_DB       := "Modbus_Data",    // 关联数据块
    DONE        => #InitDone,
    ERROR       => #InitError;

频率写入功能块

// 写频率到变频器
CALL "MB_MASTER"
    REQ         := #WriteCmd,        // 触发写入
    MB_ADDR     := 1,               // 变频器站地址
    MB_FUNC     := 16#06,           // 写单个寄存器
    DATA_ADDR   := 16#2001,         // 台达频率设定寄存器地址
    DATA_LEN    := 2,               // 占用2个字节
    DATA_PTR    := P#DB1.Frequency_Set,
    DONE        => #WriteDone,
    ERROR       => #WriteError;

代码解析:这里用了Modbus功能码06(写单个寄存器),台达MS300的频率设定寄存器地址是2001H。注意数据长度是2字节,对应REAL转DINT处理。


触摸屏骚操作

西门子KTP700配置

  1. 新建HMI项目,添加S7-1200连接;
  2. 频率设定框绑定DB1.Frequency_Set,启停按钮绑定M0.0;
  3. 输出频率显示绑定DB1.Output_Freq(从变频器4003H寄存器读取)。

昆仑通态屏彩蛋

-- MCGS脚本片段(读取电压)
function ReadVoltage()
    local addr = 0x4004     -- 电压寄存器地址
    SendModbusCmd(1, 3, addr, 1) -- 功能码03读保持寄存器
    voltage = (data[0]<<8) | data[1] -- 拼接高低字节
end

避坑指南:昆仑屏的Modbus驱动需要设置小端模式,台达数据默认大端,记得在脚本里做字节交换。


变频器参数必须项

台达MS300这几个参数不改会扑街:

P00-15 = 01    // 运行指令由通讯控制
P00-16 = 01    // 频率指令由通讯设定
P09-00 = 01    // Modbus从站地址
P09-01 = 03    // 波特率9600(03对应9600)
P09-02 = 02    // 偶校验
P09-04 = 01    // 通讯超时检测使能

调试实录

  1. 第一次上电没反应:发现RS485线A/B接反了,用万用表量A-B间电压,正常应有2-6V差;
  2. 数据偶尔跳变:启用CM1241的终端电阻(拨码开关打到ON);
  3. 昆仑屏读取异常:发现浮点数处理问题,在PLC里用FC16(Swap)做高低字节交换;
  4. 急停触发后通讯卡死:在OB82组织块里加了通讯复位程序,故障时自动重连。

最后扔个模板

完整程序框架长这样:

PLC
├── OB1(主循环)
├── DB1(通讯数据块)
├── FC1(Modbus初始化)
├── FC2(频率写入)
└── FC3(状态读取)
HMI
├── 西门子屏(启停/频率设定)
└── 昆仑屏(电压/频率显示)

整套代码已经上传Github(假装有链接),需要注释版程序的私信丢邮箱。搞工控的都知道,参数对不上全是玄学问题,建议直接照抄我这套配置。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐