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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

FreeModbus离散量输入

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeModbus离散量输入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

離散量輸入的訪問屬性為只讀

對離散量輸入的操作包括:讀離散量輸入(0x02)

?

在一個遠程設備中,使用該功能碼讀取離散量輸入的1 至2000 連續狀態。請求PDU 詳細說明了起始地址,即指定的第一個輸入地址和輸入編號。從零開始尋址輸入。因此尋址輸入1-16 為0-15。根據數據域的每個比特將響應報文中的離散量輸入分成為一個輸入。指示狀態為1= ON 和0=OFF。第一個數據字節的LSB(最低有效位)包括在詢問中尋址的輸入。其它輸入依次類推,一直到這個字節的高位端為止,并在后續字節中從低位到高位的順序。

如果返回的輸入數量不是八的倍數,將用零填充最后數據字節中的剩余比特(一直到字節的高位端)。字節數量域說明了數據的完整字節數。

讀離散量輸入狀態圖

/* 讀離散量 */ eMBException eMBFuncReadDiscreteInputs(UCHAR *pucFrame, USHORT *usLen) {USHORT usRegAddress;USHORT usDiscreteCnt;UCHAR ucNBytes;UCHAR *pucFrameCur;eMBException eStatus = MB_EX_NONE;eMBErrorCode eRegStatus;/* 校驗PDU長度是否合理 */if(*usLen == (MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN)){/* 離散量地址 */usRegAddress = (USHORT)(pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8);usRegAddress |= (USHORT)(pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1]);/* 第1個離散量尋址為0,所以地址加一 */usRegAddress++;/* 離散量數量 */usDiscreteCnt = (USHORT)(pucFrame[MB_PDU_FUNC_READ_DISCCNT_OFF] << 8);usDiscreteCnt |= (USHORT)(pucFrame[MB_PDU_FUNC_READ_DISCCNT_OFF + 1]);/* 檢查離散量數量是否合理 */if((usDiscreteCnt >= 1) &&(usDiscreteCnt < MB_PDU_FUNC_READ_DISCCNT_MAX)){/* 構建響應 *//* PDU指針 */pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF];/* PDU長度初始化為0 */*usLen = MB_PDU_FUNC_OFF;/* 功能碼 */*pucFrameCur++ = MB_FUNC_READ_DISCRETE_INPUTS;*usLen += 1;/* 字節數 */if((usDiscreteCnt & 0x0007) != 0){ucNBytes = (UCHAR)(usDiscreteCnt / 8 + 1);}else{ucNBytes = (UCHAR)(usDiscreteCnt / 8);}*pucFrameCur++ = ucNBytes;*usLen += 1;/* 讀取離散量值 */eRegStatus = eMBRegDiscreteCB(pucFrameCur, usRegAddress, usDiscreteCnt);/* 產生異常 */if(eRegStatus != MB_ENOERR){/* 錯誤轉化為異常碼 */eStatus = prveMBError2Exception(eRegStatus);}/* 未產生異常 */else{/* 數據長度 */*usLen += ucNBytes;;}}/* 離散量數量不合理 */else{/* 非法數據值 */eStatus = MB_EX_ILLEGAL_DATA_VALUE;}}/* PDU長度不對 */else{/* 非法數據值 */eStatus = MB_EX_ILLEGAL_DATA_VALUE;}return eStatus; }

?

總結

以上是生活随笔為你收集整理的FreeModbus离散量输入的全部內容,希望文章能夠幫你解決所遇到的問題。

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