我使用华为E3531模型通过与matlab接口来发送消息。但它总是显示错误。我是否需要解锁我的华为加密狗?
如果没有,实际问题是什么?我使用以下代码:
clc;
clear all;
global BytesAvail;
global A;
global B;
tx ='ATI';
tx1=char(13);
tx2=char(26);
tx3='AT+CMGS="+919526018418"';
tx4= ' This is a test msg ';
tx5='AT+CMGF=1';
s = serial('COM5');
s.baudrate=9600;
fopen(s);
s.Terminator = 'CR';
fprintf(s,'%s', tx);
fprintf(s,'%s', tx1);
BytesAvail=s.BytesAvailable;
if(BytesAvail > 0), A=fread(s,BytesAvail,'char'); end
A;
sprintf('%c', A)
%%%%%%%%%%%%%%%Send SMS%%%%%%%%%%%%
fprintf(s,'%s', tx5);
fprintf(s,'%s', tx1);
fprintf(s,'%s', tx3);
fprintf(s,'%s', tx1);
fprintf(s,'%s', tx4);
fprintf(s,'%s', tx2);
BytesAvail=s.BytesAvailable;
if(BytesAvail > 0), B=fread(s,BytesAvail,'char'); end
B;
fclose(s)
错误就是这个
??? Error using ==> serial.fprintf at 144
An error occurred during writing.
Error in ==> message at 20
fprintf(s,'%s', tx);
>>
答案 0 :(得分:2)
此错误是由某些虚拟串行端口驱动程序引起的,这些驱动程序不支持与物理串行端口等效的功能,以及Matlab处理与虚拟串行端口通信的方式。
一种可能的解决方案是升级到最新的驱动程序(由串口适配器的供应商提供)。
如果错误仍然存在,即使使用最新的虚拟串行端口适配器驱动程序,也可以通过仪器控制工具箱提供的VISA接口使用串行COM端口的备用通信方式。
Agilent / Keysight(Agilent IO Libraries)提供的VISA软件库与Matlab串行端口接口分开处理串行COM端口通信。
可以在the following URL下载Agilent IO库。
要将虚拟串行端口添加为VISA资源名称(也请参阅屏幕截图):
打开Agilent Connection Expert
右键点击位于PC上的仪器I / O中的所需串口项目(' COMxx')'列,然后选择"添加仪器"从弹出的上下文菜单中。
在以下对话框中,取消选中"自动识别此仪器"然后单击“确定”。
验证是否已为虚拟串行端口分配了VISA资源名称(例如ASRL4 :: INSTR)
打开MATLAB并在命令窗口中运行以下命令,以显示与VISA资源名称对应的VISA对象构造函数名称:
visaInfo = instrhwinfo(' visa',' agilent'); visaInfo.ObjectConstructorName;
使用MATLAB Instrument Control Toolbox和VISA接口进行虚拟串行端口通信的示例代码:
% --- Open and write
v = visa('agilent', 'ASRL4::INSTR');
fopen(v);
fprintf(v, 'abc');
fwrite(v, [97 98 99]);
fclose(v);
% --- Clean up
delete(v);
clear v;
希望这有帮助,