18岁禁入:青春的界限,成长的仪式

核心内容摘要

《Loveme枫与铃》的温柔结局:爱与成长,永不落幕的乐章
刷屏朋友圈的“挨妻自拍”:人到中年,最硬核的秀恩爱是这三个字

解锁少女的曼妙姿态:探索“小伸”的无限可能

Modbus RTUS

主站 485通讯主站程序端口0作主站

西门子1200485通讯板TIA Portal V14 SP1。

采用modbus rtu协议

支持16#03和16#06功能码

使用SEND_PTP和RCV_PTP指令开发

具有重试2次的通讯功能重试次数可修改

含有16位CRC计算。

在工业自动化领域Modbus RTU协议的485通讯应用广泛。

今天就来聊聊基于西门子1200 485通讯板使用TIA Portal V14 SP1开发Modbus RTU主站程序的那些事儿。

开发环境与协议基础本次开发基于西门子1200 PLC搭配485通讯板软件平台为TIA Portal V14 SP1采用Modbus RTU协议。

Modbus RTU协议以其简单可靠在工业现场设备通讯中备受青睐。

我们的程序需要支持16#03读取保持寄存器和16#06写单个保持寄存器这两个常用功能码。

指令选择 - SEND_PTP和RCV_PTP在TIA Portal中我们选用SENDPTP和RCVPTP指令来进行数据的发送与接收。

这两个指令对于串口通讯的控制十分便捷。

比如发送数据的SEND_PTP指令使用示例代码如下SEND_PTP( EN : TRUE, // 使能发送 PORT : COM1, // 端口0作主站这里假设端口名称为COM1 REQ : rising_edge, // 上升沿触发发送 DATA : P#DB

DBX

0 BYTE 10, // 要发送的数据这里假设数据存储在DB1中长度为10字节 DONE done_flag, // 发送完成标志 ERROR error_flag // 错误标志 );代码分析通过使能EN为TRUE开启发送功能在REQ的上升沿触发数据发送PORT指定使用的通讯端口DATA指明要发送的数据块及长度。

发送完成后doneflag置1若出现错误errorflag置1。

Modbus RTUS

主站 485通讯主站程序端口0作主站

西门子1200485通讯板TIA Portal V14 SP1。

采用modbus rtu协议

支持16#03和16#06功能码

使用SEND_PTP和RCV_PTP指令开发

具有重试2次的通讯功能重试次数可修改

含有16位CRC计算。

接收数据的RCV_PTP指令代码示例RCV_PTP( EN : TRUE, // 使能接收 PORT : COM1, // 同样是端口0 NDR ndr_flag, // 新数据接收标志 DATA : P#DB

DBX

0 BYTE 20, // 接收数据存储位置假设存储在DB2长度20字节 LEN received_length, // 实际接收到的数据长度 ERROR error_flag // 错误标志 );代码分析EN使能接收当接收到新数据时ndrflag置1接收到的数据存储在指定的DATA区域receivedlength记录实际接收长度error_flag用于判断接收是否出错。

重试机制为了保证通讯的可靠性程序设计了重试2次的通讯功能并且重试次数可灵活修改。

以下是简单的实现思路代码片段retry_count : 0; send_data: SEND_PTP(EN : TRUE, PORT : COM1, REQ : rising_edge, DATA : data_to_send, DONE done_flag, ERROR error_flag); IF done_flag THEN // 发送成功处理接收数据等后续操作 ELSEIF error_flag AND retry_count 2 THEN retry_count : retry_count 1; GOTO send_data; // 重试发送 ELSE // 重试次数用尽仍失败处理错误 END_IF;代码分析初始重试次数retry_count为0每次发送失败且重试次数小于2时重试次数加1并重新执行发送操作直到发送成功或者重试次数用尽。

16位CRC计算Modbus RTU协议中CRC校验必不可少。

下面是一个简单的16位CRC计算函数代码以ST语言为例FUNCTION CRC16 : WORD VAR_INPUT data : ARRAY[

.255] OF BYTE; // 要计算CRC的数据数组 length : INT; // 数据长度 END_VAR VAR crc : WORD : 16#FFFF; i, j : INT; BEGIN FOR i : 0 TO length - 1 DO crc : crc XOR data[i]; FOR j : 0 TO 7 DO IF crc AND 1 THEN crc : (crc

XOR 16#A001; ELSE crc : crc 1; END_IF; END_FOR; END_FOR; CRC16 : crc; END_FUNCTION代码分析首先初始化CRC值为16#FFFF然后对数据数组中的每一个字节进行异或运算再对每一位进行移位和特定条件下的异或操作最终得到计算好的CRC值。

通过以上几个关键部分的设计与实现基于S7 - 1200的Modbus RTU 485通讯主站程序就能较为稳定可靠地运行啦实现与从站设备基于16#03和16#06功能码的高效通讯。

母亲和儿子免费观看电视剧官方版-母亲和儿子免费观看电视剧官方版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123