基于調(diào)制解調(diào)器與VB的PLC遠(yuǎn)程通訊系統(tǒng)設(shè)計(jì)
4 PC端程序設(shè)計(jì)
4.1 撥號(hào)程序設(shè)計(jì)
PC端將以VB6.0所帶的通信控件MSCOMM進(jìn)行通信軟件的開發(fā),利用該控件控制串口實(shí)現(xiàn)對(duì)MODEM的控制??刂撇襟E如下:
一.通信參數(shù)設(shè)置
設(shè)置串口端口號(hào),波特率,數(shù)據(jù)位,停止位,奇偶校驗(yàn)位及設(shè)置硬件握手協(xié)議,然后向MODEM發(fā)出DTR(已準(zhǔn)備好)信號(hào)一便接管MODEM,程序如下:
If MSComm1.PortOpen Then
MSComm1.DTREnable = True
Else
MSComm1.DTREnable = False
End If
二.對(duì)MODEM初始化
發(fā)出一些命令來設(shè)置參數(shù),其中S0=n(n》=1)自動(dòng)應(yīng)答.n為響鈴次數(shù);E0/E1關(guān)閉/打開命令字符回應(yīng);Q0/Q1設(shè)置MODEM返回/不返回結(jié)果碼;M0/M1關(guān)閉/打開MODEM揚(yáng)聲器;Ln(n》=0)設(shè)置MODEM揚(yáng)聲器音量;P/T設(shè)置MODEM脈沖/音頻撥號(hào);程序如下:
If MSComm1.PortOpen Then
Do While Not MSComm1.CTSHolding: Loop
TXD= “ATS0=1E1Q0M1L2T” + Chr(13)
MSComm1.Output = TXD
End If
三.進(jìn)行撥號(hào)
向MODEM發(fā)出ATD命令,程序如下:
MSComm1.Output=“ATD” & “05925998499”+Chr(13)
當(dāng)發(fā)送“ATD”+ 電話號(hào)碼 + Chr(13)時(shí),MODEM就開始撥號(hào),撥號(hào)需要一定的時(shí)間,在撥號(hào)的過程中可以不斷讀取MODEM的CD指示燈的狀態(tài),當(dāng)電話撥通后CD指示燈會(huì)點(diǎn)亮。并返回“CONNECT + 波特率”的信息。如果MODEM向PC的回應(yīng)字符串中含有“Connect”或CDHolding屬性值變?yōu)門rue(檢測(cè)出載波),則表示已與遠(yuǎn)方MODEM連機(jī)了,此時(shí)可以傳輸數(shù)據(jù)。
當(dāng)電話撥通后,MODEM不再接收AT指令,要使其回到命令狀態(tài),則必須發(fā)送“+++”信息,使MODEM回到命令狀態(tài),然后發(fā)送“ATH”+ Chr(13)則可以掛斷電話,程序如下:
MSComm1.Output=“ATH” +Chr(13)
4.2 通訊程序設(shè)計(jì)
一.永宏P(guān)LC通訊協(xié)議
永宏P(guān)LC 通訊訊息格式可概分為6個(gè)數(shù)據(jù)域位, 如下圖3所示,具體解釋如下:
圖 3 永宏P(guān)LC通訊協(xié)議訊息格式
?、牛_頭字符(STX):ASCI I碼之開始字符STX。
?、疲畯恼咎?hào)碼:為兩位數(shù)之16進(jìn)制數(shù)值。
?、牵钐?hào)碼:為兩位數(shù)之16 進(jìn)制數(shù)值,為由主系統(tǒng)要求從系統(tǒng)所執(zhí)行之動(dòng)作類別。
?、龋疚馁Y料:本文數(shù)據(jù)可為0(無本文數(shù)據(jù))~500個(gè)ASCII字符。
?、桑畟烧`值(CHECKSUM): 偵誤值系將前述~將各ASCII字符之16進(jìn)制數(shù)碼值(8位長度)從頭至尾依序相加,但不考慮進(jìn)位,因此最終結(jié)果為偵誤值。
?、剩Y(jié)尾字符(ETX):ASCI I碼之結(jié)尾字符ETX之16進(jìn)制數(shù)碼為03H。










