. Modbus協(xié)議源代碼簡介
2.1 關(guān)于modbus中的常見兩種寄存器區(qū)別
保持寄存器:指可以通過通信命令讀或者寫的寄存器;通常是一些功能控制寄存器或者輸出寄存器等。不同的設(shè)計中,有些保持寄存器是掉電保持;有些則不然。
輸入寄存器:指只能讀不能寫的寄存器,通常是狀態(tài)寄存器或者是輸入結(jié)果寄存器等。
線圈寄存器,可以類比為開關(guān)量,每一個bit都對應(yīng)一個信號的開關(guān)狀態(tài)。所以一個byte就可以同時控制8路的信號。
離散輸入寄存器:相當(dāng)于線圈寄存器的只讀模式,每個bit表示一個開關(guān)量,而他的開關(guān)量只能讀取輸入的開關(guān)信號,無法寫入。
2.2 Modbus開源庫常用配置接口
1)modbus_t* modbus_new_rtu(const char *device,
int baud, char parity, int data_bit,
int stop_bit)
modbus_new_rtu函數(shù)用于生成Modbus的句柄,在本函數(shù)中可以設(shè)置通
信協(xié)議中的波特率、校驗位、數(shù)據(jù)長度以及停止位,其返回值為通過設(shè)置后生成的句柄,用于在讀寫數(shù)據(jù)時使用,每個句柄可以執(zhí)行一個modbus指令。如果這些配置參數(shù)有誤,就會返回一個空指針。
2)static int _modbus_rtu_connect(modbus_t *ctx)
本函數(shù)主要功能是將通信串口設(shè)置為rtu模式。
3)int modbus_set_slave(modbus_t *ctx, int slave)
本函數(shù)設(shè)置本句柄的從機(jī)號。
2.3 Modbus主機(jī)通信常用接口
1)int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *src)
本函數(shù)為將數(shù)組中的數(shù)據(jù)寫入到遠(yuǎn)端設(shè)備(從機(jī))的寄存器中,寫入的地址位addr,長度為nb個寄存器。
2)int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest)
本函數(shù)將遠(yuǎn)端設(shè)備(從機(jī))保持寄存器中的數(shù)據(jù)復(fù)制到數(shù)組dest中。
3)int modbus_read_input_registers(modbus_t *ctx, int addr, int nb,
uint16_t *dest)
本函數(shù)讀取遠(yuǎn)端設(shè)備(從機(jī))地址為addr輸入寄存器中的數(shù)據(jù),數(shù)據(jù)長度為nb。
2.4 Modbus從機(jī)通信主要接口
1)int _modbus_receive_msg(modbus_t *ctx, uint8_t *msg, msg_type_t msg_type)
本函數(shù)可以用于處理來自主機(jī)的請求,返回接受到的字符的數(shù)量,如果成功,則返回uint8_t數(shù)組中的消息(即主機(jī)發(fā)送的命令),否則返回-1。
2)int modbus_reply(modbus_t *ctx, const uint8_t *req,
int req_length, modbus_mapping_t *mb_mapping)
本函數(shù)負(fù)責(zé)在接受到請求后,分析請求并生成響應(yīng)消息,并且發(fā)送到主機(jī)。如果請求屬性為廣播,那么不發(fā)送響應(yīng)消息。
三、 調(diào)試問題分享
在調(diào)試中,從機(jī)的Server進(jìn)程會經(jīng)常出現(xiàn)崩潰,后發(fā)現(xiàn)在Server經(jīng)常每次處理配置變更時,都會重新new出新的modbus句柄,但卻不釋放原有句柄,這種處理會導(dǎo)致多次修改Modbus通信配置時,從機(jī)Server進(jìn)程崩潰。
解決方案:在程序中判斷,當(dāng)modbus句柄已經(jīng)存在時,此時更新配置后,不再new出新的句柄,而是調(diào)用接口 modbus_close(), modbus_free()釋放句柄中的配置,然后用更新后的配置重新設(shè)置句柄參數(shù)。
輸入與輸出之間以及比特尋址的和字尋址的數(shù)據(jù)項之間的區(qū)別并沒有暗示任何應(yīng)用操作。如果這是對可疑對象核心部分自然的解釋,那么這種區(qū)別是可完全接受的,而且很普通,以便認(rèn)為四個表格全部覆蓋了另外一個表格。
對于基本表格中任何一項,協(xié)議都允許單個地選擇 65536 個數(shù)據(jù)項,而且設(shè)計那些項的讀寫操作可以越過多個連續(xù)數(shù)據(jù)項直到數(shù)據(jù)大小規(guī)格限制,這個數(shù)據(jù)大小規(guī)格限制與事務(wù)處理功能碼有關(guān)。很顯然,將通過 MODBUS 處理的所有數(shù)據(jù)放置在設(shè)備應(yīng)用存儲器中。但是,存儲器的物理地址不應(yīng)該與數(shù)據(jù)參考混淆。要求僅僅是數(shù)據(jù)參考與物理地址的鏈接。
MODBUS 功能碼中使用的 MODBUS 邏輯參考數(shù)字是以 0 開始的無符號整數(shù)索引。
MODBUS 模型實現(xiàn)的實例
下例實例示出了兩種在設(shè)備中構(gòu)造數(shù)據(jù)的方法??赡苡胁煌慕Y(jié)構(gòu),這個文件中沒有全部描述出來。每個設(shè)備根據(jù)其應(yīng)用都有它自己的數(shù)據(jù)結(jié)構(gòu)。
實例 1:有 4 個立塊的設(shè)備
下例實例示出了設(shè)備中的數(shù)據(jù)結(jié)構(gòu),這個設(shè)備含有數(shù)字量和模擬量、輸入量和輸出量。由于不同塊中的數(shù)據(jù)不相關(guān),每個塊是相互立。按不同MODBUS 功能碼訪問每個塊。
IS420UCSBH1A是通用電氣公司的Mark VIe系統(tǒng)控制器。MKVIe是GE設(shè)計的的Speedtronic系統(tǒng)之一,用于控制水力、燃?xì)夂驼羝麥u輪系統(tǒng)。IS420UCSBH1A是現(xiàn)有的五個UCSB模塊之一。
IS420UCSBH1A是一個單模塊控制器,使用其板載I/O網(wǎng)絡(luò)與I/O包接口。以前的Speedtronic系統(tǒng)中的舊控制器通過背板連接器實現(xiàn)了相同類型的接口。該裝置是氣冷式的。它沒有板載風(fēng)扇或電池,但配有內(nèi)置電源。該設(shè)備很小,尺寸為6.4英寸x 8.1英寸x 1.4英寸。其他規(guī)格包括:
600 MHz英特爾EP80579微處理器
256 MB DDR2 SDRAM內(nèi)存,帶閃存支持的SRAM
支持控制塊語言(模擬和數(shù)字)的QNX中微子操作系統(tǒng)
雙絞線10Base-TX/100Base-TX和RJ-45連接器
用于許多應(yīng)用的TCP/IP協(xié)議
2.4磅,不包括運(yùn)輸包裝
環(huán)境工作溫度為-22至149華氏度。
IS420UCSBH1A設(shè)計為直接安裝到面板金屬板上,設(shè)備的散熱片保持通暢,以允許適當(dāng)?shù)臍饬鳌?br />
IS420UCSBH1A的正面設(shè)計有三個以太網(wǎng)端口,用于連接R/S/T I/O網(wǎng)絡(luò),以及三個額外的ENET端口,用于連接HNMIs、其他控制器、歷史記錄和點對點連接。前面板還有一個USB端口??刂破鞯脑O(shè)置可以使用GE的ToolboxST應(yīng)用程序來完成。
IS420ESWAH2A是通用電氣公司為Mark VIe系統(tǒng)提供的幾種以太網(wǎng)交換機(jī)之一。該系統(tǒng)由通用電氣公司制造并發(fā)布,用于控制和管理工業(yè)汽輪機(jī)系統(tǒng)。
IS420ESWAH2A是一款非托管以太網(wǎng)交換機(jī),旨在滿足實時工業(yè)控制系統(tǒng)的需求。該交換機(jī)具有多種功能/特性,包括802.3/802.3u/802.3x兼容性、半雙工和全雙工自動協(xié)商、惠普-MDIX自動感應(yīng)和10/100基本銅纜。該設(shè)備還具有多個led,讓用戶知道何時鏈路處于活動狀態(tài),何時設(shè)備通電,以及每個端口的速度。該單元有八個支持10/100BASE-TX的端口,以及兩個支持100BASE-FX、LC類型連接的端口。
IS420ESWAH2A通常使用DIN導(dǎo)軌安裝在控制系統(tǒng)面板內(nèi)。通用電氣公司只了某些DIN導(dǎo)軌夾具用于ESWA以太網(wǎng)交換機(jī)。根據(jù)所需的安裝方向,有兩種不同的夾子可供該開關(guān)使用。如果您需要平行于導(dǎo)軌安裝交換機(jī),請使用編號為259B2451BVP1的夾子。如果需要垂直于導(dǎo)軌安裝交換機(jī),請使用夾子259B2451BVP2。
5年