2021-09-24 14:31:23 索煒達(dá)電子 727
項(xiàng)目編號(hào):E1294
文件大?。?M
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡(jiǎn)要概述:
FreeModbus V1.6 主機(jī)使用說明
簡(jiǎn)述
FreeModbus是一款開源的Modbus協(xié)議棧,但是只有從機(jī)開源,主機(jī)源碼是需要收費(fèi)的。同時(shí)網(wǎng)上也沒有發(fā)現(xiàn)比較好的開源的Modbus主機(jī)協(xié)議棧,所以才開發(fā)這款支持主機(jī)模式的FreeModbus協(xié)議棧。本版FreeModbus版本號(hào)更改為V1.6,特性如下:
-新增加的主機(jī)源碼與原有從機(jī)的風(fēng)格及接口保持一致;
-支持主機(jī)與從機(jī)在同一協(xié)議棧運(yùn)行;
-支持實(shí)時(shí)操作系統(tǒng)及裸機(jī)移植;
-為應(yīng)用提供多種請(qǐng)求模式,用戶可以選擇阻塞還是非阻塞模式,自定義超時(shí)時(shí)間等,方便應(yīng)用層靈活調(diào)用;
-支持所有常用的Modbus方法。
注:所有帶_m后綴的文件為主機(jī)模式下必須使用的文件,如使用從機(jī)模式則無需這些文件。
移植
對(duì)于協(xié)議棧的移植主要包括兩個(gè)方面,硬件及軟件。用戶需要根據(jù)自己的需求進(jìn)行自行選擇。
注:以下所有說明都主要針對(duì)Modbus主機(jī)模式進(jìn)行介紹。
1、軟件
軟件方面支持基于裸機(jī)及實(shí)時(shí)操作系統(tǒng)的移植;支持單個(gè)主機(jī)與單個(gè)從機(jī)同時(shí)獨(dú)立運(yùn)行。另外用戶也可以修改協(xié)議棧的事件回調(diào)接口,使主機(jī)請(qǐng)求的接口采用阻塞及非阻塞模式;主機(jī)資源等待方面,用戶也可以設(shè)置等待超時(shí)時(shí)間等等,諸多功能將會(huì)一一介紹。
1.1、操作系統(tǒng)與裸機(jī)
對(duì)于操作系統(tǒng)與裸機(jī)目前協(xié)議棧都是支持的,但個(gè)人更加推薦采用實(shí)時(shí)操作系統(tǒng),因?yàn)檫@樣會(huì)使得接口調(diào)用及接口移植變得更加簡(jiǎn)單。目前移植完成的操作系統(tǒng)包括國(guó)人的 RT-Thread (詳見項(xiàng)目源碼) 、 UCOS 及 FreeRTOS。 操作系統(tǒng)與裸機(jī)移植的過程中涉及的文件為FreeModbus\port\portevent_m.c 該文件主要有以下需要用戶移植的接口文件結(jié)構(gòu)
在 基于操作系統(tǒng)移植 時(shí),主要用到操作系統(tǒng)線程同步方面的技術(shù),Modbus 協(xié)議棧自身需要使用操作系統(tǒng)自帶的事件機(jī)制來實(shí)現(xiàn)事件的發(fā)送通知與等待獲取,同時(shí)用戶請(qǐng)求 Modbus 功能的線程與 Modbus 協(xié)議棧自身線程(Modbus Poll 線程)需要通過事件機(jī)制實(shí)現(xiàn)兩個(gè)線程的同步;主機(jī)協(xié)議棧還需要一個(gè)主機(jī)資源占用的信號(hào)量,初始化默認(rèn)為1,采用信號(hào)量保證了多線程同時(shí)發(fā)送主機(jī)請(qǐng)求時(shí),只有一個(gè)線程可以使用主機(jī)。
在 基于裸機(jī)移植 時(shí),需要通過軟件模擬方式實(shí)現(xiàn)事件通知機(jī)制,事件等待及資源等待都得采用用戶自定義延時(shí)及標(biāo)志變量來實(shí)現(xiàn),實(shí)現(xiàn)起來比操作系統(tǒng)模式下的線程同步機(jī)制要復(fù)雜很多。
1.2、數(shù)據(jù)緩沖區(qū)
數(shù)據(jù)緩沖區(qū)定義的位置位于 FreeModbus\port\user_mb_app_m.c 文件頂部,共計(jì) 4種 數(shù)據(jù)類型。 FreeModbus從機(jī)默認(rèn)使用 一維數(shù)組 作為緩存區(qū)數(shù)據(jù)結(jié)構(gòu),主機(jī)可以存儲(chǔ)所有網(wǎng)內(nèi)從機(jī)的數(shù)據(jù),所以主機(jī)采用 二維數(shù)組 對(duì)所有從機(jī)節(jié)點(diǎn)數(shù)據(jù)進(jìn)行存儲(chǔ)。二維數(shù)組的列號(hào)代表寄存器、線圈及離散量地址,行號(hào)代表從機(jī)節(jié)點(diǎn)ID,但需要做減一處理,例如usMRegHoldBuf[2][1]代表從機(jī)ID為 3,保持寄存器地址為 1 的從機(jī)數(shù)據(jù)。
1.3、Modbus數(shù)據(jù)處理回調(diào)接口
Modbus 一共有4種不同的數(shù)據(jù)類型,所有的 Modbus 功能都圍繞這些數(shù)據(jù)類型進(jìn)行操作。由于不同的用戶數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)可能有所不同,那么對(duì)應(yīng)的 Modbus 數(shù)據(jù)處理方式也就存在差異,所以用戶需要把每種數(shù)據(jù)類型對(duì)應(yīng)的操作,按照自己的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)進(jìn)行定制實(shí)現(xiàn)。 所有的 Modbus 數(shù)據(jù)處理回調(diào)接口如下:
對(duì)于數(shù)組形式的數(shù)據(jù)緩沖區(qū)結(jié)構(gòu),源碼中已經(jīng)做好了移植,直接使用即可。也可以使用 EasyDataManager 庫(kù),采用鏈表作為緩沖區(qū),該庫(kù)還支持事件驅(qū)動(dòng),做到數(shù)據(jù)變化自動(dòng)通知應(yīng)用層。
2、硬件
移植 FreeModbus 協(xié)議棧主機(jī)部分時(shí),在硬件方面需要修改串口及定時(shí)器配置,文件位于port文件下,用戶需要根據(jù)自己的CPU進(jìn)行移植修改。
注:協(xié)議棧默認(rèn)自帶STM32F103X移植文件,用戶可以參考移植
這里提一下基于操作系統(tǒng)設(shè)備驅(qū)動(dòng)框架的移植,后期協(xié)議棧會(huì)增加對(duì) RT-Thread 自帶設(shè)備驅(qū)動(dòng)框架的移植,只要是 RT-Thread 的 BSP 支持的 MCU,用戶都無需考慮底層的移植過程,減低移植成本。
2.1、串口
涉及到串口的移植文件位于FreeModbus\port\portserial_m.c,在這個(gè)文件中用戶需要對(duì)以下接口方法進(jìn)行修改
文件列表: