Jump to content

leonhard.pleuger

Members
  • Gesamte Inhalte

    5
  • Benutzer seit

  • Letzter Besuch

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeit.

leonhard.pleuger's Achievements

Newbie

Newbie (1/14)

0

Reputation in der Community

  1. Hallo, wir haben den Fehler gefunden. Schuld waren die letzten vier Zeichen "\r\n", die Matlab im ASCII Befehl falsch interpretiert hat. Die Nachricht darf also nicht die folgende Form haben: ':9003015E00020C\r\n' Wenn der write Befehl folgendermaßen aussieht, wird das gewünschte Ergebnis ausgegeben. cr = sprintf('\r'); %carriage return lf = newline; %line feed rs485.write([':9003015E00020C', cr, lf]); Der Terminatior muss also extra angehängt werden. Sehr vielen Dank für die Hilfe. :-)
  2. Hi, das fasst die Situation gut zusammen. Es macht allerdings keinen Unterschied, in welcher Reihenfolge Brickviewer und Matlab gestartet werden. es kommt immer das gleiche Ergebnis raus. Versuche, die Hardware neu zu starten, den BrickViewer zu beenden oder Pausen in das Programm einzubauen, haben nicht zum gewünschten Ergebnis geführt. Wir haben mal ein Oszilloskop angeschlossen und dann Anfragen gestellt. Es erscheint dasselbe Signal, unabhängig davon, ob Matlab oder der Brickviewer anfragt. Allerdings konnten wir nur die Anfragen und nicht die Antworten sehen. Ich würde sagen, dass das das Problem darauf einschränkt, dass Matlab die Antwort des Sensors nicht auslesen kann.
  3. Das Encoding ist auf ASCII. Ich habe mal einen Screenshot angehängt. Auf diese Art funktioniert es ohne Probleme.
  4. Hallo, vielen Dank für die schnelle Antwort. Die 7 Bit Wordlength ist schon richtig, da vom Schlauchwaagenherrsteller so vorgegeben. (bei 8 Bit kommt nur Kauderwelsch raus). Bis jetzt habe ich ausschließlich im RS485 Modus gearbeitet, sowohl im Brickviewer, als auch in Matlab. Im Modbus Master Modus bekomme ich bis jetzt einen "Request Timeout". Wenn ich jetzt deine Hinweise umsetze, bekomme ich ein Exception Code: -1, also einen Timeout und keinerlei Daten für "e.holdingRegisters". clc clear all global expected_request_id; global counter; global data; import com.tinkerforge.IPConnection; import com.tinkerforge.BrickletRS485; HOST = 'localhost'; PORT = 4223; UID = 'DKf'; % Change XYZ to the UID of your RS485 Bricklet input('Press key to start\n', 's'); counter = 0; ipcon = IPConnection(); % Create IP connection rs485 = handle(BrickletRS485(UID, ipcon), 'CallbackProperties'); % Create device object ipcon.connect(HOST, PORT); % Connect to brickd % Don't use device before ipcon is connected % Set operating mode to Modbus RTU master rs485.setMode(BrickletRS485.MODE_MODBUS_MASTER_RTU); % Modbus specific configuration: % - slave address = 1 (unused in master mode) % - master request timeout = 1000ms rs485.setModbusConfiguration(144, 3000) % Configuration rs485.setRS485Configuration(9600, BrickletRS485.PARITY_EVEN, ... BrickletRS485.STOPBITS_1, BrickletRS485.WORDLENGTH_7, ... BrickletRS485.DUPLEX_HALF); % Register Modbus master write single register response callback to function % cb_modbus_master_write_single_register_response set(rs485, 'ModbusMasterReadHoldingRegistersResponseCallback', ... @(h, e) cb_modbus_master_read_holding_register_response(e)); % Write 65535 to register 42 of slave 17 17,42,65535 expected_request_id = rs485.modbusMasterReadHoldingRegisters(144, 350, 2); %SW144 register 350;351 input('Press key to exit\n', 's'); ipcon.disconnect(); % Callback function for Modbus master write single register response callback function cb_modbus_master_read_holding_register_response(e) global expected_request_id; global counter; global data tmp_t = now; % counter = counter + 1; fprintf('Request ID: %i\n', e.requestID); fprintf('Expected Request ID: %i\n', expected_request_id); fprintf('Exception Code: %i\n', e.exceptionCode); fprintf('Holding Registers: %i\n', e.holdingRegisters); B = convertCharsToStrings(e.holdingRegisters); C = [tmp_t; B]; data = [data, C]; if e.requestID ~= expected_request_id fprintf('Error: Unexpected request ID\n'); end end Demo_Modbus_PC_HS_Serie.pdf
  5. Hallo zusammen, ich möchte über das "RS485-Bricklet" vier Schlauchwaagengefäße ansteuern und den Hydrostatischen Druck über die Funktion "Read Holding Registers" mit einer Frequenz von 2 Hz auslesen.Für einen ersten Test habe ich Anfragen über den "Brick Viewer" geschickt und die gewünschte Antwort bekommen.Nun ist es aber erforderlich, dass ich diese Anfragen automatisiert über Matlab stelle.Es ist mir möglich auf Grundlage des Beispielcodes "Loopback" eine Verbindung herzustellen, allerdings ist es mir nicht möglich über den "write"-Befehl eine einzelne oder sich wiederholende Anfrage zu stellen.Bei aktiver Verbindung zwischen Matlab und dem RS485-Bricklet kann ich parallel über den Brickviewer einen Input geben, dessen Output mir dann sowohl im Brickviewer, als auch in Matlab angezeigt wird.Was mache ich momentan noch falsch? Wäre Super, wenn mir da jemand weiterhelfen könnte. :)Beste GrüßeLeonhard clc clear all global data import com.tinkerforge.IPConnection; import com.tinkerforge.BrickletRS485; import java.lang.String; % For this example connect the RX+/- pins to TX+/- pins on the same Bricklet % and configure the DIP switch on the Bricklet to full-duplex mode HOST = 'localhost'; PORT = 4223; UID = 'DKf'; % Change XYZ to the UID of your RS485 Bricklet input('Press key to start\n', 's'); ipcon = IPConnection(); % Create IP connection rs485 = handle(BrickletRS485(UID, ipcon), 'CallbackProperties'); % Create device object ipcon.connect(HOST, PORT); % Connect to brickd % Don't use device before ipcon is connected % Set Mode to RS485 rs485.setMode(BrickletRS485.MODE_RS485); % Enable full-duplex mode rs485.setRS485Configuration(9600, BrickletRS485.PARITY_EVEN, ... BrickletRS485.STOPBITS_1, BrickletRS485.WORDLENGTH_7, ... BrickletRS485.DUPLEX_HALF); % Register read callback to function cb_read set(rs485, 'ReadCallback', @(h, e)cb_read(e)); % Enable read callback rs485.enableReadCallback(); % Write "ASCII" string (Adresse und Befehl) rs485.write(String(':9003015E00020C\r\n').toCharArray()); %SWA 144 rs485.write(String(':8E03015E00020E\r\n').toCharArray()); %SWB 142 rs485.write(String(':8D03015E00020F\r\n').toCharArray()); %SWC 141 rs485.write(String(':8F03015E00020D\r\n').toCharArray()); %SWD 143 input('Press key to exit\n', 's'); %Alternative für input ipcon.disconnect(); % Callback function for read callback function cb_read(e) global data tmp_t = now; % fprintf('Message: "%s"\n', e.message); fprintf(e.frameCount); B = convertCharsToStrings(e.message); C = [tmp_t; B]; data = [data, C]; end
×
×
  • Neu erstellen...