資源簡介
Matlab自動識別插入電腦的串口設(shè)備及其串口號。函數(shù)運行之后返回N×2的單元矩陣,N代表所有活動串口數(shù)目。每行的第一列是接入電腦的設(shè)備名稱(例如'USB-SERIAL CH340'),第二列是其對應(yīng)的串口號。

代碼片段和文件信息
function?devices?=?IdentifySerialComs()
%?function:identifies?Serial?COM?devices?on?Windows?systems?by?friendly?name?and?service.
%?output:a?cell?array?where?the?first?column?holds?the?name?of?the?device
%?????????and?the?second?column?holds?the?COM?number.?Devices?returns?empty?if?nothing?is?found.
%?author:Modified?by?“yuhansgg(Shi?Gaige)“?based?on?code?of?“Lorgio?Teodovich“
%?date:?2017.12.29
devices?=?[];
Skey?=?‘HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM‘;
[~?list]?=?dos([‘REG?QUERY?‘?Skey]);
if?ischar(list)?&&?strcmp(‘ERROR‘list(1:5))??%%strcmp?兩個字符串相同返回1
????disp(‘Error:?EnumSerialComs?-?No?SERIALCOMM?registry?entry‘)
????return;
end
list?=?strread(list‘%s‘‘delimiter‘‘?‘);?%#ok?requires?strread()
coms?=?0;
for?i?=?1:numel(list)??%%numel?返回元素個數(shù)
????if?strcmp(list{i}(1:3)‘COM‘)
????????if?~iscell(coms)
????????????coms?=?list(i);
????????else
????????????coms{end+1}?=?list{i};?%#ok?Loop?size?is?always?small
????????end
????end
end
out?=?0;
outK?=?0;
for?j=1:2
????switch?j
????????case?1
????????????key?=?‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\‘;
????????case?2
????????????key?=?‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\‘;
????end
????[~?vals]?=?dos([‘REG?QUERY?‘?key?‘?/s?/f?“FriendlyName“?/t?“REG_SZ“‘]);
????if?ischar(vals)?&&?strcmp(‘ERROR‘vals(1:5))
????????disp(‘Error:?EnumSerialComs?-?No?Enumerated?USB?registry?entry‘)
????????return;
????end
????vals?=?textscan(vals‘%s‘‘delimiter‘‘\t‘);
????vals?=?cat(1vals{:});
????for?i?=?1:numel(vals)
????????if?strcmp(vals{i}(1:min(12end))‘FriendlyName‘)
????????????if?~iscell(out)
????????????????out?=?vals(i);
????????????else
????????????????out{end+1}?=?vals{i};?%#ok?Loop?size?is?always?small
????????????end
????????????if?~iscell(outK)
????????????????outK?=?vals(i-1);
????????????else
????????????????outK{end+1}?=?vals{i-1};?%#ok?Loop?size?is?always?small
????????????end
????????end
????end
end
i_dev=1;Sservices=[];
for?i?=?1:numel(coms)
????match?=?strfind(out[coms{i}‘)‘]);
????ind?=?0;
????for?j?=?1:numel(match)
????????if?~isempty(match{j})
????????????ind?=?j;
????????????[~?sers]?=?dos([‘REG?QUERY?“‘?outK{ind}?‘“?/f?“Service“?/t?“REG_SZ“‘]);
????????????sers?=?textscan(sers‘%s‘‘delimiter‘‘\t‘);
????????????sers?=?cat(1sers{:});
????????????if?(numel(sers)>1)
????????????????sers=strread(sers{2}‘%s‘‘delimiter‘‘?‘);
????????????????Sservices{i_dev}?=?sers{3};
????????????????i_dev=i_dev+1;
????????????end
????????end
????end
end
Sservices=unique(Sservices);
i_dev=1;
for?ss=1:numel(Sservices)
????key?=?[‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\‘?Sservices{ss}?‘\Enum‘];
????[~?vals]?=?dos([‘REG?QUERY?‘?key?‘?/f?“Count“‘]);
????if?ischar(vals)?&&?strcmp(‘ERROR‘vals(1:5))
????????%?????????disp(‘Error:?EnumSerialComs?-?No?Enumerated?services?USB?registry?entry‘)
????????%?????????return
????end
????vals
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????5119??2017-12-29?10:37??IdentifySerialComs.m
評論
共有 條評論