打印

FreeModbus简介

[复制链接]
1711|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
engao|  楼主 | 2016-11-21 23:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
FreeMODBUS一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植。Modbus是一个工业制造环境中应用的一个通用协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层是网络层。
沙发
engao|  楼主 | 2016-11-21 23:11 | 只看该作者
reeMODBUS 提供了RTU/ASCII 传输模式及TCP协议支持。FreeModbus遵循BSD许可证,这意味着用户可以将FreeModbus应用于商业环境中。目前版本FreeModbus-V1.5提供如下的功能支持:

使用特权

评论回复
板凳
电子信使| | 2016-11-21 23:12 | 只看该作者
FreeModbus-V1.5功能支持

360截图20161121231256343.jpg (197.4 KB )

360截图20161121231256343.jpg

使用特权

评论回复
地板
engao|  楼主 | 2016-11-21 23:12 | 只看该作者
FreeModbus协议对硬件的需求非常少——基本上任何具有串行接口,并且有一些能够容纳modbus数据帧的RAM的微控制器都足够了。
        一个异步串行接口,能够支持接收缓冲区满和发送缓存区空中断。
        一个能够产生RTU传输所需要的t3.5字符超时定时器的时钟。

使用特权

评论回复
5
电子信使| | 2016-11-21 23:12 | 只看该作者
对于软件部分,仅仅需要一个简单的事件队列。在使用操作系统的处理器上,可通过单独定义一个任务完成Modbus时间的查询。小点的微控制器往往不允许使用操作系统,在那种情况下,可以使用一个全局变量来实现该事件队列(Atmel AVR 移植使用这种方式实现)。

使用特权

评论回复
6
engao|  楼主 | 2016-11-21 23:13 | 只看该作者
实际的存储器需求决定于所使用的Modbus模块的多少。下表列出了所支持的功能编译后所需要的存储器。ARM是使用GNUARM编译器3.4.4使用-O1选项得到的。AVR项数值是使用WinAVR编译器3.4.5使用-Os选项编译得到的。

使用特权

评论回复
7
heping517| | 2016-11-21 23:14 | 只看该作者
在物理层,用户只需完成串行口及超时定时器的配置即可。具体应修改接口文件portserial.c及porttimer.c。

使用特权

评论回复
8
电子信使| | 2016-11-21 23:14 | 只看该作者
1)        void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
此函数的功能为设置串口状态。有两个参数:xRxEnable及xTxEnable。当xRxEnable为真时,应使能串口接收及接收中断。在RS485通讯系统中,还要注意将RS485接口芯片设为接收使能状态;当xTxEnable为真时,应使能串口发送及发送中断。在RS485通讯系统中,还要注意将RS485接口芯片设为发送使能状态。

使用特权

评论回复
9
电子信使| | 2016-11-21 23:15 | 只看该作者
2)        void vMBPortClose( void )
此函数的功能是关闭Modbus通讯端口,具体的,应在此函数中关闭通讯端口的发送使能及接收使能。

使用特权

评论回复
10
电子信使| | 2016-11-21 23:15 | 只看该作者
3)        BOOL xMBPortSerialInit(UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity)
此函数的功能是初始化串行通讯端口。有四个参数:ucPORT、ulBaudRate、ucDataBits及eParity。参数ucPORT可以忽略;参数ulBaudRate是通讯端口的波特率,应根据此数值设置所使用硬件端口的波特率;参数ucDataBits为通讯时所使用的数据位宽,注意,若使用RTU模式,则有ucDataBits=8,若使用ASCII模式,则有ucDataBits=7,应根据此参数设置所使用硬件端口的数据位宽;eParity为校验方式,eParity=MB_PAR_NONE为无校验,此时硬件端口应设置为无校验方式及两个停止位,eParity=MB_PAR_ODD为奇校验,此时硬件端口应设置为奇校验方式及一个停止位,eParity= MB_PAR_EVEN为偶校验,此时硬件端口应设置为偶校验方式及一个停止位。函数返回值务必为TRUE。

使用特权

评论回复
11
电子信使| | 2016-11-21 23:16 | 只看该作者
4)        BOOL xMBPortSerialPutByte(CHAR ucByte)
此函数的功能为通讯端口发送一字节数据。参数为:ucByte,待发送的数据。应在此函数中编写发送一字节数据的函数。注意,由于使用的是中断发送,故只需将数据放到发送寄存器即可。函数返回值务必为TRUE。

使用特权

评论回复
12
电子信使| | 2016-11-21 23:17 | 只看该作者
5)        BOOL xMBPortSerialGetByte( CHAR * pucByte )
此函数的功能为通讯端口接收一字节数据。参数为:* pucByte,接收到的数据。应在此函数中编写接收的函数。注意,由于使用的是中断接收,故只需将接收寄存器的值放到* pucByte即可。函数返回值务必为TRUE。

使用特权

评论回复
13
电子信使| | 2016-11-21 23:17 | 只看该作者
6)        void prvvUARTTxReadyISR(void)
发送中断函数。此函数无需修改。只需在用户的发送中断函数中调用此函数即可,同时,用户应在调用此函数后,清除发送中断标志位。

使用特权

评论回复
14
电子信使| | 2016-11-21 23:18 | 只看该作者
7)        void prvvUARTRxISR(void)
发送中断函数。此函数无需修改。只需在用户的接收中断函数中调用此函数即可,同时,用户应在调用此函数后,清除接收中断标志位。

使用特权

评论回复
15
heping517| | 2016-11-21 23:19 | 只看该作者
BOOL xMBPortTimersInit( USHORT usTim1Timerout50us )
此函数的功能为初始化超时定时器。参数为:usTim1Timerout50us,50us的个数。用户应根据所使用的硬件初始化超时定时器,使之能产生中断时间为usTim1Timerout50us*50us的中断。函数返回值务必为TRUE。

使用特权

评论回复
16
heping517| | 2016-11-21 23:19 | 只看该作者
void vMBPortTimersEnable(  )
此函数的功能为使能超时定时器。用户需在此函数中清除中断标志位、清零定时器计数值,并重新使能定时器中断。

使用特权

评论回复
17
heping517| | 2016-11-21 23:20 | 只看该作者
void vMBPortTimersDisable(  )
此函数的功能为关闭超时定时器。用户需在此函数中清零定时器计数值,并关闭定时器中断。

使用特权

评论回复
18
heping517| | 2016-11-21 23:21 | 只看该作者
void TIMERExpiredISR( void )
定时器中断函数。此函数无需修改。只需在用户的定时器中断中调用此函数即可,同时,用户应在调用此函数后清除中断标志位。

使用特权

评论回复
19
baimiaocun2015| | 2016-11-27 21:13 | 只看该作者
Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层是网络层。这个我了解的还不够深入的。

使用特权

评论回复
20
quangg| | 2016-11-27 22:13 | 只看该作者
这个软件包不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

400

帖子

0

粉丝