FreeModbus串行传输初始化
先看一下初始化函数,参数包括传输模式、从机地址、端口号、波特率和奇偶校验。从函数大概能够猜到,初始化内容:选择传输模式,设置从机地址,配置串口。
/* 初始化Modbus协议栈 */
eMBErrorCode eMBInit(eMBMode eMode, UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity);
先了解一下modbus的地址规则
所以,从机地址必须在1~247之间
在485总线上使用Modbus协议,有两种主要方式:RTU ASCII。在使用过程中,只能选择其中一种传输模式。
Modbus RTU初始化,大概内容包括:串口初始化、超时定时器初始化
/* modbus rtu初始化 */
eMBErrorCode eMBRTUInit(UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity)
{eMBErrorCode eStatus = MB_ENOERR;ULONG usTimerT35_50us;(void)ucSlaveAddress;ENTER_CRITICAL_SECTION();/* 串口初始化,失败 */if(xMBPortSerialInit(ucPort, ulBaudRate, 8, eParity) != TRUE){/* 端口层错误 */eStatus = MB_EPORTERR;}/* 初始化成功 */else{/* 波特率大于19200 */if(ulBaudRate > 19200){/* 超时时间为35*50=1050us */usTimerT35_50us = 35;}/* 波特率小于等于19200 */else{/* 3.5帧为超时时间 */usTimerT35_50us = (7UL * 220000UL) / (2UL * ulBaudRate);}/* 超时定时器初始化 */if(xMBPortTimersInit((USHORT)usTimerT35_50us) != TRUE){/* 端口层错误 */eStatus = MB_EPORTERR;}}EXIT_CRITICAL_SECTION();return eStatus;
}
特别要注意的是,串口数据位固定为8位,超时时间固定为3.5帧。这两个参数是modbus规定死的。
Modbus ASCII初始化,大概内容包括:串口初始化、超时定时器初始化
/* modbus ascii初始化 */
eMBErrorCode eMBASCIIInit(UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity)
{eMBErrorCode eStatus = MB_ENOERR;(void)ucSlaveAddress;ENTER_CRITICAL_SECTION();ucMBLFCharacter = MB_ASCII_DEFAULT_LF;/* 串口初始化,失败 */if(xMBPortSerialInit(ucPort, ulBaudRate, 7, eParity) != TRUE){/* 端口层错误 */eStatus = MB_EPORTERR;}/* 超时定时器初始化,超时时间1秒 */else if(xMBPortTimersInit(MB_ASCII_TIMEOUT_SEC * 20000UL) != TRUE){/* 端口层错误 */eStatus = MB_EPORTERR;}EXIT_CRITICAL_SECTION();return eStatus;
}
特别要注意的是,串口数据位固定为7位,超时时间固定为1秒。这两个参数是modbus规定死的。
FreeModbus串行传输初始化相关推荐
- 手把手教你移植FreeModbus到STM32【看评论区引导,领取全套资料包】
为什么要移植freemodbus 大家好,近期由于一个小项目的需要,要用到Modbus协议进行通信.相信各位工作的小伙伴们,或多或少都要跟Modbus打交道吧.那么,Modbus协议的重要性我自不必多 ...
- FreeModbus移植到STM32F103(串行传输方式)
1.创建工程 2.将FreeModbus源码,拷贝到工程目录 3.将FreeModbus文件添加进工程 添加好之后,编译出现错误 4.移植底层接口 先看第一个错误,缺少port.h 借鉴AVR架构的程 ...
- FreeModbus TCP传输初始化
先看一下初始化函数,参数只有端口. /* modbus协议栈初始化 */ eMBErrorCode eMBTCPInit(USHORT ucTCPPort); 在网络通信过程中,502端口是专门为mo ...
- 8、ARM嵌入式系统:UART初始化
一.UART概述 百度上UART的定义:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.它将要传输的资料在串行通信与并行 ...
- FreeModbus源码结构分析
FreeModbus 官网 目录结构 [demo]-各种平台的例程 [doc]-文档资料 [modbus]-核心源码 [tools]-相关工具 FreeModus的移植主要用到-\modbus目录和 ...
- uip+freemodbus网络通信
前言: TCP/IP协议通过uip协议栈来实现,应用层的modbus协议使用freemodbus来实现,另外还需要一个网卡(笔者使用的是KSZ8851网卡控制器)来实现底层的数据传输(包括物理层.数据 ...
- FreeModbus
example1 FreeModbus最简单使用 A typical application will want to call eMBInit() first. If the deviceis re ...
- Rtthread学习笔记(十八)RT-Thread Studio添加freemodbus主机和从机
有些项目需要同时既做主机读取传感从机器的数据,然后再做从机整合数据与上层主控单元进行通讯,这时候就需要程序中即存在主机,又存在从机.这里就做下测试,主机用串口2,从机用串口3,分别与对应的上位机通讯, ...
- freemodbus多从机支持
MODBUS文件包含 callback.modbus.port. callback文件下有回调函数文件夹 mbcallback.c #include "mb.h"#include ...
最新文章
- Ubuntu 软件安装
- CocoaPod 使用之后知后觉
- java高级工程师开放面试题集一
- python实现货币转换
- 日志规范之slf4j整合JDK14以及Simple的使用
- 回到顶部和回到底部动画
- Mysql 常用show命令
- cordova APP 检查更新
- pg注释某一段语句不执行_@Autowired的使用:推荐对构造函数进行注释
- 从SQL到NoSQL—如何使用表格存储
- Atitit 网盘使用法 艾提拉著 目录 1. 需要解决几个问题	2 1.1. 多关键词搜索的问题 使用every索引解决	2 1.2. 重要文具类索引使用分类索引 日志 crm类增加000前缀
- Matlab数据可视化编程总结
- 中兴B860AV2.1-T刷机教程加固件
- js实现数字转换大写金额
- VMware vSphere Hypervisor 7.0 U1 下载(ESXi)
- 视频中的音频采样率就这样快速修改
- 标梵分析SEM竞价托管的选择方式
- 计算机游戏如何产生娱乐效果,浅谈电脑游戏与信息技术教学
- AVD安卓模拟器黑屏
- 【C++】C++调用Python