谘詢電話

ENGLISH0755-88840386
新聞中心

谘詢電話

0755-88840386
您的位置:首頁 > K8凯发大酒店天生赢家專題 > 專業技術專題 > 工業自動化稱重儀表>詳情頁

基於MSComm控件下監測係統與稱重儀表串行通信

發布時間:2020-12-01 10:00:32 |來源:網絡轉載

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

 

本文源於網絡轉載,如有侵權,請聯係刪除

分享到
網站地圖凱發K8凱發K8凱發K8凱發K8凱發K8