1、sms基礎(chǔ)知識(shí)介紹
sms(short messaging service)是最早的短消息業(yè)務(wù),也是現(xiàn)在普及率最高的一種短消息業(yè)務(wù)。目前,這種短消息的長(zhǎng)度被限定在140字節(jié)之內(nèi),這些字節(jié)可以是文本的。sms以簡(jiǎn)單方便的使用功能受到大眾的歡迎,卻始終是屬于第一代的無(wú)線數(shù)據(jù)服務(wù),在內(nèi)容和應(yīng)用方面存在技術(shù)標(biāo)準(zhǔn)的限制。
一個(gè)sms消息最長(zhǎng)可包括 160個(gè)字符(偶數(shù)二進(jìn)制)。
sms是一種存儲(chǔ)和轉(zhuǎn)發(fā)服務(wù)。也就是說(shuō),短消息并不是直接從發(fā)送人發(fā)送到接收人,而始終通過(guò)sms中心進(jìn)行轉(zhuǎn)發(fā)的。如果接收人處于未連接狀態(tài)(可能電話已關(guān)閉),則消息將在接收人再次連接時(shí)發(fā)送。
sms具有消息發(fā)送確認(rèn)的功能。這意味著
sms與尋呼不同,用戶不是簡(jiǎn)單地發(fā)出短消息然后相信消息已發(fā)送成功;而是短消息發(fā)送人可以收到返回消息,通知他們短消息是否已經(jīng)發(fā)送成功。
sms 消息的發(fā)送和接收可以和 gsm 語(yǔ)音同步進(jìn)行。
sms 消息按消息收費(fèi),因此要比通過(guò)基于 ip 的網(wǎng)絡(luò)(例如,使用 gprs [通用分組無(wú)線業(yè)務(wù)])發(fā)送的數(shù)據(jù)昂貴得多(每字節(jié))。
要使用 sms,用戶需要預(yù)訂支持 sms 的移動(dòng)網(wǎng)絡(luò),并且必須為該用戶啟用 sms 的使用。用戶需要有發(fā)送短消息或接收短消息的目的地。該目的地通常是其他的移動(dòng)電話,但也可以是服務(wù)器。最后,用戶還需要有支持 sms 的移動(dòng)電話,并需要了解如何使用其特定型號(hào)的移動(dòng)電話發(fā)送或閱讀短消息。
sms發(fā)送的模式分有兩種:text模式和pdu模式.
使用text模式收發(fā)短信代碼簡(jiǎn)單,實(shí)現(xiàn)起來(lái)十分容易,但是最大的缺點(diǎn)是不能收發(fā)中文短信, pdu模式完全可以解決這個(gè)問(wèn)題,pdu模式不僅支持中文短信,也能發(fā)送英文短信, pdu模式收發(fā)短信可以使用三種編碼: 7-bit、8-bit和ucs2編碼。 7-bit編碼用于發(fā)送普通的ascii字符,8-bit編碼通常用于發(fā)送數(shù)據(jù)消息,ucs2編碼用于發(fā)送unicode字符。我們要實(shí)現(xiàn)中文短信的發(fā)送,所以選擇ucs2,即中文unicode碼。下面是關(guān)于兩種方式發(fā)送的示例at指令:
范例:向手機(jī)號(hào)碼13801234567發(fā)送短信“weather”
(1) text方式
at+cmgf=1<cr> …………設(shè)置短信發(fā)送方式為text模式
at+cmgs=”13801234567”<cr> …………向被叫號(hào)碼發(fā)短信
> weather <ctrl+z>
(2) pdu方式
at+cmgf=0<cr> ……………設(shè)置短信發(fā)送方式為pdu模式
at+cmgs=018<cr> ……………向被叫號(hào)碼發(fā)送pdu的長(zhǎng)度
>0001000d91683108214365f700080459296c14<ctrl+z>
注:pdu方式中at+cmgs命令解釋:
at+cmgs=xxx<cr> …xxx表示pdu中tpdu的長(zhǎng)度
>pdu ...輸入pdu信息
0001 :基本參數(shù)
00 :消息基準(zhǔn)值tp-mr
0d :目標(biāo)地址數(shù)字個(gè)數(shù)(十進(jìn)制,不包含91)
91 :目標(biāo)地址格式
68 :目標(biāo)地址為中國(guó)
3108214365f7 :目標(biāo)地址(13801234567)
00 :協(xié)議標(biāo)示tp-pid
08 :用戶信息編碼格式tp-dcs(08表示ucs2編碼)
00 :有效期tp-vp
04 :用戶信息長(zhǎng)度tp-udl
59296c14 :用戶信息(“天氣”)
其中,紅色的數(shù)字(3108214365f7)代表對(duì)方的手機(jī)號(hào)碼,在pdu格式中,手機(jī)號(hào)碼每?jī)晌恍枰獙?duì)調(diào)。比如在上面這個(gè)例子里,對(duì)方的手機(jī)號(hào)碼為13801234567,f用來(lái)補(bǔ)充7后面的空位。藍(lán)色的數(shù)字(59296c14)是短消息內(nèi)容的unicode碼,這里5929代表“天”6c14代表“氣”。unicode碼同樣可以用來(lái)表示中一般英文字母和數(shù)字,方法是在英文或數(shù)字的ascii碼前加00。紫色的數(shù)字(04)代表短消息的長(zhǎng)度,它等于其后所有字符個(gè)數(shù)除以2。黑色的數(shù)字每次發(fā)送短消息時(shí)都是相同的,使用時(shí)可以照抄,但前提是所使用的sim卡在使用前要用手機(jī)設(shè)置好短消息服務(wù)中心號(hào)碼(+8613800100500)。漢字的unicode碼可以通過(guò)編碼轉(zhuǎn)換軟件得到。
pdu格式發(fā)送短消息時(shí),還必須計(jì)算整個(gè)pdu數(shù)據(jù)包的長(zhǎng)度,pdu數(shù)據(jù)包的長(zhǎng)度等于(pdu數(shù)據(jù)包字符數(shù)-2)/2,在上面的例子里:(38-2)/2=18。
2、網(wǎng)絡(luò)結(jié)構(gòu)圖
硬件的連接, s7-300cp后接cp340(rs232串口)或cp341(rs232串口),再通過(guò)串口直連線連接cp340或cp341到md720-3的串口上,md720-3插一塊sim卡。直連線的1針到9針對(duì)應(yīng)連接。
圖1、網(wǎng)絡(luò)結(jié)構(gòu)圖
3、需要的軟件及硬件
硬件
component
qty.
mlfb / order number
note
ps307 5a
1
6es7307-1ea00-0aa0
cpu317-2pn/dp
1
6es7317-2ej10-0ab0
cp341
1
6es7341-1ah01-0ae0
md720-3
1
6nh9720-3aa00
直連線
1
6es7901-3cb30-0xa0
sim card
表1、硬件列表
軟件
component
no.
mlfb / order number
note
step 7 5.4 sp4
1
6es7810-4cc08-0ya5
表2、軟件列表
4、以text的方式發(fā)送sms
在這里不介紹用自由口編程的方式編寫at的指令來(lái)發(fā)送sms,而是采用西門子提供庫(kù)功能塊來(lái)編寫程序。庫(kù)程序的下載鏈接地址如下:26100569
上面庫(kù)程序是壓縮文件,先解壓縮到一個(gè)目錄下,在該目錄下又會(huì)看到3個(gè)壓縮文件,再解壓這三個(gè)壓縮文件,解壓縮后如下圖所示:
圖2、存放目錄
從上圖中,解壓三個(gè)壓縮文件后sms_bloc;sms_md720_application;sms_md720_simple
sms_bloc: 包括了使用cp340、cp341、cp442-1收發(fā)短信的庫(kù)功能。
sms_md720_application:包含了用cp341和cp442-1收發(fā)短信的應(yīng)用程序。
sms_md720_simple:包含了一個(gè)用cp341收發(fā)短信的簡(jiǎn)單應(yīng)用程序
由于三個(gè)文件夾的程序只有sms_md720_simple的程序是完整的,另外兩個(gè)文件夾下的程序由于編者的疏忽,程序不完整,導(dǎo)致無(wú)法正常編譯通過(guò)。所以在本文里我們只能介紹,通過(guò)拷貝sms_md720_simple項(xiàng)目下的功能塊到實(shí)際的項(xiàng)目中來(lái)實(shí)現(xiàn)發(fā)送短信的功能。
在新建項(xiàng)目前,需要硬件按照網(wǎng)絡(luò)圖安裝好,并加電。md720加電后恢復(fù)出廠設(shè)置,讓其工作在終端模式下(在md720的系統(tǒng)手冊(cè)上介紹如何恢復(fù)出廠設(shè)置,這里不再作詳細(xì)介紹),恢復(fù)后用串口直連線,連接md720與計(jì)算機(jī)的串口,打開(kāi)計(jì)算機(jī)的超級(jí)終端程序,打開(kāi)方式如下圖:
圖3、打開(kāi)超級(jí)終端
打開(kāi)后在連接描述的窗口里輸入一個(gè)連接名如下圖:
圖4、輸入連接名
點(diǎn)擊ok后,選擇與計(jì)算機(jī)連接的串口,這里連接的是串口1,所以設(shè)置如下圖:
圖5、選擇com端口
在上圖點(diǎn)擊ok按鈕后,設(shè)置串口的通訊參數(shù)如下:
圖6、com口的參數(shù)設(shè)置
點(diǎn)擊ok按鈕后,在出現(xiàn)的串口里先輸入 “+++”后,輸入“at”檢查與modem的連接是否正常,若正常則modem會(huì)返回ok,如下圖:
圖7、測(cè)試與modem的連接
然后在輸入指令“at+irp=9600”修改通訊波特率為9600如下圖所示:
圖8、設(shè)置modem的波特率
修改成功后,把連接計(jì)算機(jī)上的串口拔下后,把9針口連接到cp341的串口上。
打開(kāi)step7 manger,打開(kāi)后點(diǎn)擊file菜單下的new…,新建一個(gè)項(xiàng)目,在新建項(xiàng)目的串口里輸入項(xiàng)目sms_cp341,然后點(diǎn)擊新建,項(xiàng)目的硬件組態(tài)如下圖所示:
圖9、s7-300站的硬件組態(tài)
雙擊cp341-rs232c,打開(kāi)屬性窗口如下圖:
圖10、cp341的硬件地址設(shè)置
點(diǎn)擊parameter...,設(shè)置串口的通訊協(xié)議為
圖11、選擇通訊協(xié)議為ascii
雙擊protocol協(xié)議包,配置串口通訊的參數(shù)如下圖:
圖12、設(shè)置ascii的通訊參數(shù)
圖13、設(shè)置傳輸?shù)目刂品绞?
圖14、設(shè)置接收的緩存區(qū)
配置完硬件后,編譯并下載硬件組態(tài),然后打開(kāi)sms_md720_simple項(xiàng)目,并拷貝sms_md720_simple項(xiàng)目下的除ob1功能塊外的所有功能塊到sms_cp341項(xiàng)目相應(yīng)的目錄下,同時(shí)需要拷貝source下的源代碼到sms_cp341項(xiàng)目下的source目錄下。
拷貝后如下圖:
圖15、拷貝庫(kù)程序到項(xiàng)目下
打開(kāi)ob1塊,在ob1里調(diào)用fb100,背景數(shù)據(jù)塊為db100,如下圖所示:
圖16、ob1中調(diào)用短消息功能塊
在cp_adr中只需輸入cp341的邏輯地址256。輸入后保存程序。編寫ob1后打開(kāi)db100數(shù)據(jù)塊如下圖:
圖17、在發(fā)送功能塊的背景數(shù)據(jù)塊中設(shè)置修改cp341的硬件地址
這里sim卡無(wú)pin碼,要發(fā)送的信息是“weather”;發(fā)送的手機(jī)號(hào)為“13801234567”;設(shè)置db100的參數(shù)如下圖:
圖18、在發(fā)送功能塊的背景數(shù)據(jù)塊中設(shè)置pin碼、目的手機(jī)號(hào)及信息
修改后保存db100,并下載所有的程序塊到cpu中。下載后打開(kāi)打開(kāi)變量監(jiān)控表并在線監(jiān)控,如下圖:
圖19、通過(guò)變量監(jiān)控表觸發(fā)信息發(fā)送
在變量監(jiān)控表里先置位”sms”.b_init,然后在置位”sms”.send,等待一會(huì)兒,可以看到變量監(jiān)控表里的”sms”.n_status當(dāng)置位”sms”.b_init時(shí)會(huì)從1002變成201,然后當(dāng)置位”sms”.send時(shí)會(huì)從201變成202、204、206,過(guò)一會(huì)兒又回到201的值,這樣接可以再目的手機(jī)上接收到“weather”的短信。
上面的調(diào)試步驟只是從功能上實(shí)現(xiàn)了發(fā)短信的功能,要實(shí)現(xiàn)收發(fā)多條信息到多個(gè)多個(gè)手機(jī),可以參考sms_md720_application和sms_md720_simple下的編程思路開(kāi)發(fā)適合自己應(yīng)用的程序。
注意:如果例子項(xiàng)目文件打不開(kāi),請(qǐng)把計(jì)算機(jī)的語(yǔ)言設(shè)置為德語(yǔ)。
5、以pdu的方式發(fā)送中文sms
要發(fā)送中文短信,需要安裝step7 scl編程語(yǔ)言包,發(fā)送短信庫(kù)功能塊是由fb100來(lái)完成的,fb100是由scl語(yǔ)言編寫,要想使其能發(fā)送中文的短信,那么就需要用scl語(yǔ)言修改fb100功能塊。修改方式如下:
在發(fā)送文本方式步驟的基礎(chǔ)上,用scl語(yǔ)言打開(kāi)sms_cp341項(xiàng)目下目錄source下的sms_send源代碼,如下圖:
圖20、打開(kāi)發(fā)送功能塊的源文件
打開(kāi)后如下圖:
圖21、scl編輯器打開(kāi)后的源文件
修改源程序代碼md720_sms_textmode := '$r$lat+cmgf=1$r'為md720_sms_textmode := '$r$lat+cmgf=0$r'如下圖所示:
圖22、修改短信的發(fā)送模式為pdu模式
str_outbox := sms_textmode_attr;改為str_outbox :=md720_sms_textmode;如下圖:
圖23、修改程序中的發(fā)送模式
修改后,點(diǎn)擊file下save,然后再點(diǎn)擊file下的complie,如下圖:
圖24、重新編譯修改后的程序
關(guān)閉scl編輯窗口,若發(fā)送的目的手機(jī)號(hào)為13801234567發(fā)送的內(nèi)容為“天氣”打開(kāi)db100,修改發(fā)送參數(shù)如下圖:
圖25、修改為pdu模式下的信息格式
其中5929為pdu碼的“天”;6c14為pdu碼的“氣。
修改后下載fb100和db100功能塊到cpu。打開(kāi)變量監(jiān)控表,在變量監(jiān)控表里先置位”sms”.b_init,然后在置位”sms”.send,等待一會(huì)兒,可以看到變量監(jiān)控表里的”sms”.n_status當(dāng)置位”sms”.b_init時(shí)會(huì)從1002變成201,然后當(dāng)置位”sms”.send時(shí)會(huì)從201變成202、204、206,過(guò)一會(huì)兒又回到201的值,這樣接可以再目的手機(jī)上接收到“天氣”短信。
前面介紹用cp341發(fā)送短信,若用cp340發(fā)送短信,則需要修改庫(kù)程序中。因?yàn)樾薷谋容^繁瑣,這里就不再作介紹,若有需求??赏ㄟ^(guò)熱線聯(lián)系西門子技術(shù)與支持。