先看一下初始化函数,参数包括传输模式、从机地址、端口号、波特率和奇偶校验。从函数大概能够猜到,初始化内容:选择传输模式,设置从机地址,配置串口。

/* 初始化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串行传输初始化相关推荐

  1. 手把手教你移植FreeModbus到STM32【看评论区引导,领取全套资料包】

    为什么要移植freemodbus 大家好,近期由于一个小项目的需要,要用到Modbus协议进行通信.相信各位工作的小伙伴们,或多或少都要跟Modbus打交道吧.那么,Modbus协议的重要性我自不必多 ...

  2. FreeModbus移植到STM32F103(串行传输方式)

    1.创建工程 2.将FreeModbus源码,拷贝到工程目录 3.将FreeModbus文件添加进工程 添加好之后,编译出现错误 4.移植底层接口 先看第一个错误,缺少port.h 借鉴AVR架构的程 ...

  3. FreeModbus TCP传输初始化

    先看一下初始化函数,参数只有端口. /* modbus协议栈初始化 */ eMBErrorCode eMBTCPInit(USHORT ucTCPPort); 在网络通信过程中,502端口是专门为mo ...

  4. 8、ARM嵌入式系统:UART初始化

    一.UART概述 百度上UART的定义:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.它将要传输的资料在串行通信与并行 ...

  5. FreeModbus源码结构分析

    FreeModbus 官网 目录结构 [demo]-各种平台的例程 [doc]-文档资料 [modbus]-核心源码 [tools]-相关工具 FreeModus的移植主要用到-\modbus目录和 ...

  6. uip+freemodbus网络通信

    前言: TCP/IP协议通过uip协议栈来实现,应用层的modbus协议使用freemodbus来实现,另外还需要一个网卡(笔者使用的是KSZ8851网卡控制器)来实现底层的数据传输(包括物理层.数据 ...

  7. FreeModbus

    example1 FreeModbus最简单使用 A typical application will want to call eMBInit() first. If the deviceis re ...

  8. Rtthread学习笔记(十八)RT-Thread Studio添加freemodbus主机和从机

    有些项目需要同时既做主机读取传感从机器的数据,然后再做从机整合数据与上层主控单元进行通讯,这时候就需要程序中即存在主机,又存在从机.这里就做下测试,主机用串口2,从机用串口3,分别与对应的上位机通讯, ...

  9. freemodbus多从机支持

    MODBUS文件包含 callback.modbus.port. callback文件下有回调函数文件夹 mbcallback.c #include "mb.h"#include ...

最新文章

  1. Ubuntu 软件安装
  2. CocoaPod 使用之后知后觉
  3. java高级工程师开放面试题集一
  4. python实现货币转换
  5. 日志规范之slf4j整合JDK14以及Simple的使用
  6. 回到顶部和回到底部动画
  7. Mysql 常用show命令
  8. cordova APP 检查更新
  9. pg注释某一段语句不执行_@Autowired的使用:推荐对构造函数进行注释
  10. 从SQL到NoSQL—如何使用表格存储
  11. Atitit 网盘使用法 艾提拉著 目录 1. 需要解决几个问题 2 1.1. 多关键词搜索的问题 使用every索引解决 2 1.2. 重要文具类索引使用分类索引 日志 crm类增加000前缀
  12. Matlab数据可视化编程总结
  13. 中兴B860AV2.1-T刷机教程加固件
  14. js实现数字转换大写金额
  15. VMware vSphere Hypervisor 7.0 U1 下载(ESXi)
  16. 视频中的音频采样率就这样快速修改
  17. 标梵分析SEM竞价托管的选择方式
  18. 计算机游戏如何产生娱乐效果,浅谈电脑游戏与信息技术教学
  19. AVD安卓模拟器黑屏
  20. 【C++】C++调用Python

热门文章

  1. Java高级语法笔记-内部类
  2. 虚拟机非正常关闭 无法打开
  3. oracle分区存储过程示例,Oracle 存储过程示例
  4. ai合成迪丽热巴下海_丽热巴被富家哥求婚,男方坚持示爱九个月,当众下跪赠女方豪车...
  5. C语言指针操作字符数组demo
  6. numpy genfromtxt 读取字符_numpy组队学习1: 输入输出
  7. 【C语言笔记初级篇】第六章:指针入门
  8. 6-3-1:STL之vector——vector的快速入门、常用接口
  9. Linux《命令行大全》——前言
  10. Linux Socket poll