引用:https://blog.csdn.net/txb13145826106/article/details/115007885

上位机通过MX component version4 组件与三菱PLC通信解决办法

tang_0427 2021-03-19 15:58:05  297  收藏 2
分类专栏: PLC C#编程 WinForm 文章标签: c#
版权
上位机通过MX component version4 组件与三菱PLC通信解决办法
第一节:MX Component Version4软件与手册下载
第二节:MX Component Version4 软件的使用与通信测试
2.1 PLC以太网地址设置:
2.11 查询电脑的IP地址:
2.12 打开GX works2 与PLC进行通信测试
2.13 测试PLC IP地址:
2.2 打开MX Version4 软件进行组件与PLC间通信测试
2.21 MX Version4软件
第三节:C# 与PLC通信测试
3.1 以太网连接用到的参数列表:
1.ActCpuType:
2.ActUnitType:
3.ActProtocolType
4.ActTimeOut
5.ActHostAddress
6.ActDestinationPortNumber
3.2 C# winform界面
3.21 C# 程序实现组件引用
3.22 C# Demo样例窗体:
结束语
注1:适用编程语言: VC/C++、VB、C#、LabView等
注2:本说明仅提供C#编写的样板实例及原代码,仅用于通信测试,而其它编程语言请参考C#实例的参数设置,自行研习:

第一节:MX Component Version4软件与手册下载
下载地址:
三菱MXComponent Version4
软件位置:

可供下载的是:MX组件版本4(英文版)
手册位置:

注3:本说明主要使用的是MX组件版本4编程手册(英文版),通信要用到的参数请在此手册中去查询.该手册支持FX5U相关参数,如有需要中文版本,可在三菱中文官网上自行下载.

第二节:MX Component Version4 软件的使用与通信测试
在与上位机通信测试之前,首先与MX Component Version4软件进行通信测试。

2.1 PLC以太网地址设置:
2.11 查询电脑的IP地址:
在win7 系统左下方,点击开始按钮,然后在搜索程序和文件选框中输入CMD,打开命令提示符窗口;

在命令提示符中输入 ipconfig,然后按回车键:
显示当前电脑的IP地址:

因为当前样例的电脑IP为192.168.1.171;那么设置PLC的IP段则在192.168.1.0~192.168.1.255这个范围里。

注4:必须与电脑IP区别开来,不能写成一样的

2.12 打开GX works2 与PLC进行通信测试
注5:使用USB或串口(不能用网线)与电脑直连进行PLC的IP设置

打开GX Works2软件,然后点击新建(Ctrl+N):

选择与目标PLC相同的型号,然后点击确定:

注6:本样例是以Q26UDV为例来测试.

然后在导航栏选定连接目标,然后双击Connection1:

打开连接目标设置Connection1窗口进行设置:

双击计算机侧I/F的 Serial USB 图标:

选择USB连接选项,然后点击确定。
双击可编程控制器侧I/F栏 PLC Module图标:

在CPU模式的下拉选框里,选择QCPU(Q模式),然后点击确定。
双击其他站指定栏 No Specification 图标:
根据需要来设定,然后点击确定。

注7:无特殊要求的话,选择默认即可

以上的设置完成后,然后单击通信测试(T)按钮,如果弹出以下的提示,则说明USB连接成功:

点击确定后,退出该设置界面。
然后在导航栏选定工程,然后双击PLC参数:

打开PLC参数设置界面,选择内置以太网端口设置,如下图所示:

当前样例的IP地址设置为192.168.1.39,其它的选择默认。

注8:保证IP地址的范围在【192.168.1.0~192.168.1.255】之间,且不与电脑IP相同即可

如果不确定你的输入是否与其它PLC地址有冲突,可点击检查进行确认。
如果输入无冲突将会有如下提示:

确认无误后,点击设置结束按钮退出PLC参数设置界面。

点击转换/编译(C),选择转换+编译(C)或者按F4快捷键进行编译转换。

然后点击PLC写入(W)按钮进行地址写入:

然后选择参数+程序选项,点击执行进行写入操作:

操作完成后,关闭GX Works2软件。拔掉USB线,换上网线,然后进行下一步操作。

2.13 测试PLC IP地址:
在命令提示符中输入 ping 192.168.1.39 测试连接状态:

出现以上的信息,则说是电脑与PLC连接成功。

