S7-200通过MD720短消息说明

S7-200 0口和1口的短消息库如下:

set5_s7-200-library_port0

set5_s7-200-library_port1

这两个库添加至STEP 7-Micro/WIN后如图1所示:

图1 MD720 SMS库

该库需要占用227个字节的库存储区,该区域不能和其它区域有冲突。

对于发短消息,无需调用SMS_tele_handle(本文不做介绍)。库中的SMS_xmt_rcv_manage在其它程序块内部使用,在程序中无需调用,SMS_init,SMS_send,SMS_receive在程序中需全部调用。

程序在只调用SMS_init,SMS_send,SMS_receive后,大小为2.6Kbyte。

指令说明如下:

1. 初始化/SMS_init

表1 初始化块参数

引脚 类型 数据类型 说明
EN INPUT BOOL 使能端,通常为SM0.0
SMS_init_start INPUT BOOL 初始化,沿触发
SMS_init_pin INPUT DWORD SIM卡PIN码,输入为字符串,国内SIM卡默认为1234
SMS_init_ssc INPUT DWORD 短消息服务中心号码,输入为字符串,需要咨询SIM卡所在地的运营商
SMS_init_busy OUTPUT BOOL 状态:忙
SMS_init_done OUTPUT BOOL 状态:完成
SMS_init_aborted OUTPUT BOOL 状态:放弃
SMS_init_ststus OUTPUT WORD 状态代码

正常初始化完成后,状态代码SMS_init_ststus=15。如果SMS_init_aborted=True,则要根据SMS_init_status检查错误。

表2 SMS_init_ststus列表

数值 SMS_init_ststus
1 初始化端口
2 关闭回显
3 关闭回显成功
4 关闭回显失败
5 查询PIN码状态
6 PIN码OK
7 需要设置PIN码
8 设置PIN码
9 PIN码设置成功
10 PIN码设置失败
11 设置短消息模式
12 短消息模式设置成功
13 短消息模式设置失败
14 输入短消息服务中心号码
15 短消息服务中心号码输入成功
16 短消息服务中心号码输入失败
17 关闭回显成功,但需将波特率设置成9600kbps
18 设置MD720波特率为9600kbps
19 设置MD720波特率为9600kbps成功
20 设置MD720波特率为9600kbps失败
21 初始化超时

2. 发送/SMS_send

表3 发送块参数

引脚 类型 数据类型 说明
EN INPUT BOOL 使能端,通常为SM0.0
SMS_send_start INPUT BOOL 发送使能,沿触发
SMS_send_tn INPUT DWORD TXT模式为目的手机号码,PDU模式为消息长度,输入为字符串
SMS_send_msg INPUT DWORD 发送的内容,输入为字符串,不超过160个字符
SMS_send_busy OUTPUT BOOL 发送中
SMS_send_done OUTPUT BOOL 发送完成
SMS_send_aborted OUTPUT BOOL 发送错误
SMS_send_status OUTPUT WORD 发送状态

正常发送完成后,状态代码SMS_send_status=6。 如果SMS_send_aborted=True,则要根据SMS_send_status检查错误。

表4 SMS_send_status列表

数值 SMS_send_status
1 初始化
2 发送手机号码或长度中
3 发送手机号码或长度成功
4 发送手机号码或长度失败
5 发送消息中
6 发送消息成功
7 发送消息失败
8 发送超时

发短消息有两种模式,TXT模式和PDU模式:

1. TXT模式(默认)

SMS_send_tn为接收短消息的手机号码。
SMS_send_msg为短消息内容,只能发送有ASCII码的字符(英文字母、数字、部分标点符号),字符个数不超过160。

2. PDU模式

该模式可以发送中文短消息。

SMS_send_tn为短消息字节长度。
SMS_send_msg为短消息内容。可以发送任意有unicode码的字符,字符个数不超过35

不过需要自行修改库文件,该库程序的密码是1234,打开库后,做如图2和图3的修改:

SMS_init:

图2 初始化块修改

SMS_send:

图3 发送块修改


