精品视频一区二区观看,欧美一区二区视频三区,日韩一区二区三区不卡,欧美中文综合在线视频,欧美综合网亚洲综合网

      ? ? ? ?

      咨詢電話

      ENGLISH0755-88840386
      學(xué)習(xí)專題

      咨詢電話

      0755-88840386
      您的位置:首頁 > 學(xué)習(xí)專題 > 專業(yè)技術(shù)專題 > 工業(yè)自動化稱重儀表>詳情頁

      基于MSComm控件下監(jiān)測系統(tǒng)與稱重儀表串行通信

      發(fā)布時間:2020-12-01 10:00:32 |來源:網(wǎng)絡(luò)轉(zhuǎn)載

      作為能源、物資的計量設(shè)備——稱重儀表,在工業(yè)生產(chǎn)中分布在現(xiàn)場的各個區(qū)域,給設(shè)備的監(jiān)控和數(shù)據(jù)的統(tǒng)計帶來諸多不便。隨著智能儀表技術(shù)的不斷發(fā)展,其通信技術(shù)也在不斷加強,當(dāng)今的測量儀表大多帶有RS-485或RS-232通訊接口,用現(xiàn)場總線方式可以實現(xiàn)多臺測量儀表的集中監(jiān)控與數(shù)據(jù)釆集,從而可實現(xiàn)儀表直接接入PC機中的監(jiān)測系統(tǒng)中,實時顯示計量儀表數(shù)據(jù),使現(xiàn)場配料人員做到心中有數(shù),利用“遠程傳輸”實現(xiàn)了Window泌境下一臺PC機與多臺測量儀表的串行通信功能,并且對儀表數(shù)據(jù)實現(xiàn)自動計量與自動匯總。
      考慮到Delphi集中了許多技術(shù),包括可視化的開發(fā)環(huán)境、數(shù)據(jù)庫以及編譯器的技術(shù),支持DDE和OLE以方便地與其他Windows應(yīng)用程序通信、開發(fā)的應(yīng)用程序運行速度快,與C++類庫構(gòu)建的應(yīng)用程序相比代碼更小,運行時不需要運行解釋器等,且可以通過微軟的MSCom唯件等一些優(yōu)秀的控件來方便有效地實現(xiàn)通信功能。因此,這將使得用Delphi編寫的監(jiān)測系統(tǒng)應(yīng)用程序與稱重儀表之間的串行通信實現(xiàn)簡單化,并且增加了程序運行的可靠性。
      Delphi應(yīng)用程序與稱重儀表通信協(xié)議
      根據(jù)RS-485電氣規(guī)定,在兩線制傳輸方式下,RS-485驅(qū)動器可帶32個接收器,實現(xiàn)多半點雙工通信,其系統(tǒng)方框圖如圖1所示。監(jiān)測系統(tǒng)通過RS-232接口,經(jīng)232-48娘塊與多臺流量計儀表相連接,一條總線上最多可接32臺,每臺儀表被賦予各自的通訊地址碼用于識別身份,這樣上位PC即能通過RS-485總線對掛在總線上的每臺儀表進離信。
      通常釆用MODBUS通訊協(xié)議,釆用RS-485半雙工的方式,積算儀表作為從機,上位PC機作為主機,控制和監(jiān)視稱重儀表等計量儀表的運行。
      要實現(xiàn)對稱重儀表信息的外部調(diào)用就要求同時運行稱重儀表應(yīng)用程序和Delphi編寫的監(jiān)測系統(tǒng)應(yīng)用程序,并在兩者之間建立起相互訪問對方數(shù)據(jù)的通信協(xié)議,故在每個數(shù)據(jù)包都加上了數(shù)據(jù)包起始或終止信息,并在接受數(shù)據(jù)端維護一個環(huán)形接收緩沖區(qū)。專門用一個線程負(fù)責(zé)接收數(shù)據(jù),收到的數(shù)據(jù)包放入環(huán)形接收緩沖區(qū),同時,另外一個線程不停地分析、處理緩沖區(qū)的數(shù)據(jù)。這是整個程序通信功能的實現(xiàn)結(jié)構(gòu)。數(shù)據(jù)包的總體結(jié)構(gòu)為:(一)傳輸速率9600bps,8位數(shù)埔立,E禺校驗位,I位停止位;(二)數(shù)據(jù)包格式,內(nèi)容釆用16進制。通信波特率大多為9600bps。每個從站被賦予唯一的本機地址,采用主機輪詢、從機應(yīng)答的通信方式。主機通過發(fā)送命令幀啟動一次通信,從機接收到數(shù)據(jù)后,判斷呼叫地址是否和本機地址相同,若不同,則不予理睬,若相同則根據(jù)命令幀中的特征字(命令字),發(fā)送主機要求的數(shù)據(jù)幀。
      二、Delphi平臺上MSComm控件串行通信
      (一)安裝MSCommS件
      在Delphi中添加MSComm控件時,首先找到下列3個文件:MSComm.srg,MSComm32.ocxftMSComm32.dep,把這3個文件拷貝到system目錄下(如果安裝過VisualBasic,這3個文件已經(jīng)存在)。用Windows下的注冊工具regsvrm32注冊該ocx控件,例如:Regsvr32?”system目錄\MSComm32.ocx。另外,為了能正確使用該控件,需要修改注冊表相應(yīng)信息。在注冊表的HKEY_CLASSES_ROOT\Licenses下建f項:4250E830-6AC2-1lcf-8ADB-OOAA00C00905,該項的內(nèi)容為:
      kjljvjjjoquqmjjjvpqqkqmqykypoqjquou
      然后啟動Delphi,進入Delphi環(huán)境在Component菜單下選ImportActiveXControl,這時在列表中可以看到MicrosoftCommControl6.0選項,選中這個選項并點擊Install按鈕,編譯后完成安裝。這時在ActiveX控件頁上可以看到一個圖標(biāo)為電話的控件,這就是MSComm控件。這樣就可以像在VisualBasic中一樣方便的使用MSComm控件了。
      (-)MSComm控件的主要屬性及事件
      MSComm控件的屬性較多,與本文有關(guān)的屬性主要為:l.CommPort://設(shè)量并返回通信端口號;2-CommEvent:雁回通信事件或錯誤;3.1nput://返回并刪除接收緩沖區(qū)中的數(shù)據(jù),在設(shè)計時無效,運行時為只讀;4.InputLen:濾定被Input屬性讀取的字符數(shù);5.InputMode:〃設(shè)置并返回被Input屬性讀取的數(shù)據(jù)類型,其中ComlnputModeText以文本形式返回,而ComlnputModeBinary以二進制形式返回;6.0utput://向輸出緩沖區(qū)中寫入數(shù)據(jù),在設(shè)計時無效,運行時為只讀;7.Port0pen://設(shè)置并返回通信端口幵或關(guān)的狀態(tài),運行時有效;8.RThreshold://在MSComm控件設(shè)置CommEvent屬性為ComnEvReceive并產(chǎn)生OnComm事件之前,設(shè)置并返回要接收的字符數(shù);^Settings://設(shè)置并返回初始化參數(shù),即波特率、奇偶校驗、數(shù)據(jù)位和停止住;lO.OnComm事件://當(dāng)CommEvent屬性的值變化時,就產(chǎn)生此事件,標(biāo)志發(fā)生了一個通信事件或錯誤。
      (三)    MSCommS件串行通信方式和步驟
      MSComm控件提供了兩種處理通信的方式:
      1.事件驅(qū)動方式。相當(dāng)于一般程序中中斷方式,當(dāng)串口發(fā)生事件或錯誤時,MSComm會產(chǎn)生OnComm事件,用戶程序可以獲得該事件相應(yīng)處理,這是一種處理端口通信的有效的方法,它可以利用OnComm事件捕獲并處理串行通信中發(fā)生的字件或錯誤,實時性較強。
      2.查詢方式。在用戶程序中設(shè)計定時器或不定時查詢MSComm®件的某些屬性是否發(fā)生變化,從而確定相應(yīng)的處理。該方式是在程序通過查詢CommEvent屬性的值來判斷通信過程中的事件或錯誤;這種方式適合于應(yīng)用程序較小、實時性要求不是很高的系統(tǒng)中。
      為此,MSComm控件串行通信的一般步驟為:(1)設(shè)置通信對象、通信端口號以及其它屬性;(2)設(shè)定通信協(xié)議;(3)打開通信端口,進行數(shù)據(jù)的傳送;(4)關(guān)閉通信端口。
      (四)    Delphi平臺上MSComm^件串行通信實現(xiàn)
      在用Delphi語言編寫的監(jiān)測系統(tǒng)應(yīng)用程序中,往往只對稱重儀表的數(shù)據(jù)進行采集和顯示,因此只發(fā)送請求數(shù)據(jù)命令;接受數(shù)據(jù)過程從稱重儀表接收時間和其它數(shù)據(jù)信息。
      在FormCreate事件過程中,對串口進行初始化:
      ProcedureMForml.FormCreate(Sender:TObject)
      Begin
      MSComml.InBufferCount:=0//$青空接受緩沖區(qū)
      MSComml.commPort:=1
      MSComml.Settings-'9600,1,&r//W通信口設(shè)置為9600biVs,1位剖禺校驗位、8個數(shù)位,1個停止位
      MSComml.InputLen:=0    //Input讀取整個緩沖區(qū)內(nèi)容
      MSComml.RTTireshold:=1海次接受到字符即產(chǎn)生OnComir#件MSComml.InputMode:=InputModeText
      MSComml.PortOpen:=true    務(wù)J開串口
      MSComml.DTREnable:=true儺備好數(shù)據(jù)終端
      MSComml.DTSEnable:=true/牖求發(fā)送
      End
      結(jié)束時,關(guān)閉串口
      ProcedureWIForml.ClosebuttonCSender:TObject)
      MSComml.PortOpen:=false    //關(guān)閉串口
      MSComml.DTREnable:=false//關(guān)閉數(shù)據(jù)終端
      MSComml.DTSEnable:=false〃停止發(fā)送
      End
      在通信的過程中,由于某些原因不能保證每次通信都成功,在這種情況下不能簡單的宣布通信失敗或通信線路故障。本程序進行了通信超時設(shè)定,只有規(guī)定的時間內(nèi)還未進行正常的數(shù)據(jù)通信才確定是通信故障并進行處理,從而提高了通信的容錯能力。
      在稱重儀表回傳數(shù)據(jù)時即可在主機上引發(fā)DoEvenK)函數(shù)來解決,DoEvents()函數(shù)可以將控制權(quán)轉(zhuǎn)給其他任務(wù)使用,然后再跳回通信處理程序。函數(shù)中,首先判斷接收數(shù)據(jù)的完整性,然后將數(shù)據(jù)一次全部讀到所定義的變量參數(shù)中,根據(jù)稱重儀表通信協(xié)議中定義的內(nèi)容,分別取出各個字節(jié),解析出意義,在屏幕上顯示,利用在Delphi監(jiān)控程序中加入DATA控件,將數(shù)據(jù)存入數(shù)據(jù)庫中,使用Delphi的報表功能即可產(chǎn)生日報、月報及年報。
      三、結(jié)束語
      (—)在Delphi環(huán)境下用MSComm®件成功地設(shè)計了稱重儀表與監(jiān)測主機之間的串行通信程序。實踐表明,Delphi力吐好的通信控制(如MSComm)來進行串行通信程序的幵發(fā)不失為一種好的方式。
      (二)本實例已投入實際使用,它雖然只是針對稱重儀表的協(xié)議編寫的,但其方法和步驟完全適用于其它儀器設(shè)備。實踐證明,這種方法是簡單、可靠、可擴充好,具有一定的通用性。

       

      本文源于網(wǎng)絡(luò)轉(zhuǎn)載,如有侵權(quán),請聯(lián)系刪除

      分享到