⑴ 求助 給個modbus rtu協議的完整代碼 最好附有詳細解釋 初學者 謝
ModBus常用功能碼 (功能碼為10進制) 01 READ COIL STATUS 讀線圈寄存器 02 READ INPUT STATUS 讀狀態寄存器03 READ HOLDING REGISTER 讀保持寄存器04 READ INPUT REGISTER 讀輸入寄存器 05 WRITE SINGLE COIL 寫單線圈寄存器 06 WRITE SINGLE REGISTER 寫單保持寄存器15 WRITE MULTIPLE COIL 寫多線圈寄存器16 WRITE MULTIPLE REGISTER 寫多保持寄存器
移植的可能性很小,要寫mos的從站程序,
要有modbus通信協議才能編程序??
⑶ 工程上用到了MODBUS tcp 通訊,原來用過MODBUS RTU的協議,不知道他們的主要區別,或者誰有相應的源代碼
Modbus rtu和Modbus tcp兩個協議的本質都是MODBUS協議,都是靠MODBUS寄存器地址來交換數據;
但所用的硬體介面不一樣,Modbus
RTU一般採用串口RS232C或RS485/422,而Modbus TCP一般採用乙太網口。
現在市場上有很多協議轉換器,可以輕松的將這些不同的協議相互轉換 如:Intesisbox可以把modbus rtu轉換成Modbus
tcp實際上Modbus協議包括ASCII、RTU、TCP。
標準的Modicon控制器使用RS232C實現串列的Modbus。Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊採用Maser/Slave方式。
Modbus協議需要對數據進行校驗,串列協議中除有奇偶校驗外,ASCII模式採用LRC校驗,RTU模式採用16位CRC校驗.
ModbusTCP模式沒有額外規定校驗,因為TCP協議是一個面向連接的可靠協議。
TCP和RTU協議非常類似,只要把RTU協議的兩個位元組的校驗碼去掉,然後在RTU協議的開始加上5個0和一個6並通過TCP/IP網路協議發送出去即可。
⑷ vs2008實現modbus rtu通訊,代碼如下,報錯如圖所示:
1、RTU模式時地址(03,十六進制)長度是1個位元組,ASCII模式時地址長度是2個位元組(30、33,ASCII碼)。設備即使支持ASCII、RTU兩種方式,但在設備調試時必須選定一種模式,這樣設備就根據選定的模式,區分是RTU數據幀還是ASCII數據幀而相應地處理。
2、RTU模式要求幀消息的間隔時間大於等於3.5字元時間,這是在應用層上處理的,物理層上的電平變化只是根據應用層的動作隨之變化。我們知道,串口通訊的核心是通用非同步接收/發送裝置(UART),它需要發/收雙方指定相同的波特率/數據位/校驗位/停止位等通訊參數,才可以正確解調出一個位元組數據。若一個RTU數據幀有很多個位元組,UART就是一個一個位元組地連續解調並存到緩沖區中。若發送方發送2個數據幀的間隔很短,接收方的UART就可能無法判斷而當成一個數據幀,所以要求間隔時間不小於3.5字元時間。
⑸ 求 基於java的Modbus/TCP協議 源代碼
public static void TestModbus() throws Exception{
IpParameters params = new IpParameters();
params.setHost("localhost");//地址
params.setPort(502);//埠
ModbusFactory factory = new ModbusFactory();
ModbusMaster master = factory.createTcpMaster(params, true);
// 初始化
try {
master.init();
readHoldingRegistersTest(master,1,0,3);
} catch (ModbusInitException e) {
e.printStackTrace();
} finally {
master.destroy();
}
}
public static void main(String[] args) {
try {
TestModbus();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private static void readHoldingRegistersTest(ModbusMaster master,
int slaveId, int start, int len) {
try {
// ReadInputRegistersRequest request = new ReadInputRegistersRequest(
// slaveId, start, len);
// ReadInputRegistersResponse response = (ReadInputRegistersResponse) master
// .send(request);
ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(
slaveId, start, len);
ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master
.send(request);
if (response.isException()) {
System.out.println("Exception response: message="
+ response.getExceptionMessage());
} else {
ByteQueue byteQueue= new ByteQueue(12);
response.write(byteQueue);
System.out.println(byteQueue);
System.out.println(Arrays.toString(response.getShortData()));
short[] list = response.getShortData();
for(int i = 0; i < list.length; i++){
System.out.print(list[i] + " ");
}
}
} catch (ModbusTransportException e) {
e.printStackTrace();
}
}
⑹ C#的modbus的代碼怎麼寫
先要做就是SOCKET客戶端與設備建立連接,認為有一台伺服器,開了SOCKET服務在哪裡。所以如下代碼就水到渠成了。
設備連上以後,下一步當然就是讀取數據。Modbus的基本原理就是程序向設備請求,需要讀取哪個數據,設備就會返回相應的數據。
⑺ 求c語言編程的Modbus TCP源代碼
從機的可以用freemodbus,我用過RTU的,很好用。
TCP的沒用過,但freemodbus的代碼格式很清晰,移植起來很簡單。
http://www.modbus.org/tech.php
另外可以去MODBUS的網站上找找,看有沒有合適的庫可以用。
⑻ 一套modbus通信代碼可以賣多少錢
應該有幾種可能:1、電能表本身具有通訊功能,那麼通訊功能在表出廠的時候已經寫入程序里,那麼用戶通過電表的通訊介面,就可以讀取電表內數據,上位機軟體通訊協議必須與電表通訊協相同;2、電能本身無通訊功能,用戶提出電表需要帶通訊功能,那麼根據用戶是否對通訊協議和介面有要求,若無要求,可自行採用何種通訊協議,例如:MODBUS、103、CDT等標准協議,也可自行開發協議,那麼在出廠前也要通訊功能寫入電表程序;3、還有一種情況就是上位機廠家提出具體通訊協議,那麼電表廠家就需要根據上位機廠家提現出的協議進行通訊功能開發;總之,帶通訊功能的電表其通訊功能在出廠前都寫入電表程序里,同時電表內部還需要增加通訊晶元等元件,通訊介面有RS232或RS485介面。
⑼ 哪位朋友有modbus通訊協議編寫成C++代碼,指導一下
發送報文的數組當然是byte數組,至於如何組織數據,首先要定義好需要支持的命令;
其次,用通用的通信測試軟體,驗證你的命令,像格西烽火之類的軟體,自定義功能比較強,花在測試驗證的時間少一點;
再次,就是把驗證好的命令填入代碼。
⑽ 求vb寫的modbus rtu測試程序源碼
用VB編寫的MODBUS_RTU通訊協議源程序_圖文_網路文庫
VB編寫的Modbus RTU協議通訊源程序-系統集成代碼類資源-CSDN下載