2.2 打开MX Version4 软件进行组件与PLC间通信测试
2.21 MX Version4软件
在win7 系统左下方,点击开始按钮,然后单击所有程序,在下拉菜单中选择MELSOFT-MX Component-Communication Setup Utility,打开软件设置窗口:

注9:为防止出现不必要的权限问题,请右键以管理员权限运行

打开如下图所示:

点击Wizard按钮,将出现以下界面:

Logical station number输入数字1即可,然后点击Next。

在PC side I/F 选择Ethernet board,如上图所示:

在Connect module 下拉选框中选择 CPU module,如上图所示,

在 Protocol 下拉选框中选择TCP。
下面的Time Out的值 默认值就可以了,也可以选填为10000ms
然后点击NEXT按钮,弹出如下图所示:

可以在Host(IP Address)一栏中输入192.168.1.39,或者点击Find CPU(Built-in Ethernet port) on network 按钮进行自动查找。出现如下图所示:

选中目标PLC的型号,然后点击OK.

注10:如有多个同时连接的话,请注意所选目标PLC是否匹配

如进行Find CPU(Built-in Ethernet port)这个动作的话,下图所示的界面的相关参数会自动填写,如没有,则需要手动进行选择。

注11:如有多个CPU同时组合的话,请确定当前目标放在几号位置,如只有单个的话,默认为None.

与之前的的Logical station number 保持一致。点击Finish按钮,返回。

在connetion test 界面,点击Test按钮 进行测试,如出现以下信息,则说明通信连接成功。

完成上面所示操作,如果流程没有出错,且出现上图所示信息,说明MX Component Version4的组件完全可用于上位机上。

第三节:C# 与PLC通信测试
3.1 以太网连接用到的参数列表:
ActCpuType CPU型号 int类型
ActUnitType 设备连接方式 int类型(即设备型号)
ActProtocolType TCP/UDP int类型
ActTimeOut 连接超时时间 int类型
ActHostAddress 设备IP地址 string类型
ActDestinationPortNumber 端口号 int类型
本样例以Q26UDV为例,可在MX Component Version4 编程手册中查询相关参数信息:

1.ActCpuType:
查手册可得:
ActCpuType=0xD5; 转换成十进制 ActCpuType=213

2.ActUnitType:
查手册可得:
ActCpuType=0x2c; 转换成十进制 ActCpuType=44

3.ActProtocolType
查手册可得:
ActProtocolType=0x05; 转换成十进制 ActProtocolType =5

4.ActTimeOut
查手册可得:
ActTimeOut=10000 ms;

5.ActHostAddress
之前设置的PLC的IP地址为:192.168.1.39;

6.ActDestinationPortNumber
查手册可得:
ActDestinationPortNumber=5562;默认值为0;可以自己设定,但是对数据进行读写操作时,端口号要保持一致.

3.2 C# winform界面
3.21 C# 程序实现组件引用

与PLC通信相关的组件具体两个文件在文件夹中体现的是:

工具箱中添加选项卡:

选择ActProgType Control v1.0 组件

点击确定后,在工具箱中会多出如下图所示的控件:

将如上图所示的控件用鼠标拖到窗体中,系统将自动引用如下图所示的两个组件:

其他的具体参考样例原代码

3.22 C# Demo样例窗体:

样例程序代码如下:

