日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Modbus协议栈开发笔记之八:Modbus ASCII Master开发

發布時間:2024/7/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Modbus协议栈开发笔记之八:Modbus ASCII Master开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這一節我們來封裝Modbus ASCII Master應用,Modbus ASCII主站的開發與RTU主站的開發是一致的。同樣的我們也不是做具體的應用,而是實現ASCII主站的基本功能。我們將ASCII主站的功能封裝為函數,以便在開發具體應用時調用。

對于ASCII主站我們主要實現的功能有兩個:其一是生成訪問RTU從站的命令,總共支持8中功能碼。其二是對ASCII從站端返回的信息進行解析并根據結果進行各種操作,同樣也是支持8中功能嗎的操作。具體軟件訪問結構如下:

1、訪問命令的生成

客戶端作為主動交互端,需要向服務器發各種操作請求命令。所以對于ASCII主站來說,首先要生成訪問服務器的命令。生成命令只需要按標準的協議格式來生成即可,目前我們只支持前面提到的8個功能碼。

/*生成訪問從站的命令*/

uint16_t CreateAccessAsciiSlaveCommand(ObjAccessInfo objInfo, void *dataList, uint8_t *commandBytes)

這樣在開發具體的客戶端應用時只需要調用這個函數來生成訪問服務器的命令就可以了。

2、響應信息的解析

如前一節所述,服務器收到命令后,根據命令進行處理并生成響應信息返回給客戶端。客戶端接到命令后首先要對響應信息進行解析,解析的過程其實與服務器端是一致的。所不同的是,不需要再根據解析結果生成響應信息了。

/*解析收到的從站相應信息*/

void ParsingAsciiSlaveRespondMessage(uint8_t *recievedMessage, uint8_t *command,uint16_t rxLength)

這樣在開發客戶端應用時,我們調用這一函數來解析響應信息就可以了。

3、響應處理

對于解析出來的信息,我們需要根據情況實現操作,比如修改變量的值等,應為主要支持的操作碼是8個,理論上對應的每種功能碼都會有不同的操作,但事實上,由于寫操作命令已經不需要做任何操作了,所以對應的操作實際上只有讀操作的4種功能碼。

/*處理讀從站狀態量返回信息,讀線圈狀態位0x01功能碼*/

static void HandleReadCoilStatusRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)

/*處理讀從站狀態量返回信息,讀輸入狀態位0x02功能碼*/

static void HandleReadInputStatusRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)

/*處理讀從站寄存器值的返回信息,讀保持寄存器0x03功能碼)*/

static void HandleReadHoldingRegisterRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)

/*處理讀從站寄存器值的返回信息,讀輸入寄存器0x04功能碼*/

static void HandleReadInputRegisterRespond(uint8_t *receivedMessage,uint16_t startAddress,uint16_t quantity)

同樣的,我們也定義一個函數指針數組來實現這些函數的調用:

void (*HandleServerRespond[])(uint8_t *,uint16_t,uint16_t)={HandleReadCoilStatusRespond, HandleReadInputStatusRespond, HandleReadHoldingRegisterRespond, HandleReadInputRegisterRespond};

到這里,ASCII主站的封裝就完成了,當然具體的數據處理部分需要在開發具體應用是才能確定。

源代碼可上Github下載:https://github.com/foxclever/Modbus

歡迎關注:

總結

以上是生活随笔為你收集整理的Modbus协议栈开发笔记之八:Modbus ASCII Master开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。