返回主站|会员中心|保存桌面

菲尼克斯连接器专营    

菲尼克斯连接器、连接端子

新闻分类
  • 暂无分类
联系方式
  • 联系人:吴经理
  • 电话:18576370666
  • 邮件:18576370666@qq.com
首页 > 新闻中心 > 如何用程序实现这种功能呢?
新闻中心
如何用程序实现这种功能呢?
发布时间:2026-02-01        浏览次数:1        返回列表

用程序具体实现西门子 S7-200 PLC 自由口通讯的完整功能(包含数据发送、接收、协议解析、故障处理),我会基于工业实操场景,提供可直接下载到 PLC 运行的完整梯形图程序,并拆解每一段程序的逻辑和作用,同时补充关键的调试方法,让你能快速落地。

核心目标(通用工业场景)

以 PLC 通过自由口通讯读取Modbus RTU 传感器(如压力传感器,地址 01,寄存器 40001)的数值为例,实现:

  1. 初始化自由口参数(9600bps、8N1);

  2. 定时主动发送读取指令;

  3. 接收传感器回复并解析出实际数值;

  4. 增加通讯故障判断(超时、无回复报警);

  5. 封装成通用子程序,便于复用。

一、完整程序实现(STEP 7-Micro/WIN V4.0 SP9)

1. 变量定义(符号表,便于理解)

符号名地址数据类型说明
Freeport_InitSM0.1BOOL首次扫描初始化
Send_TriggerI0.0BOOL手动触发发送(也可改用定时)
Send_LengthVB100BYTE发送数据长度
Send_BufVB101BYTE发送缓冲区起始地址
Recv_BufVB200BYTE接收缓冲区起始地址
Recv_LengthVB300BYTE接收字节数
Pressure_ValueVD301REAL解析后的压力值(实际物理量)
Comm_AlarmM0.0BOOL通讯故障报警
Comm_OKM0.1BOOL通讯成功标志
Timer_1sT37TIMER1s 定时(用于循环发送)

2. 完整梯形图程序(分模块解析)

模块 1:自由口参数初始化(必做)

ladder

// 程序段1:初始化自由口(PORT0)+ 启用中断
LD     Freeport_Init (SM0.1)
MOVB   16#09, SMB30       // 配置PORT0:自由口+9600bps+8位+1停止+无校验
MOVB   16#00, SMB87       // 接收控制:无起始/结束符,超时1s,接收任意字符
MOVW   +1000, SMW90       // 接收超时时间=1000ms
MOVB   0, SMB89           // 无起始字符
MOVB   0, SMB94           // 无结束字符
ATCH    INT_0, 9          // 绑定PORT0发送完成中断(事件9)到INT0
ATCH    INT_1, 23         // 绑定PORT0接收完成中断(事件23)到INT1
ENI                       // 启用全局中断(关键!否则中断无效)
MOVB   0, Comm_Alarm (M0.0) // 初始化故障标志
MOVB   0, Comm_OK (M0.1)   // 初始化成功标志

解析

  • SMB30=16#09 是核心配置,二进制00001001:高 4 位0000=9600bps,低 4 位1001=8 位数据 + 1 停止位 + 无校验;

  • ATCH指令绑定中断事件,ENI必须执行,否则中断不生效。

模块 2:定时 / 手动触发数据发送(读取传感器指令)

ladder

// 程序段2:1s定时触发发送(替代手动按钮,工业常用)
LD     SM0.0
TON    Timer_1s (T37), 100 // 定时1s(100×10ms)
LD     Timer_1s (T37)
EU                        // 上升沿触发,避免重复发送
// 也可改用手动触发:LD Send_Trigger (I0.0) + EU

// 程序段3:填充发送数据(Modbus RTU读取指令:01 03 00 00 00 01 84 0A)
MOVB   8, Send_Length (VB100) // 发送长度=8字节
MOVB   16#01, Send_Buf (VB101) // 从站地址=01
MOVB   16#03, VB102           // 功能码=03(读取保持寄存器)
MOVB   16#00, VB103           // 起始寄存器高字节=00
MOVB   16#00, VB104           // 起始寄存器低字节=00(40001)
MOVB   16#00, VB105           // 读取寄存器数量高字节=00
MOVB   16#01, VB106           // 读取寄存器数量低字节=01(1个寄存器)
MOVB   16#84, VB107           // CRC校验高字节
MOVB   16#0A, VB108           // CRC校验低字节

// 程序段4:启动发送
XMT    Send_Length (VB100), 0 // PORT0发送,缓冲区VB100(长度+数据)
MOVB   0, Comm_OK (M0.1)       // 发送后重置成功标志
MOVB   0, Comm_Alarm (M0.0)    // 重置故障标志

解析

  • 发送的指令是 Modbus RTU 标准格式:从站地址+功能码+寄存器地址+寄存器数量+CRC校验

  • TON定时器实现 1s 循环发送,替代手动按钮,适配工业 “持续采集数据” 的需求;

  • CRC 校验值可通过 Modbus CRC 计算器生成,避免手动计算错误。

模块 3:接收数据并解析(中断处理,更高效)

ladder

// 中断程序INT1:PORT0接收完成(事件23)
INT_1:
LD     SM0.0
// 步骤1:判断接收是否正常(SMB86=2=接收完成)
LDB=   SMB86, 2
JMP    0                   // 正常则跳转到解析逻辑
MOVB   1, Comm_Alarm (M0.0) // 接收异常(超时/溢出),置位故障报警
RETI                       // 中断返回

LBL    0
// 步骤2:存储接收字节数
MOVB   SMB88, Recv_Length (VB300)
// 步骤3:解析Modbus回复(回复格式:01 03 02 00 64 D8 0A → 数值=100)
// 回复数据:VB201=01(地址)、VB202=03(功能码)、VB203=02(字节数)、VB204=高字节、VB205=低字节
MOVW   VW204, VW301        // 将高低字节合并为字(VW204=VB204+VB205)
// 步骤4:转换为实际物理量(假设传感器量程0-200MPa,对应数值0-4095)
MOVR   VW301, VD301        // 字转实数
/R     4095.0, VD301       // 归一化
*R     200.0, VD301        // 转换为MPa(Pressure_Value=VD301)
// 步骤5:置位成功标志
MOVB   1, Comm_OK (M0.1)
RETI                       // 中断返回

ladder

// 中断程序INT0:PORT0发送完成(事件9)
INT_0:
LD     SM0.0
SET    M1.0                // 发送完成标志(可用于调试)
RETI

解析

  • 用接收完成中断处理数据,比轮询SMB86更高效,避免主程序阻塞;

  • 解析逻辑:Modbus 回复的有效数据在VB204-VB205(16 位寄存器值),需转换为实际物理量(如压力、温度);

  • 若接收异常(如超时、溢出),立即置位故障报警,便于现场排查。

模块 4:通讯故障兜底(超时判断)

ladder

// 程序段5:接收超时故障(1.5s未接收则报警)
LD     SM0.0
TON    T38, 150            // 定时1.5s
LDB=   Comm_OK (M0.1), 0   // 通讯未成功
LDT=   T38, 150            // 超时1.5s
ALD                        // 两个条件同时满足
MOVB   1, Comm_Alarm (M0.0) // 置位故障报警
// 超时后重置定时器
LD     Comm_OK (M0.1)
R      T38, 1

解析

  • 增加超时判断,避免 “接收中断未触发但无报警” 的情况;

  • 超时时间设为 1.5s(比发送周期 1s 稍长),兼顾响应速度和容错性。

二、程序下载与调试步骤

  1. 硬件连接

    • PLC PORT0(3 脚 = RS485+,8 脚 = RS485-)接传感器 RS485 端子(+/- 对应);

    • 通讯线用屏蔽双绞线,距离 > 100m 时接 120Ω 终端电阻(PLC 侧)。

  2. 软件操作

    • VD301:解析后的实际压力值;

    • M0.0:通讯故障标志(1 = 故障);

    • M0.1:通讯成功标志(1 = 成功)。

    • 打开 STEP 7-Micro/WIN,新建项目,选择对应 PLC 型号(如 CPU224 CN);

    • 编写上述梯形图程序,下载到 PLC(PLC 需处于 STOP 模式,下载后切换到 RUN);

    • 打开 “状态表”,监控以下地址:

  3. 调试排错

    • M0.0=1(故障):检查传感器参数(波特率、地址)、接线、CRC 校验值;

    • VD301数值异常:检查解析公式(量程转换系数)是否匹配传感器实际量程;

    • 若接收数据乱码:增加屏蔽线接地,远离动力线,降低电磁干扰。

三、通用化改造(适配不同设备)

若要通讯其他设备(如变频器、触摸屏),仅需修改 2 处:

  1. 发送数据段:替换VB101-VB108的数值为对应设备的通讯指令;

  2. 解析逻辑段:根据设备回复的协议格式,调整VW204的位置和量程转换系数。

总结

  1. 西门子 S7-200 自由口通讯程序的核心是「初始化参数→发送指令→中断接收→解析数据→故障处理」;

  2. 用中断处理接收逻辑,比轮询更高效,适合工业实时性要求;

  3. 必须增加故障判断(超时、异常接收),便于现场快速定位问题;

  4. 量程转换公式需根据实际设备的量程调整,是解析物理量的关键。

收缩
  • QQ咨询

  • 电话咨询

  • 18576370666
  • 添加微信客服