通訊例項 modbus Modbus通訊程式設計例項

2021-10-16 06:02:46 字數 2942 閱讀 5075

modbus通訊程式設計例項(一)

功能碼(十進位制)十六進製制說明

0101讀線圈

0202讀離散量輸入

0303讀保持暫存器

0404讀輸入暫存器

0505寫單個線圈

0606寫單個暫存器

0707讀異常狀態

0808診斷

110b獲得事件計數器

120c獲得事件記錄

150f寫多個線圈

1610寫多個暫存器

1711報告從站id

2216遮蔽寫暫存器

2317讀/寫多個暫存器

2418讀fifo佇列

data_exch功能塊是用於premium和m340傳輸資料到另外一台裝置,這個功能塊支援modbus所有的功能碼。

data_exch用梯形圖表示:

各個引腳定義:

adr為位址引腳,對於premium系列需要使用addr功能塊連線。

對於m340系列需要使用addm功能塊連線。

type為型別引腳,1為接受/傳送,2為只接受,3為只傳送。

emis為要傳送表

recp為接受表

gest為交換管理表

例項一:讀取n位(功能碼01)

其中在emis陣列中第乙個字,低位元組為功能碼01,高位元組為讀取位的起始位1

第二個字,低位元組為讀取位的起始位1,高位元組為讀取位的長度5

第三個字,低位元組為讀取位的長度5

最後要在交換管理表的第四個字中定義這個報文字節的長度,為1個位元組的功能碼,2個位元組的資料起始位址,2個位元組的讀取位的長度,所以長度為1+2+2=5

在twido中賦值如下:

在recp中第乙個字為返回碼

第二個字為讀取的資料

modbus通訊程式設計例項(二)

例項二:讀取n字(功能碼03)

其中在emis陣列中第乙個字,低位元組為功能碼03,高位元組為讀取字的起始位址1

第二個字,低位元組為讀取字的起始位址1,高位元組為讀取字的長度6

第三個字,低位元組為讀取字的長度6

最後要在交換管理表的第四個字中定義這個報文字節的長度,為1個位元組的功能碼,2個位元組的資料起始位址,2個位元組的讀取字的長度,所以長度為1+2+2=5

在twido中賦值如下

在recp中第乙個字為返回碼

第二個字開始為讀取的資料

modbus通訊程式設計例項(三)

例項三:寫單字(功能碼06)

其中在emis陣列中第乙個字,低位元組為功能碼06,高位元組為從站要寫入字的位址11

第二個字,低位元組為從站要寫入字的位址11,高位元組為主站寫出字的位址90

第三個字,低位元組為主站寫出字的位址90

最後要在交換管理表的第四個字中定義這個報文字節的長度,為1個位元組的功能碼,2個位元組的從站寫入字位址,2個位元組的主站寫出字位址,所以長度為1+2+2=5

在主站賦值如下

在twido中顯示如下:

modbus通訊程式設計例項(四)

例項四:寫n字(功能碼16)

其中在emis陣列中第乙個字,低位元組為功能碼16,高位元組為從站要寫入字的起始位址20

第二個字,低位元組為從站要寫入字的起始位址20,高位元組為要寫入字的長度3

第三個字,低位元組為要寫入字的長度3,高位元組為2倍的要寫入字的長度

第四個字~第六個字為主站寫出字,高低位元組順序要相互轉換

最後要在交換管理表的第四個字中定義這個報文字節的長度,為1個位元組的功能碼,2個位元組的從站寫入字位址,2個位元組的寫入字的長度,1個2倍的要寫入字的長度,6個位元組的主站寫出字,所以長度為1+2+2+1+6=12

在主站賦值如下

在twido中顯示如下

另外注意重新整理資料時,必須要把en引腳斷開一下才可以重新讀取或寫入。通過實驗,把交換管理表的完成位(即gest第乙個字的最低位)放在en引腳前不太好使,所以最好編個令牌迴圈指令。把令牌放在en引腳前,當取得令牌時再讀取或者寫入。

功能碼05:

IIC 通訊例項

iic 標籤 1 標準速率 100kbit s 快速 400kbit s 高速 4mbit s 2 2線通訊協議 3 起始與停止 scl高時,sda由 高 低 變化,起始訊號 sda由 低 高 變化,停止訊號 4 空閒狀態 sda和scl都處於高電平狀態 5 資料傳輸與應答 資料必須是8位,且高位在...

程序通訊例項

有待修改,先放上 供參考。include using namespace std const int maxn 105 typedef int semaphore 訊號量型別 char buf 緩衝區資料結構 typedef struct message buffer message buffer ...

Cobalt Strike DNS通訊例項

如果沒有網域名稱,可以參考另一篇部落格,申請freenom免費網域名稱,並使用dnspod解析 首先我們要有個網域名稱,然後建立一條a記錄指向我們的cobaltstrike伺服器,然後再建立2個或3個ns記錄指向剛才建立的a記錄。舉例 比如我的網域名稱是 abc.com,先建立一條a記錄指向伺服器 ...