-
您的位置:
- 網(wǎng)站首頁(yè)
- > 物聯(lián)百科
- > 技術(shù)問(wèn)答
您的位置:
在這次的實(shí)例中,我們使用的目標(biāo)板擁有一個(gè)以太網(wǎng)接口、一個(gè)RS232串行接口和一個(gè)RS485串行接口,所以我們規(guī)劃實(shí)現(xiàn):
一個(gè)Modbus TCP Server實(shí)例
一個(gè)Modbus RTU Slave實(shí)例
一個(gè)Modbus RTU Master實(shí)例
這三個(gè)實(shí)例并不是獨(dú)立的,Modbus TCP Server和Modbus RTU Slave它們實(shí)現(xiàn)的實(shí)際上是同一站點(diǎn),就是本地從站,擁有共同的數(shù)據(jù)處理回調(diào)函數(shù),所不同的只是它們的 協(xié)議解析及報(bào)文生成的方式是不同的。Modbus RTU Master原則上來(lái)說(shuō)與本地從站是沒(méi)有關(guān)系的,但為了便于查看數(shù)據(jù),我們將它從遠(yuǎn)程從站獲取的的數(shù)據(jù)存放到本地從站的數(shù)據(jù)表,這樣我們就可以從上位機(jī)上看到遠(yuǎn)程從站的數(shù)據(jù)。據(jù)此我們?cè)O(shè)計(jì)軟件訪問(wèn)的結(jié)構(gòu)圖如下:
在這個(gè)例子中,我們?cè)赟TM32F407平臺(tái)上采用同一協(xié)議棧實(shí)現(xiàn)基于以太網(wǎng)口的Modbus TCP Server;基于RS232串口的Modbus RTU Slave以及基于RS485串口的Modbus RTU Master。就是說(shuō)我們?cè)谕粋€(gè)項(xiàng)目中,同時(shí)實(shí)現(xiàn)了這三個(gè)實(shí)例以說(shuō)明協(xié)議棧的使用方法。
在我們的目標(biāo)平臺(tái)上有一個(gè)以太網(wǎng)口,我們將其設(shè)計(jì)為Modbus TCP Server的接口。我們?cè)O(shè)計(jì)一下Modbus TCP Server的數(shù)據(jù)表,首先是本地?cái)?shù)據(jù),我們?cè)O(shè)計(jì)使用8個(gè)保持寄存器和8個(gè)線圈量。這些量中,我們特意設(shè)計(jì)其屬性既有只讀的數(shù)據(jù),又有可讀可寫的數(shù)據(jù)。同時(shí)將其數(shù)據(jù)類型設(shè)定有單精度浮點(diǎn)數(shù)、32位無(wú)符號(hào)整數(shù)、16位無(wú)符號(hào)整數(shù)以及布爾量。這樣我們就可以展示協(xié)議在不同數(shù)據(jù)模式及屬性上的操作。
1 uint32_t beatTime 心跳檢測(cè) 40001 只讀 2 float mbAI1 模擬量測(cè)試 40003 只讀 3 float mbAO1 模擬量測(cè)試 40005 讀寫 4 uint16_t mbAI2 模擬量測(cè)試 40007 只讀 5 uint16_t mbAO2 模擬量測(cè)試 40008 讀寫 1 bool mbDI1 數(shù)字量輸入?yún)?shù)1 1 只讀 2 bool mbDI2 數(shù)字量輸入?yún)?shù)2 2 只讀 3 bool mbDI3 數(shù)字量輸入?yún)?shù)3 3 只讀 4 bool mbDI4 數(shù)字量輸入?yún)?shù)4 4 只讀 5 bool mbDO1 數(shù)字量輸出參數(shù)1 5 讀寫 6 bool mbDO2 數(shù)字量輸出參數(shù)2 6 讀寫 7 bool mbDO3 數(shù)字量輸出參數(shù)3 7 讀寫 8 bool mbDO4 數(shù)字量輸出參數(shù)4 8 讀寫
除了上述這些參數(shù)外,我們處于操作方便及便于監(jiān)控的考慮將從下位讀出來(lái)的數(shù)據(jù)與設(shè)計(jì)到統(tǒng)一的數(shù)據(jù)表中。就跟在個(gè)數(shù)據(jù)類型的后面,每個(gè)從站8個(gè)個(gè)保持寄存器和8個(gè)線圈量。數(shù)據(jù)屬性同樣有只讀和讀寫、數(shù)據(jù)類型也同樣有浮點(diǎn)數(shù)、整數(shù)及布爾量。關(guān)于從站的數(shù)據(jù)將在后面詳細(xì)表述。
在我們的目標(biāo)平臺(tái)上USART1為RS232模式,我們將其設(shè)計(jì)為Modbus RTU Slave的接口,同樣的,我們?cè)O(shè)計(jì)一下Modbus TCP Server的數(shù)據(jù)表,首先是本地?cái)?shù)據(jù),我們?cè)O(shè)計(jì)使用8個(gè)保持寄存器和8個(gè)線圈量。這些量中,我們特意設(shè)計(jì)其屬性既有只讀的數(shù)據(jù),又有可讀可寫的數(shù)據(jù)。同時(shí)將其數(shù)據(jù)類型設(shè)定有單精度浮點(diǎn)數(shù)、32位無(wú)符號(hào)整數(shù)、16位無(wú)符號(hào)整數(shù)以及布爾量。這樣我們就可以展示協(xié)議在不同數(shù)據(jù)模式及屬性上的操作。
1 uint32_t beatTime 心跳檢測(cè) 40001 只讀 2 float mbAI1 模擬量測(cè)試 40003 只讀 3 float mbAO1 模擬量測(cè)試 40005 讀寫 4 uint16_t mbAI2 模擬量測(cè)試 40007 只讀 5 uint16_t mbAO2 模擬量測(cè)試 40008 讀寫 1 bool mbDI1 數(shù)字量輸入?yún)?shù)1 1 只讀 2 bool mbDI2 數(shù)字量輸入?yún)?shù)2 2 只讀 3 bool mbDI3 數(shù)字量輸入?yún)?shù)3 3 只讀 4 bool mbDI4 數(shù)字量輸入?yún)?shù)4 4 只讀 5 bool mbDO1 數(shù)字量輸出參數(shù)1 5 讀寫 6 bool mbDO2 數(shù)字量輸出參數(shù)2 6 讀寫 7 bool mbDO3 數(shù)字量輸出參數(shù)3 7 讀寫 8 bool mbDO4 數(shù)字量輸出參數(shù)4 8 讀寫
除了上述這些參數(shù)外,我們處于操作方便及便于監(jiān)控的考慮將從下位讀出來(lái)的數(shù)據(jù)與設(shè)計(jì)到統(tǒng)一的數(shù)據(jù)表中。就跟在個(gè)數(shù)據(jù)類型的后面,每個(gè)從站8個(gè)個(gè)保持寄存器和8個(gè)線圈量。數(shù)據(jù)屬性同樣有只讀和讀寫、數(shù)據(jù)類型也同樣有浮點(diǎn)數(shù)、整數(shù)及布爾量。關(guān)于從站的數(shù)據(jù)將在后面詳細(xì)表述。
關(guān)于Modbus RTU Slave我們將其本地站地址設(shè)定為1,波特率115200,8位數(shù)據(jù)位,1位停止位,無(wú)校驗(yàn)。
序號(hào)**** 數(shù)據(jù)類型**** 變量名稱**** 參數(shù)名稱**** 地址**** 讀寫屬性**** 1 float mbSalve1AI1 目標(biāo)從站1的模擬量輸入?yún)?shù)1 40001 只讀 2 uint32_t mbSalve1AI2 目標(biāo)從站1的模擬量輸入?yún)?shù)2 40003 只讀 5 uint16_t mbSalve1AI3 目標(biāo)從站1的模擬量輸入?yún)?shù)3 40005 只讀 6 uint16_t mbSalve1AO1 目標(biāo)從站1的模擬量輸出參數(shù)1 40006 讀寫 7 uint16_t mbSalve1AO2 目標(biāo)從站1的模擬量輸出參數(shù)2 40007 讀寫 8 uint16_t mbSalve1AO3 目標(biāo)從站1的模擬量輸出參數(shù)3 40008 讀寫 1 bool mbSalve1DI1 目標(biāo)從站1的數(shù)字量輸入?yún)?shù)1 1 只讀 2 bool mbSalve1DI2 目標(biāo)從站1的數(shù)字量輸入?yún)?shù)2 2 只讀 3 bool mbSalve1DI3 目標(biāo)從站1的數(shù)字量輸入?yún)?shù)3 3 只讀 4 bool mbSalve1DI4 目標(biāo)從站1的數(shù)字量輸入?yún)?shù)4 4 只讀 5 bool mbSalve1DO1 目標(biāo)從站1的數(shù)字量輸出參數(shù)1 5 讀寫 6 bool mbSalve1DO2 目標(biāo)從站1的數(shù)字量輸出參數(shù)2 6 讀寫 7 bool mbSalve1DO3 目標(biāo)從站1的數(shù)字量輸出參數(shù)3 7 讀寫 8 bool mbSalve1DO4 目標(biāo)從站1的數(shù)字量輸出參數(shù)4 8 讀寫
其它3個(gè)從站的數(shù)據(jù)設(shè)計(jì)與此站相同。關(guān)于Modbus RTU Master我們將其波特率115200,8位數(shù)據(jù)位,1位停止位,無(wú)校驗(yàn)。其訪問(wèn)的4臺(tái)從站也照此設(shè)置。