西門子 S7-200 PLC與M20 GSM Modem的通信
時間:2006-12-23 15:11:00來源:guyan
導語:?本例說明如何以自由協議實現S7-200與M20 GSM Modem的通信
概述
本例說明如何以自由協議實現S7-200與M20 GSM Modem的通信。可實現的功能為:當M20收到GSM短信息時,可以自動向發送方回發一條短信息,信息的內容由用戶自行定義。
AT指令:
本例中使用的AT指令主要有四個:
1.短信息格式選擇指令CMGF
M20支持兩種格式的短信息,PDU格式和TEXT格式。
AT+CMGF=0 設置短信為PDU格式(默認)
AT+CMGF=1 設置短信為TEXT格式
本例中將使用TEXT格式,因此必須對M20進行初始化。
2.讀短信息指令CMGR
指令格式為:AT+CMGR=< index >,index一般為1到15的整數,視SIM卡的容量而定,它表示所要閱讀的短信息在SIM卡中的存儲位置。在本例中,由于收到的短信息在閱讀后都會被刪除,因此每次收到的短信息都會被保存到第一個存儲位置,在收到短信息后,用AT+CMGR=1即可閱讀。
3.發送短信息指令CMGS
指令格式為:AT+CMGS=< da >,da為目標手機號,如"13800138000"。M20接到指令后返回一個"〉"提示輸入短信內容,短信內容以CHR(26)結束。
4.刪除短信息指令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: "REC UNREAD","+8613801184286",,"02/03/05,13:44:12+32"
CALL ME
OK
其中"CALL ME"為短信息的實際內容,該信息轉換為十六進制的形式為:
0D 0A 2B 43 4D 47 52 3A 20 22 52 45 43 20 55 4E 52 45 41 44 22 2C 22 2B 38 36 31 33 38 30 31 31 38 34 32 38 36 22 2C 2C 22 30 32 2F 30 33 2F 30 35 2C 31 33 3A 34 34 3A 31 32 2B 33 32 22 0D 0A 43 41 4C 4C 20 4D 45 0D 0A 0D 0A 4F 4B 0D 0A
這樣,在發送完成中斷中,以M0.0為條件,將RCV指令的接收的起始字符設置為空格符CHR(32)(十六進制的20)用以接受M20發送的短信息內容。在接收完成中斷中,用接受緩沖的第一個字節等于CHR(32)來觸發SendSMS1子程序。
SendSMS1子程序將從收到短信息的內容中提取出發送方的電話號碼,并向M20發送AT+CMGS="發送方號碼",Modem在接到該指令后返回的信息為:
>
對應的十六進制形式為:
0D 0A 3E 20
其中0D 0A為不可顯示字符,20為空格符
這樣,在發送完成中斷中以M0.1位條件設置接收的起始字符為"〉"CHR(62)用以接受M20發送的提示信息。在接收完成中斷中,用接受緩沖的第一個字節等于CHR(62)來觸發SendSMS2子程序。
SendSMS2子程序將所要發送的內容加上結束字符CHR(26)發送個給M20。如果短信息正確發送,M20返回 +CMGS: xxx(xxx為該SIM卡已發送的短信數量);如果信息未能正確發送,則M20返回 +CMS ERROR。在接收完成中斷中,用CMGS來觸發DelSMS子程序,用ERROR來觸發ReSend子程序。
DelSMS子程序向M20發送AT+CMGD=1用來刪除收到的短信息,ReSend子程序重新發送SendSMS1中的指令AT+CMGS=" 發送方號碼"。
點擊下在原程序
附:Modem發送的信息格式
收到短信息時:
+CMTI: "SM", 1
0D 0A 2B 43 4D 54 49 3A 20 22 53 4D 22 2C 20 31 0D 0A
讀取短信息內容時:
+CMGR: "REC UNREAD","+8613801184286",,"02/03/05,13:44:12+32"
CALL ME
OK
0D 0A 2B 43 4D 47 52 3A 20 22 52 45 43 20 55 4E 52 45 41 44 22 2C 22 2B 38 36 31 33 38 30 31 31 38 34 32 38 36 22 2C 2C 22 30 32 2F 30 33 2F 30 35 2C 31 33 3A 34 34 3A 31 32 2B 33 32 22 0D 0A 43 41 4C 4C 20 4D 45 0D 0A 0D 0A 4F 4B 0D 0A
發送短信息時:
>
0D 0A 3E 20
發送成功時:
+CMGS: 160
OK
0D 0A 2B 43 4D 47 53 3A 20 31 36 30 0D 0A 0D 0A 4F 4B 0D 0A
發送失敗時:
+CMS ERROR: 500
標簽:
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。