精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

寫多個線圈與寫多個保持寄存器

瑞薩MCU小百科 ? 來源:瑞薩MCU小百科 ? 2024-11-06 15:21 ? 次閱讀

10.5.11

(0x0F)寫多個線圈

1. 功能說明

15功能碼用于將連續的多個線圈或離散輸出設置為ON/OFF狀態,支持廣播模式,在廣播模式下,所有從站設備的同一地址的值將被統一修改。15功能碼中,起始地址字段由2字節構成,取值范圍為0x00000xFFFF:而寄存器數量字段由2字節構成,取值范用為0x00010x07B0。

2. 查詢報文

查詢報文中包含請求數據字段,用于定義ON或OFF狀態。數據字段中為邏輯1的位對應ON;邏輯0的位對應OFF。其中,ON/OFF與數據字段的對應關系可參考前面的童節“01(0x01)讀取線圈,離散量輸出狀態(Read Coilstatus/DOs)”中的內容舉例說明,假設從站設備地址為5,需要設置線圈地址20~30的狀態如下表所示。

線圈狀態:

bd1d8152-9bec-11ef-a511-92fbcf53809c.png

那么,寫入的數據字段被劃分為2字節,值分別為0xD1,對應于27~20的線圈,值0x05對應于30~28的線圈,注意細體會其中的高低位的對應關系。需要注意的是,在查詢報文中,Modbus協議的起始地址為19(0x13),即比線圈起始地址20少1。如下表所示,其中字節數字段表示需要變更數據的字節總數。

功能碼15查詢報文示例:

字段
(Hex)
ASCII
模式字符型
RTU模式8位
(Hex)
幀頭 “:”
從設備地址 0x05 “0”,“5” 0x05
功能碼 0x0F “0”,“F” 0x0F
起始地址
(高位)
0x00 “0”,“0” 0x00
起始地址
(低位)
0x13 “1”,“3” 0x13
寄存器數
(高位)
0x00 “0”,“0” 0x00
寄存器數
(低位)
0x0B “0”,“B” 0x08
字節數 0x02 “0”,“2” 0x02
變更數據
(高位)
0xD1 “D”,“1” 0xD1
變更數據
(低位)
0x05 “0”,“5” 0x05
差錯校驗 LRC(2字符) CRC(2字節)
幀尾 CR/LF
合計字節數 23 11

3. 響應報文

對于從設備,在正常情況下,響應報文包括功能碼、起始地址以及寫入的線圈數量,如下表所示。

功能碼15響應報文示例:

字段
(Hex)
ASCII
模式字符型
RTU模式8位
(Hex)
幀頭 “:”
從設備地址 0x05 “0”,“5” 0x05
功能碼 0x0F “0”,“F” 0x0F
起始地址
(高位)
0x00 “0”,“0” 0x00
起始地址
(低位)
0x13 “1”,“3” 0x13
寄存器數
(高位)
0x00 “0”,“0” 0x00
寄存器數
(低位)
0x0B “0”,“B” 0x08
差錯校驗 LRC(2字符) CRC(2字節)
幀尾 CR/LF
合計字節數 17 8

10.5.12

(0x10)寫多個保持寄存器

1. 功能說明

16功能碼用于設置或寫入從設備保持寄存器的多個連續的地址塊(1~123個寄存器),支持廣播模式,在廣播模式下,所有從站設備的同一地址的值將被統一修改。本功能碼中,起始地址字段由2字節構成,取值范圍為0x0000~0xFFFF;而寄存器數量字段由2字節構成,取值范圍為0x0001~0x007B。

2. 查詢報文

查詢報文包含請求數據字段。數據字段保存需要寫入的數值,各數據按每個寄存器2字節存放。舉例說明,從站設備地址為5,需要將保持寄存器地址40020~40022設置為如下表所示的數值。

寄存器的設置:

寄存器地址 設定值 寄存器地址 設定值
40020 0X0155 40022 0x0157
40021 0x0156

對應于40020~40022的寄存器,注意仔細體會其中的高低位的對應關系。需要注意的是,在查詢報文中,Modbus協議的起始地址為19(0x13),即比寄存器起始地址20少1。如下表所示,其中字節數字段表示需要變更數據的字節總數。