例子:发送“温度:1.3℃”到指定手机号码“18912345678”,需要编辑SMS_send_msg为:
00 01 00 0D 91 688119325476F8 00 08 0E 6E295EA6FF1A0031002E00332103
00:SCA长度,不计入短消息长度
01:TPDU类型
00:消息基准值MR
0D:号码长度(8618912345678)
91:国际号码
688119325476F8:两两颠倒的8618912345678F,最后一位补F
00:协议标识PID
08:数据编码方案UCS-2
0E:信息长度(十六进制),即后面6E295EA6FF1A0031002E00332103所需字节数14的十六进制表示
6E295EA6FF1A0031002E00332103:“温度:1.3℃”的unicode码
SMS_send_tn:不算开始的SCA长度,一共56个字符,除以2即SMS_send_tn=28

3. 接收/SMS_receive

表5 接收块参数

引脚 类型 数据类型 说明
EN INPUT BOOL 使能端,通常为SM0.0
SMS_rcv_start INPUT BOOL 接收使能,沿触发
SMS_rcv_msg INPUT DWORD 接收缓冲区的地址,接收的短消息从起始地址+15开始,输入为指针
SMS_rcv_busy OUTPUT BOOL 接收中
SMS_rcv_done OUTPUT BOOL 接收完成
SMS_rcv_aborted OUTPUT BOOL 接收错误
SMS_rcv_status OUTPUT WORD 接收状态

正常接收完成后,状态代码SMS_rcv_status=4或者7。如果SMS_rcv_aborted =True,则要根据SMS_rcv_status检查错误。

注意:SMS_rcv_msg指向的区域最长可能需占用指针开始后的255个字节,所以为使短消息收发正常,请在编写其他程序时避开这段区域。

表6 SMS_rcv_status列表

数值 SMS_rcv_status
1 初始化
2 接收短消息中
3 接收短消息成功
4 没有短消息
5 提取SIM卡内最远短消息的编号
6 删除SIM卡内最远的短消息
7 删除SIM卡内最远的短消息成功即收到新的短消息
8 删除SIM卡内最远的短消息失败
9 接收短消息超时

短消息的接收过程是检查SIM卡中有没有新的短消息,如果有则从SIM卡中读取最远的消息到接收缓冲区,之后提取最远的消息编号,然后将该条消息删除,完成一次接收,如果SIM卡中没有短消息,则直接完成一次接收。也就是说即使不触发SMS_rcv_start,短消息照常接收到SIM卡中,只是不读取到接收缓冲区。
接收短消息通常用于查询S7-200的实时数据,或者对其进行远程控制,但一般不建议远程控制,毕竟无人值守的控制非常危险。
如果需要接收短消息,则通常定时触发SMS_rcv_start。建议即使不使用接收短消息功能,也间隔2、3分钟触发一次SMS_rcv_start,用以删除SIM卡接收到的垃圾短消息。

S7-200通过MD720收发短消息

如图4所示,需要以下配置可以实现S7-200通过MD720收发短消息。

图4 MD720接收短消息配置

远程:

1. S7-200CPU,型号不限(例子中使用CPU 224XP)

2. MD720+联通/移动 SIM卡(例子中使用天津移动SIM卡139XXXXXXXX)

3. 连接在MD720上的天线(例子中使用ANT794-4MR)

4. MD720与S7-200CPU之间的连接电缆(例子中使用S7-200的编程电缆)

手机端:没有限制。(例子中使用北京电信SIM卡189XXXXXXXX)

1.TXT模式,收发英文短消息

步骤如下:

(1)S7-200CPU编写程序(例子中使用Set5_S7-200-library_P0库),参见图5。

库存储区分配为VB0~VB227

图5 MD720程序

(2)数据块,参见图6

图6 数据块

(3)手机收到的短消息,参见图7

图7 手机接收到的短消息

(4)手机发送的短消息,参见图8

图8 手机端发送短消息

S7-200接收,参见图9:

图9 S7-200收到的短消息

从图9中可知,虽然SMS_rcv_msg从VB800开始,但实际接收到的短消息从VB815开始,其中包含短消息来源电话号码,接收时间,以及内容等,如果需要使用短消息内容,需要使用S7-200的字符串处理的指令查找、提取。

2. PDU模式,发中文短消息

步骤如下:

(1)S7-200CPU编写程序(例子中使用Set5_S7-200-library_P0库)

库存储区分配为VB0~VB227,程序参见图5,需如前述修改库程序。

(2)数据块,参见图10

图10 数据块

(3)手机收到的短消息,参见图11

图11 手机接收到的短消息