翼度科技»论坛 编程开发 .net 查看内容

C#使用MX Component实现三菱PLC软元件数据采集的完整步骤(仿真)

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
前言
本文介绍了如何使用三菱提供的MX Component插件实现对三菱PLC软元件数据的读写,记录了使用计算机仿真,模拟PLC,直至完成测试的详细流程,并重点介绍了在这个过程中的易错点,供参考。
 
用到的软件:
1. PLC开发编程环境GX Works2,GX Works2下载链接 https://www.mitsubishielectric-fa.cn/site/file-software-detail?id=18
2.实现计算机与可编程控制器通信的软件工具MX Component,MX Component下载链接 https://www.mitsubishielectric-fa.cn/site/file-software-detail?id=27
 配置流程:1.GX Works2的配置流程:(1)新建工程,选择PLC型号;

 (2)修改PLC参数,PLC文件设置=>使用一下文件=>命名,设置合适的容量大小,扩容为了后期测试时使用(该操作可选);

  (3)修改软元件设置,使用上一步骤中的扩容操作,三菱PLC设计上位机数据操作区一般选择D区,R区和W区亦可(该操作可选);

   (4)调试中选择=>模拟开始,出现Simulator窗口,Mode和RUN绿灯长亮即表示仿真正常;


 
2.MX Component配置流程:
(1)找到MX Component安装的对应软件,选择“Communication Setup Utility”,以管理员身份运行;

(2)添加Logical Station Number(通道号);(这里以99为例)

(3)由于本案例采用的是GX Works2仿真方案,选择GX Simulator2,选择CPU型号,下一步即可;

(4)选择描述,,以Test为例;

(5)配置完成后,进行测试,显示successful表示连接成功;连接成功后可以关掉该软件,不影响正常通讯;

 
3.C#上位机的程序测试:
  1. using ActUtlTypeLib;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace MELSEC.MX.Test
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         private ActUtlType m_plc;
  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.             m_plc = new ActUtlType();
  21.         }
  22.         private void Form1_Load(object sender, EventArgs e)
  23.         {
  24.             cmb_LogicalStationNumber.Items.Clear();
  25.             for (int i = 1;i<=256;i++)
  26.             {
  27.                 cmb_LogicalStationNumber.Items.Add(i.ToString());
  28.             }
  29.         }
  30.         
  31.         private void btn_Comm_Click(object sender, EventArgs e)
  32.         {
  33.             try
  34.             {
  35.                 int logNUM = Convert.ToInt16(cmb_LogicalStationNumber.Text);
  36.                 m_plc.ActLogicalStationNumber=logNUM;
  37.                 m_plc.ActPassword = "";
  38.                 if (m_plc.Open() != 0)
  39.                 {
  40.                     btn_Comm.BackColor = Color.Gray;
  41.                     btn_Comm.Text = "未建立链接";
  42.                     m_plc.Close();
  43.                     m_plc = null;
  44.                 }
  45.                 else
  46.                 {
  47.                     btn_Comm.BackColor = Color.Green;
  48.                     btn_Comm.Text = "已连接";
  49.                 }
  50.             }
  51.             catch (Exception )
  52.             {
  53.                 throw;
  54.             }
  55.         }
  56.         private void btn_Read_Click(object sender, EventArgs e)
  57.         {
  58.             try
  59.             {
  60.                 Thread thread = new Thread(() =>
  61.                 {
  62.                     while (true)
  63.                     {
  64.                         txb_D0.Invoke(new Action(() =>
  65.                         {
  66.                             txb_D0.Text = ReadDeviceValue("D0", 2)[0].ToString();
  67.                             txb_D1.Text = ReadDeviceValue("D0", 2)[1].ToString();
  68.                             txb_R100.Text = ReadDeviceValue("R100", 1)[0].ToString();
  69.                             txb_W500.Text = ReadDeviceValue("W500", 1)[0].ToString();
  70.                         }));
  71.                         Thread.Sleep(300);
  72.                     }
  73.                 });
  74.                 thread.IsBackground = true;
  75.                 thread.Start();
  76.             }
  77.             catch (Exception)
  78.             {
  79.                 throw;
  80.             }
  81.         }
  82.         private string[] ReadDeviceValue(string DeviceName,int NumberOfData)
  83.         {
  84.             int iReturnCode;
  85.             short[] arrDeviceValue;
  86.             string szDeviceName;
  87.             string[] arrData= { };
  88.             int iNumberOfData;
  89.             try
  90.             {
  91.                 szDeviceName = string.Join("\n", DeviceName);
  92.                 iNumberOfData = Convert.ToInt32(NumberOfData);
  93.                 arrDeviceValue = new short[iNumberOfData];
  94.                 iReturnCode = m_plc.ReadDeviceBlock2(szDeviceName, iNumberOfData, out arrDeviceValue[0]);
  95.                 if (iReturnCode == 0)
  96.                 {
  97.                     arrData = new string[iNumberOfData];
  98.                     for (int i = 0; i < iNumberOfData; i++)
  99.                     {
  100.                         arrData[i] = arrDeviceValue[i].ToString();
  101.                     }
  102.                     return arrData;
  103.                 }
  104.                 return arrData;
  105.             }
  106.             catch (Exception ex)
  107.             {
  108.                 MessageBox.Show(ex.Message, Name, MessageBoxButtons.OK, MessageBoxIcon.Error);
  109.                 return arrData;
  110.             }
  111.         }
  112.     }
  113. }<br>
复制代码
 Demo演示

 

来源:https://www.cnblogs.com/Jerry9521/p/18174620
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具