由于操作过于频繁,请点击下方按钮进行验证!

PLC也可以通过手机发短信息

自由口模式下PLC与M20GSMModem的通信

(工业自动化系统>s7-200)

概述

本例说明如何以自由协议实现S7-200与M20GSMModem的通信。可实现的功能为:当M20收到GSM短信息时,可以自动向发送方回发一条短信息,信息的内容由用户自行定义。

AT指令:

本例中使用的AT指令主要有四个:

短信息格式选择指令CMGF

----M20支持两种格式的短信息,PDU格式和TEXT格式。

----AT+CMGF=0设置短信为PDU格式(默认)

----AT+CMGF=1设置短信为TEXT格式

----本例中将使用TEXT格式,因此必须对M20进行初始化。

读短信息指令CMGR

----指令格式为:AT+CMGR=<index>,index一般为1到15的整数,视SIM卡的容量而定,它表示所要阅读的短信息在SIM卡中的存储位置。在本例中,由于收到的短信息在阅读后都会被删除,因此每次收到的短信息都会被保存到第一个存储位置,在收到短信息后,用AT+CMGR=1即可阅读。

发送短信息指令CMGS

----指令格式为:AT+CMGS=<da>,da为目标手机号,如"13800138000"。M20接到指令后返回一个"〉"提示输入短信内容,短信内容以CHR(26)结束。

删除短信息指令CMGD

----指令格式为:AT+CMGD=<index>,index与读指令中的index含义相同。本例中使用AT+CMGD=1来删除收到的短信息。

----注:所有的指令都以CHR(13)作为结束

PLC程序执行过程:

----PLC在第一次扫描时执行初始化子程序,对端口及RCV指令进行初始化,并向M20发送AT+CMGF=1设置短信息格式为TEXT格式。初始化完成后,运行RCV指令使端口处于接受状态。

----当M20收到短信息时,会发送+CMTI:"SM",1在PLC的接收完成中断中判断CMTI这四个字符来对M1.0进行置位,在主程序中通过该标志位调用ReadSMS子程序。

----ReadSMS子程序中执行的操作为:复位子程序的触发条件(复位M1.0),置位M0.0,停止端口的接收,然后向M20发送AT+CMGR=1阅读收到的短信息。置位M0.0的目的是在发送完成中断中判断是哪个子程序执行了发送操作,从而重新对RCV指令进行设置,以接收Modem返回的信息(其他的子程序也采用了相同的做法:SendSM1的触发位为M1.1,子程序执行时置位M0.1;SendSM2的触发位为M1.2,子程序执行时置位M0.2;DelSM的触发位为M1.3,子程序执行时置位M0.3;ReSend的触发位为M1.4,子程序执行时置位M0.4)。Modem在接收到AT+CMGR=1后会将收到短信息的内容发送给PLC,信息的格式为:

----+CMGR:"RECUNREAD","+8613801184286",,"02/03/05,13:44:12+32"

----CALLME

----OK

----其中"CALLME"为短信息的实际内容,该信息转换为十六进制的形式为:

----0D0A2B434D47523A20225245432055

4E52454144222C222B383631333830

31313834323836222C2C2230322F30

332F30352C31333A34343A31322B33

32220D0A43414C4C204D450D0A0D

0A4F4B0D0A

----这样,在发送完成中断中,以M0.0为条件,将RCV指令的接收的起始字符设置为空格符CHR(32)(十六进制的20)用以接受M20发送的短信息内容。在接收完成中断中,用接受缓冲的第一个字节等于CHR(32)来触发SendSMS1子程序。

----SendSMS1子程序将从收到短信息的内容中提取出发送方的电话号码,并向M20发送AT+CMGS="发送方号码",Modem在接到该指令后返回的信息为:

---->

----对应的十六进制形式为:

----0D0A3E20

----其中0D0A为不可显示字符,20为空格符

----这样,在发送完成中断中以M0.1位条件设置接收的起始字符为"〉"CHR(62)用以接受M20发送的提示信息。在接收完成中断中,用接受缓冲的第一个字节等于CHR(62)来触发SendSMS2子程序。

----SendSMS2子程序将所要发送的内容加上结束字符CHR(26)发送个给M20。如果短信息正确发送,M20返回+CMGS:xxx(xxx为该SIM卡已发送的短信数量);如果信息未能正确发送,则M20返回+CMSERROR。在接收完成中断中,用CMGS来触发DelSMS子程序,用ERROR来触发ReSend子程序。

----DelSMS子程序向M20发送AT+CMGD=1用来删除收到的短信息,ReSend子程序重新发送SendSMS1中的指令AT+CMGS="发送方号码"。

----点击下在原程序

----附:Modem发送的信息格式

----收到短信息时:

----+CMTI:"SM",1

----0D0A2B434D54493A2022534D222C20310D0A

----读取短信息内容时:

----+CMGR:"RECUNREAD","+8613801184286",,"02/03/05,13:44:12+32"

----CALLME

----OK

----0D0A2B434D47523A202252454320554E52

454144222C222B38363133383031313834

3836222C2C2230322F30332F30352C3133

3A34343A31322B3332220D0A43414C

4C204D450D0A0D0A4F4B0D0A

----发送短信息时:

---->

----0D0A3E20

----发送成功时:

----+CMGS:160

----OK

----0D0A2B434D47533A203136300D0A0D0A4F4B0D0A

----发送失败时:

----+CMSERROR:500

modem.mwp(6.77K)


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,不为其版权负责。如果您发现网站上所用视频、图片、文字如涉及作品版权问题,请第一时间告知,我们将根据您提供的证明材料确认版权并按国家标准支付稿酬或立即删除内容,以保证您的权益!联系电话:010-58612588 或 Email:editor@mmsonline.com.cn。

网友评论 匿名:

分享到