西门子SMART200 PLC与天平称自由口通讯程序实战

张开发
2026/4/8 16:36:40 15 分钟阅读

分享文章

西门子SMART200 PLC与天平称自由口通讯程序实战
西门子SMART200 PLC和and天平称自由口通讯程序。 通俗易懂注释多自己编写的实际项目应用的。在自动化项目中常常需要让PLC与各种外部设备进行通讯以实现数据交互。这次咱们聊聊西门子SMART200 PLC和天平称之间通过自由口通讯的程序编写这可是实际项目里用到的干货。项目背景咱的项目要求是将天平称实时测量的重量数据准确地传输到西门子SMART200 PLC里以便后续进行数据处理和控制。天平称这边提供了基于自由口通讯协议的接口所以得琢磨怎么让PLC能跟它“对上话”。硬件连接首先要把硬件连接好。PLC的串口一般是PORT0或者PORT1和天平称的通讯接口相连。注意RS485和RS232的电平转换问题如果PLC和天平称接口电平不一致得加个转换器。比如常见的MAX485芯片就能实现TTL电平与RS485电平的转换。连接好后硬件准备就差不多啦。自由口通讯协议分析天平称使用的自由口通讯协议规定了数据帧格式。通常一帧数据可能包含起始位、地址位、功能码、数据位、校验位和结束位。以常见的Modbus RTU简化版为例假设天平称采用类似格式起始位可能是2个字节的固定值0xAA 0xBB表示一帧数据开始地址位1字节标识天平称的设备地址功能码1字节比如0x03表示读取数据数据位长度不定这里是重量数据校验位常用CRC16校验2字节结束位可能是0xCC 0xDD。搞清楚这个协议编写程序就有方向了。PLC程序编写初始化部分// 初始化自由口通讯 SMB30 0x09; // 选择波特率9600bps8位数据位无校验 // SMB30各位含义 // 第0、1位通讯协议选择00为PPI主站模式01为PPI从站模式10为自由口模式这里选10自由口 // 第2、3、4位波特率选择000为38400bps001为19200bps010为9600bps这里选010 // 第5位奇偶校验选择0为无校验1为偶校验 // 第6、7位数据位选择00为7位数据01为8位数据这里选01 XMTEN 1; // 允许发送 RCVEN 1; // 允许接收这段代码就是设置PLC串口工作在自由口模式9600bps波特率8位数据位无校验。同时开启发送和接收功能。发送数据程序段// 构建发送数据帧 VB100 0xAA; // 起始位1 VB101 0xBB; // 起始位2 VB102 0x01; // 天平称地址 VB103 0x03; // 功能码读取数据 // 假设读取重量数据暂时没有具体数据位填充这里省略数据位构建 // 计算CRC16校验码 LDW AC0, 0 MOVW VW100, AC0 CALL CRC16 // 调用CRC16计算子程序 MOVW AC0, VW104 // 将计算好的CRC16校验码存到数据帧对应位置 VB106 0xCC; // 结束位1 VB107 0xDD; // 结束位2 // 发送数据 MOVB 8, SMB87; // 定义接收信息控制字节这里设置接收信息长度为8字节 MOVB VB100, SMB88; // 接收信息起始地址 ATCH INT_0, 9; // 当发送完成事件9发生时调用中断程序INT_0 ENI; // 全局开中断 XMT VB100, 0; // 从PORT0发送VB100开始的8字节数据这段代码先是构建了要发送给天平称的数据帧包括起始位、地址位、功能码等还计算并填充了CRC16校验码。然后设置接收信息控制字节指定接收信息长度和起始地址绑定发送完成中断事件开启全局中断最后从PORT0发送数据。接收数据及处理程序段// 中断程序INT_0发送完成后触发准备接收数据 LD SM0.0 MOVB 0, SMB87; // 清除接收信息控制字节 ATCH INT_1, 23; // 当接收信息完成事件23发生时调用中断程序INT_1 RCV VB200, 0; // 从PORT0接收数据存到VB200开始的区域 // 中断程序INT_1接收数据完成后处理 LD SM0.0 // 检查接收数据帧的起始位和结束位 LDB VB200, 0xAA LDB VB201, 0xBB LDB VB206, 0xCC LDB VB207, 0xDD JMPN NEXT // 如果起始位或结束位不对跳转到NEXT // 校验CRC16 LDW AC0, 0 MOVW VW200, AC0 CALL CRC16 LDD AC0, VW204 JMPN NEXT // 如果CRC16校验不通过跳转到NEXT // 提取重量数据 // 假设重量数据在VB203 - VB204这里简单转换为整数 MOVB VB203, AC0 MOVB VB204, AC1 SLB AC1, 8 ORB AC0, AC1 MOVW AC1, VW300 // 将重量数据存到VW300 NEXT:发送完成中断程序INT0里先清除接收信息控制字节绑定接收完成中断事件开始接收数据。接收完成中断程序INT1里先检查接收数据帧的起始位和结束位再校验CRC16。如果都没问题就提取重量数据并进行简单转换存到指定寄存器VW300。总结通过以上程序西门子SMART200 PLC就能和天平称愉快地进行自由口通讯啦。在实际项目里还得注意通讯的稳定性和数据的准确性比如可以增加重发机制应对通讯故障多做几次数据校验保证数据可靠。希望这篇文章能给做类似项目的朋友一些帮助。西门子SMART200 PLC和and天平称自由口通讯程序。 通俗易懂注释多自己编写的实际项目应用的。

更多文章