• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      西門子S7—200PLC自由口通訊的兩種Delphi實現(xiàn)方法

      2014-12-31 00:00:00肖珊
      電子世界 2014年10期

      【摘要】本文介紹了PC機與PLC實現(xiàn)自由口通信的兩種方法。上位機采用的是PC機,利用Delphi6.0編寫應用程序,詳細對其中的兩種方式做了詳細說明。下位機采用西門子公司的S7-200PLC,文中列出了相應的程序說明。

      【關鍵詞】計算機通信;PLC;Delphi;自由口通信

      1.引言

      隨著大規(guī)模和超大規(guī)模集成電路等微電子技術的迅猛發(fā)展,PLC作為一種新型高能的控制器已經越來越廣泛地用于工業(yè)現(xiàn)場控制的各個領域,它有著高可靠性、低能耗、易操作、易安裝等優(yōu)點。但是,由于PLC的人機交互能力差,獨立的PLC不能完成工業(yè)控制流程的實時和動態(tài)監(jiān)控,PC機與PLC的通訊就愈加顯得重要。通過PLC與PC機的通訊,使得個人計算機和其他智能控制設備交換數(shù)字信息,使系統(tǒng)形成一個統(tǒng)一的整體,方便實現(xiàn)分散控制和集中管理。

      2.S7-200的通信與PC機的通信機理

      S7-200 PLC的CPU支持多種通信協(xié)議,包括:點到點接口協(xié)議(PPI)、多點接口協(xié)議(MPI)、Profibus協(xié)議、自由通信接口協(xié)議和USS協(xié)議。自由通訊口模式是S7-200PLC一個很有特色的功能,用戶可以通過用戶程序對通信口進行操作并且自己定義通信協(xié)議。應用該通信方式,S7-200可以方便地和任何通信協(xié)議已知、具有串口的智能設備和控制器進行通信。

      通過設定特殊存儲字節(jié)SMB30(端口0)或SMB130(端口1)允許自由口模式,設置它的波特率、奇偶校驗和數(shù)據(jù)位數(shù)。用發(fā)送指令(XMT)和接收指令(RCV)對數(shù)據(jù)進行通信操作。值得注意的一點是:只有在CPU處于RUN模式時才允許自由口模式,當CPU處于STOP模式時自由口模式將自動轉換為PPI協(xié)議模式。用反應CPU模塊上的工作方式的特殊存儲器位SM0.7來控制自由口通訊方式的進入,當SM0.7為1時CPU處于RUN模式,可將通信口置為自由口模式。

      在PC機與PLC的通訊過程中,主要是由PC機發(fā)送信息來強制控制PLC的狀態(tài),接收PLC發(fā)送過來的信息來顯示控制狀態(tài)。PLC發(fā)送信息通過檢測SM4.5來每半分鐘發(fā)送有關PLC狀態(tài)的信息,以使PC機信息更新。

      3.下位機(PLC)實現(xiàn)

      對PLC的通信編程就是對串口進行設置。當CPU處于RUN模式時,進行自由口通信。

      3.1 端口的初始化

      4.上位機的Delphi實現(xiàn)

      Delphi是Borland公司推出的一種功能強大的高級編程語言,具有可視化面向對象的特性。將Windows編程的復雜性封裝,實現(xiàn)可視化設計和Object Pascal語言的有機結合,特別適于在Windows環(huán)境下圖形界面和用戶程度的編制。Delphi的伸縮性很強,控件功能強大,往往只需編寫較少的代碼就可以實現(xiàn)較復雜的應用。并且相對于WINCC、IFIX組態(tài)軟件,使用Delphi會降低很多成本。

      4.1 用第三方提供的控件MSComm實現(xiàn)

      首先要將Activex控件導入Delphi中:打開主菜單[Component]選擇[Import ActiveX Control],選擇列表中的[Microsoft Comm Control 6.0]選項(安裝VB6.0后就可以看到這個選項),單擊Install按鈕,編譯后完成安裝,這時,可以在Activex控件頁上看到一個電話圖標,這就是MSComm控件。

      新建一個Application項目,在主窗體Form1中添加一個MSComm控件后可進行串行口的初始化。如設置COM口,設置發(fā)送、接收對列長度、比特率、數(shù)據(jù)幀長度、每次接受到字符即產生OnComm事件等[2]。

      4.2 用API函數(shù)實現(xiàn)串口通信

      在Windows系統(tǒng)下,由于應用程序不能直接訪問硬件,因此只能通過調用API(Application Programming Interface)函數(shù)來完成與下層設備的數(shù)據(jù)交換。操作系統(tǒng)為每個通信設備開辟了用戶可定義大小的讀/寫緩沖區(qū),數(shù)據(jù)進出通信端口均由操作系統(tǒng)后臺完成,用戶只需調用API函數(shù)編寫串行通信程序對讀/寫緩沖區(qū)進行操作而已。在Delphi中對串口編程的基本步驟是:

      首先,采用CreateFile函數(shù)打開串行口,以確定本應用程序對此串口的占有權,并封鎖其它應用程序對此串口的操作。

      其次,DCB中記錄有可定義的串行口參數(shù),設置串行口參數(shù)時必須先用GetCommState函數(shù)將系統(tǒng)默認值填入DCB控制塊,然后再通過調用SetCommState函數(shù)配置串行口的波特率、數(shù)據(jù)位、校驗位和停止位。

      然后通過ReadFile和WriteFile進行串行口的讀寫操作。

      最后用CloseHandle函數(shù)關閉串行口。

      4.3 多線程技術

      為了有效克服串口通信中的停滯和反應不及時的情況,采用Delphi的多線程模式加以克服。

      在PC機中,同一時間只有一個線程在運行。由于系統(tǒng)為每個線程劃分的時間片很小(20毫秒左右),所以看上去是多個線程在同時運行。進程中的所有線程共享進程的虛擬地址空間,這意味著所有線程都可以訪問進程的全局變量和資源。一方面為編程帶來了方便,但另一方面也容易造成沖突。所以,如果進程既要進行長期的工作,又要響應用戶的輸入,那么可以啟動一個線程來專門負責費時的工作,而主線程仍然可以與用戶進行交互。對于通信程序這樣既要進行耗時的工作,又要保持對用戶輸入響應的應用來說,使用多線程是最佳選擇。主要的處理邏輯如下:進程一開始先由主線程做一些必要的初始化工作,然后主線程根據(jù)需要在適當時候建立通信監(jiān)視線程監(jiān)視通信口,當指定的串行口事件發(fā)生時,向主線程發(fā)送WM_COMMNOTIFY消息,主線程對其進行處理。若不需要WM_COMMNOTIFY消息,則主線程終止通信監(jiān)視線程。

      多線程同時執(zhí)行,將會引起對共享資源的沖突。為避免沖突,就要用同步多線程對共享資源進行訪問。通過CraeteEvent()創(chuàng)建事件對象,使用SetEvent()或PulseEvent()函數(shù)將事件對象設置成信號同步。在應用程序中,利用WaitforSingleObject()函數(shù)等待同步的觸發(fā),等到指定的事件被其它線程設置為有信號時,才繼續(xù)向下執(zhí)行程序[3]。本系統(tǒng)采用上位機主動的方式,將上位機與下位機的編程融為一體,不需要PLC內部的梯形圖作為下位機程序,具有很好的通用性。

      5.結束語

      本文根據(jù)PLC和PC機的特點,介紹了兩種PC機與PLC的基于Delphi通訊方法,用MScomm方法實現(xiàn)有封裝性、繼承性、多態(tài)性等特性,且編程簡單;用API函數(shù)實現(xiàn)則有運行效率高的特點。

      兩者各有其優(yōu)點,無論是在系統(tǒng)的實時性、可靠性,還是在靈活性上均獲得了令人滿意的效果。

      參考文獻

      [1]李如甲.基于RS_485的智能儀表與PLC串行通訊[J].儀表技術與傳感器,2011,8:34-36.

      [2]王正強.VC中應用MSComm控件實現(xiàn)串口通信[J].電子測試,2010,5:73-76.

      [3]呂實誠.多線程技術在串口通信中的應用[J].數(shù)字技術與應用,2010,2:74.

      [4]林盛.基于VC的PC與PLC自由口通訊[J].當代化工, 2013,7:1015-1016.

      [5]吳帆.VB6.0與S7_200的自由口通訊研究[J].現(xiàn)代科學儀器,2011,1:48-51.

      沿河| 巩义市| 修文县| 翁牛特旗| 巩义市| 开鲁县| 呼伦贝尔市| 安义县| 五台县| 尼勒克县| 汕尾市| 青龙| 高邮市| 佛坪县| 廊坊市| 吴桥县| 个旧市| 丘北县| 吉隆县| 上思县| 甘洛县| 万州区| 北安市| SHOW| 绍兴县| 西畴县| 淮北市| 凭祥市| 遵义市| 乌鲁木齐县| 扬州市| 嵊泗县| 天门市| 云龙县| 日照市| 长沙县| 天祝| 内黄县| 高尔夫| 老河口市| 嵩明县|