程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#與松下FP∑可編程控制器的通信

C#與松下FP∑可編程控制器的通信

編輯:C#基礎知識

  本文介紹了通過引進ActiveX控件MSComm,利用C#語言編程,實現上位機與松下FPG-C24R2 PLC的通信,並給出了工程實例。該方法簡單可靠、便於移植、實用性強,在工業控制中有著廣泛的用途。

  關鍵詞:C# 串口通信 實時監控 ActiveX 控件

  一、前言

  C#語言是.NET技術的核心開發語言,是一種簡單、現代、面向對象和類型安全的編程語言,它實現了快速應用程序開發、跨平台部署,能夠訪問平台固有的資源,支持COM和.NET技術,具有C++語言的強大功能、Java語言的跨平台特性和Delphi語言的方便快捷等眾多的優秀品質。FP∑是日本松下電工株式會社生產的小型可編程序控制器,它有許多規格,具有體積小、重量輕、功能齊全、編程簡單、價格便宜等優點,在工業控制中應用十分廣泛。 本文在Windows xp下用Visual Studio .NET 2003編制一個簡單的通信程序,探討使用MSComm控件對FPG-C24R2 PLC進行串行通信的實現方法。

  二、ActiveX控件的引入

  你必須有Mscomm.srg, Mscomm32.ocx,Mscomm32.dep文件在你的Windows的System目錄下(注意WinNT下是System32),而且它必須正確的注冊。你可以裝VB6.0來獲得,安裝VB.6.0後,MSComm控件就自動在你的計算機上注冊了,這比手工注冊控件省事多了,Visual.Studio.NET2003在項目工程中(Solution)插入MSComm控件的具體步驟:新建程序後,點擊Tools(工具)-->Add/Remove Toolbox items(添加/移除工具箱項)就打開了Customize Toolbox(自定義工具箱)對話框,再選擇COM Components(COM組件)項,並在出現控件中就可以找到Microsoft Communications Control,version 6.0,選上該項,再點擊"OK",就會在Toolbox控件工具箱中看到MSComm控件的電話圖標了,將它拖到窗體(Form)就可以了。

  三、通信協議

  FP∑系列PLC通信系統的基本協議是松下電工的專用通信協議-MEWTOCOL;PLC與計算機的通信協議是MEWTOCOL-COM。該協議采用異步通信方式,其波特率有300bps、600bps、1200bps、2400bps、4800bps、9600bps、19200bps、38400bps、57600bps、115200bps等多種可選,且報文長度可變可固定。該方式通信協議如下:

  圖1和圖2分別為上位機發送的上位機鏈接命令幀讀DM區數據的命令格式和由PLC返回的應答幀格式。當PLC接收到從上位機發來的ASCII碼命令時自動返回ASCII碼應答。

  其中,%為起始符,標記每一幀報文的開始,CR為結束符,標記每一幀報文的結束,BCC為兩字節的幀校驗碼FCS,它是從開始符"%"到正文結束的所有字符的ASCII碼按位異或的結果,HL為PLC的站地址,為兩位16進制數,如00則表示第一台PLC。#、$標注該幀報文為何種類型,上位機的命令幀由不固定的字節數組成,針對不同的識別碼有不同的幀長度。但基本格式大體一致。

  四、編程實現

  啟動Visual.Studio.NET2003,便可進入Visual C#.NET窗口環境,建立Windows應用程序,建立項目名稱(complc),生成項目窗體(comForm)。在窗體上添加通信按鈕button1、退出按鈕button2,並在工具箱Windows窗體控件欄選中Microsoft Communications Control,version 6.0控件,如圖3。

  代碼如下:

using System;
using System.Text;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace complc
{
/// <summary>
/// Form1 的摘要說明。
/// </summary>
public class comForm : System.Windows.Forms.Form
{
 private AxMSCommLib.AxMSComm axMSComm1;
 private System.Windows.Forms.TextBox textBox1;
 private System.Windows.Forms.TextBox textBox2;
 private System.Windows.Forms.Button button1;
 private System.Windows.Forms.Button button2;
 private System.Windows.Forms.Label label1;
 private System.Windows.Forms.Label label2;
 /// <summary>
 /// 必需的設計器變量。
 /// </summary>
 private System.ComponentModel.Container components = null;
 public comForm()
 {
  // Windows 窗體設計器支持所必需的
  InitializeComponent();
  // TODO: 在 InitializeComponent 調用後添加任何構造函數代碼
 }
 /// <summary>
 /// 清理所有正在使用的資源。
 /// </summary>
 protected override void Dispose( bool disposing )
 {
  if( disposing )
  {
  if (components != null) 
  {
   components.Dispose();
  }
  }
  base.Dispose( disposing );
 }
 /// Windows 窗體設計器生成的代碼
 /// <summary>
 /// 應用程序的主入口點。
 /// </summary>
 [STAThread]
  static void Main()
 {
  Application.Run(new comForm());
 }
 private void button1_Click(object sender, System.EventArgs e)
 {
  string ms,rd = "" ;
  int i;
  if (!axMSComm1.PortOpen)
  axMSComm1.PortOpen = true; //打開串口
  axMSComm1.InputLen = 0; //清除接收緩沖區
  axMSComm1.DTREnable = true; //置DTR有效
  axMSComm1.RTSEnable = true; //置RTS有效
  axMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeText; //置為二進制輸入方式
  axMSComm1.RThreshold = 1; //設置為接收緩沖區每接收一個字符將引發一次OnComm事件
  ms=textBox1.Text; // 輸入如:%01#RDD9001590016或%01#RDD0100601036
  axMSComm1.Output = ms+tobcc(ms)+(char)13;
  // sleep(30);
  rd += axMSComm1.Input;
  textBox2.Text = rd;
 }
 private void comForm_Load(object sender, System.EventArgs e)
 {
  axMSComm1.CommPort = System.Convert.ToInt16(1);  //設為com1
  axMSComm1.Settings = "9600,n,8,1";
 }
 public string tobcc(string s)  //幀校驗函數FCS
 {
  int t = 0;
  char[] chars = s.ToCharArray();
  for(int i = 1;i <= s.Length-1;i++)
  {
  t = t^=(char)chars[i];
  }
  return t.ToString().Substring(1,2);
 }
 private void button2_Click(object sender, System.EventArgs e)
 {
  Application.Exit(); 
 }
}
} 
  五、結論

  本文所有程序均在Windows XP, Visual.Studio.NET2003環境中調試通過,該通信方式簡單,通信十分穩定可靠,從而在工業控制的小型監控系統中有著廣闊的應用前景。讀者可在本文的基礎上,參考松下公司的MEWTOCOL-COM協議,便可輕松實現PC與松下FP∑系列PLC的通信,以完成上位機對PLC的監視與控制。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved