Warning: Unsuccessful read: The specified amount of data was not returned within the
Timeout period.
Attempted to access out(6); index out of bounds because numel(out)=0.
Error in read_reg_one (line 47)
msg_back_num = out(6);
Angeschlossen habe ich einen Modbus slave (Arduino mit Ethernet und Modbus).
P.s.: Modbus auf dem Arduino funktioniert, habe es mit einem Labview Programm getestet.
Verfasst am: 24.01.2014, 13:14
Titel: Re: Matlab und Modbus TCP
Hallo knuppel,
Die zu diesem Programmteil gehörenden Kommentare sind Chinesisch, das ich leider nicht spreche. Aber Kommentare hätten ja genau den Zweck, mögliche Probleme zu erklären.
Funktion date = read_reg_one (Link, date_addr, date_num) % ************************************************* **** % SPS lesen Registerdaten (a)
Vor dem Aufruf connect_create%-Link-Funktion zum Erstellen von Links
% Date_addr 请求 数据 起始 地址 date_addr_high date_addr_low % % Beispiele: % Link = connect_create ( '10 .64.15.101 ' , 502) %
Date_num% = 1 / / default lesen Sie ein Registerwert % Read_reg_one (Link, 30,1) % ************************************************* ****
d
% Verarbeitungsdaten % Minus eine Datenadresse
d
% Daten Adresse wird in Zwei-Byte-Hexadezimalzahl zerlegt
date_addr_high = floor(date_addr/100);
date_addr_low = mod(date_addr, 100);
% Anzahl der Daten in zwei-Byte-Hexadezimalzahl zerlegt
date_num_high = floor(date_num/100);
d
% Gibt die Länge der Daten ergab ersten neun Bytes Informationen % 3 mal gelesen % Lesen Sie zuerst sechs, erhalten die Länge der Follow-up-Informationen % Zweite Lesung anschließenden drei Bytes Bytes vom neunten auf die Länge der zurückgegebenen Daten geben % 3. hinter nur Daten lesen
out = fread(Link, 6, 'char' );%第一次
msg_back_num = out (6);
out = fread(Link, 3, 'char' );%第二次
d
out = fread(Link, date_back_num, 'char' );%第三次
% Anzeigen welche Daten % date = out (1) * 100 + aus (2);
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', 3000000);
% 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);
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
Es kann eine Menge Gründehaben, warum das Device nicht antwortet. Vielelicht horchst Du auf dem falschen Port, vielleicht hast Du die Anfrage auf dem falschen Prot geschickt, vielleicht ist die physische Verbindung nicht korrekt, vielleicht is die IP falsch,
Zitat:
Gestern hat es auch mal geklappt und ich hab was zurückbekommen.
Nun müsstes Du herausfinden, was sich seit dem geändert hat. Ich bezweifele, dass ein Forums-Teilnehmer das erraten kann.
Port und IP sind richtig, Verbindung ist da. Hab alles mit einem Modbus Master Programm getestet.
Er hängt sich scheinbar an der Schleife auf.
Eine erfolgreiche Verbindung gibt folgendes aus:
TCPIP Object : TCPIP-192.168.2.177
Communication Settings
RemotePort: 502
RemoteHost: 192.168.2.177
Terminator: 'CR/LF'
NetworkRole: client
Communication State
Status: closed
RecordStatus: off
Read/Write State
TransferStatus: idle
BytesAvailable: 0
ValuesReceived: 0
ValuesSent: 12
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.