遍历多个串行端口,一个接一个(不同时)

6视图(30天)
我有一个计划,利用输入的串行数据做比较字符串的数据存储在excel中。最初的字符串有看起来像这样:
读者(n):“字符串”
我的代码设置找到n,然后比较连续字符串的字符串存储在第n列一个excel电子表格。bool值1从这个操作会改变n面板绿色GUI,而bool值0 n面板将会改变为红色。
目前,我的代码只迭代从n = 1:2。这些都是来自COM3 n值。我想用三个COM端口,每个人携带n = 3:4, n = 6, n =七8。然而,我不确定如何初始化端口读取一个接一个,不同时。这是我的主要功能:
删除(instrfind (“端口”,“COM3”));%删除端口不可用的错误可能性
标签=系列(“COM3”);%初始化使用的端口
fopen(标签);%打开th eport
盒=字符(0 (2,14));%矩阵填充输入的串行数据
TrueValueData =“C: \ RfidChipTrueValues.xlsx”;
%的位置存储主标签
[~,~,TrueValMat] = xlsread (TrueValueData);%读取excel文件转换为适当的格式
%创建矩阵填充正确的值
%被盒子,第一行
%所有行进行主值
我= 1:正
n = 1:2
如果我> 10%积极阅读
readData = fscanf(标签);
如果长度(readData) > 12
框(str2double (readData(8)),一14)= readData(福音11:24);
如果比较字符串(TrueValMat {2 n}盒(n,:))%不能分类指数正常细胞类型,必须使用这种方法
集(handles.uipanels (n),“写成BackgroundColor”,‘g’);
其他的
集(handles.uipanels (n),“写成BackgroundColor”,“r”);
结束
drawnow% GUI允许更新外观只要循环完成。
如果比较字符串(TrueValMat{2 1},盒子(1,:))
& & strcmp (TrueValMat{2,},箱(2:))= = 1
集(handles.pushbutton5,“启用”,“上”);
结束
结束
结束
结束
结束
GUI运行良好,只有一些小的事情要解决。正确的颜色变化等。
这都是只有一个com端口。我怎么把这个处理3额外的港口?
关于bytesavailablefcn我知道,但我没有线索如何使用它,即使时间阅读,观看视频,显然等我打开使用任何作品,但它必须是向我解释。
非常感谢

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2019年10月3日
portlist = {“COM3”,“COM4为”,“COM7”,“COM12”};
nport =长度(portlist);
细胞标记= {1,nport};
清理= {1,nport}细胞;
portidx = 1: nport
删除(instrfind (“端口”,portlist {portidx}));%删除端口不可用的错误可能性
标记{portidx} =串行(portlist {portidx});%初始化使用的端口
fopen(标签);%打开th eport
清理{portidx} = onCleanup(@()文件关闭(portlist {portidx}));
结束
盒=字符(0 (2,14));%矩阵填充输入的串行数据
TrueValueData =“C: \ RfidChipTrueValues.xlsx”;
%的位置存储主标签
[~,~,TrueValMat] = xlsread (TrueValueData);%读取excel文件转换为适当的格式
%创建矩阵填充正确的值
%被盒子,第一行
%所有行进行主值
我= 1:正
portidx = 1: nport
nbase = portidx * 2 - 1;
n = nbase: nbase + 1
如果我> 10%积极阅读
readData = fscanf(标记{portidx});;
如果长度(readData) > 12
框(str2double (readData(8)),一14)= readData(福音11:24);
如果比较字符串(TrueValMat {2 n}盒(n,:))%不能分类指数正常细胞类型,必须使用这种方法
集(handles.uipanels (n),“写成BackgroundColor”,‘g’);
其他的
集(handles.uipanels (n),“写成BackgroundColor”,“r”);
结束
drawnow% GUI允许更新外观只要循环完成。
如果比较字符串(TrueValMat{2 1},盒子(1,:))
& & strcmp (TrueValMat{2,},箱(2:))= = 1
集(handles.pushbutton5,“启用”,“上”);
结束
结束
结束
结束
结束
结束
如果你想要不同的东西要做不同的端口,然后你可以测试portidx价值。
8的评论

登录置评。

答案(1)

阿夫拉姆改变
阿夫拉姆改变 2019年10月29日
读者1和2 (com3)现在工作完美。然而,当一个标签是举起第三读者Com4为(),我得到这个错误:
指数超过数组元素的数量(2)。
错误在WorkingGUI3 > WorkingGUI3_OutputFcn(第103行)
集(handles.uipanels (n),“写成BackgroundColor”,“r”);
错误在gui_mainfcn(第264行)
函数宏指令(gui_State。gui_OutputFcn gui_hFigure, [], gui_Handles);
错误在WorkingGUI3(42)行
gui_mainfcn (gui_State变长度输入宗量{:});
这是我的代码:
% - - - - - -从这个函数返回输出到命令行。
函数varargout = WorkingGUI3_OutputFcn (hObject eventdata处理)
%删除(instrfind(“港”,“COM3”));%删除端口不可用的错误可能性
%标签=串行(“COM3”);%初始化使用的端口
% fopen(标签);%打开th eport
portlist = {“COM3”,“COM4为”};
nport =长度(portlist);
标签=细胞(1、nport);
清理=细胞(1、nport);
portidx = 1: nport
删除(instrfind (“端口”,portlist {portidx}));%删除端口不可用的错误可能性
标记{portidx} =串行(portlist {portidx});%初始化使用的端口
fopen(标记{portidx});%打开th eport
清理{portidx} = onCleanup(@()文件关闭(portlist {portidx}));
结束
盒=字符(0 (3、14));%矩阵填充输入的串行数据
TrueValueData =“C: \ \ Dropbox (esberlab) \ \用户管理员esberlab团队文件夹\ Matlab \ \ RfidChipData \ RfidChipTrueValues.xlsx RFID芯片读者”;
%的位置存储主标签
[~,~,TrueValMat] = xlsread (TrueValueData);%读取excel文件转换为适当的格式
%创建矩阵填充正确的值
%被盒子,第一行
%所有行进行主值
我= 1:正
暂停(0.01)
% n = 1:2
portidx = 1: nport
nbase = portidx * 2 - 1;
n = nbase: nbase + 1
如果我> 10%积极阅读
% readData = fscanf(标签);
readData = fscanf(标记{portidx});
如果长度(readData) > 12
框(str2double (readData(8)),一14)= readData(福音11:24);
如果比较字符串(TrueValMat {2 n}盒(n,:))%不能分类指数正常细胞类型,必须使用这种方法
集(handles.uipanels (n),“写成BackgroundColor”,‘g’);
其他的
集(handles.uipanels (n),“写成BackgroundColor”,“r”);
结束
drawnow% GUI允许更新外观只要循环完成。
如果比较字符串(TrueValMat{2 1},盒子(1,:))
& & strcmp (TrueValMat{2,},箱(2:))= = 1
集(handles.pushbutton5,“启用”,“上”);
结束
结束
结束
结束
结束
结束
% varargout细胞数组返回输出参数(见varargout);
% hObject图的句柄
% eventdata保留——MATLAB的未来版本中定义
%处理结构处理和用户数据(见GUIDATA)
%得到默认命令行输出处理结构
varargout {1} = handles.output;
5个评论

登录置评。

标签

下载188bet金宝搏


释放

R2019b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!