c******k 发帖数: 1140 | 1 购买了一个光学仪器,是用马达控制其中的部件。然后马达链接6V电源,输出有个DB9
接头接计算机串口。现在要编个RS232小程序去控制这个马达,可以用labview or
matlab 编程序。但是还是没有头绪,比如程序框图是啥啊,仪器的manual有一些RS232
的命令,但是怎么用这些命令呢?
比如: G0:Stop the motor driver
M?: Return the minimum time dalay, in ps.
FH: Find home
SLEEP: Start sleep mode
。。。。。。
命令很多,怎么把这些融合到Matlab里呢?谢谢指导!
clear
s=serial('COM1');
fopen(s);
fprintf(s,'*IDN?');
DataOut=fscanf(s)
fclose(s);
delete(s)
clear s | c*******o 发帖数: 62 | 2 clear
s=serial('COM1');
fopen(s);
fprintf(s,'*IDN?');
DataOut=fscanf(s)
fclose(s);
delete(s)
clear s
把*IDN?替换成GO, M?, FH, SLEEP等等即可, *IDN?是读仪器的名字的通用命令
fopen在这里新建一个COM1口的任务, fprintf是写入ASCII命令,DataOut是读出
buffer,fclose是关闭任务,这算是四个最主要的function
不过你要是没有 matlab GUI经验或者这个马达控制要synchronize或者integrate到大
的project里,用labview可能更适合一点,compile executable/installer 也简单,
labview自带了很多visa的例子,看看应该就会了,rs232 communication算是比较简单的
DB9
RS232
【在 c******k 的大作中提到】 : 购买了一个光学仪器,是用马达控制其中的部件。然后马达链接6V电源,输出有个DB9 : 接头接计算机串口。现在要编个RS232小程序去控制这个马达,可以用labview or : matlab 编程序。但是还是没有头绪,比如程序框图是啥啊,仪器的manual有一些RS232 : 的命令,但是怎么用这些命令呢? : 比如: G0:Stop the motor driver : M?: Return the minimum time dalay, in ps. : FH: Find home : SLEEP: Start sleep mode : 。。。。。。 : 命令很多,怎么把这些融合到Matlab里呢?谢谢指导!
| c******k 发帖数: 1140 | 3 但是我把 *IDN 替换成GO, M?, FH, SLEEP等时,结果:
DataOut=
Go
or
M?
然后没啥反应了。怎么测试RS232正在work?
【在 c*******o 的大作中提到】 : clear : s=serial('COM1'); : fopen(s); : fprintf(s,'*IDN?'); : DataOut=fscanf(s) : fclose(s); : delete(s) : clear s : 把*IDN?替换成GO, M?, FH, SLEEP等等即可, *IDN?是读仪器的名字的通用命令 : fopen在这里新建一个COM1口的任务, fprintf是写入ASCII命令,DataOut是读出
| c*******o 发帖数: 62 | 4 这里面哪个命令是有返回值的?比如说返回encoder counter,firmware version,
Dataout=应该能返回什么的
或者能观察得到命令的作用的,比如驱动,停止之类的
还有马达说明书上要求是\n还是\r结尾的?
试试fprintf(s,'GO\r')
然后再加个pause(1)做响应时间
再读Dataout
【在 c******k 的大作中提到】 : 但是我把 *IDN 替换成GO, M?, FH, SLEEP等时,结果: : DataOut= : Go : or : M? : 然后没啥反应了。怎么测试RS232正在work?
| c******k 发帖数: 1140 | 5 请参考下图。但不清楚那个命令有返回值
【在 c*******o 的大作中提到】 : 这里面哪个命令是有返回值的?比如说返回encoder counter,firmware version, : Dataout=应该能返回什么的 : 或者能观察得到命令的作用的,比如驱动,停止之类的 : 还有马达说明书上要求是\n还是\r结尾的? : 试试fprintf(s,'GO\r') : 然后再加个pause(1)做响应时间 : 再读Dataout
| c******k 发帖数: 1140 | 6 Sorry,图片贴不上,直接拷贝
The unit responds with an output string on the RS-232 line when the RS-232
lines become active, at startup, or in response to a software reset command
when the RS-232 lines are connected. The string is:
OZ Optics Ltd.
ODL-300 Vh.hh_n.nn
where h.hh is the hardware version number
where n.nn is the firmware version number
When the unit passes the self-test routine, the unit outputs the string:
Ready:
When the unit fails a portion of the self-test routine, an
【在 c*******o 的大作中提到】 : 这里面哪个命令是有返回值的?比如说返回encoder counter,firmware version, : Dataout=应该能返回什么的 : 或者能观察得到命令的作用的,比如驱动,停止之类的 : 还有马达说明书上要求是\n还是\r结尾的? : 试试fprintf(s,'GO\r') : 然后再加个pause(1)做响应时间 : 再读Dataout
| c*******o 发帖数: 62 | 7 try this
clc;
close all;
clear all;
s=serial('COM1');
fopen(s);
fprintf(s,'D?\r');
pause(1);
DataOut=fscanf(s)
fprintf(s,'GF\r');
fclose(s);
delete(s);
clear s | c*******o 发帖数: 62 | 8 try this
clc;
close all;
clear all;
s=serial('COM1');
fopen(s);
fprintf(s,'D?\r');
pause(1);
DataOut=fscanf(s)
fprintf(s,'GF\r');
fclose(s);
delete(s);
clear s | c******k 发帖数: 1140 | 9 Thank you, but it won't work.
Always get this:
Warning: A timeout occurred before the Terminator was reached.
(Type "warning off MATLAB:serial:fscanf:unsuccessfulRead" to suppress this
warning.)
DataOut =
D?\r
【在 c*******o 的大作中提到】 : try this : clc; : close all; : clear all; : s=serial('COM1'); : fopen(s); : fprintf(s,'D?\r'); : pause(1); : DataOut=fscanf(s) : fprintf(s,'GF\r');
| c*******o 发帖数: 62 | 10 你确定马达连在了COM1口?如果是笔记本+usb/rs232 converter那可能是COM3口
还有试试get(s,{'BaudRate','DataBits','Parity','StopBits','Terminator'})
看看端口的缺省设置和马达说明书上的要求是否一致,尤其是DataBits和Parity
其他应该就没什么了
稍微改一下再试试
clc;
close all;
clear all;
s=serial('COM1');
set(s,'Terminator','CR');
fopen(s);
fprintf(s,'D?');
pause(1);
DataOut=fscanf(s)
fprintf(s,'GF');
fclose(s);
delete(s);
clear s | s******u 发帖数: 247 | |
|