PLC與M20 GSM Modem的通信(2)
PLC與M20 GSM Modem的通信
---- ReadSMS子程序中執(zhí)行的操作為:復(fù)位子程序的觸發(fā)條件(復(fù)位M1.0),置位M0.0,停止端口的接收,然后向M20發(fā)送AT+CMGR=1閱讀收到的短信息。置位M0.0的目的是在發(fā)送完成中斷中判斷是哪個(gè)子程序執(zhí)行了發(fā)送操作,從而重新對(duì)RCV指令進(jìn)行設(shè)置,以接收Modem返回的信息(其他的子程序也采用了相同的做法:SendSM1的觸發(fā)位為M1.1,子程序執(zhí)行時(shí)置位M0.1;SendSM2的觸發(fā)位為M1.2,子程序執(zhí)行時(shí)置位M0.2;DelSM的觸發(fā)位為M1.3,子程序執(zhí)行時(shí)置位M0.3;ReSend的觸發(fā)位為M1.4,子程序執(zhí)行時(shí)置位M0.4)。Modem在接收到AT+CMGR=1后會(huì)將收到短信息的內(nèi)容發(fā)送給PLC,信息的格式為:
---- +CMGR: “REC UNREAD”,“+8613801184286”,,“02/03/05,13:44:12+32”
---- CALL ME
---- OK
---- 其中“CALL ME”為短信息的實(shí)際內(nèi)容,該信息轉(zhuǎn)換為十六進(jìn)制的形式為:
---- 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
---- 這樣,在發(fā)送完成中斷中,以M0.0為條件,將RCV指令的接收的起始字符設(shè)置為空格符CHR(32)(十六進(jìn)制的20)用以接受M20發(fā)送的短信息內(nèi)容。在接收完成中斷中,用接受緩沖的第一個(gè)字節(jié)等于CHR(32)來(lái)觸發(fā)SendSMS1子程序。
---- SendSMS1子程序?qū)氖盏蕉绦畔⒌膬?nèi)容中提取出發(fā)送方的電話號(hào)碼,并向M20發(fā)送AT+CMGS=“發(fā)送方號(hào)碼”,Modem在接到該指令后返回的信息為:
---- 》
---- 對(duì)應(yīng)的十六進(jìn)制形式為:
---- 0D 0A 3E 20
---- 其中0D 0A為不可顯示字符,20為空格符
---- 這樣,在發(fā)送完成中斷中以M0.1位條件設(shè)置接收的起始字符為“〉”CHR(62)用以接受M20發(fā)送的提示信息。在接收完成中斷中,用接受緩沖的第一個(gè)字節(jié)等于CHR(62)來(lái)觸發(fā)SendSMS2子程序。
---- SendSMS2子程序?qū)⑺l(fā)送的內(nèi)容加上結(jié)束字符CHR(26)發(fā)送個(gè)給M20。如果短信息正確發(fā)送,M20返回 +CMGS: xxx(xxx為該SIM卡已發(fā)送的短信數(shù)量);如果信息未能正確發(fā)送,則M20返回 +CMS ERROR。在接收完成中斷中,用CMGS來(lái)觸發(fā)DelSMS子程序,用ERROR來(lái)觸發(fā)ReSend子程序。
---- DelSMS子程序向M20發(fā)送AT+CMGD=1用來(lái)刪除收到的短信息,ReSend子程序重新發(fā)送SendSMS1中的指令A(yù)T+CMGS=“ 發(fā)送方號(hào)碼”。
---- 點(diǎn)擊下在原程序
---- ReadSMS子程序中執(zhí)行的操作為:復(fù)位子程序的觸發(fā)條件(復(fù)位M1.0),置位M0.0,停止端口的接收,然后向M20發(fā)送AT+CMGR=1閱讀收到的短信息。置位M0.0的目的是在發(fā)送完成中斷中判斷是哪個(gè)子程序執(zhí)行了發(fā)送操作,從而重新對(duì)RCV指令進(jìn)行設(shè)置,以接收Modem返回的信息(其他的子程序也采用了相同的做法:SendSM1的觸發(fā)位為M1.1,子程序執(zhí)行時(shí)置位M0.1;SendSM2的觸發(fā)位為M1.2,子程序執(zhí)行時(shí)置位M0.2;DelSM的觸發(fā)位為M1.3,子程序執(zhí)行時(shí)置位M0.3;ReSend的觸發(fā)位為M1.4,子程序執(zhí)行時(shí)置位M0.4)。Modem在接收到AT+CMGR=1后會(huì)將收到短信息的內(nèi)容發(fā)送給PLC,信息的格式為:
---- +CMGR: “REC UNREAD”,“+8613801184286”,,“02/03/05,13:44:12+32”
---- CALL ME
---- OK
---- 其中“CALL ME”為短信息的實(shí)際內(nèi)容,該信息轉(zhuǎn)換為十六進(jìn)制的形式為:
---- 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
---- 這樣,在發(fā)送完成中斷中,以M0.0為條件,將RCV指令的接收的起始字符設(shè)置為空格符CHR(32)(十六進(jìn)制的20)用以接受M20發(fā)送的短信息內(nèi)容。在接收完成中斷中,用接受緩沖的第一個(gè)字節(jié)等于CHR(32)來(lái)觸發(fā)SendSMS1子程序。
---- SendSMS1子程序?qū)氖盏蕉绦畔⒌膬?nèi)容中提取出發(fā)送方的電話號(hào)碼,并向M20發(fā)送AT+CMGS=“發(fā)送方號(hào)碼”,Modem在接到該指令后返回的信息為:
---- 》
---- 對(duì)應(yīng)的十六進(jìn)制形式為:
---- 0D 0A 3E 20
---- 其中0D 0A為不可顯示字符,20為空格符
---- 這樣,在發(fā)送完成中斷中以M0.1位條件設(shè)置接收的起始字符為“〉”CHR(62)用以接受M20發(fā)送的提示信息。在接收完成中斷中,用接受緩沖的第一個(gè)字節(jié)等于CHR(62)來(lái)觸發(fā)SendSMS2子程序。
---- SendSMS2子程序?qū)⑺l(fā)送的內(nèi)容加上結(jié)束字符CHR(26)發(fā)送個(gè)給M20。如果短信息正確發(fā)送,M20返回 +CMGS: xxx(xxx為該SIM卡已發(fā)送的短信數(shù)量);如果信息未能正確發(fā)送,則M20返回 +CMS ERROR。在接收完成中斷中,用CMGS來(lái)觸發(fā)DelSMS子程序,用ERROR來(lái)觸發(fā)ReSend子程序。
---- DelSMS子程序向M20發(fā)送AT+CMGD=1用來(lái)刪除收到的短信息,ReSend子程序重新發(fā)送SendSMS1中的指令A(yù)T+CMGS=“ 發(fā)送方號(hào)碼”。
---- 點(diǎn)擊下在原程序
本文標(biāo)簽:PLC與M20 GSM Modem的通信(2)
* 由于無(wú)法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報(bào)酬未能及時(shí)支付,在此深表歉意,請(qǐng)《PLC與M20 GSM Modem的通信(2)》相關(guān)權(quán)利人與機(jī)電之家網(wǎng)取得聯(lián)系。
關(guān)于“PLC與M20 GSM Modem的通信(2)”的更多資訊










