成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于OpenHarmony 系統通過Modbus協議讀取設備數據

系統 OpenHarmony
Modbus RTU(Remote Terminal Unit 遠程終端單元):這種方式常采用RS-485做為物理層,一般利用芯片的串口實現數據報文的收發,報文數據采用二進制數據進行通信。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

Modbus簡介

原文鏈接:鏈接

Modbus是一種串行通信協議,是Modicon公司(現在的施耐德電氣 Schneider Electric)于1979年為使用可編程邏輯控制器(PLC)通信而發表。Modbus已經成為工業領域通信協議的業界標準(De facto),并且現在是工業電子設備之間常用的連接方式。

Modbus RTU(Remote Terminal Unit 遠程終端單元):這種方式常采用RS-485做為物理層,一般利用芯片的串口實現數據報文的收發,報文數據采用二進制數據進行通信。

Modbus TCP/IP 或 Modbus TCP :這是一種 Modbus 變體版本,使用 TCP/IP 網絡進行通信,通過 502 端口進行連接。報文不需要校驗和計算,因為以太網底層已經實現了CRC32 數據完整性校驗

Modbus RTU

地址:取值范圍是0-247,如果是0,就是主站廣播報文;如果是1-247,則有可能是主站請求或者從站應答。

功能碼:也就是報文命令,代表主站對從站的操作,讀或者寫。

數據:數據字段,主請求報文,從應答報文會有所差異。也就是說假設抓取總線報文,如何區分是主站請求還是從站應答,則需要通過數據字段進行區分了。

CRC校驗:采樣CRC16,16位循環冗余校驗。

部分功能碼解析

1、功能碼 –讀線圈狀態

  • 主機發送:01 01 00 01 00 08 6C 0C
  • 從機回復: 01 01 01 2F 10 54
  • 主機解析:01 地址(設備ID)
01  功能碼;

            00 01  代表查詢的起始線圈地址,即從0001線圈開始查詢。

            00 08 查詢線圈數量。

            6C 0C 循環冗余校驗。

從機解析:01 地址(設備ID)。

01  功能碼;

            01  代表后面數據的字節數。

            2F    讀取以0001線圈開始的8個線圈的狀態。0x2F二進制為00101111,對應狀態為1111                         0100

            10 54 循環冗余校驗。

2、功能碼 –-讀離散輸入寄存器

功能:讀離散輸入寄存器,位操作,可讀單個或多個,類似功能碼0X01。

3、功能碼 –-讀保持寄存器的值

  • 主機發送:01 03 00 01 00 01 D5 CA
  • 從機回復: 01 03 02 00 01 79 84
  • 主機解析:01 地址(設備ID)
03  功能碼;

            00 01  代表查詢的起始寄存器地址,即從0001寄存器開始查詢。

            00 01 查詢寄存器數量。

            D5 CA 循環冗余校驗。

從機解析:01 地址(設備ID)。

03  功能碼;

            02  代表后面數據的字節數。

            00 01 查詢0001寄存器的值。

            79 84 循環冗余校驗。

4、功能碼 –-讀輸入寄存器

功能:讀輸入寄存器,字節操作,可讀單個或多個,類似功能碼0X03。

5、功能碼 –-寫單個保持寄存器

功能:對單個線圈進行寫操作,位操作,只能寫一個。寫入0xFF00表示將線圈置為ON,寫入0x0000表示將線圈置為OFF,其它值無效。

主機發送數據:從站地址+功能碼+寄存器起始地址+數據值+校驗碼

    從站應答數據:從站地址+功能碼+寄存器地址+寫入值+校驗碼

6、功能碼 –-寫單個保持寄存器

  • 主機發送:01 06 00 02 00 01 E9 CA
  • 從機回復: 01 06 00 02 00 01 E9 CA
  • 主機解析:01 地址(設備ID)
06  功能碼;

            00 02  代表待寫入的起始寄存器地址,即從0002寄存器開始寫數據。

            00 01 寫入的寄存器的值。即給0002寄存器寫入0001

            E9 CA 循環冗余校驗。

從機解析:01 地址(設備ID)。

06  功能碼;

            02  代表后面數據的字節數。

            00 01 查詢0001寄存器的值。

            E9 CA 循環冗余校驗。

7、功能碼 –-寫多個線圈狀態

  • 主機發送:01 0F 00 01 00 07 01 6B B2 B9
  • 從機回復: 01 0F 00 01 00 07 45 C9
  • 主機解析:01 地址(設備ID)
0F  功能碼;

            00 01  代表待寫入的起始線圈地址,即從0001線圈開始寫數據。

            00 07 待寫入的線圈的數量。

            01 后面寫入數據的字節數。

            6B寫入寄存器的值,即11010110。二進制01101011

            B2 B9 循環冗余校驗。

