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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

FreeModbus输入寄存器

發(fā)布時(shí)間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeModbus输入寄存器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

輸入寄存器的訪問(wèn)屬性為只讀

對(duì)輸入寄存器的操作包括:讀輸入寄存器(0x04)

?

在一個(gè)遠(yuǎn)程設(shè)備中,使用該功能碼讀取1 至大約125 的連續(xù)輸入寄存器。請(qǐng)求PDU 說(shuō)明了起始地址和寄存器數(shù)量。從零開(kāi)始尋址寄存器。因此,尋址輸入寄存器1-16 為0-15。
將響應(yīng)報(bào)文中的寄存器數(shù)據(jù)分成每個(gè)寄存器為兩字節(jié),在每個(gè)字節(jié)中直接地調(diào)整二進(jìn)制內(nèi)容。對(duì)于每個(gè)寄存器,第一個(gè)字節(jié)包括高位比特,并且第二個(gè)字節(jié)包括低位比特。

讀輸入寄存器狀態(tài)圖

/* 讀輸入寄存器 */ eMBException eMBFuncReadInputRegister(UCHAR *pucFrame, USHORT *usLen) {USHORT usRegAddress;USHORT usRegCount;UCHAR *pucFrameCur;eMBException eStatus = MB_EX_NONE;eMBErrorCode eRegStatus;/* 校驗(yàn)PDU長(zhǎng)度是否合理 */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個(gè)寄存器尋址為0,所以地址加一 */usRegAddress++;/* 寄存器數(shù)量 */usRegCount = (USHORT)(pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF] << 8);usRegCount |= (USHORT)(pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1]);/* 檢查寄存器數(shù)量是否合理 */if((usRegCount >= 1) && (usRegCount < MB_PDU_FUNC_READ_REGCNT_MAX)){/* 構(gòu)建響應(yīng) *//* PDU指針 */pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF];/* PDU長(zhǎng)度初始化為0 */*usLen = MB_PDU_FUNC_OFF;/* 功能碼 */*pucFrameCur++ = MB_FUNC_READ_INPUT_REGISTER;*usLen += 1;/* 字節(jié)數(shù) */*pucFrameCur++ = (UCHAR)(usRegCount * 2);*usLen += 1;/* 讀取輸入寄存器數(shù)據(jù) */eRegStatus = eMBRegInputCB(pucFrameCur, usRegAddress, usRegCount);/* 產(chǎn)生異常 */if(eRegStatus != MB_ENOERR){/* 錯(cuò)誤轉(zhuǎn)化為異常碼 */eStatus = prveMBError2Exception(eRegStatus);}/* 未產(chǎn)生異常 */else{/* 數(shù)據(jù)長(zhǎng)度 */*usLen += usRegCount * 2;}}/* 寄存器數(shù)量不合理 */else{/* 非法數(shù)據(jù)值 */eStatus = MB_EX_ILLEGAL_DATA_VALUE;}}/* PDU長(zhǎng)度不對(duì) */else{/* 非法數(shù)據(jù)值 */eStatus = MB_EX_ILLEGAL_DATA_VALUE;}return eStatus; }

?

總結(jié)

以上是生活随笔為你收集整理的FreeModbus输入寄存器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。