Exception handling 为什么';当图像采集工具箱丢失帧时,是否在Matlab中尝试/捕获工作?

Exception handling 为什么';当图像采集工具箱丢失帧时,是否在Matlab中尝试/捕获工作?,exception-handling,try-catch,matlab,Exception Handling,Try Catch,Matlab,我正在使用Matlab的图像采集工具箱通过千兆以太网采集高速视频。我在掉框方面遇到了一些问题,但这不是这个问题的重点。我真正想做的是告诉Matlab在遇到掉帧错误后继续运行脚本 为此,我使用了try/catch语句,但它就是不起作用。这是我的代码,保留了一些有关设置相机和使用数据的细节: %% setting up camera while(1) % continue acquiring data forever while(vidObj.FramesAvailable <

我正在使用Matlab的图像采集工具箱通过千兆以太网采集高速视频。我在掉框方面遇到了一些问题,但这不是这个问题的重点。我真正想做的是告诉Matlab在遇到掉帧错误后继续运行脚本

为此,我使用了try/catch语句,但它就是不起作用。这是我的代码,保留了一些有关设置相机和使用数据的细节:

%% setting up camera
while(1)
    % continue acquiring data forever

    while(vidObj.FramesAvailable < vidObj.FramesPerTrigger)
        % wait until we're ready to get the data
        try
            pause(.1)
        catch exception
            disp "i got an error"
        end
    end

    % get the data
    [img, t] = getdata(vidObj);

    %% do something with the data
    %% ...
end
您可以看到,错误发生在我们等待收集数据时(“pause”语句),该语句位于try块内,但由于未打印调试消息且程序停止,因此未正确捕获异常


如何让Matlab观察try/catch结构,并在发生此错误后继续操作?

我找到了答案。错误消息不是真正的错误,而是更多的警告。执行不会停止。然而,vidObj停止收集帧,我的代码一直循环,等待收集足够的帧

您可以按如下方式插入此条件的检查:

% wait until enough frames are available
while(vidObj.FramesAvailable < vidObj.FramesPerTrigger)
    pause(.1)

    if strcmp(vidObj.Running, 'off')
        % It has stopped running, probably because frames were dropped
        start(vidObj)
    end
end
%等待足够的帧可用
while(vidObj.FramesAvailable

现在,在删除帧时,对象将重新启动,并继续获取。显然,丢失的帧无法恢复,因此视频中会有一个间隙。

因此,我非常确定
暂停时实际上没有发生错误。vidObj正在后台等待,当暂停发生时,它有机会自行运行,而此时错误发生。您必须在vidObj中找到出错的实际代码。我希望这有帮助…我想你可能是对的,但是vidObj的代码被隐藏在ImageAcquisitionToolbox的某个地方。我甚至不知道从哪里开始寻找,他们甚至可能没有提供源代码。
% wait until enough frames are available
while(vidObj.FramesAvailable < vidObj.FramesPerTrigger)
    pause(.1)

    if strcmp(vidObj.Running, 'off')
        % It has stopped running, probably because frames were dropped
        start(vidObj)
    end
end