功能碼16查詢報文示例:

字段
(Hex)
ASCII
模式字符型
RTU模式8位
(Hex)
幀頭 “:”
從設備地址 0x05 “0”,“5” 0x05
功能碼 0x10 “0”,“F” 0x0F
起始地址
(高位)
0x00 “0”,“0” 0x00
起始地址
(低位)
0x13 “1”,“3” 0x13
寄存器數
(高位)
0x00 “0”,“0” 0x00
寄存器數
(低位)
0x03 “0”,“B” 0x08
字節數 0x06 “0”,“6” 0x06
變更數據1
(高位)
0x01 “0”,“1” 0x01
變更數據1
(低位)
0x55 “5”,“5” 0x56
變更數據2
(高位)
0x01 “0”,“1” 0x01
變更數據2
(低位)
0x56 “5”,“6” 0x56
變更數據3
(高位)
0x01 “0”,“1” 0x01
變更數據3
(低位)
0x57 “5”,“7” 0x57
差錯校驗 LRC(2字符) CRC(2字節)
幀尾 CR/LF
合計字節數 31 15

3. 響應報文

對于從設備,在正常情況下,響應報文包括功能碼、起始地址及寫入的寄存器數量,如下表所示。

功能碼16響應報文示例:

字段
(Hex)
ASCII
模式字符型
RTU模式8位
(Hex)
幀頭 “:”
從設備地址 0x05 “0”,“5” 0x05
功能碼 0x10 “1”,“0” 0x10
起始地址
(高位)
0x00 “0”,“0” 0x00
起始地址
(低位)
0x13 “1”,“3” 0x13
寄存器數
(高位)
0x00 “0”,“0” 0x00
寄存器數
(低位)
0x03 “0”,“3” 0x03
差錯校驗 LRC(2字符) CRC(2字節)
幀尾 CR/LF
合計字節數 17 8

在實際開發過程中,功能碼“16(0x10)寫多個寄存器(Preset MultipleRegisters)”通常用于方便用戶寫入多字節類型的數據。

例如,假設從站設備地址為5,需要向保持寄存器寫入一個32位(4字節)的浮點數,那么此浮點數將占用2個寄存器地址。假設浮點數將存放在40001和40002寄存器中,設定值為1.235(即0x3F9E 147A)實際的查詢和響應報文如下(其中標記部分為設定的浮點數值,假設字節序為AB-CD,參考第5.3.7章字節序和大小端的內容)。

查詢報文:05 10 00 00 00 02 04 3F 9E 14 7A 05 86

響應報文:05 10 00 00 00 02 40 4C

對于64位(8字節)的雙精度浮點數,同理將占用4個寄存器地址共8字節的空間。特別需要注意的是字節序及大小端的問題,前面討論過多字節存在大小端問題,因此主站設備和從站設備必須保持一致的規則處理,約定Modbus傳輸中的數據字段的字節序,否則會因為大小端不一致而產生數據處理錯誤。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 線圈
    +關注

    關注

    14

    文章

    1813

    瀏覽量

    44362
  • 寄存器
    +關注

    關注

    31

    文章

    5325

    瀏覽量

    120052
  • 功能碼
    +關注

    關注

    0

    文章

    10

    瀏覽量

    2104
  • 報文
    +關注

    關注

    0

    文章

    38

    瀏覽量

    4017