namespace Demo
{
    public partial class Form1 : Form
    {
        ActProg actprog = new ActProg();
        public Form1()
        {
            InitializeComponent();
        }

private void TB_CpuType_TextChanged(object sender, EventArgs e)
        {
            
            actprog.CpuType = Convert.ToInt32(TB_CpuType.Text.Trim());
        }

private void TB_UnitType_TextChanged(object sender, EventArgs e)
        {
            actprog.UnitType = Convert.ToInt32(TB_UnitType.Text.Trim());
        }

private void TB_HostAddress_TextChanged(object sender, EventArgs e)
        {
            actprog.HostAddress = TB_HostAddress.Text.Trim();
        }

private void TB_ProtocolType_TextChanged(object sender, EventArgs e)
        {
            actprog.ProtocolType = Convert.ToInt32(TB_ProtocolType.Text.Trim());
        }

private void TB_TimeOut_TextChanged(object sender, EventArgs e)
        {
            actprog.TimeOut = Convert.ToInt32(TB_TimeOut.Text.Trim());
        }

private void button1_Click(object sender, EventArgs e)
        {
            if (actprog.Open()==0)
            {
                MessageBox.Show("连接成功");
            }
            else
            {
                MessageBox.Show("连接失败");
            }
        }

private void button2_Click(object sender, EventArgs e)
        {
            actprog.Open();
            textBox1.Text= actprog.Read("D1000");
            actprog.Close();
        }

private void button3_Click(object sender, EventArgs e)
        {
            actprog.Open();
           string send= actprog.Write(textBox2.Text.Trim(),"D1000");
           MessageBox.Show(send);
            actprog.Close();
        }

private void TB_DestinationPortNumber_TextChanged(object sender, EventArgs e)
        {
            actprog.DestinationPortNumber = Convert.ToInt32(TB_DestinationPortNumber.Text.Trim());
        }
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
测试连接结果如下:

写发送:

读接收:

ActProgTypeLib类使用代码如下:

namespace CL_Enet
{
    public class ActProg
    {
        private ActProgTypeClass Aptc= new ActProgTypeClass();      
        #region //定义参数
        private int _cpuType;
        [Description("CPU型号")]
        public int CpuType
        {
            get { return _cpuType; }
            set { _cpuType = value; }
        }

private int _unitType;
        [Description("设备连接方式")]
        public int UnitType
        {
            get { return _unitType; }
            set { _unitType = value; }
        }

private int _protocolType;
        [Description("TCP/UDP")]
        public int ProtocolType
        {
            get { return _protocolType; }
            set { _protocolType = value; }
        }

private int _timeOut;
        [Description("连接超时时间")]
        public int TimeOut
        {
            get { return _timeOut; }
            set { _timeOut = value; }
        }
        private string _hostAddress;
        [Description("设备IP地址")]
        public string HostAddress
        {
            get { return _hostAddress; }
            set { _hostAddress = value; }
        }
        #endregion
        private int _destinationPortNumber;
        public int DestinationPortNumber
        {
            get { return _destinationPortNumber; }
            set { _destinationPortNumber = value; }
        }

#region //定义连接状态
        //int CpuType, int UnitType, int ProtocolType,int TimeOut,string HostAddress
        public int Open()
        {
            try
            {
                Aptc.ActCpuType = _cpuType;
                Aptc.ActUnitType = _unitType;
                Aptc.ActProtocolType = _protocolType;
                Aptc.ActTimeOut = _timeOut;
                Aptc.ActHostAddress = _hostAddress;
                Aptc.ActDestinationPortNumber = _destinationPortNumber;
                return Aptc.Open();
               
            }
            catch (System.Exception ex)
            {
                return -1;
            }  
        }

public int Close()
        {
            return Aptc.Close();
        }

public string Read(string RegiseterName)
        {
            int iReturnCode = -1;//返回值=0表示读取成功
            int length = System.Text.RegularExpressions.Regex.Split(RegiseterName, "\n").Length;
            int iNumberOfData = length;
            int[] iData = new int[length];//读取软元件值
            iReturnCode = Aptc.ReadDeviceRandom(RegiseterName, iNumberOfData, out iData[0]);
            if (iReturnCode == 0)
            {
                return iData[0].ToString();
            }
            else
            {
                return "";
            }
        }
        public string Write(string value,string RegiseterName)
        {
                int iReturnCode = -1;//返回值=0表示写入成功
                string[] strArray = System.Text.RegularExpressions.Regex.Split(value, "\n");//拆分写入寄存器列表
                int iNumberOfData = strArray.Length;//szLabel.IndexOf("\n", 0) + 1;//写入点数
                int[] iData = new int[strArray.Length];//写入软元件值
                for (int i = 0; i < strArray.Length; i++)
                {
                    iData[i] = Int32.Parse(strArray[i]);
                }
                iReturnCode = Aptc.WriteDeviceRandom(RegiseterName, iNumberOfData, ref iData[0]);
                if (iReturnCode == 0)
                {
                    return value;
                }
                else
                {
                    return "error";
                }
        }
        #endregion
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
结束语
此样例仅提供思路参考,上述样例代码仅适用三菱PLC与上位机软件32位架构上进行通讯,不支持64位。
————————————————
版权声明:本文为CSDN博主「tang_0427」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/txb13145826106/article/details/115007885

上位机通过MX component version4 组件与三菱PLC通信解决办法相关推荐

