How to run Modbus TCP in real time using Simulink?

21 次查看(过去 30 天)
Hi,
I have a Matlab script to communicate with my relay using Modbus TCP. The script was generated using Modbus Explorer in Matlab.
The code works well. It turns on/off my relay according to specified conditions as well as reads its status.
I am now trying to execute Matlab code from my Simulink model. I imported Matlab Function block which includes Matlab code (generated before) to control the relay. When I click Run button, I am getting error below:
Cannot write 'double' data to the buffer. The input data have to be 'uint8' type. Function 'MATLAB Function' (#24.1132.1168), line 31, column 1: "write(m, 'coils', 1000, 1, serverId)"
I tried to change names of my variables (as someone suggested that this could be the issue), I also changed all data types but I could not fix it.
I can't understand why am I getting this error if the same code executed in Matlab works fine?
I would be really grateful for your help!

回答(3 个)

Bazarov
Bazarov 2022-7-11
Hi,
I have the same problem. Can anybody help?

Akshay Jankee
Akshay Jankee 2023-2-2
Hi Bartosz and Bazarov,
I also need to do something similar. Have you managed to sort out this issue?
Best regards,
Akshay

TryHarder
TryHarder 2023-11-22
编辑:TryHarder 2023-11-22
Hi everyone,
I have the same issue when I add a constant as an input of my function.
FWIW, the following function works nice from a MatLab function in Simulink :
function dataWrite = dataWrite
modbustype = 'tcpip';
modbusserver = '192.168.0.80';
modbusport = 502 ;
m = modbus(modbustype, modbusserver,modbusport);
write(m,'coils', 1, 1) ;
dataWrite = 1;
But with a constant as an input (activated with a button (on-off)), it did not work and I get the same error message...
function dataWrite = dataWrite(input)
modbustype = 'tcpip';
modbusserver = '192.168.0.80';
modbusport = 502 ;
value = uint8(input) % also test with double(input) or without cast in ordre to debug...
m = modbus(modbustype, modbusserver,modbusport);
write(m,'coils', 1, value) ;
dataWrite = value ; % To a display bloc
If someone had faced the same issue, I am all ears
Thx

类别

Help CenterFile Exchange 中查找有关 Raspberry Pi Hardware 的更多信息

产品


版本

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by