FreeModbus:移植

  FreeModBus是一款免费开源的modbus协议栈,支持 ModBus RTU/ASCII、Modbus TCP从机。

  一下简要分析FreeModbus的移植方法。以FreeModBus-v1.6为例。

  1.FreeModBus文件结构

   

    modbus文件夹就是freemodbus的源代码,内容如下

    

   ascii:modbus ASCII 协议相关源码,不适用 ASCII协议,移植的时候可以不包含;

  rtu:modbus RTU协议相关源码,不适用RTU协议,移植的时候可以不包含;

  tcp:modbus tcp协议相关源码,不适用tcp协议,移植的时候可以不包含;

  function文件夹内容如下:

  

   mbfunccoils.c:线圈读写源码

  mbfuncdisc.c:读离散寄存器源码

  mbfuncholding.c:读写保持寄存器源码

  mbfuncinput.c:读写输入寄存器源码

  mbutils.c:连续位的操作函数
  mbfuncother.c:其他源码,例如设置从机地址、报告地址等。

  include文件夹是相应的头文件。

  

   demo文件夹下是不同平台下的移植文件,具体要求包含以下几个文件夹:

  

 

 

  2. 移植接口

  port.h 文件夹:重点实现以下两个临界区管理函数,使用RTOS的情况下,可以直接采用系统的函数。

    #define ENTER_CRITICAL_SECTION( )     EnterCriticalSection( )
    #define EXIT_CRITICAL_SECTION( )         ExitCriticalSection( )

   portevent.c文件夹:实现事件发送和接收的函数,使用RTOS的情况下,可以直接采用系统的事件管理函数。

     BOOL xMBPortEventInit( void )

     BOOL xMBPortEventPost( eMBEventType eEvent )

     BOOL xMBPortEventGet( eMBEventType * eEvent )

  porttimer.c文件夹:实现定时器的初始化、打开、关闭,以及中断处理函数,并在中断处理函数中调用 ( void )pxMBPortCBTimerExpired(  );该函数主要是对接收的一帧数据进行处理。

  注:modbus帧结束的方法是2.5个字节事件内没有接收到任何数据,并触发定时器超时中断。

    BOOL xMBPortTimersInit( USHORT usTim1Timerout50us )

    void vMBPortTimersEnable(  )

    void vMBPortTimersDisable(  )

  portserial.c文件夹:完成串口初始化函数、串口收发中断使能(协议栈开启发送缓冲区空中断后,软件会自动进入中断函数进行数据发送)、串口接收字节函数、串口发送字节函数、串口发送缓冲区空中断(中断中调用pxMBFrameCBTransmitterEmpty(  );函数,协议栈会在中断中发送一个新的字节)、串口接收中断(中断中调用pxMBFrameCBByteReceived(  );函数,协议栈会在中断中接收一个char数据)

    void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )

    BOOL xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity )

    BOOL xMBPortSerialPutByte( CHAR ucByte )

    BOOL xMBPortSerialGetByte( CHAR * pucByte )

posted @ 2021-08-12 20:58  Ivan0512  阅读(1158)  评论(0)    收藏  举报