使用matlab

时间:2018-02-07 15:47:29

标签: matlab controller serial-port timeout rs485

我正在尝试在步进电机控制器的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. Serial communication timeout on long cable time out
  2. USB Communication from Arduino to Unity: Timeout Error

1 个答案:

答案 0 :(得分:1)

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

首先,您似乎在查询设备的版本。确保' @ 00VER'是正确的命令,设备是否需要终结器来识别命令,例如' \ r'?

其次,确保需要终结器,如果需要,请更正。要进行调试,您可以使用no' Terminator'设置端口,并读取端口以检查您获得的内容。