上位机通过MX component version4 组件与三菱PLC通信解决办法 | 您所在的位置:网站首页 › 三菱pLC报错什么原因 › 上位机通过MX component version4 组件与三菱PLC通信解决办法 |
引用: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 |
CopyRight 2018-2019 实验室设备网 版权所有 |