導航:首頁 > 操作系統 > 單片機ModBus開關量採集

單片機ModBus開關量採集

發布時間:2022-12-11 08:56:35

㈠ modbus 單片機開關量起始地址怎麼確定

MODBUS是一個完整的協議,與51單片機完全不相干。明白了這點,暫時把51單片機這個因素排除,回到MODBUS的方式來討論問題。
有8個「線圈」需要控制,上位機與下位機約定這8個「線圈」的地址是多少,假設是19到27。MODBUS主機發指令,19號線圈吸合,從機接收到指令,具體怎麼執行19號線圈吸合再說,只要能夠返回響應(或者異常),從MODBUS協議的層面來看,這件事情就已經完事了。
下面說具體執行19號線圈吸合,這個事情MODBUS是不去管的,由下位機自己看著辦。你願意接一個LED亮一下,或者接一個繼電器動作都行。或者你什麼也不做,只是記錄下這個動作都行。總之,這個具體的行為是具體設備自己定義的。

㈡ wincc中怎麼採集modbustcp中的開關量

Wincc上位機軟體與測聯無紙記錄儀通過Modbus TCP/IP通信,將無紙記錄儀採集到的參數在 Wincc畫面上顯示。

㈢ 如何使用RTU數據採集終端中的modbus功能

登陸RTU WEB配置頁面
確保RTU的網線接入路由器或者直接電腦(電腦要先設置好和RTU同個網段的IP),RTU默認IP地址為192.168.1.2。在瀏覽器輸入IP地址,用戶名、密碼均為admin,確定後就可以進入RTU的本地WEB頁面了。
如何使用RTU數據採集終端中的modbus功能?
配置MODBUS連接參數
說明:
1、點擊RTU設置服務參數選項。
2、點擊Edit進行編輯。
3、設置伺服器IP地址(本電腦外網IP地址是:110.80.17.74)或者域名地址
4、埠號(若經過 路由器轉接需進行埠映射)
5、數據中心協議:MODBUS
6、啟用伺服器。
7、提交設置。
根據需要設置RTU ID號、MODBUS ID、SIM卡號,這幾個參數跟注冊包相關,用於中心識別不同的設備。
如何使用RTU數據採集終端中的modbus功能?
啟用伺服器埠,步驟如下:
1、開啟服務端,設置埠號為27000,這里的埠號要與RTU上設置的埠一致,並且要有在路由器做好映射的埠。
2、啟動伺服器等待連接,第一次RTU會發送注冊包請求連接服務端。
3、注冊包示例:66 66 66 66 31 33 38 38 38 38 38 38 38 38 38 00 C0 A8 01 C3 00
如何使用RTU數據採集終端中的modbus功能?
測試一下modbus調試的是否正確連接,見下圖:
把Hex顯示打勾,可以看到注冊包數據:66 66 66 66 31 33 38 38 38 38 38 38 38 38 38 00 C0 A8 01 C3 00
如果有類似的信息上傳,說明modbus連接成功。
如何使用RTU數據採集終端中的modbus功能?
關於注冊包的說明
首次注冊包:
格式:
ID
PHONE_NUMBER
0
IP_ADD
ETX
4位元組 11位元組 1位元組 4位元組 1位元組

說明:
ID: 8位HEX ID編號
PHONE_NUMBER: 11位手機電話號碼的ASCII碼
IP_ADD: 動態IP地址(HEX)
ETX: 0x00表明數據的結束。

例如:0x 78 56 34 12 31 33 30 36 36 36 36 38 38 38 38 00 c0 a8 01 42 00
解析如下:
78 56 34 12 表示ID號為12345678
31 33 30 36 36 36 36 38 38 38 38 表示手機號碼為:13066668888
c0 a8 01 42 表示IP地址為:192.168.1.66

採集一個關開量,用於採集真實的數據:
1、要在RTU的配置頁面里,啟用開關量設置
首先要「選擇開關/計數器模式「為開關模式,點擊「開關/計數器輸入配置「項
然後,選擇開關/計數器模式為「開關模式「。因為計數器1-6路跟開關輸入的3-8路是復用的,默認是」開關模式「就不用再配置。配置好後,點擊Apply提交。
2、啟用開關量配置
如何使用RTU數據採集終端中的modbus功能?
下發MODBUS數據採集開關輸入
此時,就可以在網路調試助手上下發MODBUS數據採集開關輸入,RTU就會回應數據,大概操作如下:
-顯示RTU設備已建立連接,記得打勾。
-勾選16進制發送。
-下發MODBUS指令。
-點擊發送
-對應的響應幀。
-RTU連接到SERVER後,SERVER會收到注冊包,SERVER就可以下發下發MODBUS數據採集開關輸入,RTU就會回應相應數據。
如何使用RTU數據採集終端中的modbus功能?

