MODBUS学习篇四------freemodbus的移植(rt-thread系统)

本文详细介绍了FreeModbus在嵌入式系统中的应用,特别是其在RT-Thread操作系统上的移植过程。FreeModbus是一个免费的Modbus协议实现,适合用于从机功能的嵌入式系统。移植时需要修改物理层接口文件portserial.c和porttimer.c,以及应用层的回函数,以适配不同的串行接口和超时定时器。同时,文章还概述了FreeModbus的初始化、运行流程和状态机管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 一.FreeModbus简介

FreeMODBUS一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植。Modbus是一个工业制造环境中应用的一个通用协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层是网络层。

FreeMODBUS 提供了RTU/ASCII 传输模式及TCP协议支持。FreeModbus遵循BSD许可证,这意味着用户可以将FreeModbus应用于商业环境中。目前版本FreeModbus-V1.5提供如下的功能支持:

                 注意:freemodbus只能使用从机功能。freemodbus更适合嵌入式系统

  • 二.FreeModbus对硬件的需求
     

    FreeModbus协议对硬件的需求非常少——基本上任何具有串行接口,并且有一些能够容纳modbus数据帧的RAM的微控制器都足够了

  • (1)一个异步串行接口,能够支持接收缓冲区满和发送缓存区空中断

  • (2)一个能够产生RTU传输所需要的t3.5字符超时定时器的时钟。

  • (3)对于软件部分,仅仅需要一个简单的事件队列。

  • (4)在使用操作系统的处理器上,可通过单独定义一个任务完成Modbus时间的查询。

  • (5)小点的微控制器往往不允许使用操作系统,在那种情况下,可以使用一个全局变量来实现该事件队列(Atmel AVR 移植使用这种方式实现)。

  • (6)实际的存储器需求决定于所使用的Modbus模块的多少

  • 下表列出了所支持的功能编译后所需要的存储器。(ARM是使用GNUARM编译器3.4.4使用-O1选项得到的。AVR项数值是使用WinAVR编译器3.4.5使用-Os选项编译得到的)

  • 实际大小决定于可支持的Modbus功能码的多少。功能码可以在头文件mbconfig.h中进行配置

  • 决定于硬件

  • 三.FreeModbus的移植

  • 物理层接口文件的修改

  • 在物理层,用户只需完成串行口及超时定时器的配置即可。具体应修改接口文件portserial.cporttimer.c

  • portserial.c中函数的修改

  •      1.void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
    •      (1) 此函数的功能为设置串口状态。有两个参数:xRxEnablexTxEnable。当xRxEnable为真时,应使能串口接收及接收中断

    •       (2)在RS485通讯系统中,还要注意将RS485接口芯片设为接收使能状态;当xTxEnable为真时,应使能串口发送及发送中断

    •       (3)在RS485通讯系统中,还要注意将RS485接口芯片设为发送使能状态

  •       2.void vMBPortClose( void )
    •          此函数的功能是关闭Modbus通讯端口,具体的,应在此函数中关闭通讯端口的发送使能及接收使能

  •       3.BOOL xMBPortSerialInit(UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity)
    •          此函数的功能是初始化串行通讯端口。有四个参数:ucPORTulBaudRateucDataBitseParity
    •          (1)  参数ucPORT可以忽略;
    •          (2)参数ulBaudRate是通讯端口的波特率,应根据此数值设置所使用硬件端口的波特率
    •          (3)参数ucDataBits为通讯时所使用的数据位宽,注意,若使用RTU模式,则有ucDataBits=8,若使用ASCII模式,则有ucDataBits=7,应根据此参数设置所使用硬件端口的数据位宽
    •          (4)eParity为校验方式eParity=MB_PAR_NONE为无校验,此时硬件端口应设置为无校验方式及两个停止位eParity=MB_PAR_ODD为奇校验,此时硬件端口应设置为奇校验方式及一个停止位eParity= MB_PAR_EVEN为偶校验,
    •              此时硬件端口应设置为偶校验方式及一个停止位。函数返回值务必为TRUE
  •        4.BOOL xMBPortSerialPutByte(CHAR ucByte)
    •              此函数的功能为通讯端口发送一字节数据。参数为:ucByte,待发送的数据。应在此函数中编写发送一字节数据的函数。注意,由于使用的是中断发送,故只需将数据放到发送寄存器即可。函数返回值务必为TRUE

  •        5
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小路科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值