使用matlab等待来自线性平台设备的命令超时

timeout on waiting for command from linear stage device using matlab

我正在尝试在步进电机控制器的 RS485 端口和笔记本电脑的 COM 端口之间建立全双工串行通信。我使用的电缆连接到控制器上的 RS485 和笔记本电脑上的 USB 端口。我正在使用 Matlab 脚本向控制器发送和接收命令,以在引导线性刻度上移动阶段块。虽然我可以打开与设备的串行连接并发送命令以在线性刻度上推进载物台,但我无法从控制器接收到任何响应消息。 我在 Matlab 中有以下代码 -

stage = serial('COM4', 'baudrate', 9600, 'terminator', 'CR');
fopen(stage)

%part below does not work and timeout happens
fprintf(stage,'@00VER')
pause(10)
out = fscanf(stage)

%part below works and I am able to move the block for 5 secs.
fprintf(stage, '@00HSPD=5000');
fprintf(stage, '@00J+');
pause(5);
fprintf(stage, '@00STOP');
pause(5);
fclose(stage)
delete(stage)
clear stage

脚本等待消息时发生超时,如下所示 -

Warning: Unsuccessful read: A timeout occurred before the Terminator was
reached.. 

out =

  0×0 empty char array

如果有人能指出如何从控制器获取任何消息,无论是简单的 OK 还是我在上面的代码中尝试执行的版本,都会有所帮助。

我必须指出,我提到了以下问题,但要么它们没有帮助,要么我无法将我的问题与给定的解决方案联系起来 -

  1. USB Communication from Arduino to Unity: Timeout Error

您需要从设备文档中确认一些通信细节。

首先,您好像查询的是设备的版本。确保“@00VER”是正确的命令,并且设备是否需要终止符来识别命令,例如“\r”?

其次,确保需要终止符,如果需要,则正确。要调试,您可以使用 no 'Terminator' 设置端口,然后读取端口以检查您得到了什么。