㈣ 關於51單片機上實現modbus協議

你找一個MODBUS的協議詳細資料好好看看,就是一種通訊約定,你按照它規定的格式通訊就可以了
協議發送給詢問方。 Modbus協議包括ASCII、RTU、TCP等,並沒有規定物理層。此協議定義了控制器能夠認識和使用的消息結構,而不管它們是經過何種網路進行通信的。標準的Modicon控制器使用RS232C實現串列的Modbus。Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊採用Maser/Slave方式,Master端發出數據請求消息,Slave端接收到正確消息後就可以發送數據到Master端以響應請求;Master端也可以直接發消息修改Slave端的數據,實現雙向讀寫。 Modbus協議需要對數據進行校驗,串列協議中除有奇偶校驗外,ASCII模式採用LRC校驗,RTU模式採用16位CRC校驗,但TCP模式沒有額外規定校驗,因為TCP協議是一個面向連接的可靠協議。另外,Modbus採用主從方式定時收發數據,在實際使用中如果某Slave站點斷開後(如故障或關機),Master端可以診斷出來,而當故障修復後,網路又可自動接通。因此,Modbus協議的可靠性較好。 下面我來簡單的給大家介紹一下,對於Modbus的ASCII、RTU和TCP協議來說,其中TCP和RTU協議非常類似,我們只要把RTU協議的兩個位元組的校驗碼去掉,然後在RTU協議的開始加上5個0和一個6並通過TCP/IP網路協議發送出去即可。所以在這里我僅介紹一下Modbus的ASCII和RTU協議。 下表是ASCII協議和RTU協議進行的比較: 協議 開始標記 結束標記 校驗 傳輸效率 程序處理
ASCII :(冒號) CR,LF LRC 低 直觀,簡單,易調試
RTU 無 無 CRC 高 不直觀,稍復雜

通過比較可以看到,ASCII協議和RTU協議相比擁有開始和結束標記,因此在進行程序處理時能更加方便,而且由於傳輸的都是可見的ASCII字元,所以進行調試時就更加的直觀,另外它的LRC校驗也比較容易。但是因為它傳輸的都是可見的ASCII字元,RTU傳輸的數據每一個位元組ASCII都要用兩個位元組來傳輸,比如RTU傳輸一個十六進制數0xF9,ASCII就需要傳輸』F』』9』的ASCII碼0x39和0x46兩個位元組,這樣它的傳輸的效率就比較低。所以一般來說,如果所需要傳輸的數據量較小可以考慮使用ASCII協議,如果所需傳輸的數據量比較大,最好能使用RTU協議。

下面對兩種協議的校驗進行一下介紹。

1、LRC校驗

LRC域是一個包含一個8位二進制值的位元組。LRC值由傳輸設備來計算並放到消息幀中,接收設備在接收消息的過程中計算LRC,並將它和接收到消息中LRC域中的值比較,如果兩值不等,說明有錯誤。

LRC校驗比較簡單,它在ASCII協議中使用,檢測了消息域中除開始的冒號及結束的回車換行號外的內容。它僅僅是把每一個需要傳輸的數據按位元組疊加後取反加1即可。下面是它的VC代碼:

BYTE GetCheckCode(const char * pSendBuf, int nEnd)//獲得校驗碼

{

BYTE byLrc = 0;

char pBuf[4];

int nData = 0;

for(i=1; i<end; i+=2) //i初始為1,避開「開始標記」冒號

{

//每兩個需要發送的ASCII碼轉化為一個十六進制數

pBuf [0] = pSendBuf [i];

pBuf [1] = pSendBuf [i+1];

pBuf [2] = '\0';

sscanf(pBuf,"%x",& nData);

byLrc += nData;

}

byLrc = ~ byLrc;

byLrc ++;

return byLrc;

}

2、CRC校驗

CRC域是兩個位元組,包含一16位的二進制值。它由傳輸設備計算後加入到消息中。接收設備重新計算收到消息的CRC,並與接收到的CRC域中的值比較,如果兩值不同,則有誤。

CRC是先調入一值是全「1」的16位寄存器,然後調用一過程將消息中連續的8位位元組各當前寄存器中的值進行處理。僅每個字元中的8Bit數據對CRC有效,起始位和停止位以及奇偶校驗位均無效。

CRC產生過程中,每個8位字元都單獨和寄存器內容相或(OR),結果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,寄存器單獨和預置的值或一下,如果LSB為0,則不進行。整個過程要重復8次。在最後一位(第8位)完成後,下一個8位位元組又單獨和寄存器的當前值相或。最終寄存器中的值,是消息中所有的位元組都執行之後的CRC值。

