无响应:Matlab和Modbus TCP

时间:2014-01-30 18:21:51

标签: matlab modbus

您好我有这段代码从Modbus寄存器40001读取数据:

function [s] = serialstart(opt)
% Funtion for initializing a serial interface in matlab for interfacing

% Functions using the serial port must be passed the serial port object
% s in order for the serial port to be acessable.  

port = 502;  
%   link = tcpip('127.0.0.1',502);  
%   link = tcpip('10.64.15.101',502);  
s = tcpip('192.168.2.177',port);  
%?????  
set(s, 'InputBufferSize', 30000); 

% Initialize serial port on specified com port
date_addr   = 40001;
date_num=1;
date_addr_high = floor(date_addr/100);  
date_addr_low = mod(date_addr,100);  
date_num_high = floor(date_num/100);  
date_num_low = mod(date_num,100); 
%Open serial connection



fopen(s);

% Specify Terminator
s.terminator='CR/LF';




fwrite(s,0,'char')                      %Transactio identifier        0x00  
fwrite(s,0,'char')                      %  Transactio identifier                   0x00  
fwrite(s,0,'char')                      %    Protokol identifier      0x00  
fwrite(s,0,'char')                      %        Protokol identifier              0x00  
fwrite(s,0,'char')                      %     Anzahl Datenbytes  0x00  
fwrite(s,1,'char')                      %         Anzahl Datenbytes        0x06  
fwrite(s,255,'char')                     %     unit identifier    0xff  
fwrite(s,3,'uint8')                       %  Funktion           0x03  
fwrite(s,date_addr_high,'uint8')         %Startadresse High Byte   
fwrite(s,date_addr_low,'uint8')            %Startadresse Low Byte
fwrite(s,0,'uint8')           %Anzahl Register Low Byte
fwrite(s,2,'uint8')     %Anzahl Register High Byte


while ~s.BytesAvailable
end
s.BytesAvailable
res=fread(s,s.BytesAvailable)                 
fclose(s);

我没有回应。 Matlab没有回到命令提示符。 Modbus从站是带有以太网屏蔽的arduino。当我使用modbus主机(例如Modbus Poll)进行测试时,我可以读取寄存器40001。

1 个答案:

答案 0 :(得分:0)

在我看来你的第六个字节:

fwrite(s,1,'char')       %Anzahl Datenbytes 0x06

是1,而不是0x06?协议中的这个字节是有效载荷数据大小,如果你将它设置为' 1',我怀疑任何好的Modbus Slave都会响应。

要检查的第二件事是看起来你正在写入一个255的Modbus从站地址。根据我的经验,这通常不被用作有效的ID(虽然它适用于协议)。确保您尝试与之通信的从站将响应单元ID 255。

祝你好运!