S7-200 0口和1口的短消息库如下:
这两个库添加至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卡接收到的垃圾短消息。
如图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 手机接收到的短消息