CRC添加到消息中時,低位元組先加入,然後高位元組。下面是它的VC代碼:

WORD GetCheckCode(const char * pSendBuf, int nEnd)//獲得校驗碼

{

WORD wCrc = WORD(0xFFFF);

for(int i=0; i<nEnd; i++)

{

wCrc ^= WORD(BYTE(pSendBuf[i]));

for(int j=0; j<8; j++)

{

if(wCrc & 1)

{

wCrc >>= 1;

wCrc ^= 0xA001;

}

else

{

wCrc >>= 1;

}

}

}

return wCrc;

}

對於一條RTU協議的命令可以簡單的通過以下的步驟轉化為ASCII協議的命令:

1、 把命令的CRC校驗去掉,並且計算出LRC校驗取代。

2、 把生成的命令串的每一個位元組轉化成對應的兩個位元組的ASCII碼,比如0x03轉化成0x30,0x33(0的ASCII碼和3的ASCII碼)。

3、 在命令的開頭加上起始標記「:」,它的ASCII碼為0x3A。

4、 在命令的尾部加上結束標記CR,LF(0xD,0xA),此處的CR,LF表示回車和換行的ASCII碼。

所以以下我們僅介紹RTU協議即可,對應的ASCII協議可以使用以上的步驟來生成。

下表是Modbus支持的功能碼:

功能碼 名稱 作用
01 讀取線圈狀態 取得一組邏輯線圈的當前狀態(ON/OFF)
02 讀取輸入狀態 取得一組開關輸入的當前狀態(ON/OFF)
03 讀取保持寄存器 在一個或多個保持寄存器中取得當前的二進制值
04 讀取輸入寄存器 在一個或多個輸入寄存器中取得當前的二進制值
05 強置單線圈 強置一個邏輯線圈的通斷狀態
06 預置單寄存器 把具體二進值裝入一個保持寄存器
07 讀取異常狀態 取得8個內部線圈的通斷狀態,這8個線圈的地址由控制器決定
08 回送診斷校驗 把診斷校驗報文送從機,以對通信處理進行評鑒
09 編程(只用於484) 使主機模擬編程器作用,修改PC從機邏輯
10 控詢(只用於484) 可使主機與一台正在執行長程序任務從機通信,探詢該從機是否已完成其操作任務,僅在含有功能碼9的報文發送後,本功能碼才發送
11 讀取事件計數 可使主機發出單詢問,並隨即判定操作是否成功,尤其是該命令或其他應答產生通信錯誤時
12 讀取通信事件記錄 可是主機檢索每台從機的Modbus事務處理通信事件記錄。如果某項事務處理完成,記錄會給出有關錯誤
13 編程(184/384 484 584) 可使主機模擬編程器功能修改PC從機邏輯
14 探詢(184/384 484 584) 可使主機與正在執行任務的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發送後,本功能碼才得發送
15 強置多線圈 強置一串連續邏輯線圈的通斷
16 預置多寄存器 把具體的二進制值裝入一串連續的保持寄存器
17 報告從機標識 可使主機判斷編址從機的類型及該從機運行指示燈的狀態
18 (884和MICRO 84) 可使主機模擬編程功能,修改PC狀態邏輯
19 重置通信鏈路 發生非可修改錯誤後,是從機復位於已知狀態,可重置順序位元組
20 讀取通用參數(584L) 顯示擴展存儲器文件中的數據信息
21 寫入通用參數(584L) 把通用參數寫入擴展存儲文件,或修改之
22~64 保留作擴展功能備用
65~72 保留以備用戶功能所用 留作用戶功能的擴展編碼
73~119 非法功能
120~127 保留 留作內部作用
128~255 保留 用於異常應答

在這些功能碼中較長使用的是1、2、3、4、5、6號功能碼,使用它們即可實現對下位機的數字量和模擬量的讀寫操作。

1、讀可讀寫數字量寄存器(線圈狀態):

計算機發送命令:[設備地址] [命令號01] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

例:[11][01][00][13][00][25][CRC低][CRC高]

意義如下:

<1>設備地址:在一個485匯流排上可以掛接多個設備,此處的設備地址表示想和哪一個設備通訊。例子中為想和17號(十進制的17是十六進制的11)通訊。

<2>命令號01:讀取數字量的命令號固定為01。

<3>起始地址高8位、低8位:表示想讀取的開關量的起始地址(起始地址為0)。比如例子中的起始地址為19。

<4>寄存器數高8位、低8位:表示從起始地址開始讀多少個開關量。例子中為37個開關量。

