基于調(diào)制解調(diào)器與vb的plc遠程通訊系統(tǒng)設(shè)計
4 pc端程序設(shè)計
4.1 撥號程序設(shè)計
pc端將以vb6.0所帶的通信控件mscomm進行通信軟件的開發(fā),利用該控件控制串口實現(xiàn)對modem的控制。控制步驟如下:
一.通信參數(shù)設(shè)置
設(shè)置串口端口號,波特率,數(shù)據(jù)位,停止位,奇偶校驗位及設(shè)置硬件握手協(xié)議,然后向modem發(fā)出dtr(已準備好)信號一便接管modem,程序如下:
if mscomm1.portopen then
mscomm1.dtrenable = true
else
mscomm1.dtrenable = false
end if
二.對modem初始化
發(fā)出一些命令來設(shè)置參數(shù),其中s0=n(n》=1)自動應(yīng)答.n為響鈴次數(shù);e0/e1關(guān)閉/打開命令字符回應(yīng);q0/q1設(shè)置modem返回/不返回結(jié)果碼;m0/m1關(guān)閉/打開modem揚聲器;ln(n》=0)設(shè)置modem揚聲器音量;p/t設(shè)置modem脈沖/音頻撥號;程序如下:
if mscomm1.portopen then
do while not mscomm1.ctsholding: loop
txd= “ats0=1e1q0m1l2t” + chr(13)
mscomm1.output = txd
end if
三.進行撥號
向modem發(fā)出atd命令,程序如下:
mscomm1.output=“atd” & “05925998499”+chr(13)
當發(fā)送“atd”+ 電話號碼 + chr(13)時,modem就開始撥號,撥號需要一定的時間,在撥號的過程中可以不斷讀取modem的cd指示燈的狀態(tài),當電話撥通后cd指示燈會點亮。并返回“connect + 波特率”的信息。如果modem向pc的回應(yīng)字符串中含有“connect”或cdholding屬性值變?yōu)閠rue(檢測出載波),則表示已與遠方modem連機了,此時可以傳輸數(shù)據(jù)。
當電話撥通后,modem不再接收at指令,要使其回到命令狀態(tài),則必須發(fā)送“+++”信息,使modem回到命令狀態(tài),然后發(fā)送“ath”+ chr(13)則可以掛斷電話,程序如下:
mscomm1.output=“ath” +chr(13)
4.2 通訊程序設(shè)計
一.永宏plc通訊協(xié)議
永宏plc 通訊訊息格式可概分為6個數(shù)據(jù)域位, 如下圖3所示,具體解釋如下:
圖 3 永宏plc通訊協(xié)議訊息格式
⑴.開頭字符(stx):asci i碼之開始字符stx。
⑵.從站號碼:為兩位數(shù)之16進制數(shù)值。
⑶.命令號碼:為兩位數(shù)之16 進制數(shù)值,為由主系統(tǒng)要求從系統(tǒng)所執(zhí)行之動作類別。
⑷.本文資料:本文數(shù)據(jù)可為0(無本文數(shù)據(jù))~500個ascii字符。
⑸.偵誤值(checksum): 偵誤值系將前述~將各ascii字符之16進制數(shù)碼值(8位長度)從頭至尾依序相加,但不考慮進位,因此 終結(jié)果為偵誤值。
⑹.結(jié)尾字符(etx):asci i碼之結(jié)尾字符etx之16進制數(shù)碼為03h。