从Matlab发送短信,并确保所有收件人获得短信

我创build了一个matlab代码,它从Excel文件的列O获取电话号码,然后,它发送一个sms给他们。

它的工作,但发送sms时有问题。 似乎matlab不会等到我的调制解调器完成第一个sms 。 所以,当excel栏有8个电话号码时,调制解调器只能发送一个sms到前3-4个。 这是代码:

 [num MP]=xlsread('D:\Ray\Data.xls',1,'O:O'); %get the phone numbers from excel MP=MP(cellfun(@(x)not(isempty(x)),MP)); %remove the empty cells [row column]=size(MP); %get the number of the phone numbers t1=char(13); %(for doing 'enter') t2=char(26); %(for doing 'ctrl+z) sms='hello'; %SMS content t4=sprintf('%s',sms); t5='AT+CMGF=1'; %for text mode s = serial('COM5'); s.baudrate=9600; fopen(s); %open serial COM5 (my modem) fprintf(s,'%s', t5); fprintf(s,'%s', t1); for q=1:row t3=sprintf('AT+CMGS="%s"',char(MP(q))); fprintf(s,'%s', t3); fprintf(s,'%s', t1); fprintf(s,'%s', t4); fprintf(s,'%s', t2); end fclose(s) 

我想知道如何使matlab等待,直到我的调制解调器完成与第一个电话号码之前试图发送sms到第二个号码,所以所有的电话号码可以得到sms

有什么build议么?

提前致谢。

作为一个非常简单的解决scheme,如果您知道发送短信合理需要多less时间,则可以使用pause语句强制Matlab等待。 例如,如果发送单个SMS需要约3秒钟,则添加

 pause(3) 

进入循环。

请注意,如果由于某种原因,发送比预期花费的时间要长得多,这种方法将失败(或者必须设置很长的代码变得不可用的暂停)。 一个更聪明,但更复杂的解决scheme是查询调制解调器或COM端口在@Danielbuild议在评论。

使用调制解调器执行AT命令时,应始终遵循调制解调器硬件制造商的build议。 他们通常build议等待(睡眠)时间,最重要的是你应该确保你的代码等待命令终止代码,如OK或ERROR等。

在我的评论中,我认为响应消息有1个字节。 您的调制解调器应答超过1个字节,因此发送第二个SMS时,队列中的第一个SMS已经有一个字节。 你必须得到完整的答案,这似乎有9个字节。

 for q=1:row t3=sprintf('AT+CMGS="%s"',char(MP(q))); fprintf(s,'%s', t3); fprintf(s,'%s', t1); fprintf(s,'%s', t4); fprintf(s,'%s', t2); %read all 9 answer bytes B=fread(s,9,'char'); end 

显然你应该检查答案B

Interesting Posts