『壹』 RS485通過modbus rtu協議通信和通過pc載入器協議通信
(一)、通訊口設置
DCB dcb;
hCom=CreateFile("COM1",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hCom==INVALID_HANDLE_VALUE)
{
MessageBox("createfile error,error");
}
BOOL error=SetupComm(hCom,1024,1024);
if(!error)
MessageBox("setupcomm error");
error=GetCommState(hCom,&dcb);
if(!error)
MessageBox("getcommstate,error");
dcb.BaudRate=2400;
dcb.ByteSize=8;
dcb.Parity=EVENPARITY;//NOPARITY;
dcb.StopBits=ONESTOPBIT;
error=SetCommState(hCom,&dcb);
(二)、CRC校驗碼計算
UINT crc
void calccrc(BYTE crcbuf)
{
BYTE i;
crc=crc ^ crcbuf;
for(i=0;i<8;i++)
{
BYTE TT;
TT=crc&1;
crc=crc>>1;
crc=crc&0x7fff;
if (TT==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
}
(三)、數據發送
zxaddr=11;//讀取地址為11的巡檢表數據
zxnum=10;//讀取十個通道的數據
writebuf2[0]=zxaddr;
writebuf2[1]=3;
writebuf2[2]=0;
writebuf2[3]=0;
writebuf2[4]=0;
writebuf2[5]=zxnum;
crc=0xffff;
calccrc(writebuf2[0]);
calccrc(writebuf2[1]);
calccrc(writebuf2[2]);
calccrc(writebuf2[3]);
calccrc(writebuf2[4]);
calccrc(writebuf2[5]);
writebuf2[6]=crc & 0xff;
writebuf2[7]=crc/0x100;
WriteFile(hCom,writebuf2,8,&comnum,NULL);
(四)、數據讀取
ReadFile(hCom,writebuf,5+zxnum*2,&comnum,NULL);//讀取zxnum個通道數據可增加錯誤處理程序,如地址碼錯誤、CRC碼錯誤判斷、通訊故障處理等。
別外還有其他說明,請登陸聚英電子網--搜索--modbus rtu協議
『貳』 MODBUS RTU通訊協議中,功能碼為15、16的請求格式怎麼寫,各個位元組代表什麼含義
功能碼16號命令請求格式(從設備地址為1、Modbus功能碼16、Modbus寄存器開始地址0、寫寄存器個數10):01 10 00 00 00 0A 14 12 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 21 84 93
位元組0為從設備ID、位元組1為功能碼(十六進制)、位元組2-3為Modbus寄存器開始地址、位元組4-5為寄存器個數、位元組6為發送位元組個數、位元組7-26為發送數據(20個位元組)、位元組27-28為RCR校驗。
功能碼15號命令請求格式(從設備地址為1、Modbus功能碼15、Modbus寄存器開始地址0、寫位變數個數16,即2個位元組):01 0F 00 00 00 10 02 01 00 E3 B0
位元組0為從設備ID、位元組1為功能碼(十六進制)、位元組2-3為Modbus寄存器開始地址、位元組4-5為Modbus寄存器格式、位元組6為發送位元組個數、位元組7-8為發送數據(2個位元組即16個位)、位元組9-10為CRC校驗。
(2)modbusrtu通訊協議編程擴展閱讀
Modbus允許多個 (大約240個) 設備連接在同一個網路上進行通信,舉個例子,一個由測量溫度和濕度的裝置,並且將結果發送給計算機。
在數據採集與監視控制系統(SCADA)中,Modbus通常用來連接監控計算機和遠程終端控制系統(RTU)。
Modbus協議目前存在用於串口、乙太網以及其他支持互聯網協議的網路的版本。大多數Modbus設備通信通過串口EIA-485物理層進行。
『叄』 C語言如何編寫modbus RTU協議
如果你想了解MODBUS-RTU,看看下面這個鏈接。
http://www.360doc.com/content/14/0120/10/7991404_346584755.shtml
網上MODBUS-RTU的實例很多,你可以借鑒。
但是,協議這個東西不是變成達到的,它是在程序設計之前就要擬定好,協議定好以後才有C程序按照協議制定的來編寫。針對modbus-rtu來說,你需要把鏈接里第二部分的協議基本約定看懂之後,再來著手。
加油吧。這個會花些時間。
『肆』 modbus協議不同怎麼辦
MODBUS通訊協議及編程的簡要概論:
ModBus通訊協議分為RTU協議和ASCII協議,我公司的多種儀表都採用ModBus RTU通訊協議,如:CH2000智能電力監測儀、CH2000M電力參數採集模塊、巡檢表、數顯表、光柱數顯表等。下面就ModBus RTU協議簡要介紹如下:
一、通訊協議
(一)、通訊傳送方式:
通訊傳送分為獨立的信息頭,和發送的編碼數據。以下的通訊傳送方式定義也與MODBUS RTU通訊規約相兼容:
編 碼 8位二進制
起始位 1位
數據位 8位
奇偶校驗位 1位(偶校驗位)
停止位 1位
錯誤校檢 CRC(冗餘循環碼)
初始結構 = ≥4位元組的時間
地址碼 = 1 位元組
功能碼 = 1 位元組
數據區 = N 位元組
錯誤校檢 = 16位CRC碼
結束結構 = ≥4位元組的時間
地址碼:地址碼為通訊傳送的第一個位元組。這個位元組表明由用戶設定地址碼的從機將接收由主機發送來的信息。並且每個從機都有具有唯一的地址碼,並且響應回送均以各自的地址碼開始。主機發送的地址碼表明將發送到的從機地址,而從機發送的地址碼表明回送的從機地址。
功能碼:通訊傳送的第二個位元組。ModBus通訊規約定義功能號為1到127。本儀表只利用其中的一部分功能碼。作為主機請求發送,通過功能碼告訴從機執行什麼動作。作為從機響應,從機發送的功能碼與從主機發送來的功能碼一樣,並表明從機已響應主機進行操作。如果從機發送的功能碼的最高位為1(比如功能碼大與此同時127),則表明從機沒有響應操作或發送出錯。
數據區:數據區是根據不同的功能碼而不同。數據區可以是實際數值、設置點、主機發送給從機或從機發送給主機的地址。
CRC碼:二位元組的錯誤檢測碼。
(二)、通訊規約:
當通訊命令發送至儀器時,符合相應地址碼的設備接通訊命令,並除去地址碼,讀取信息,如果沒有出錯,則執行相應的任務;然後把執行結果返送給發送者。返送的信息中包括地址碼、執行動作的功能碼、執行動作後結果的數據以及錯誤校驗碼。如果出錯就不發送任何信息。
1.信息幀結構
地址碼 功能碼 數據區 錯誤校驗碼
8位 8位 N × 8位 16位
地址碼:地址碼是信息幀的第一位元組(8位),從0到255。這個位元組表明由用戶設置地址的從機將接收由主機發送來的信息。每個從機都必須有唯一的地址碼,並且只有符合地址碼的從機才能響應回送。當從機回送信息時,相當的地址碼表明該信息來自於何處。
功能碼:主機發送的功能碼告訴從機執行什麼任務。表1-1列出的功能碼都有具體的含義及操作。
代碼 含義 操作
03 讀取數據 讀取當前寄存器內一個或多個二進制值
06 重置單一寄存器 把設置的二進制值寫入單一寄存器
數據區:數據區包含需要從機執行什麼動作或由從機採集的返送信息。這些信息可以是數值、參考地址等等。例如,功能碼告訴從機讀取寄存器的值,則數據區必需包含要讀取寄存器的起始地址及讀取長度。對於不同的從機,地址和數據信息都不相同。
錯誤校驗碼:主機或從機可用校驗碼進行判別接收信息是否出錯。有時,由於電子雜訊或其它一些干擾,信息在傳輸過程中會發生細微的變化,錯誤校驗碼保證了主機或從機對在傳送過程中出錯的信息不起作用。這樣增加了系統的安全和效率。錯誤校驗採用CRC-16校驗方法。
註:信息幀的格式都基本相同:地址碼、功能碼、數據區和錯誤校驗碼。
2.錯誤校驗
冗餘循環碼(CRC)包含2個位元組,即16位二進制。CRC碼由發送設備計算,放置於發送信息的尾部。接收信息的設備再重新計算接收到信息的 CRC碼,比較計算得到的CRC碼是否與接收到的相符,如果兩者不相符,則表明出錯。
CRC碼的計算方法是,先預置16位寄存器全為1。再逐步把每8位數據信息進行處理。在進行CRC碼計算時只用8位數據位,起始位及停止位,如有奇偶校驗位的話也包括奇偶校驗位,都不參與CRC碼計算。
在計算CRC碼時,8位數據與寄存器的數據相異或,得到的結果向低位移一位元組,用0填補最高位。再檢查最低位,如果最低位為1,把寄存器的內容與預置數相異或,如果最低位為0,不進行異或運算。
這個過程一直重復8次。第8次移位後,下一個8位再與現在寄存器的內容相相異或,這個過程與以上一樣重復8次。當所有的數據信息處理完後,最後寄存器的內容即為CRC碼值。CRC碼中的數據發送、接收時低位元組在前。
計算CRC碼的步驟為:
預置16位寄存器為十六進制FFFF(即全為1)。稱此寄存器為CRC寄存器;
把第一個8位數據與16位CRC寄存器的低位相異或,把結果放於CRC寄存器;
把寄存器的內容右移一位(朝低位),用0填補最高位,檢查最低位;
如果最低位為0:重復第3步(再次移位); 如果最低位為1:CRC寄存器與多項式A001(1010 0000 0000 0001)進行異或;
重復步驟3和4,直到右移8次,這樣整個8位數據全部進行了處理;
重復步驟2到步驟5,進行下一個8位數據的處理;
最後得到的CRC寄存器即為CRC碼。
3.功能碼03,讀取點和返回值:
儀表採用Modbus RTU通訊規約,利用通訊命令,可以進行讀取點(「保持寄存器」) 或返回值(「輸入寄存器」 )的操作。保持和輸入寄存器都是16位(2位元組)值,並且高位在前。這樣用於儀表的讀取點和返回值都是2位元組。一次最多可讀取寄存器數是60。由於一些可編程式控制制器不用功能碼03,所以功能碼03被用作讀取點和返回值。從機響應的命令格式是從機地址、功能碼、數據區及CRC碼。數據區中的寄存器數據都是每兩個位元組高位元組在前。
4.功能碼06,單點保存
主機利用這條命令把單點數據保存到儀表的存儲器。從機也用這個功能碼向主機返送信息。
『伍』 Modbus標准協議和 Modbus RTU協議有區別嗎
Modbus是一種串列通信協議,是Modicon公司(現在的施耐德電氣Schneider Electric)於1979年為使用可編程邏輯控制器(PLC)通信而發表。它有三種類型,Modbus RTU是一種緊湊的,採用二進製表示數據;Modbus ASCII是一種人類可讀的,冗長的表示方式;RTU格式後續的命令/數據帶有循環冗餘校驗的校驗和。Modbus在通訊時要指定一個主設備和多個從設備,通訊模型:輪詢。
物理硬體層大多數Modbus設備通信通過串口EIA-485物理層進行,現在也有在其它的物理層中使用,近幾年有做出透傳MODBUS協議的匯流排技術,如POWERBUS等,可以透傳MODBUS協議並將匯流排模式由四線轉為二線。
『陸』 做MODBUS RTU通訊時,如何讀取設備寄存器40001中的浮點數
首先澄清一點:做Modbus通訊時,Modbus傳回的數據只有Byte數據,實數還是整數是由您的地址來決定的。如果您調用的是浮點數的地址,浮點數佔用4個位元組,即2個連續的整數地址。所以轉換為實數時和您使用的地址有關。接阿鳴的描述,補充如下:西門子所有數據以位元組為單位,順序都是按照低位元組、高位元組的依次順序排列的。而Modbus協議是按照字或位為單位(因此,字地址和位地址不會發生沖突,可以任意調用)。順序(以浮點數的2個字舉例)是按照低字的高位元組、低字的低位元組、高字的高位元組、高字的高位元組的順序排列的,因此,所有順序與西門子的順序完全是反的。注意是字中的高低位元組的位置發生變化,而非阿鳴說的高低字發生變化。如果需要轉換,用移位等指令很容易可以實現。
『柒』 西門子CPU226,版本01.23modbus rtu通訊怎樣編程
modbu rtu通訊分主站和從站
CPU226 可以做主站也可以做從站
建議你看一下S7-200 系統手冊,內部有詳細的使用說明。
如果需要我可以發給你。
(專業從事 自動化控制系統 電氣設計和軟體編程調試)
S7-200SMART CPU集成RS485介面,支持Modbus RTU 通訊協議。
S7-200SMART可以做Modbus 從站,也可以做Modbus 主站。
如果需要 Modbus RTU 通訊常式,我可以提供,提供通訊程序講解,遠程協助調試。
『捌』 什麼是Moubus RTU 通訊協議
Modbus協議最初由Modicon公司開發出來,在1979年末該公司成為施耐德自動化(Schneider
Automation)部門的一部分,現在Modbus已經是工業領域全球最流行的協議。此協議支持傳統的RS-
232、RS-422、RS-485和乙太網設備。許多工業設備,包括PLC,DCS,智能儀表等都在使用Modbus協
議作為他們之間的通訊標准。有了它,不同廠商生產的控制設備可以連成工業網路,進行集中監控
。
當在網路上通信時,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協議rtu是什麼
Modbus協議包括ASCII、RTU、TCP等,並沒有規定物理層。此協議定義了控制器能夠認識和使用的消息結構,而不管它們是經過何種網路進行通信的。標準的Modicon控制器使用RS232C實現串列的Modbus。
Modbus具有以下幾個特點:
(1)標准、開放,用戶可以免費、放心地使用Modbus協議,不需要交納許可證費,也不會侵犯知識產權。目前,支持Modbus的廠家超過400家,支持Modbus的產品超過600種。
(2)Modbus可以支持多種電氣介面,如RS-232、RS-485等,還可以在各種介質上傳送,如雙絞線、光纖、無線等。
(3)Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發簡單。
什麼是Modbus RTU協議?
Modbus RTU協議是一種通信方式,允許在可編程邏輯控制器(PLC)與計算機之間進行數據交換。電子設備可以使用Modbus協議通過串列線路交換信息。
Modbus RTU(遠程終端單元)是原始Modbus規范中定義的兩種傳輸模式之一。兩種模式分別是Modbus RTU和ASCII,並且都設計為與支持RS232、RS485和RS422協議的串口設備一起使用。Modbus RTU的一個顯著特徵是它使用二進制編碼和強大的CRC錯誤檢查。Modbus RTU是Modbus協議的實現,該協議最常用於工業應用和自動化生產設施中。
在某些情況下,使用Modbus RTU測試儀會很有幫助。
『拾』 MODBUSTCP通信協議有哪幾個指令完成,分別起什麼作用
MODBUSTCP通信協議指令及作用如下:
1、指令
MB_CLIENT(作為Modbus TCP客戶端)。
MB_SERVER(作為Modbus TCP伺服器)。
MB_CLIENT 表示MODBUS SCLIENT。
2、作用
「MB_CLIENT」指令作為 Modbus TCP 客戶端通過 S7-1200 CPU 的 PROFINET 連接進行通信。使用該指令,無需其它任何硬體模塊。通過「MB_CLIENT」指令,可以在客戶端和伺服器之間建立連接、發送請求、接收響應並控制 Modbus TCP 伺服器的連接終端。
MB_SERVER表示MODBUS SERVER
「MB_SERVER」指令作為 Modbus TCP 伺服器通過 S7-1200 CPU 的 PROFINET 連接進行通信。使用該指令,無需其它任何硬體模塊。「MB_SERVER」指令將處理 Modbus TCP 客戶端的連接請求、接收 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網路協議發送出去即可。