在matlab中记录串口通信期间的时间

时间:2016-03-21 14:48:26

标签: matlab timer serial-port fopen fwrite

我使用Matlab命令fopenfwritefscanf使用以下代码在两台笔记本电脑之间打开一串串口通信:

在笔记本电脑上#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

1 个答案:

答案 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

Further details in the documentation