<5>CRC校驗:是從開頭一直校驗到此之前。在此協議的最後再作介紹。此處需要注意,CRC校驗在命令中的高低位元組的順序和其他的相反。

設備響應:[設備地址] [命令號01] [返回的位元組個數][數據1][數據2]...[數據n][CRC校驗的低8位] [CRC校驗的高8位]

例:[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高]

意義如下:

<1>設備地址和命令號和上面的相同。

<2>返回的位元組個數:表示數據的位元組個數,也就是數據1,2...n中的n的值。

<3>數據1...n:由於每一個數據是一個8位的數,所以每一個數據表示8個開關量的值,每一位為0表示對應的開關斷開,為1表示閉合。比如例子中,表示20號(索引號為19)開關閉合,21號斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合...如果詢問的開關量不是8的整倍數,那麼最後一個位元組的高位部分無意義,置為0。

<4>CRC校驗同上。

2、讀只可讀數字量寄存器(輸入狀態):

和讀取線圈狀態類似,只是第二個位元組的命令號不再是1而是2。

3、寫數字量(線圈狀態):

計算機發送命令:[設備地址] [命令號05] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

例:[11][05][00][AC][FF][00][CRC低][CRC高]

意義如下:

<1>設備地址和上面的相同。

<2>命令號:寫數字量的命令號固定為05。

<3>需下置的寄存器地址高8位,低8位:表明了需要下置的開關的地址。

<4>下置的數據高8位,低8位:表明需要下置的開關量的狀態。例子中為把該開關閉合。注意,此處只可以是[FF][00]表示閉合[00][00]表示斷開,其他數值非法。

<5>注意此命令一條只能下置一個開關量的狀態。

設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。

4、讀可讀寫模擬量寄存器(保持寄存器):

計算機發送命令:[設備地址] [命令號03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

例:[11][03][00][6B][00][03][CRC低][CRC高]

意義如下:

<1>設備地址和上面的相同。

<2>命令號:讀模擬量的命令號固定為03。

<3>起始地址高8位、低8位:表示想讀取的模擬量的起始地址(起始地址為0)。比如例子中的起始地址為107。

<4>寄存器數高8位、低8位:表示從起始地址開始讀多少個模擬量。例子中為3個模擬量。注意,在返回的信息中一個模擬量需要返回兩個位元組。

設備響應:[設備地址] [命令號03] [返回的位元組個數][數據1][數據2]...[數據n][CRC校驗的低8位] [CRC校驗的高8位]

例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]

意義如下:

<1>設備地址和命令號和上面的相同。

<2>返回的位元組個數:表示數據的位元組個數,也就是數據1,2...n中的n的值。例子中返回了3個模擬量的數據,因為一個模擬量需要2個位元組所以共6個位元組。

<3>數據1...n:其中[數據1][數據2]分別是第1個模擬量的高8位和低8位,[數據3][數據4]是第2個模擬量的高8位和低8位,以此類推。例子中返回的值分別是555,0,100。

<4>CRC校驗同上。

5、讀只可讀模擬量寄存器(輸入寄存器):

和讀取保存寄存器類似,只是第二個位元組的命令號不再是2而是4。

6、寫單個模擬量寄存器(保持寄存器):

計算機發送命令:[設備地址] [命令號06] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

例:[11][06][00][01][00][03][CRC低][CRC高]

意義如下:

<1>設備地址和上面的相同。

<2>命令號:寫模擬量的命令號固定為06。

<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。

<4>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為3。

<5>注意此命令一條只能下置一個模擬量的狀態。

設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。

㈤ 單片機,modbus做什麼項目,可以拿去面試呢

一般都是感測器信號採集,現場工控設備的信號採集和遠程設置。可以做一個閥門控制或者壓力表遠程讀書等。

閱讀全文

與單片機ModBus開關量採集相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:755
蘋果郵件無法連接伺服器地址 瀏覽:958
phpffmpeg轉碼 瀏覽:669
長沙好玩的解壓項目 瀏覽:140
專屬學情分析報告是什麼app 瀏覽:562
php工程部署 瀏覽:831
android全屏透明 瀏覽:730
阿里雲伺服器已開通怎麼辦 瀏覽:801
光遇為什麼登錄時伺服器已滿 瀏覽:300
PDF分析 瀏覽:483
h3c光纖全工半全工設置命令 瀏覽:140
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:681
如何取消命令方塊指令 瀏覽:347
風翼app為什麼進不去了 瀏覽:776
im4java壓縮圖片 瀏覽:360
數據查詢網站源碼 瀏覽:148
伊克塞爾文檔怎麼進行加密 瀏覽:888
app轉賬是什麼 瀏覽:162