1  引言
隨著PLC應用范圍的不斷擴大,PLC與PC之間通信技術的應用需求越來越廣泛。通過PLC的編程口進行通訊不僅可以減少系統的成本及復雜性,同時可以減少PLC方面軟件的復雜程度和編程量。本文根據實際工程中的經驗進行總結,介紹了利用VC++中MFC實現PC與松下FP0系列PLC編程口進行串行通信的程序設計基本方法

2&">

      技術頻道

      基于VC5.0的PC與松下PLC的通信及其應用

      1 引言
      隨著PLC應用范圍的不斷擴大,PLC與PC之間通信技術的應用需求越來越廣泛。通過PLC的編程口進行通訊不僅可以減少系統的成本及復雜性,同時可以減少PLC方面軟件的復雜程度和編程量。本文根據實際工程中的經驗進行總結,介紹了利用VC++中MFC實現PC與松下FP0系列PLC編程口進行串行通信的程序設計基本方法

      2 PC與FP0 PLC之間的通信協議和接口
      在一個規模較大的紡織工業控制系統中,常常有幾十個、幾百個甚至更多的測溫和控制對象。即使速度很高的系統,也很難滿足要求。為了降低危險,提高可靠性,必須將任務分散,而分散的設備需要通過一定的手段連接起來,其中數據通信和系統互連是該系統的關鍵技術之一。松下FP0系列PLC具有較強的通信功能,可以適合各種工業自動化網絡的不同需要, 其中包括以太網協議及通用接口、H型鏈接通信系統(H-LINK)、P型鏈接系統(OPTICAL LINK)、W型鏈接系統(WIRE-LINK)和C-NET鏈接系統,還有遠程I/O通信系統(REMOTE I/O),它們通過RS-485、RS-232或專用網絡插座在PLC-PLC、計算機與PLC之間進行通信。但是要利用這些系統協議,必須采用專用高級通信單元,這勢必增加系統的成本。為了節省開支,紡織工業系統可以直接采用松下電工最基礎的專用通信協議-NEWTOCOL。
      NEWTOCOL分為兩部分:一是NEWTOCOL-COM,即關于計算機通信的協議;二是NEWTOCOL-DATA,即關于數據傳輸協議。
      2.1 NEWTOCOL-COM的幀格式
      (1) 命令發送幀


      (2) 正確響應幀
      img]周奉磊-b2.jpg border=0>
      (3) 錯誤響應幀
      img]周奉磊-b3.jpg border=0>
      2.2 NEWTOCOL-DATA的幀格式
      (1) 命令發送幀
      img]周奉磊-b4.jpg border=0>
      (2) 正確響應幀
      img]周奉磊-b5.jpg border=0>
      (3) 錯誤響應幀
      img]周奉磊-b6.jpg border=0>
      通過該協議可更加快捷地傳送系統所需的數據,設置PLC所需的參數。FP0 PLC與上位機鏈接通信協議如圖1所示:

      圖1 FP0 PLC 與上位機鏈接通信協議

      3 通信程序設計
      在PC機和松下FP0系列PLC進行串行通信時,由于PC與PLC之間的信息傳送是通過PLC編程口實現的,采用的是FP0 PLC專用協議通信指令。因此,在PC編程方面需要嚴格的遵循PLC編程口通訊協議。具體實現介紹如下:
      3.1 串口設備的打開
      在Visual C++中,利用MFC CFile類來實現串行通訊。這種通信方式與訪問磁盤普通文件沒有太大不同。打開串口設備需作以下操作:
      CFile file;
      CFileException e
      File.open(
      portName, // example "com1",com2"
      CFile::modeReadWrite,
      &e);
      3.2 串口設備的初始化
      串行端口創建時,必須對其進行設置以匹配與其對話的設備。FP0系列PLC的波特率為固定的9600bps,奇偶校驗采用奇校驗,1位停止位,8位數據位。一般地,可用如下程序設置它們:
      DCB dcb;
      ::GetCommState((HANDLE)file.m_hFile,&dcb);
      dcb.BaudRate=9600;
      dcb.StopBits=1;
      dcb.ByteSize=8;
      dcb.Parity=1;
      ::setCommState((HANDLE)file.m_hFile,&dcb);
      為了更好的控制端口可以利用SetCommTimeouts()函數打開或關閉串口超時功能,具體程序如下:
      COMMTIMEOUTS cto;
      ::GetCommTimeouts((HANDLE)file.m_hFile,&ct0);
      cto.ReadIntervalTimeout=0;
      cto.ReadTotalTimeoutMultiplier=0;
      cto.ReadTotalTimeoutConstant=0;
      cto.WriteTotalTimeoutMultiplier=0;
      cto.WriteTotalTimeoutConstant=0;
      ::SetCommTimeouts((HANDLE)file.m_hFile,&cto);
      3.3 PC與FP0 PLC之間的通信實現
      在FX2系列PLC與PC機的通信中,數據是以幀為單位發送和接收的。其中字符ENQ(0x05)、ACK(0x06)、
      和NAK(0x15)作為單個字符,可以構成單字符幀。若通訊正常,則應答字符$;若通信有錯,則應答字符!。其余的字符在發送和接收時必須用字符%和CR分別表示該字符幀的起始標志和結束標志,否則將構成幀錯。一個多字符幀由%、地址碼、站號、數據、和校驗以及CR五部分組成,其中和校驗值是其初值為0,然后從起始符開始與該幀報文中每一字節按位進行異或運算得到。
      (1) 應用MFC CFile類實現對串口設備的讀、寫操作的代碼
      //讀串口
      char m_Readbuff[UINT n];
      uint nByte=file.read(
      &m_ReadBuff, //緩存儲沖
      UINT nCount //所讀字節數
      //寫串口
      char m_WriteBuff[UINT n];
      file.Write(
      &m_WriteBuff, //存儲緩沖
      UINT nCount //縮寫字節數
      );
      (2) PC機實現與PLC通信的程序代碼
      char m_WriteBuff[10];
      char m_ReadBuff[10];
      UINT nByte=0;
      m_WriteBuff[0]=0x05 //ENQ
      //寫串口
      file.Write(
      m_WriteBuff, //存儲緩沖
      //所讀字節數
      );
      //讀串口
      nByte=file.Read(
      m_ReadBuff, //存儲緩沖
      //所寫字節數
      );
      switch (m_ReadBuff[0])
      {
      case : 0x24 //應答$,通信正常
      //添加相關處理代碼
      break;
      case : 0x21
      //應答!,通訊故障
      //添加相關處理代碼
      break;
      }
      3.4 PC對PLC內各軟設備進行讀、寫操作
      FP0系列PLC的所有開關量輸入、輸出以及各軟設備對PC機都是透明的,只有當PLC的計時器和計數器的設定值采用常數時,以及文件寄存器內的數據,PC機不能對其進行讀寫。不論PLC處在“STOP”狀態還是“RUN”狀態,PC機都可以按1.1所列的命令對PLC進行讀、寫操作。這里僅給出PC機與PLC通信所用多字符幀的格式及簡單示例,實際應用時只需將多字符幀中的字符ASCII碼(十六進制)按順序賦予相應的字符數組
      m_WriteBuff,m_ReadBuff,即可實現對PLC的操作。
      (1) 讀操作

      img]周奉磊-b7.jpg border=0>


      (2) 寫操作
      微機對PLC軟設備進行寫操作的多字符幀的編制格式如下表所示:

      img]周奉磊-b8.jpg border=0>


      PLC接收到寫操作多字符幀格式后,若接收到數據有效,則應答$(0x24),該字符幀如下表所示:

      img]周奉磊-b9.jpg border=0>


      若接收數據無效或和校驗出錯,則應答字符!(0X21),該字符幀如下表所示:

      img]周奉磊-b10.jpg border=0>


      3.5 關閉串口設備
      PC機與PLC通信完畢后,PC機關閉一個已打開的串口設備只需如下一條語句即可完成。
      File.Close();

      4 應用實例
      以上介紹了利用MFC實現PC與FX2系列PLC串行通訊的基本方法及其關鍵部分程序代碼。上面的程序代碼為基礎,不僅可以編制用于以PLC為現場主控機的監控系統軟件,而且可編制出微機與其他具有串行通信能力設備的串行通信程序。本人已成功使用VC5.0實現PLC與上位機之間的通信,并應用于青島大學紡織服裝學院開發的掉毛量測試儀。該測試儀控制系統采用PLC 控制步進電機方案,有效地提高了工作效率,使操作人員通過PC的顯示可以監測并控制儀器的工作。兔毛織物掉毛量測試儀已可靠運行一年,實踐證明它具有控制靈活、使用簡單、功能擴充方便、抗干擾性能強的特點。沒有出現任何通訊連接的問題。


      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 狠狠做深爱婷婷综合一区 | 亚洲一区二区精品视频| 精品亚洲一区二区三区在线播放| 久久精品国产第一区二区三区 | 日韩一区二区三区射精| 夜夜添无码试看一区二区三区| 成人精品一区久久久久| 无码国产精品久久一区免费| 亚洲国产美国国产综合一区二区 | 国产精品免费综合一区视频| 3D动漫精品啪啪一区二区下载| 久久综合九九亚洲一区| 国产一区视频在线| 国产亚洲一区二区手机在线观看 | 国产成人精品视频一区二区不卡 | 怡红院一区二区在线观看| 精品动漫一区二区无遮挡| 久久久精品人妻一区二区三区蜜桃| 国产日韩一区二区三区在线观看| 嫩B人妻精品一区二区三区| 91麻豆精品国产自产在线观看一区 | 毛片一区二区三区| 天美传媒一区二区三区| 国产麻豆剧果冻传媒一区| 福利片免费一区二区三区| 视频一区二区在线播放| 精品国产AⅤ一区二区三区4区 | 欧洲无码一区二区三区在线观看| 无码人妻久久一区二区三区| 亚洲综合一区二区| 国模精品一区二区三区视频| 国产人妖视频一区二区破除| asmr国产一区在线| 另类一区二区三区| 文中字幕一区二区三区视频播放 | 麻豆aⅴ精品无码一区二区| 一区国产传媒国产精品| 日韩在线一区视频| 久久毛片免费看一区二区三区| 国产伦精品一区二区三区| 亚洲午夜电影一区二区三区|