freeModbus移植

Modbus協(xié)議分析


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

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

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

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

Modbus RTU

Modbus ASCII

Modbus TCP

代碼移植

port.c文件

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

  • 方式一
#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) // 開啟總中斷

代碼實(shí)測(cè)

由于移植的是modbus從站程序,需要使用modbus poll工具進(jìn)行測(cè)試,首先我們需要配置通信的接口,這里使用的是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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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