[未答复] app designer 回调函数定义的一个串口对象无法被另一个回调函数调用

[复制链接]
hkt_guet 发表于 2022-5-10 08:43:38
最近用app designer写了一个串口数据实时监测的app,为了实现实时读取串口的数据然后在app内的坐标轴窗口显示波形。
我这里存在一个问题,我这里除了写了一个“打开串口”按键,还写了一个“关闭串口”按键,如图所见我在”打开串口“回调函数里在public变量ser创建了一个serial对象存放起来后,fopen(ser)打开了串口对象ser。但是我调用”关闭串口“的回调函数直接fclose(ser),软件提示我要先fopen创建一个文件标识符。
为了关闭串口我的做法是,又重新创建了一个serial对象,fopen之后再fclose,这样才能关闭串口。
问题:我不是已经创建了ser吗?还是说在“打开串口”回调函数中创建完之后ser存放的串口对象消失了?app内的public变量难道是不可以保存数据的吗?


代码:


公共属性变量ser,用于存放串口对象
[

properties (Access = public)
      
        ser; % Serial

    end
]

打开串口回调函数:
[
            clear
            delete(instrfindall);
            app.ser = serial('COM5');
            app.ser.BaudRate = 115200;
            app.ser.timeout=1;
            app.ser.Parity='none';
            app.ser.StopBits=1;
            app.ser.Terminator='CR/LF';
            app.ser.FlowControl='none';
            app.ser.BytesAvailableFcnMode='byte'; %设置事件触发为接受触发
            app.ser.InputBufferSize=300; %设置接受缓冲区大小为 300 个字节
            app.ser.BytesAvailableFcnCount=300; %每次接受到 300 个数据时候触发事件
            app.ser.BytesAvailableFcn=@app.usart_callback; %指向触发事件函数
            fopen(app.ser); %打开串口
            fprintf(app.ser,'o');%发送"开始发送数据"的命令给下位机
]
关闭串口回调函数:
[
clear
            delete(instrfindall);
            app.ser = serial('COM5');
            app.ser.BaudRate = 115200;
            fopen(app.ser); %打开串口
            fprintf(app.ser,'c');%发送"关闭发送数据"的命令给下位机
            fclose(app.ser); %关闭串口
            delete(app.ser); %删掉串口
            clear %释放内存
]








1 条回复


hkt_guet 发表于 2022-5-10 13:04:13
本帖最后由 hkt_guet 于 2022-5-12 19:17 编辑

已解决:把保存串口对象的变量设置成了private
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表