原文標題:寫多個線圈與寫多個保持寄存器 - RZ MPU工業控制教程連載(35)

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    NXP RC522 寄存器問題,哪位大神給點建議

    問題:寄存器 后再讀取寄存器值;但讀取的總是RC522 寄存器復位值(如TxControlReg 0x01,讀出是0x80;試寫過RC5
    發表于 12-29 02:32

    NI提供的modbus工具包功能測試結果,但是讀線圈讀不回來,多個寄存器也只能寫進去起始地址那個是什么原因呢?

    我使用的是NI提供的modbus工具包,目前成功的是連讀多個寄存器單個線圈單個寄存器;讀
    發表于 07-20 08:59

    Modbus協議———常用功能碼詳解

    0x0032,讀2個保持寄存器3)響應:數據存儲順序04H-讀輸入寄存器1)描述:讀輸入寄存器,字節指令操作,可讀單個或者多個; 2)發送指
    發表于 08-02 19:47

    如何把庫函數的文件和寄存器的文件結合起來用?

    庫函數的文件 怎么樣和 寄存器的文件 結合起來用啊?庫函數的文件 怎么樣和 寄存器的文件
    發表于 08-07 02:49

    無法理解Modbus RTU協議多個寄存器的這兩個參數

    Modbus RTU協議多個寄存器的協議是下面這樣描述的:針對這個協議我有幾個問題,請教大家:1、其中請求PDU中的“寄存器數量”和“字節數”兩個參數是不是冗余了?“字節數”不是可以
    發表于 05-07 10:43

    無法理解Modbus RTU協議多個寄存器的這兩個參數!

    Modbus RTU協議多個寄存器的協議是下面這樣描述的:針對這個協議我有幾個問題,請教大家:1、其中請求PDU中的“寄存器數量”和“字節數”兩個參數是不是冗余了?“字節數”不是可以
    發表于 05-07 15:21

    調試AD7124-8驅動時,對各寄存器配置之后再次讀各寄存器的值,多個寄存器的值都為fffffffd是為什么?

    在調試AD7124-8驅動時,對各寄存器配置之后再次讀各寄存器的值,多個寄存器的值都為fffffffd,這是為什么? 看參考程序里面對各寄存器
    發表于 12-07 08:29

    寄存器尋址方式

    寄存器尋址方式   寄存器尋址是對由指令選定的工作寄存器(R0--R7)進行讀/,由指令操作碼字節的最低3位指明所尋址的工作寄存器
    發表于 03-14 15:29 ?2775次閱讀

    32位寄存器,32位寄存器是什么意思

    32位寄存器,32位寄存器是什么意思  從X8086開始學了一年,第一個ASM的程序就是變32換16進制的程序,不過現在叫我從新開始ASM程
    發表于 03-08 17:26 ?1.7w次閱讀

    使用寄存器級讀&控制基于PXI平臺的FPGA

    本文以基于PXI平臺的Marvin Test Solutions 3U FPGA板卡GX3500為設計對象,通過設計實例講解如何使用寄存器級讀&控制FPGA,并提供FPGA設計相關文件(如
    發表于 09-27 17:46 ?10次下載

    如何使用寄存器級讀&控制基于PXI平臺的FPGA

    如何使用寄存器級讀&控制基于PXI平臺的FPGA
    發表于 10-16 15:20 ?14次下載
    如何使用<b class='flag-5'>寄存器</b>級讀&<b class='flag-5'>寫</b>控制基于PXI平臺的FPGA

    如何使用寄存器級讀&控制基于PXI平臺的FPGA

    如何使用寄存器級讀&控制基于PXI平臺的FPGA
    發表于 10-19 08:48 ?12次下載

    STM32系列MCU,寄存器Or利用固件庫

    嵌入式的編程,往下說就是操作MCU的寄存器。而固件庫就是函數的集合,固件庫函數的作用是向下負責與寄存器直接打交道,向上提供用戶函數調用的接口(API)。相對于固件庫的方式,直接寄存器
    的頭像 發表于 08-09 17:22 ?7218次閱讀
    STM32系列MCU,<b class='flag-5'>寫</b><b class='flag-5'>寄存器</b>Or利用固件庫

    寄存器陣列低功耗設計方案

    寄存器操作的時候會改變寄存器內容,需要時鐘鎖入新的數據。但是,對寄存器進行讀操作的時候,寄存器內容不改變,
    的頭像 發表于 12-08 11:19 ?574次閱讀
    <b class='flag-5'>寄存器</b>陣列低功耗設計方案

    單個線圈與單個保持寄存器相關

    05功能碼用于將單個線圈寄存器(或離散輸入)設置為ON或OFF,該功能碼支持廣播模式在廣播模式下,所有從站設備的同一地址的值將被統一修改。查詢報文中的ON/OFF狀態由報文數據字段的常數指定
    的頭像 發表于 11-01 13:46 ?129次閱讀