• <ul id="ikuqo"></ul>
    <tfoot id="ikuqo"></tfoot>
    <tfoot id="ikuqo"></tfoot>
  • <ul id="ikuqo"><sup id="ikuqo"></sup></ul>
  • 閱讀 | 訂閱
    閱讀 | 訂閱
    控制系統

    VC++開發PC與松下PLC間的通訊程序

    星之球激光 來源:中國自動化網2012-08-28 我要評論(0 )   

    1 引言 可編程控制器是一種數字運算操作的電子系統,專為在工業環境下應用而設計。它采用了可編程序的存儲器,用于其內部存儲程序,執行邏輯運算、順序控制、定時、計數...

    1 引言

      可編程控制器是一種數字運算操作的電子系統,專為在工業環境下應用而設計。它采用了可編程序的存儲器,用于其內部存儲程序,執行邏輯運算、順序控制、定時、計數和算術操作等面向用戶的指令,并通過數字式或模擬式輸入輸出控制各種類型的機械的生產過程。可編程控制器及其有關外部設備,都按易于與工業控制系統聯成一個整體、易于擴充其功能的原則設計。早期的plc以數字量的順序控制為主,提供了簡單的慢速的通信功能(只支持rs232、rs485、多采用modbus協議),現在的plc不僅具有邏輯運算、順序控制、定時、計數和算術操作,而且還具有a/d、d/a轉換,數值計算和數據處理等功能。它既可以對開關量進行控制,也可以對模擬量進行控制,隨著plc功能不斷擴充,它還有通訊聯網功能。本文就是基于松下電工的專門通信協議(mewtocol),用vc++開發的上位機與plc間的通信。

     

    2 松下電工的專用通信協議mewtocol-com

      目前,隨著plc的快速發展,越來越多的plc生產廠商開發了它與計算機的通信功能(主要是利用計算機串口進行通信),本文是以松下fp系列plc為例,作詳細闡述。在一臺計算機于plc之間的通信中,通信由計算機發動,把命令幀發向plc,plc將以響應幀作應答,并執行相應的動作。

      (1) 命令幀格式

      其中: %:mewtocol-com的命令幀開始標志(ascii碼為25h)。

      h,l:站地址的高位和低位。

      #:站號特征碼(ascii碼為23h)。

      發送文本:由命令碼和數據組成,其主要命令碼如表1所示。

      bcc:校驗碼,采用異或校驗碼,bcc為8位。

      (2) 響應幀格式

      當主站發來命令幀之后,從站將以響應幀作應答。響應幀分為2種,若主站命令幀正確無誤,則用“正確響應幀”作應答;如果主站命令幀有錯誤則用“錯誤響應幀”作應答。這兩種應幀格式下。正確響應幀的格式

      其中 %,h,l,bcc,cr含義與命令幀相同。

      $:正確響應的標志(acsii碼為24h)。

      響應文本:應當按照命令幀要求及協議規定組織。

      錯誤響應幀的格式

      其中%,h,l,bcc,cr含義與命令幀相同。

      !:錯誤響應幀的標志(acsii碼為21h)。

      錯誤代碼:對于命令及數據傳送中的各種錯誤均規定為代碼以識別。

            (3) 命令碼: mewtocol-com協議的命令碼匯總如表1所示

      (4)常用的命令與格式

      a)單接點的讀

      錯誤響應幀與單接點的相同。

     

    3 用visual c++6.0編寫串行通信程序

      (1) mscomm控件

      串行通訊編程基本過程:設置初始化并打開串行口—配置串口—雙向傳輸數據—校驗—釋放串口。本文的上位機通信程序是用visualc++6.0編寫的,主要是利用vc++中的一個通信控件mscomm來現的。

      該控件屏蔽了通訊過程中的底層操作,程序員應用時只需設置,監控mscomm控件的屬性和事件即可完成對串口的初始化和數據的輸入輸出工作。mscomm控件的主要屬性如下:

      * commport:設置并返回通訊端口號,設計時端口號可設為1到16的任何數(默認值為1)。如:setcommport(1);即設置當前通訊端口為com1。

      * settings:設置并返回波特率,奇偶校驗,數據位長度,停止位長度。

      如:setsettings(lpctstr string);string是一個包括四部分的字符串:第一部分:波特率;

      第二部分:奇偶校驗,n表示不校驗,e表示偶校驗,o表示奇校驗,s表示空格校驗,m表示符號校驗;

      第三部分:數據為長度,其可選值為4,5,6,7,8;

      第四部分:停止位長度,其可選為1,1.5,2。 settings屬性的缺省值為“9600,n,8,1”。

      * portopen:用于打開和關閉端口。setportopen(bool bnewvalue);

      當bnewvalue為true時打開端口,當為false時關閉端口。

      * input:從接受緩沖區返回和刪除字符,該屬性在運行時為只讀。getinput();

      * output:向緩沖區寫數據,要傳送的數據可以是文本數據或是二進制數據。

      *commevent:返回最近的通訊事件或錯誤。只要有通訊錯誤或事件發生時都會產生oncomm事件,commevent屬性中存有錯誤或事件的數值代碼。

      getcommevent();

          

    4 程序框架的生成及控件屬性的配置

      首先利用mfcappwizard(exe)建立一個基于對話框,支持activex控件,命名為transcomn的應用程序。然后在對話框中加入一些控件,其中那個mscomm控件(電話形狀的控件)必須是在系統中注冊過的microsoft communications control,由它進行通訊時首先得設置它的一些屬性,這些屬性既可以在控件屬性對話框中設置也可以在程序中設置,本文用后一種方法,在程序中對mscomm控件屬性設置。最后用classwizard為控件添加變量和響應函數如表2

    5 程序編寫

      // transcommdlg.cpp : implementation file

      bool ctranscommdlg::oninitdialog()

      {

      //初始化通訊端口,波特率為9600,奇校驗,8位數據位,1位校驗位,選擇com1口

      cdialog::oninitdialog();

      m_comm.setcommport(1);

      m_comm.setsettings(“9600,o,8,1”);

      m_comm.setinputmode(1);

      m_comm.setportopen(true);

      return true; // return true unless you set the focus to a

      control

      }

      void ctranscommdlg::onsend()

      {

      updatedata(true);

      variant vresponse;

      char *str;

      //把對話框中有用戶輸入的命令字符串cstring

      //m_commandstring,由串口發出

      m_comm.setoutput(colevariant(m_commandstring));

      sleep(50);//延時50毫秒,一個保證有足夠的時間 //讓plc響應命令

      //讀取串口輸入緩沖區中的字符個數,如大于0表 //示串口接受到plc的響應幀,然后//進行處理

      int k=m_comm.getinbuffercount();

      if(k》0)

      {

      //把plc發送來的響應幀轉換為字符 //串,并在對話框的響應文本框中顯示

      vresponse=m_comm.getinput();

      str=(char *)(unsigned char*)vresponse.parray-》pvdata;

      str[k]='';

           }

           }

     

    轉載請注明出處。

    暫無關鍵詞
    免責聲明

    ① 凡本網未注明其他出處的作品,版權均屬于激光制造網,未經本網授權不得轉載、摘編或利用其它方式使用。獲本網授權使用作品的,應在授權范圍內使 用,并注明"來源:激光制造網”。違反上述聲明者,本網將追究其相關責任。
    ② 凡本網注明其他來源的作品及圖片,均轉載自其它媒體,轉載目的在于傳遞更多信息,并不代表本媒贊同其觀點和對其真實性負責,版權歸原作者所有,如有侵權請聯系我們刪除。
    ③ 任何單位或個人認為本網內容可能涉嫌侵犯其合法權益,請及時向本網提出書面權利通知,并提供身份證明、權屬證明、具體鏈接(URL)及詳細侵權情況證明。本網在收到上述法律文件后,將會依法盡快移除相關涉嫌侵權的內容。

    網友點評
    0相關評論
    精彩導讀