freeModbus移植

Modbus協(xié)議分析


Modbus是一種總線協(xié)議,主要用于工業(yè)領(lǐng)域的簡單協(xié)議。主要有如下優(yōu)點,無版權(quán)要求,易于部署和維護,修改沒有很多限制。

Modbus有以下主要方式:
協(xié)議類型
Modbus RTU
Modbus ASCII
Modbus TCP
Modbus Plus

Modbus是主從方式通信,不能同步進行通信,總線上每次只有一個數(shù)據(jù)進行傳輸,即主機發(fā)送,從機應(yīng)答;主機不發(fā)送,總線上就沒有數(shù)據(jù)通信。

對于我們的網(wǎng)關(guān)系統(tǒng)來說,主要使用Modbus RTU/TCP兩種協(xié)議。下面對常用的Modbus RTU/ASCII/TCP三種協(xié)議進行簡要的介紹。

Modbus RTU

Modbus ASCII

Modbus TCP

代碼移植

port.c文件

禁用和開啟中斷有兩種方式,但__set_PRIMASK(1)__set_PRIMASK(0)是一個更底層的操作,直接操作處理器寄存器;而__disable_irq()__enable_irq()是一個更高層次的CMSIS函數(shù),它調(diào)用了__set_PRIMASK(1)__set_PRIMASK(0)。在大多數(shù)情況下,使用__disable_irq()__enable_irq()更容易理解和維護,因為它是一個標準函數(shù),而且代碼可讀性更強。

  • 方式一
#define ENTER_CRITICAL_SECTION( )  ( __disable_irq()) /*禁用全部中斷*/      
#define EXIT_CRITICAL_SECTION( )   ( __enable_irq() ) /*開啟全部中斷*/  
  • 方式二
#define ENTER_CRITICAL_SECTION( )  __set_PRIMASK(1) // 關(guān)閉總中斷
#define EXIT_CRITICAL_SECTION( )   __set_PRIMASK(0) // 開啟總中斷

代碼實測

由于移植的是modbus從站程序,需要使用modbus poll工具進行測試,首先我們需要配置通信的接口,這里使用的是COM3口,配置圖如下。

參考博客

https://www.cnblogs.com/ppqppl/articles/17001861.html
https://www.ixigua.com/home/76094120606/video/?preActiveKey=hotsoon&list_entrance=userdetail
https://blog.csdn.net/qq_42680253/article/details/101022511
https://blog.csdn.net/Danieldexter/article/details/113472183
http://forum.eepw.com.cn/thread/309145/1/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容