最近用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 条回复