2015-12-22 194 views
0

我正嘗試通過Modbus RTU在Matlab和Watlow F4溫度控制器之間建立通信。Matlab串行通過Modbus RTU與Watlow F4通信

我的代碼看起來像這樣至今:

obj = serial('COM4'); 
fopen(obj); 
set(obj, 'BaudRate', 9600); 
set(obj, 'Terminator', 'CR'); 
set(obj, 'Timeout', 100); 
set(obj, 'InputBufferSize', 3000); 

現在我想讀寄存器100控制器的地址爲1

fwrite(obj, [1 3 00 100 0 1 197 213]); 
fread(obj, 7); 

但隨後出現以下錯誤:

Warning: Unsuccessful read: The specified amount of 
data was not returned within the Timeout period. 

您是否有任何人有過此溝通的經驗?你有什麼想法解決這個問題嗎? 不幸的是,瓦特隆支持無法幫助我與通信...

謝謝!

+0

您的Modbus請求不正確。從站ID後面的字節應包含請求的寄存器數量和CRC。建立自己的Modbus請求和響應的好的起點在這裏:[SimplyModbus](http://www.simplymodbus.ca/FC03.htm)。 在Mathworks文件交換中也有幾個例子:[FEX Modbus Search](http://www.mathworks.com/matlabcentral/fileexchange/?utf8=%E2%9C%93&term=Modbus) –

+0

感謝你的迴應!你確定嗎? 在我的情況: 1 - 從地址 3 - 用於讀取 00 100 = 00 64進制功能代碼3 - 寄存器100,第一個寄存器的數據地址 0 1 - 讀寄存器數 197 213 = C5 D5 hex - CRC 因此,由於您首次鏈接到Simply Modbus,這應該是正確的順序? –

回答

0

更換損壞的RS232/USB適配器解決了這個問題btw。因此,如果有人遇到同樣的問題,也許,我描述的消息是正確的,並且溝通工作是這樣的:)