目录

一、基础信息

1.1、适用场景

1.2、变量类型

1.3、调用非本文函数

二、主要程序内容

2.1、头文件声明内容

2.2、子函数

三、使用示例

3.1、STM32的HAL库串口1发送响应数据

3.2、STC单片机串口1发送响应数据


一、基础信息

1.1、适用场景

C程序Modbus-RTU模式,主机发指令给从机,从机解码出错时,生成错误响应数据。

错误判断及响应数据参照GB-T19582.1-2008《基于Modbus协议的工业自动化网络规范 第1部分:Modbus应用协议》。

1.2、变量类型

uint8_t,为8位无符号整形变量;

uint16_t,为16位无符号整形变量。

1.3、调用非本文函数

ModbusCRC:

Modbus查表法CRC校验程序_VIFIN的博客-CSDN博客C程序编写Modbus查表法的CRC校验。https://blog.csdn.net/VIFIN/article/details/125788125

二、主要程序内容

2.1、头文件声明内容

enum ReadOrWriteRegisterErrorType    //读写寄存器错误类型
{FunctionCodeError = 1,            //错误功能码RegisterAddressError,            //寄存器地址错误RegisterNumberOrDataError,     //寄存器读取数量或写入值错误ReadOrWriteError,                //读写结果错误
};typedef enum
{Modbus_OK,                 //执行完成Modbus_ERROR,             //执行错误Modbus_NOP,                   //空操作
}ModbusResult_TypeDef;          //Modbus程序执行结果

2.2、子函数

/******************************************* 功能:Modbus错误时的响应数据* 输入:*       @error_type:错误类型*       @p_error_buffer:错误数据缓存的首指针地址*       @p_creat_buffer:生成的错误响应数据缓存的首指针地址*      @p_creat_size:生成错误响应数据字节长度的存放地址* 返回:Modbus函数执行结果
******************************************/
ModbusResult_TypeDef ModbusError(uint8_t error_type, uint8_t* p_error_buffer, uint8_t* p_creat_buffer, uint8_t* p_creat_size)
{uint16_t crc_buffer;*(p_creat_buffer + 0) = *(p_error_buffer + 0);                  //从机地址*(p_creat_buffer + 1) = *(p_error_buffer + 1) + 0x80;         //错误功能码*(p_creat_buffer + 2) = error_type;                                //错误类型crc_buffer = ModbusCRC(3, p_creat_buffer);                       //计算CRC*(p_creat_buffer + 3) = crc_buffer % 256;*(p_creat_buffer + 4) = crc_buffer / 256;*p_creat_size = 5;return Modbus_OK;
}

error_type:错误类型,根据错误类型,对应填写头文件定义的枚举“ ReadOrWriteRegisterErrorType”的对应内容。

p_error_buffer:错误数据缓存的首指针地址,一般填写串口接收缓存的数组名;

p_creat_buffer:生成的错误响应数据缓存的首指针地址,一般填写串口发送缓存的数组名;

p_creat_size:生成错误响应数据字节长度的存放地址,一般填写uint8_t类型的变量。

返回值:Modbus函数执行结果。

三、使用示例

示例:错误功能码函数及其参数的使用。

Receive_buffer:串口接收数据缓存的数组;

Transmit_buffer:串口发送数据缓存的数组;

Transmit_size:串口发送数据字节长度。

ModbusError(FunctionCodeError, Receive_buffer, Transmit_buffer, &Transmit_size);

3.1、STM32的HAL库串口1发送响应数据

HAL_UART_Transmit(&huart1, Transmit_buffer, Transmit_size, 5);

3.2、STC单片机串口1发送响应数据

STC单片机发送函数引用博客STC单片机串口无阻塞发送函数_VIFIN的博客-CSDN博客的串口无阻塞发送函数。

U1Transimt(Transmit_buffer,Transmit_size);