從機解析:01 地址(設備ID)。

0F  功能碼;

            00 01  代表待寫入的起始線圈地址,即從0001線圈開始寫數據。

            00 07 待寫入的線圈的數量。

            45 C9 循環冗余校驗。

8、功能碼 – 寫多個保持寄存器

  • 主機發送:01 10 00 04 00 03 06 00 01 00 00 00 01 5B 55
  • 從機回復: 01 10 00 04 00 03 C1 C9
  • 主機解析:01 地址(設備ID)
10  功能碼;

            00 04  代表待寫入的起始寄存器地址,即從0004寄存器開始寫數據。

            00 03 待寫入的寄存器的數量。

            06 后面寫入數據的字節數。

         0001,0000,0001寫入寄存器的值。即給0004,0005,0006寄存器分別寫入0001,0000,0001

            5B 55 循環冗余校驗。

從機解析:01 地址(設備ID)。

10  功能碼;

            00 04  代表待寫入的起始寄存器地址,即從0004寄存器開始寫數據。

            00 03 待寫入的的寄存器的值。即給0004,0005,0006寄存器分別寫入0001,0000,0001

            C1 C9 循環冗余校驗。

在OpenHarmony上面使用Modbus

原文鏈接:鏈接

加入Modbus C++庫libmodbus

適配文件在當前目錄下的cpp文件夾中。

庫文件:

基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區

c文件:

基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區

把上面文件加入編譯:

基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區

Modbus TCP

配置Modbus信息

設置IP和端口號以及DeviceID。

基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區

設置數據地址和長度。

基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區

把測試代碼執行起來

引入測試代碼庫。

基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區

初始化Modbus連接。

基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區

讀取數據。

基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區

運行調試

基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區基于OpenHarmony 系統通過Modbus協議讀取設備數據-開源基礎軟件社區

Modbus RTU

Modbus RTU主要是通過RS485或者232接口讀取數據的modbus協議。

libmodbus庫函數解析

功能碼函數:

函數

功能嗎

modbus_read_registers

03

modbus_read_input_registers

04

modbus_read_bits

01

modbus_read_input_bits

02

modbus數據轉換函數

函數

轉換內容

modbus_get_float_abcd

獲取浮點數ABCD

modbus_set_float_abcd

設置浮點數ABCD

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2023-07-03 19:18:27

2024-10-30 13:37:10

2010-04-06 10:00:52

CentOS系統

2022-09-07 15:35:49

設備開發鴻蒙

2009-05-13 08:11:26

SUSELinuxsun

2021-03-25 17:17:49

NEC

2022-10-13 16:24:27

家居安防系統鴻蒙

2022-09-02 15:06:23

大數據物聯網

2024-09-24 17:49:36

2022-12-28 09:36:59

操作系統鴻蒙

2020-09-18 06:37:18

Rarp協議操作系統

2022-03-17 15:55:19

播放數字音頻解碼鴻蒙

2023-04-17 16:21:58

操作系統鴻蒙

2022-09-29 15:24:11

物聯網MQTT

2023-05-06 08:00:25

通訊協議字節

2021-03-10 18:07:58

協議調試 Modbus

2023-09-24 23:22:23

2013-02-01 18:07:06

中國石油微軟私有云平臺IT

2022-01-20 14:33:29

openharmonwayland協議鴻蒙

2022-10-24 14:54:29

LWIP協議鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人免费在线视频 | 国产一级片在线观看视频 | www国产成人免费观看视频 | 亚洲第一黄色网 | 久久精品亚洲精品国产欧美 | 日韩在线免费视频 | 久久久久国产一级毛片高清网站 | 久久久久久久久久久久一区二区 | 亚洲 自拍 另类 欧美 丝袜 | 最近日韩中文字幕 | 免费h在线 | 亚洲国产一区在线 | 欧美一区免费 | 欧美一区二区在线观看 | 久久国产精品一区二区三区 | 国产91丝袜在线18 | 91精品久久久 | 国产精品特级毛片一区二区三区 | h片在线观看网站 | 不卡一二区 | 欧美最猛黑人xxxx黑人 | 全免费a级毛片免费看视频免 | 日韩资源 | 亚洲 中文 欧美 日韩 在线观看 | 成人av影院| 日韩在线观看一区二区三区 | 色久电影 | 日本精品一区二区三区视频 | 午夜小影院| 欧美成人一区二区三区 | 国产一二区视频 | 在线观看成人精品 | 日韩av一区二区在线观看 | 一区二区三区国产好 | 国产精品毛片一区二区在线看 | 欧美日韩一二区 | aaa在线| 亚洲最大的黄色网址 | 日韩a v在线免费观看 | 91精产国品一二三区 | 一级aaaaaa毛片免费同男同女 |