我使用Matlab命令fopen
,fwrite
和fscanf
使用以下代码在两台笔记本电脑之间打开一串串口通信:
在笔记本电脑上#1 :
portID='/dev/tty.USA28Z145P2.2'
s=serial(portID)
fopen(s)
fwrite(s,'67')
在笔记本电脑#2上:
s=serial('COM3')
fopen(s)
out=fscanf(s)
从我正在运行的脚本中,有时fwrite是67,有时是83. Out
能够记录所有这些。
我正试图找到一种方法来记录每个fscanf
发生的确切时间,这可能吗?我正在收集一些其他数据,这些命令在数据采集过程中运行,我需要找到一种方法来记录每个fscanf
发生的时间,以便我可以将其与其他数据同步。
例如如果COM3端口扫描' 67'我需要知道这到底是什么时候因为我的数据收集' 67'表示12秒的开始。
有人知道怎么做吗?任何建议将不胜感激!
谢谢,
Maheen
答案 0 :(得分:1)
你永远不会达到我称之为精确的时序精度,因为你的软件堆栈(MATLAB +操作系统)没有实时功能。
如果您要求的方法是时钟精度通常在0.1秒的错误窗口内,请使用串行对象的BytesAvailableFcn
回调。
配置将是
s=serial('COM3')
s.BytesAvailableFcn=@myCallback
s.BytesAvailableFcnCount=1
s.BytesAvailableFcnMode='byte'
fopen(s)
其中myCallback
是您必须实现的函数,只要字节可用,就会调用该函数。
function myCallback(obj,event)
disp(event.Data.Time); %print time data is received
%obj is your serial object, use existing code to read.
end