1 遠(yuǎn)程通信方案
由PC機(jī)和單片機(jī)組成的分布式測控系統(tǒng)已在工業(yè)生產(chǎn)中得到了廣泛的應(yīng)用,。其中,單片機(jī)作為從機(jī),,負(fù)責(zé)現(xiàn)場控制和實(shí)時(shí)數(shù)據(jù)的采集,PC機(jī)作為主機(jī),,負(fù)責(zé)對各從機(jī)發(fā)來的數(shù)據(jù)進(jìn)行分析,、處理,并向各從機(jī)發(fā)布命令,,以實(shí)現(xiàn)對工業(yè)現(xiàn)場的集中監(jiān)控與管理,,由于主從機(jī)需不斷進(jìn)行信息交流,通信成為分布式測控系統(tǒng)重要而基本的功能,。
采用RS485等通信技術(shù)可實(shí)現(xiàn)近距離通信(<1km),,而在許多場合,,各計(jì)算機(jī)之間距離較遠(yuǎn)(幾公里甚至幾十公里),這時(shí)就應(yīng)采用遠(yuǎn)程通信技術(shù),?;?a class="innerlink" href="http://forexkbc.com/tags/Modem" title="Modem" target="_blank">Modem和公用電話網(wǎng)的遠(yuǎn)程通信技術(shù)則是一種實(shí)施方便、成本低廉的方案,。
采用電話網(wǎng)通信的分布式測控系統(tǒng)如圖1—1所示,,PC機(jī)及各單片機(jī)均通過Modem聯(lián)入電話網(wǎng),PC機(jī)可通過Modem撥號與選中的單片機(jī)建立通信鏈路,,以進(jìn)行數(shù)據(jù)傳輸,,傳輸結(jié)束后可掛機(jī)拆除通信鏈路。
為了順利實(shí)現(xiàn)通信,,在通信程序設(shè)計(jì)中應(yīng)注意兩個(gè)問題:一是對Modem進(jìn)行正確操作,,以實(shí)現(xiàn)數(shù)據(jù)鏈路的建立或
拆除等功能。二是在數(shù)據(jù)傳輸過程中,,收發(fā)雙方應(yīng)遵循共同的通信協(xié)議,,以保證數(shù)據(jù)的可靠傳送,本文將對這兩點(diǎn)作詳細(xì)討論,。
2 Modem操作編程
有關(guān)單片機(jī)具體控制Moedm的方法及接口已有許多文獻(xiàn)進(jìn)行了討論[4],,本文著重介紹VB環(huán)境下PC機(jī)操作Modem的編程方法。
標(biāo)準(zhǔn)的賀式命令集定義了一些基本功能集(表2—1),,利用這些功能可以操作Modem以實(shí)現(xiàn)Modem的初始化,、撥號、掛機(jī)等功能,。
VB以其功能豐富,,簡單易用等特點(diǎn)成為開發(fā)PC機(jī)監(jiān)控軟件的首選工具,VB提供了一個(gè)具有串行通信功能的MSCOMM控件,,使得通信程序的開發(fā)方便,、快捷。
利用MSCOMM控件,,我們可以向Modem傳送AT命令對Modem進(jìn)行操作,,下面是一段用VB編寫的撥號程序代碼:
數(shù)據(jù)傳輸完畢后,可向Modem發(fā)出掛機(jī)命令以釋放通信鏈路
CommCtrl.Output=“ATH”+chr $(13)’發(fā)送掛機(jī)命令
CommCtrl.PortOpen=False ’關(guān)閉端口
3 數(shù)據(jù)傳輸及通信協(xié)議
撥號接通線路后,,就可以進(jìn)行數(shù)據(jù)傳輸了,,采用異步通信不可避免地會(huì)出現(xiàn)數(shù)據(jù)傳輸錯(cuò)誤,為了保證數(shù)據(jù)可靠傳輸,,通信的雙方應(yīng)遵循一定的協(xié)議,,我們根據(jù)微機(jī)通信中廣泛采用的Xmodem協(xié)議,制定主機(jī)與從機(jī)通信協(xié)議如下:
傳輸?shù)臄?shù)據(jù)被分割成128字節(jié)的數(shù)據(jù)塊,,每個(gè)數(shù)據(jù)塊前有起始符SOH,,塊編號,,數(shù)據(jù)塊后附有檢驗(yàn)和。
傳輸過程由PC機(jī)每隔10秒發(fā)一個(gè)“NAK”字符來啟動(dòng),,當(dāng)單片機(jī)檢測到一個(gè)NAK后,,會(huì)發(fā)出第一個(gè)數(shù)據(jù)包,PC機(jī)檢查數(shù)據(jù)包,,將128字節(jié)相加,,計(jì)算出檢驗(yàn)和,并與發(fā)來的檢驗(yàn)和相比較,,相同則發(fā)送ACK字符,,對本次接收的數(shù)據(jù)塊進(jìn)行確認(rèn),否則,,發(fā)送NAK字符,,通知對方重發(fā)數(shù)據(jù)塊,當(dāng)數(shù)據(jù)傳送完畢后,,單片機(jī)發(fā)出“EOT”字符,,通知PC機(jī)結(jié)束數(shù)據(jù)傳輸,。
在通信過程中,,發(fā)送方重發(fā)數(shù)據(jù)的次數(shù)限制為6次,超過6次則掛機(jī),,而接收方也應(yīng)設(shè)置超時(shí)機(jī)制,,如果一個(gè)數(shù)據(jù)包在規(guī)定的時(shí)間內(nèi)沒有傳遞完成,則意味著出現(xiàn)了異常情況,,這時(shí)應(yīng)掛機(jī)停止通信,,以防止進(jìn)入無限期等待的死鎖狀態(tài)。
PC機(jī)(接收方)與單片機(jī)(發(fā)送方)通信程序流程見圖3—1,、圖3—2,。
4 結(jié)束語
本文介紹的通信方法已在實(shí)驗(yàn)中得到驗(yàn)證,它不僅可保證數(shù)據(jù)的可靠傳輸,,并且實(shí)現(xiàn)簡單方便,,對于工控領(lǐng)域中計(jì)算機(jī)間的遠(yuǎn)程 通信設(shè)計(jì)具有一定的參考價(jià)值。