• 
    

    
    

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

      基于Prodave組件的PLC通訊接口的設(shè)計(jì)與實(shí)現(xiàn)

      2020-09-10 04:53:58夏富平
      內(nèi)燃機(jī)與配件 2020年13期
      關(guān)鍵詞:設(shè)計(jì)模式

      夏富平

      摘要:上位PC機(jī)利用從PLC控制器實(shí)時(shí)采集的各項(xiàng)實(shí)時(shí)數(shù)據(jù),自動(dòng)監(jiān)控現(xiàn)場(chǎng)各種機(jī)械設(shè)備和傳感器設(shè)備的運(yùn)行狀態(tài),并根據(jù)設(shè)備的實(shí)時(shí)狀態(tài)進(jìn)行有效合理的統(tǒng)計(jì)分析,從而實(shí)現(xiàn)工業(yè)控制系統(tǒng)的自動(dòng)化和信息化管理,這已成為工業(yè)控制領(lǐng)域的一個(gè)重量的發(fā)展方向。本文以西門子的Prodave 組件為基礎(chǔ),設(shè)計(jì)并實(shí)現(xiàn)了一種上位機(jī)與PLC控制器通訊的通用接口,項(xiàng)目實(shí)踐證明,該通訊接口穩(wěn)定性好、擴(kuò)展性強(qiáng)且實(shí)際操作靈活方便,便于用戶將此通訊接口集成至各類工業(yè)控制系統(tǒng)中。

      關(guān)鍵詞: simatic;prodave;PLC;C#;設(shè)計(jì)模式

      1 ?概述

      自動(dòng)化工業(yè)控制領(lǐng)域中PLC作為一種高效、靈活、穩(wěn)定的控制器,有著廣泛的應(yīng)用。以PLC控制器為核心,上位PC機(jī)為實(shí)時(shí)監(jiān)控體的控制系統(tǒng)已經(jīng)成為工業(yè)自動(dòng)化PLC控制系統(tǒng)的一個(gè)重要發(fā)展方向。實(shí)現(xiàn)PLC與PC的通信可以實(shí)現(xiàn)向上一級(jí)提供諸如工藝流程圖、動(dòng)態(tài)數(shù)據(jù)畫面、報(bào)表顯示等多種窗口技術(shù),使PLC控制系統(tǒng)具有良好的人機(jī)交互界面,通過(guò)上位機(jī)對(duì)PLC數(shù)據(jù)的讀寫監(jiān)控實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)的采集、傳送以及生產(chǎn)過(guò)程調(diào)度的自動(dòng)化和信息化,其應(yīng)用前景十分廣闊。

      自動(dòng)化生產(chǎn)線控制系統(tǒng)中通常會(huì)采用工業(yè)組態(tài)軟件開(kāi)發(fā)上位機(jī)系統(tǒng),PLC作為下層控制設(shè)備,目前市場(chǎng)上通信組態(tài)系統(tǒng)結(jié)構(gòu)復(fù)雜,價(jià)格昂貴,應(yīng)用繁瑣,且不具備一定的通用性。隨著工業(yè)以太網(wǎng)的深入發(fā)展,相較于品種繁多的組態(tài)軟件來(lái)說(shuō),高級(jí)編程語(yǔ)言更加適合開(kāi)發(fā)具有實(shí)時(shí)響應(yīng)、功能豐富、擴(kuò)展方便、高靈活性和易于移植等技術(shù)需求的上位機(jī)系統(tǒng)。為此,需要設(shè)計(jì)一種與PLC通信的通用接口,用戶采用高級(jí)編程語(yǔ)言開(kāi)發(fā)的上位機(jī)系統(tǒng)能夠運(yùn)用此通訊接口與PLC進(jìn)行數(shù)據(jù)通信。

      本文以造紙行業(yè)中紙卷輸送控制系統(tǒng)的設(shè)計(jì)方法為基礎(chǔ),對(duì)西門子S7系列中的PLC與上位機(jī)通訊的原理作深入細(xì)致的研究,依據(jù)Visual Studio 2005作為開(kāi)發(fā)平臺(tái)用C#語(yǔ)言實(shí)現(xiàn)了PLC與上位PC機(jī)的通用通訊接口,該接口具有穩(wěn)定性好、易于擴(kuò)展維護(hù)且操作方便的特點(diǎn),對(duì)于需要用上位機(jī)與PLC通訊的工程設(shè)計(jì)人員來(lái)說(shuō),具有一定的借鑒作用。

      2 ?西門子Prodave組件介紹

      Prodave是“Process Data Traffic”(過(guò)程數(shù)據(jù)交換)的縮寫形式,可以用于西門子S7-200、S7-300/400、M7和C7等S7系列PLC的通訊,通過(guò)MPI通信處理器、PC/MPI適配器和以太網(wǎng)絡(luò)可以方便地在PLC與PC之間建立數(shù)據(jù)鏈接。Prodave的動(dòng)態(tài)鏈接庫(kù)(Dynamic Link Library,DLL)提供了大量的基于Windows系統(tǒng)的DLL函數(shù),為用戶提供了解決上位機(jī)與PLC之間的數(shù)據(jù)交換與數(shù)據(jù)處理的詳細(xì)方案。

      表1為項(xiàng)目中涉及到的Prodave組件的簡(jiǎn)單介紹。

      現(xiàn)階段項(xiàng)目中使用的Prodave組件版本主要有Prodave5.x系列和Prodave6.2系列。其中,Prodave6.2可用于Window 64位操作系統(tǒng),且可以采用MPI-Profibus或者以太網(wǎng)通信,而其他版本的組件只能安裝于Windows 32位操作系統(tǒng)的上位機(jī)中,一般采用MPI-Profibus通信方式。

      Prodave組件的函數(shù)分為基本函數(shù)、數(shù)據(jù)處理函數(shù)和電話服務(wù)函數(shù),基本函數(shù)主要包含建立連接、關(guān)閉連接、激活連接、讀取PLC地址數(shù)據(jù)以及寫入PLC地址數(shù)據(jù)的函數(shù)。

      3 ?通用接口的詳細(xì)設(shè)計(jì)方案

      3.1 現(xiàn)有設(shè)計(jì)問(wèn)題

      由于上位機(jī)與PLC通信需要用到的Prodave組件版本過(guò)多,導(dǎo)致上位機(jī)與PLC通信時(shí)接口不盡相同,代碼復(fù)用能力差。當(dāng)上位機(jī)硬件設(shè)備升級(jí)或者更換Prodave通訊組件時(shí),需要修改上位機(jī)控制系統(tǒng)中與PLC通信的模塊代碼。在紙卷輸送控制系統(tǒng)的設(shè)計(jì)過(guò)程中,由于每個(gè)項(xiàng)目的工藝設(shè)計(jì)和功能要求不同,工程設(shè)計(jì)人員在做項(xiàng)目方案設(shè)計(jì)和設(shè)備選型時(shí),選用西門子的CPU型號(hào)也不盡相同,因此網(wǎng)絡(luò)設(shè)計(jì)人員需要根據(jù)不同的工藝需求采用不同版本的Prodave組件來(lái)編寫與PLC通信的代碼。圖1為上位機(jī)與PLC控制器現(xiàn)有通訊結(jié)構(gòu)。

      3.2 通信接口設(shè)計(jì)要求

      由于與PLC通信的Prodave組件版本多,對(duì)應(yīng)的接口函數(shù)也不盡相同,因此對(duì)上位機(jī)來(lái)說(shuō),新的通用接口需要滿足以下設(shè)計(jì)要求:

      ①通用性能強(qiáng)。能夠滿足現(xiàn)階段項(xiàng)目中使用的不同Prodave組件的要求,當(dāng)通信組件發(fā)生改變時(shí),原有通信模塊不用發(fā)生變化;

      ②有較強(qiáng)的靈活性和擴(kuò)展性能。如果未來(lái)出現(xiàn)新的Prodave組件的升級(jí),現(xiàn)有系統(tǒng)中涉及的PLC通信模塊代碼不用發(fā)生變化,僅需要按接口要求增加新的Prodave組件對(duì)象即可;

      ③封裝性好,利于模塊移植。通用接口對(duì)應(yīng)的PLC通信模塊可以非常方便的遷移至其他項(xiàng)目中,盡可能少的修改原有模塊代碼。

      3.3 通信接口設(shè)計(jì)方案

      通過(guò)深入分析可以得知:不論是哪一種Prodave組件,上位機(jī)控制系統(tǒng)均希望此組件能完成對(duì)PLC控制器的建立連接、讀取數(shù)據(jù)、寫入數(shù)據(jù)和關(guān)閉連接的功能,而各種版本的Prodave組件均能滿足此種功能,不同的是接口函數(shù)名稱以及輸入?yún)?shù)各不相同。因此,可以按照軟件設(shè)計(jì)模式中的工廠設(shè)計(jì)方法,將涉及到與PLC操作的各個(gè)對(duì)象中操作函數(shù)按一定的規(guī)則抽象出來(lái),形成一個(gè)通用的接口對(duì)象。圖2是改進(jìn)后上位機(jī)系統(tǒng)與PLC的通訊結(jié)構(gòu)。

      3.4 通用接口的設(shè)計(jì)實(shí)現(xiàn)

      在實(shí)現(xiàn)通用接口對(duì)象前,首先需要分析現(xiàn)有各版本Prodave 組件對(duì)應(yīng)的接口函數(shù),然后再根據(jù)各接口函數(shù)再抽象成對(duì)應(yīng)的接口對(duì)象。

      ①Prodave5.x組件。

      主要包含有加載與激活連接、讀取與寫入PLC數(shù)據(jù)以及卸載連接的接口函數(shù)。

      protected extern static int load_tool(byte nr, string device, byte[,] adr_table)

      protected extern static int new_ss(byte no)

      protected extern static int unload_tool()

      protected extern static int d_field_read(int dbno, int dwno, int amount, byte[] buffer)

      protected extern static int d_field_write(int dbno, int dwno, int amount, byte[] buffer)

      ②Prodave6.x組件。

      主要包含有加載與激活連接、讀取與寫入PLC數(shù)據(jù)以及卸載連接的接口函數(shù)。

      protected extern static int LoadConnection_ex6(int ConNr, string pAccessPoint, int ConTableLen, ref CON_TABLE_TYPE pConTable)

      protected extern static int SetActiveConnection_ex6(UInt16 ConNr)

      protected extern static int UnloadConnection_ex6(UInt16 ConNr)

      protected extern static int field_read_ex6(FieldType FType, UInt16 BlkNr, UInt16 StartNr, UInt32 pAmount, UInt32 BufLen, byte[] pBuffer, ref UInt32 pDatLen)

      protected extern static int field_write_ex6(FieldType FType, UInt16 BlkNr, UInt16 StartNr, UInt32 pAmount, UInt32 BufLen, byte[] pBuffer)

      從上述各版本Prodave組件對(duì)應(yīng)的接口函數(shù)可知,Prodave5.x系列對(duì)應(yīng)的主要接口函數(shù)的函數(shù)名稱與對(duì)應(yīng)參數(shù)數(shù)量與類型與Prodave6.x系列對(duì)應(yīng)的主要接口函數(shù)函數(shù)名稱與對(duì)應(yīng)參數(shù)數(shù)量與類型基本不相同。因此需要在各個(gè)引用Prodave組件對(duì)應(yīng)的接口對(duì)象之上還需要抽象一個(gè)適配對(duì)象,目的在于將原始接口函數(shù)與加工后的接口函數(shù)分離開(kāi),將各組件使用的接口函數(shù)的函數(shù)名稱與函數(shù)參數(shù)數(shù)量盡量保持一致。

      圖3為對(duì)應(yīng)組件的類設(shè)計(jì)示意圖,從圖中可以看出,每一種Prodave組件的接口函數(shù)均有一個(gè)適配對(duì)象與之對(duì)應(yīng),如Prodave5.0的接口對(duì)象PLCProdave5D0與適配對(duì)象PLCOperation5D0對(duì)應(yīng),同理Prodave5.6的接口對(duì)象PLCProdave5D6與適配對(duì)象PLCOperation5D6對(duì)應(yīng), PLCProdave6D0與適配對(duì)象PLCOperation6D0對(duì)應(yīng)。從圖3中還可以看出,每一類適配對(duì)象對(duì)應(yīng)的連接函數(shù)(ConnectPLC)、重新連接函數(shù)(ReConnectPLC)、讀取PLC數(shù)據(jù)函數(shù)(ReadData)、寫入PLC數(shù)據(jù)函數(shù)(WriteData)以及關(guān)閉連接函數(shù)(CloseConnectPLC)對(duì)應(yīng)的函數(shù)名稱、函數(shù)對(duì)應(yīng)參數(shù)數(shù)量和類型均相同,每個(gè)適配類使用的屬性名稱和數(shù)量以及定義的事件名稱和返回的參數(shù)也相同。因此,可以在對(duì)應(yīng)的適配器對(duì)象之上編寫統(tǒng)一的通用接口對(duì)象IPLCOperation。適配對(duì)象PLCOperation5D0、PLCOperation5D6和PLCOperation6D0除了繼承各自對(duì)應(yīng)的接口對(duì)象外,還需要實(shí)現(xiàn)IPLCOperation和IDisposible接口,其中實(shí)現(xiàn)IDisposible接中主要用于在關(guān)閉對(duì)象時(shí)要求系統(tǒng)顯示釋放對(duì)應(yīng)內(nèi)存等重要資源。

      從圖3Prodave組件類設(shè)計(jì)圖中,將各適配器對(duì)象相同的部分抽象出來(lái)可以非常容易得到通用的PLC接口對(duì)象如圖4所示。

      通用接口中用到的其他相關(guān)對(duì)象如圖5所示

      以下代碼為通用接口類的具體實(shí)現(xiàn)方式:

      public interface IPLCOperation

      {

      event PLCMessageEventHandler OnPLCMessageChanged;

      bool Connected ?{get;}

      PLCType CurrPLCType { get; }

      bool ConnectPLC();

      bool CloseConnectPLC();

      bool ReConnectPLC();

      bool ReadData(int dbno, string strAddr, ref string retBoolValue);

      bool ReadData(int dbno, int dwno, int amount, ref byte[] buffer);

      bool WriteData(int dbno, string strAddr);

      bool WriteData(int dbno, string strAddr, bool blnValue);

      bool WriteData(int dbno, int dwno, int amount, ulong data);

      bool WriteData(int dbno, int dwno, int amount, byte[] buffer);

      }

      最后建立了一個(gè)PLC操作工廠類,完全將各種具體的PLC接口實(shí)現(xiàn)對(duì)象封裝起來(lái),主要是根據(jù)外部參數(shù)的不同創(chuàng)建不同的具體的PLC操作對(duì)象實(shí)例,以下代碼為工廠類的具體實(shí)現(xiàn)代碼:

      public class PLCFactory

      {

      public static IPLCOperation CreatePLC(PLCType plcType, PLCConnItem plcConnParams)

      {

      IPLCOperation currPLCOperation;

      switch (plcType)

      {

      case PLCType.PLC_5D0:

      currPLCOperation = new PLCOperation5D0(plcConnParams);

      break;

      case PLCType.PLC_5D6:

      currPLCOperation= new PLCOperation5D6(plcConnParams);

      break;

      case PLCType.PLC_6D0:

      currPLCOperation = new PLCOperation6D0(plcConnParams);

      break;

      default:

      currPLCOperation = new PLCOperation6D0(plcConnParams);

      break;

      }

      return currPLCOperation;

      }

      }

      上述代碼將PLC組件類型和PLC連接參數(shù)對(duì)象傳入PLC工廠對(duì)象中,由工廠對(duì)象根據(jù)PLC組件類型來(lái)實(shí)例化不同的PLC操作類。當(dāng)然上述實(shí)現(xiàn)實(shí)例化不同PLC操作類還可以使用反射的方法,在此不再贅述。

      4 ?通用接口的具體操作實(shí)現(xiàn)

      上位機(jī)控制系統(tǒng)只需要關(guān)注PLC通信通用接口的實(shí)現(xiàn)方式,因此在項(xiàng)目實(shí)際使用過(guò)程中,系統(tǒng)設(shè)計(jì)人員可以按以下方式使用。

      4.1 PLC模塊初始化

      在實(shí)際項(xiàng)目設(shè)計(jì)過(guò)程中,如某臺(tái)上位機(jī)控制系統(tǒng)需要與一個(gè)以上的PLC通信,此處可以在PLC通信模塊中,可以建立一個(gè)以PLC通用接口對(duì)象為元素的PLC接口集合,將控制系統(tǒng)需要使用的PLC通信接口封裝在此集合體中,方便程序遍歷PLC通用接口和存儲(chǔ)連接PLC需要的各種參數(shù)值,圖6為多個(gè)PLC通信接口對(duì)應(yīng)多個(gè)PLC的應(yīng)用場(chǎng)景:

      private void InitialPLCModule()

      {

      CGlobal.PLCHelpers.Clear();

      foreach (DataRow currRow in m_dtPLCConnParams.Rows)

      {

      //PLC連接參數(shù)初始化

      PLCConnItem plcItem = new PLCConnItem();

      plcItem.GongweiType = m_GongweiType;

      plcItem.MobanNO = m_MobanNO;

      plcItem.ByteBuffer = new byte[m_MaxBytesCount];

      plcItem.DBUnit = m_DBUnit;

      plcItem.Address=m_Address;

      //建立一個(gè)PLC通用接口類,并將其放至集合中

      IPLCOperation plcHelper = PLCFactory.CreatePLC(m_plcType, plcItem);

      plcHelper.OnPLCMessageChanged += new

      PLCMessageEventHandler(PLCHelper_OnPLCMessageChanged);

      plcHelper.ConnectPLC();

      plcItem.PLCHelper = plcHelper;

      CGlobal.PLCHelpers.AddPLCConnItem(plcItem);

      }

      }

      4.2 PLC數(shù)據(jù)讀取操作

      當(dāng)PLC接口集合不為空時(shí),可以循環(huán)遍歷PLC接口集合中的通用接口類,并讀取對(duì)應(yīng)的PLC對(duì)應(yīng)地址塊中數(shù)據(jù)放置在指定的字節(jié)數(shù)組中。

      private void ReadPLCData()

      {

      if (CGlobal.PLCHelpers == null || CGlobal.PLCHelpers.Count == 0) return;

      byte[] bytBuffer;

      foreach (PLCConnItem plcItem in CGlobal.PLCHelpers)

      {

      if (plcItem == null || plcItem.PLCHelper == null)

      { continue; }

      if (plcItem.PLCHelper.Connected)

      {

      bytBuffer = new byte[plcItem.ByteBuffer.Length];

      bool blnSucc=plcItem.PLCHelper.ReadData(plcItem.DBUnit, 0, plcItem.ByteBuffer.Length, ref bytBuffer);

      if (blnSucc) plcItem.ByteBuffer = bytBuffer;

      }

      else{

      CGlobal.DelayTime(1000);

      plcItem.PLCHelper.ReConnectPLC();

      }

      }

      }

      4.3 PLC數(shù)據(jù)寫入操作

      PLC數(shù)據(jù)寫入的方法比較簡(jiǎn)單,首先按工位類型和模板類型參數(shù)遍歷PLC接口集合中找到指定接口,然后調(diào)用對(duì)應(yīng)的接口函數(shù)WriteData即可。

      CGlobal.PLCHelpers[m_GongweiType,m_MobanNO].PLCHelper.WriteData

      (dbunit,dwno,amount,value);

      4.4 釋放PLC模塊資源

      當(dāng)需要釋放PLC接品資源時(shí),需要遍歷PLC接口集合,先關(guān)閉當(dāng)前連接,然后再銷毀對(duì)象即可。

      if (CGlobal.PLCHelpers != null) CGlobal.PLCHelpers.Clear();

      5 ?結(jié)論

      以西門子的Prodave 組件為具體研究對(duì)象,結(jié)合軟件工程中的軟件設(shè)計(jì)模式思想,設(shè)計(jì)并實(shí)現(xiàn)了一種上位機(jī)與PLC通訊的通用接口,該通訊接口已成功應(yīng)用于福建聯(lián)盛紙業(yè)PM5&6,PM7,PM8、山東太陽(yáng)紙業(yè)PM19&20,24、安徽山鷹PM5&6等多套紙卷輸送控制系統(tǒng)中。實(shí)踐證明,該通訊接口可以使通訊模塊的代碼結(jié)構(gòu)清晰,穩(wěn)定性好、擴(kuò)展性和集成性強(qiáng)且實(shí)際操作靈活方便,可適應(yīng)復(fù)雜的項(xiàng)目工藝需求變化,具有一定的參考價(jià)值和應(yīng)用價(jià)值。

      參考文獻(xiàn):

      [1]程宏.福建聯(lián)盛紙業(yè)PM8輸送控制系統(tǒng)源碼,2012.

      [2]程宏.山東太陽(yáng)紙業(yè)PM24輸送控制系統(tǒng)源碼,2014.

      [3]王翔.設(shè)計(jì)模式-基于C#的工程化實(shí)現(xiàn)及擴(kuò)展[M].電子工業(yè)出版社,2012.

      [4]葛新鋒,晉景濤.基于VB的上位機(jī)與PLC通信系統(tǒng)實(shí)現(xiàn),2009.

      [5]趙曉明,徐立,邵威,夏春林.基于VC++的上位機(jī)與西門子系列PLC通信的研究[J].機(jī)電工程,2007.

      猜你喜歡
      設(shè)計(jì)模式
      仿生設(shè)計(jì)模式的創(chuàng)新應(yīng)用探索
      玩具世界(2023年6期)2024-01-29 12:14:36
      “1+1”作業(yè)設(shè)計(jì)模式的實(shí)踐探索
      設(shè)計(jì)模式挖掘的有效性評(píng)估策略
      三維協(xié)同設(shè)計(jì)模式下的航天項(xiàng)目管理實(shí)踐與展望
      交通機(jī)電工程設(shè)計(jì)模式創(chuàng)新探討
      互動(dòng)式設(shè)計(jì)模式研究
      佛冈县| 庆云县| 屯昌县| 景谷| 通海县| 甘孜县| 哈密市| 潞城市| 福海县| 临城县| 奈曼旗| 来安县| 太仓市| 桐乡市| 巴塘县| 西乌珠穆沁旗| 乡城县| 汝阳县| 龙岩市| 泸水县| 绥德县| 榆社县| 蓬安县| 都匀市| 孟津县| 郸城县| 台东县| 承德县| 佛山市| 固阳县| 武清区| 儋州市| 鸡东县| 嘉善县| 成武县| 曲麻莱县| 正定县| 如皋市| 德清县| 偃师市| 五台县|