Modbus-RTU错误响应相关推荐

  1. readfile读取串口数据_西门子PLC-1200-串口Modbus RTU通讯实例

    西门子PLC-1200的基于232串口的Modbus RTU通讯实例 这里先讲一下Modbus和232,232和485串口是一种串口接法,这种接法实际能实现十几种的协议通讯,有基于串口的Modbus ...

  2. Modbus协议栈应用实例之二:Modbus RTU从站应用

    自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例.所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,这一篇中我们将使用协议栈实现一个Modbu ...

  3. MODBUS RTU协议

    转自:ModBus-RTU详解 Modbus 一个工业上常用的通讯协议.一种通讯约定.Modbus协议包括RTU.ASCII.TCP.其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现.虽 ...

  4. Modbus RTU笔记总结

    modbus RTU总结: Modbus是目前工业控制上最常用的通信协议,一般采用主从模式,一台主机对应一台从机或者一台主机对应多台从机.通信采用一发一收的方式进行通信.如果有多台从机,则采用轮询从机 ...

  5. modbus rtu 调试软件_一文最全解读Modbus 的RTU、ASCII、TCP

    导 读 ( 小库 ) 多年来没少调试施耐德PLC,因此Modbus-RTU.Modbus-TCP等协议都经常接触,但一直都没有认真总结一下,借这篇文章总结一下. 01 术语解读 1 word =2 b ...

  6. Matlab Simulink RS-485 Modbus RTU协议串口通信实录

    目录 一.目标实现 二.基本原理 三.过程实录 一.基本原理 一.目标实现 最近需要进行一个大型试验,需要实现:通过上位机来实时收集波高仪数据并经过一系列复杂算法来控制下位机(IO模块即继电器)从而控 ...

  7. Modbus RTU简介(上)

    1 前言 1.1 什麽是Modbus Modbus是一种用于工业控制的标准通信协议,它定义了装置之间在应用层的消息封装模式.沟通方法.沟通顺序. Modbus的优势 : Modbus协议是开源免费的 ...

  8. Modbus RTU协议说明

    目录 一.协议的基本特点 二.协议的报文说明 三.协议的错误说明 四.CRC校验说明 五.报文的格式 一.协议的基本特点 Modbus是施耐德电气于1979年为使用PLC通信而发表的一种串行通信协议. ...

  9. Modbus RTU 通信工具设计

    Modbus 是一个工业上常用的通讯协议.一种通讯约定. ModBus 协议是应用层报文传输协议(OSI 模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域. M ...

  10. modbus协议和串口服务器,Modbus RTU通信模式与Modbus ASCII通信模式的异同点

    Modbus基于串行通信存在两种模式:Modbus RTU与Modbus ASCII模式,不管是RTU模式还是ASCII模式,Modbus信息都以帧的方式传输,每个信息帧有确定的起始点和结束点,使接收 ...

最新文章

  1. mysql当前时间减1小时_最佳睡眠时间:晚上睡眠不超8小时,午睡不超1小时
  2. CCNP精粹系列之三十二--BGP下一跳问题,推荐
  3. 在指定的查找范围内获取DOM元素
  4. 给你一份长长长的 Spring Boot 知识清单(上)
  5. linux命令:mkdir 命令详解
  6. php移动代码,移动专区周级收录如何提交 复制这段php代码即可
  7. 取文字_把这4个字母输入word,会得到一段神秘文字,承载着一段历史
  8. win7开机动画_如果看腻了win7的启动界面,教你一招让你的win7启动与众不同
  9. 如何实现把固定内容自动写入excel_Excel批量查找指定内容并导出
  10. 日志,错误日志,成功日志,日志是个好东西。
  11. 使用pytesseract识别简单验证码
  12. Npm 恶意包试图窃取 Discord 敏感信息和浏览器文件
  13. OpenCV之分离和合并颜色通道
  14. 如何把一个本地jar包发布到服务器上?
  15. 从零开始学数据库-MySQL
  16. C语言把csv文件转xls,Excel怎么批量将CSV格式转换为xlsx或xls格式?VBA、宏、软件?...
  17. 我的世界服务器无限重启怎么办,iPhoneX无限重启怎么办?iPhoneX无限重启解决一览...
  18. 电脑常用快捷键【按使用场景分类】-Windows
  19. System.DllNotFoundException: Unable to load DLL 'XX.dll': 找不到指定的模块。 (Exception from HRESULT:
  20. 【CET4四级英语】【单词】英语四级高频词汇(1)

热门文章

  1. macbook更新系统服务器,苹果电脑如何升级系统_苹果电脑怎么更新版本-win7之家...
  2. 《你的灯亮着吗?》 读后感
  3. Android Studio4.0解决Gradle下载超时问题
  4. Java安全生态-Java加解密API详解-Java安全框架官方文档翻译:对称/非对称加密、数字签名、数字证书、安全通信、密钥库等
  5. Hessian matrix黑塞矩阵(海森矩阵)和雅克比矩阵Jacobian matrix
  6. Android 增量编译小解
  7. 什么软件可以在给多个视频添加马赛克同时批量裁剪画面呢?
  8. java snmp walk,snmpwalk命令常用方法总结(转)
  9. grads插值_grads各类参数设置.pptx
  10. jspstudy oracle,tomcat出错,大神们来看看呐