使用matlab与华为E3531进行消息传递时出错

时间:2015-03-06 09:09:03

标签: matlab at-command

我使用华为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);

>> 

1 个答案:

答案 0 :(得分:2)

此错误是由某些虚拟串行端口驱动程序引起的,这些驱动程序不支持与物理串行端口等效的功能,以及Matlab处理与虚拟串行端口通信的方式。

一种可能的解决方案是升级到最新的驱动程序(由串口适配器的供应商提供)。

如果错误仍然存​​在,即使使用最新的虚拟串行端口适配器驱动程序,也可以通过仪器控制工具箱提供的VISA接口使用串行COM端口的备用通信方式。

Agilent / Keysight(Agilent IO Libraries)提供的VISA软件库与Matlab串行端口接口分开处理串行COM端口通信。

可以在the following URL下载Agilent IO库。

要将虚拟串行端口添加为VISA资源名称(也请参阅屏幕截图):

  1. 打开Agilent Connection Expert

  2. 右键点击位于PC上的仪器I / O中的所需串口项目(' COMxx')'列,然后选择"添加仪器"从弹出的上下文菜单中。

  3. 在以下对话框中,取消选中"自动识别此仪器"然后单击“确定”。

  4. 验证是否已为虚拟串行端口分配了VISA资源名称(例如ASRL4 :: INSTR)

  5. 打开MATLAB并在命令窗口中运行以下命令,以显示与VISA资源名称对应的VISA对象构造函数名称:

    visaInfo = instrhwinfo(' visa',' agilent'); visaInfo.ObjectConstructorName;

  6. 使用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;
    

    希望这有帮助,