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/