Is it possible to use MATLAB on slave computer/device for communication to host computer via serial MODBUS (RTU)

11 views (last 30 days)
Can I communicate with the host/master via serial port (MODBUS ASCII/RTU) using MATLAB on the slave computer, i.e. I need to wait for a request from the host/master, receive it when it comes and send back the requested data to the host. I found how this can implemented for MODBUS TCP/IP, but I did not find how to implement that for MODBUS ASCII/RTU (RS232, RS485). All MATLAB functions for serial port communication seem to be for the case when the code runs on the host computer. My MATLAB code runs on the slave device (processor/computer which controls the analytical instrument) and I need it to send the data when requested to the host (SCADA).

Accepted Answer

Naga
Naga on 16 Oct 2024
Hello Raimundas,
Yes, you can communicate with a host/master via a serial port using MODBUS ASCII/RTU in MATLAB, even when your MATLAB code is running on a slave device. Although MATLAB's built-in functions are more straightforward for TCP/IP communication, you can still achieve serial communication by using MATLAB's 'serialport' function. Here's a general approach to setting up MODBUS ASCII/RTU communication in MATLAB:
% Initialize serial port for MODBUS ASCII/RTU communication
port = "COM3";
baudRate = 9600;
s = serialport(port, baudRate);
% Configure serial port parameters
configureTerminator(s, "CR/LF"); % Use CR/LF for MODBUS ASCII
s.DataBits = 8;
s.Parity = "none"; % adjust if needed
s.StopBits = 1;
% Function to process MODBUS requests
function response = processModbusRequest(request)
% Parse the request and generate a response
% Implement your MODBUS logic here
% Example: Echo back the request as a response
response = strcat("Response: ", request);
end
% Main loop to wait for requests and respond
while true
if s.NumBytesAvailable > 0
request = readline(s); % Read incoming request
response = processModbusRequest(request); % Process request
writeline(s, response); % Send response to master
end
pause(0.1); % Pause to prevent CPU overload
end
  • Modify the 'processModbusRequest' function to implement your specific MODBUS logic.
  • The script continuously checks for incoming data and processes it in real-time.
  • Consider adding error handling for production code to manage unexpected data or communication issues.
This script provides a basic framework for MODBUS ASCII/RTU communication on a slave device using MATLAB. Adjust the code as necessary to fit your specific application and protocol requirements.
Hope this helps!

More Answers (0)

Community Treasure Hunt

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

Start Hunting!