在matlab中记录串口通信时的时间
Recording the time during serial port communication in matlab
我正在使用 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)
根据我运行ning的脚本,fwrite有时是67,有时是83。Out
能够记录所有这些。
我正在尝试找到一种方法来记录每个 fscanf
发生的确切时间,这可能吗?在数据采集过程中,我正在收集一些其他数据和这些命令 运行,我需要找到一种方法来记录每个 fscanf
发生的时间,以便我可以将其与其他数据同步.
例如如果 COM3 端口扫描“67”,我需要知道确切的时间,因为对于我的数据收集,“67”表示 12 秒周期的开始。
有人知道怎么做吗?任何建议将不胜感激!
谢谢,
马欣
您永远无法达到我称之为精确的计时精度,因为您的软件堆栈(MATLAB + 操作系统)没有实时功能。
如果您要求获得通常在 0.1 秒误差范围内的时钟精度的方法 window,请使用串行对象的 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
我正在使用 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)
根据我运行ning的脚本,fwrite有时是67,有时是83。Out
能够记录所有这些。
我正在尝试找到一种方法来记录每个 fscanf
发生的确切时间,这可能吗?在数据采集过程中,我正在收集一些其他数据和这些命令 运行,我需要找到一种方法来记录每个 fscanf
发生的时间,以便我可以将其与其他数据同步.
例如如果 COM3 端口扫描“67”,我需要知道确切的时间,因为对于我的数据收集,“67”表示 12 秒周期的开始。
有人知道怎么做吗?任何建议将不胜感激!
谢谢,
马欣
您永远无法达到我称之为精确的计时精度,因为您的软件堆栈(MATLAB + 操作系统)没有实时功能。
如果您要求获得通常在 0.1 秒误差范围内的时钟精度的方法 window,请使用串行对象的 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