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