  1. 上位机通过MX component version 组件与三菱PLC通信解决办法,最新MX component version5支持X64

    上位机通过MX component version4组件与三菱PLC通信解决办法,最新MX component version5支持X64 第一节:MX Component Version软件与手册下 ...

  2. C#上位机,控制台达四轴SCARA机器人,以太网通信

    C#上位机,控制台达四轴SCARA机器人,以太网通信 1.调用台达机器人SDK库,功能齐全,适合进行二次开发. ID:6910635479745371

  3. C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(二)

    C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(二) 测试软件: TIA PORTAL V15.1 S7-PLCSIM ADVANCED V3.0 Visual Studio 20 ...

  4. C#调用COM组件遇到的问题及解决办法

    C#调用COM组件遇到的问题及解决办法 参考文章: (1)C#调用COM组件遇到的问题及解决办法 (2)https://www.cnblogs.com/yuzhihui/p/9777323.html ...

  5. mx三菱plc安装报错_Qt使用 MX Component 插件与三菱PLC通信

    作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 MX Component 简介 MX Component 是三菱PLC官方上位机通讯中间件,通过使用该工 ...

  6. 程控电源CANoe上位机面板(CAN\ETH测试、RS232串口通信、编写设计思路)

    程控电源CANoe上位机面板 编写此面板的目的 编写思路 一.通讯方式 1.RS232串口连接 2.CANoe与RS232串口相关的函数 3.帧格式命令字 4.校验码 二.面板设计 1.所需文件说明 ...

  7. 组件服务 我的电脑 不可用解决办法

    在"服务"里找到这三个服务,都启动就行了 Distributed Transaction Coordinator Remote Procedure Call (RPC) Secur ...

  8. 安装VS2008后再安装SQL2005无组件和SQL服务的解决办法

    为了学习NET,之前一直是用VISUALSTDUIO 2005,看到自己的VS2008下完了,一激动就安装了,由于安装了VS2005,就算在程序添加/删除里完全删除了VS2005,但还是装不了VS20 ...

  9. 上位机开发之三菱PLC通信

    前言 三菱MC协议是开发三菱系列PLC必须掌握的一种通信协议,其目的是让外部设备,可以通过串行通信模块C24或以太网接口模块E71,实现对可编程控制器CPU的数据访问. MC协议是Melsec协议的简 ...

最新文章

  1. 为DataGridView添加行号
  2. iOS之深入解析KVO的底层原理
  3. 深入浅出Docker 镜像 | 技术头条
  4. 猎豹浏览器网页声音怎么关闭
  5. android做题imageview缩放,巧用ViewPager实现驾考宝典做题翻页效果
  6. 一些常用的场景进行描述分析(权限管理、6个典型场景)
  7. 解锁用户及数据库表,锁死进程
  8. final关键字详解
  9. centos vim编辑器 第八节课
  10. win10无法访问服务器上的共享文件夹怎么设置,提示:你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问...
  11. python定时启动任务_python--实现定时任务
  12. 同花顺程序交易接口type-c为什么没普及?
  13. 数字转为大写金额(C#)
  14. 资料:《大学英语》精读修订版(全六册)原文及全文翻译
  15. Magicodes.IE在.NET Core中通过请求头导出多种格式文件
  16. 关于De-pCode在线工具失效的问题
  17. python语音识别分析_Python语音识别(计算器)
  18. 对不同数据源特征提取的(详见上一篇博客问题)的进一步思考
  19. STM32F05x加入RDP(LV1)后,Segger无法Unlock的解决办法
  20. PX4装机教程(四)F4飞控刷写PX4

热门文章

  1. 【Brian2学习教程之二】Introduction to Brian part 2: Synapses
  2. 交换机、光纤收发器+光纤终端盒、接线端子的通俗理解
  3. 科幻也将成为现实 努比亚α将亮相MWC2019
  4. leetcode 203. 移除链表元素
  5. 无线打印服务器选用指南
  6. 博图只能通过地址相同设备找到plc_如何用博图建立西门子触摸屏和S7300PLC的通讯...
  7. 2018知乎live
  8. 变配电室值班电工技能培训考核系统QY-GPD01
  9. 【有限元分析】apdl建立菩萨三维模型+FLAC3d力学计算
  10. SaaS 互联网敏捷开发框架