精华内容
下载资源
问答
  • 我有一台三菱FX3u的plc 需要跟上位机通讯 ,我下载了MX4.08的应用程式,然后在VB.net 里面准备添加MX的COM组件。可是我每次添加完成后 程式就出错 闪退了。请问应该如何解决。(我有试着添加一个三菱Q系列的组件,...
  • 三菱plc的MX控件 32位实数转换 arrDeviceValue[0] 为D2内容 -22249 ,arrDeviceValue[1]为D3内容 17312 byte[] L = System.BitConverter.GetBytes(arrDeviceValue[0]); byte[] H = System.BitConverter.GetBytes...

    三菱plc的MX控件 32位实数转换
    arrDeviceValue[0] 为D2内容 -22249 ,arrDeviceValue[1]为D3内容 17312
    byte[] L = System.BitConverter.GetBytes(arrDeviceValue[0]);
    byte[] H = System.BitConverter.GetBytes(arrDeviceValue[1]);
    byte[] f = new byte[H.Length + L.Length];
    Buffer.BlockCopy(L, 0, f, 0, L.Length);
    Buffer.BlockCopy(H, 0, f, L.Length, H.Length);
    float FF = BitConverter.ToSingle(f, 0);
    整合后FF即为实数321.321
    反推实数转两个整数
    float FF = 321.321F;
    byte[] f = BitConverter.GetBytes(FF);
    byte[] L = new byte[2];
    byte[] H = new byte[2];
    Buffer.BlockCopy(f, 0, L, 0, 2);
    Buffer.BlockCopy(f, 2, H, 0, 2);
    int LL = BitConverter.ToInt16(L, 0); //-22249
    int HH = BitConverter.ToInt16(H, 0); //17312
    以下完整类
    class ConnectPLC
    {
    public bool isPLCConnected = false;
    System.String[] arrData = new string[32]; //Array for ‘Data’
    public short[] arrDeviceValue = new short[32]; //Data for ‘DeviceValue’
    public int iReturnCode = 0;
    object plcLock = new object();

            public ActUtlTypeLib.ActUtlType lpcom_ReferencesUtlType;
    
            public ConnectPLC()
            { 
                lpcom_ReferencesUtlType = new ActUtlTypeLib.ActUtlType(); 
            }
    
    
            /// <summary>
            /// 断开PLC连接
            /// </summary>
            public void ClosePLC()
            {
                int iReturnCode;    //Return code 
                try
                { 
                    iReturnCode = lpcom_ReferencesUtlType.Close(); 
                    if (iReturnCode == 0)
                    {
                        isPLCConnected = false;
                    }
                    lpcom_ReferencesUtlType = null; 
                } 
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
    
    
            #region  "PLC连接"
            public void connectPLC()
            {
                int iReturnCode;                     //Return code
                int iLogicalStationNumber = 0;      //LogicalStationNumber for ActUtlType      
                try
                {
                    //Set the value of 'LogicalStationNumber' to the property.
                    lpcom_ReferencesUtlType.ActLogicalStationNumber = iLogicalStationNumber; 
                    iReturnCode = lpcom_ReferencesUtlType.Open(); 
                    if (iReturnCode == 0)
                    {
                        isPLCConnected = true;
                      //  Thread PLC_Thread = new Thread(new ThreadStart(PLC_MONITOR));//心跳数据
                     //   PLC_Thread.IsBackground = true;
                      //  PLC_Thread.Start();
                    } 
                } 
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            #endregion
            /// <summary>
            /// 读取PLC信息16位整数
            /// </summary>
            /// <param name="szDevice"></param>
            /// <param name="lplData"></param>
            /// <returns></returns>
            public bool ReadPlcData16(string szDevice, out int lplData)
            {
                lock (plcLock)
                {
                    int iReturnCode = 0;                //Return code
                    lplData = 0;
                    try
                    { 
                            iReturnCode = lpcom_ReferencesUtlType.GetDevice(szDevice, out lplData); 
                        if (iReturnCode == 0)
                            return true;
                        else
                            return true;
                    }
                    catch (Exception exception)
                    {
                        MessageBox.Show(exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return false;
                    }
                }
            }
            /// <summary>
            /// 写入PLC信息16位整数
            /// </summary>
            /// <param name="szDevice"></param>
            /// <param name="lplData"></param>
            /// <returns></returns>
            public bool WritePlcData16(string szDevice,  int lplData)
            {
                lock (plcLock)
                {
                    int iReturnCode = 0;                //Return code
                    lplData = 0;
                    try
                    {
                        iReturnCode = lpcom_ReferencesUtlType.SetDevice(szDevice, lplData);
                        if (iReturnCode == 0)
                            return true;
                        else
                            return true;
                    }
                    catch (Exception exception)
                    {
                        MessageBox.Show(exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return false;
                    }
                }
            }
    
            /// <summary>
            /// 读取PLC信息32位实数
            /// </summary>
            /// <param name="szDevice"></param>
            /// <param name="lplData"></param>
            /// <returns></returns>
            public bool ReadPlcData32(string szDevice, out float lplData) 
            {
                lock (plcLock)
                {
                    int iReturnCode = 0;                //Return code
                    lplData = 0;
                    try
                    {
                        if (szDevice.Substring(0, 1) == "D")
                        {
                            string gaoadd = "D" + Convert.ToString(Convert.ToInt32(szDevice.Substring(1, 4)) + 1).PadLeft(4, '0');
                            short Lfloat; short Hfloat;
                            iReturnCode = lpcom_ReferencesUtlType.GetDevice2(szDevice, out Lfloat);
                            iReturnCode = lpcom_ReferencesUtlType.GetDevice2(gaoadd, out Hfloat);
                            byte[] L = System.BitConverter.GetBytes(Lfloat);
                            byte[] H = System.BitConverter.GetBytes(Hfloat);
                            byte[] f = new byte[H.Length + L.Length];
                            Buffer.BlockCopy(L, 0, f, 0, L.Length);
                            Buffer.BlockCopy(H, 0, f, L.Length, H.Length);
                            lplData = BitConverter.ToSingle(f, 0); 
    
                        }
                        else if (szDevice.Substring(0, 2) == "ZR")
                        {
                            string gaoadd = "ZR" + Convert.ToString(Convert.ToInt32(szDevice.Substring(2, 4)) + 1).PadLeft(4, '0');
                            short Lfloat; short Hfloat;
                            iReturnCode = lpcom_ReferencesUtlType.GetDevice2(szDevice, out Lfloat);
                            iReturnCode = lpcom_ReferencesUtlType.GetDevice2(gaoadd, out Hfloat);
                            byte[] L = System.BitConverter.GetBytes(Lfloat);
                            byte[] H = System.BitConverter.GetBytes(Hfloat);
                            byte[] f = new byte[H.Length + L.Length];
                            Buffer.BlockCopy(L, 0, f, 0, L.Length);
                            Buffer.BlockCopy(H, 0, f, L.Length, H.Length);
                            lplData = BitConverter.ToSingle(f, 0);
    
                        }
                        if (iReturnCode == 0)
                            return true;
                        else
                            return true;
                    }
                    catch (Exception exception)
                    {
                        MessageBox.Show(exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return false;
                    }
                }
            }
    
            /// <summary>
            /// 发送PLC信息32位实数
            /// </summary>
            /// <param name="szDevice"></param>
            /// <param name="lplData"></param>
            /// <returns></returns>
            public bool WritePlcData32(string szDevice, float FF)
            {
                lock (plcLock)
                {
                    int iReturnCode = 0;                //Return code
                    try
                    { 
                        if (szDevice.Substring(0, 1) == "D")
                        { 
                            string gaoadd = "D" + Convert.ToString(Convert.ToInt32(szDevice.Substring(1, 4)) + 1).PadLeft(4, '0');
                             
                            byte[] f = BitConverter.GetBytes(FF);
                            byte[] L = new byte[2];
                            byte[] H = new byte[2];
                            Buffer.BlockCopy(f, 0, L, 0, 2);
                            Buffer.BlockCopy(f, 2, H, 0, 2);
                            short LL = BitConverter.ToInt16(L, 0);       //-22249
                            short HH = BitConverter.ToInt16(H, 0);    //17312   
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice2(szDevice, LL);
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice2(gaoadd, HH); 
                        }
                        else if (szDevice.Substring(0, 2) == "ZR")
                        {
                            string gaoadd = "ZR" + Convert.ToString(Convert.ToInt32(szDevice.Substring(2, 4)) + 1).PadLeft(4, '0');
    
                            byte[] f = BitConverter.GetBytes(FF);
                            byte[] L = new byte[2];
                            byte[] H = new byte[2];
                            Buffer.BlockCopy(f, 0, L, 0, 2);
                            Buffer.BlockCopy(f, 2, H, 0, 2);
                            short LL = BitConverter.ToInt16(L, 0);       //-22249
                            short HH = BitConverter.ToInt16(H, 0);    //17312   
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice2(szDevice, LL);
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice2(gaoadd, HH);
                        }
                        if (iReturnCode == 0)
                                return true;
                            else
                                return true;
                    }
                    catch (Exception exception)
                    {
                        MessageBox.Show(exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return false;
                    }
                }
            }
            /// <summary>
            /// 发送PLC信息32位整数
            /// </summary>
            /// <param name="szDevice"></param>
            /// <param name="lplData"></param>
            /// <returns></returns>
            public bool WritePlcData(string szDevice, int lplData)
            {
                lock (plcLock)
                {
                    int iReturnCode = 0;                //Return code
                    try
                    {
                        int gao = 0;
                        int di = 0;
                        if (lplData >= 65536)
                        {
                            gao = lplData / 65536;
                            di = lplData % 65536;
                            string gaoadd = "D" + Convert.ToString(Convert.ToInt32(szDevice.Substring(1, 4)) + 1).PadLeft(4, '0');
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice(gaoadd, gao);
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice(szDevice, di);
                            if (iReturnCode == 0)
                                return true;
                            else
                                return true;
                        }
                        else if (lplData >= 0 && lplData < 65536)
                        {
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice(szDevice, lplData);
                            if (szDevice.Substring(0, 1) == "D")
                            {
                                string gaoadd = "D" + Convert.ToString(Convert.ToInt32(szDevice.Substring(1, 4)) + 1).PadLeft(4, '0');
                                iReturnCode = lpcom_ReferencesUtlType.SetDevice(gaoadd, 0);
                            }
                            if (iReturnCode == 0)
                                return true;
                            else
                                return true;
                        }
                        else if (lplData < 0 && lplData >= -65536)
                        {
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice(szDevice, lplData);
                            if (szDevice.Substring(0, 1) == "D")
                            {
                                string gaoadd = "D" + Convert.ToString(Convert.ToInt32(szDevice.Substring(1, 4)) + 1).PadLeft(4, '0');
                                iReturnCode = lpcom_ReferencesUtlType.SetDevice(gaoadd, -1);
                            }
                            if (iReturnCode == 0)
                                return true;
                            else
                                return true;
                        }
                        else
                        {
                            gao = lplData / 65536 - 1;
                            di = lplData % 65536;
                            string gaoadd = "D" + Convert.ToString(Convert.ToInt32(szDevice.Substring(1, 4)) + 1).PadLeft(4, '0');
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice(gaoadd, gao);
                            iReturnCode = lpcom_ReferencesUtlType.SetDevice(szDevice, di);
                            if (iReturnCode == 0)
                                return true;
                            else
                                return true;
                        }
                    }
                    catch (Exception exception)
                    {
                        MessageBox.Show(exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return false;
                    }
                }
            }
            /// <summary>
            /// 读取PLC信息32位整数
            /// </summary>
            /// <param name="szDevice"></param>
            /// <param name="lplData"></param>
            /// <returns></returns>
            public bool ReadPlcData(string szDevice, out int lplData)
            {
                lock (plcLock)
                {
                    int iReturnCode = 0;                //Return code
                    lplData = 0;
                    try
                    {
                        int gao = 0;
                        int di = 0;
                        string gaoadd = "D" + Convert.ToString(Convert.ToInt32(szDevice.Substring(1, 4)) + 1).PadLeft(4, '0');
                        iReturnCode = lpcom_ReferencesUtlType.GetDevice(gaoadd, out gao);
                        iReturnCode = lpcom_ReferencesUtlType.GetDevice(szDevice,out di);
                        lplData = gao * 65536 + di;
                        if (iReturnCode == 0)
                                return true;
                            else
                                return true; 
                    }
                    catch (Exception exception)
                    {
                        MessageBox.Show(exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return false;
                    }
                }
            }
            /// <summary>
            /// 软元件参数批量读取
            /// </summary>
            /// <param name="szDevice"></起始地址>
            /// <param name="lSize"></长度/个数>
            /// <param name="lplData"></值>
            /// <returns></returns>
            public bool ReadPlcBlockData(string szDevice, int lSize, out int lplData)
            {
    
                lplData = 0;
                int iReturnCode = 0;          //Return code
                try
                {
                    iReturnCode = lpcom_ReferencesUtlType.ReadDeviceBlock(szDevice, lSize, out lplData);   //lSize表示读取多少个 8位
                    if (iReturnCode == 0)
                        return true;
                    else
                        return true;
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
    
            }
    
    
        }
    
    展开全文
  • 程序是基于以太网通信用C#调用三菱的ActProgType控件三菱PLC进行通信,实现采集PLC寄存器内数据并自动上传至指定FTP服务器的数据采集软件。 二、功能说明 程序读取PLC数据,生成CSV格式报表,并可自动上传至指定...
  • 程序说明:程序是使用C#基于以太网或编程口通过MX控件来读写三菱PLC数据的,程序中使用的是ActUtlType控件与PLC进行通信,将读取的数据显示出来(可读写位 ,字,双字))。这只是一个演示程序(包括PLC程序 ,c#...
  • 使用MFC来和三菱PLC通讯 MXComponent控件...由于以前的代码是在win7上使用 用的ActFXCPU控件 但是一直不支持win10 今天研究了下 win10 下面C++可以使用三菱mx的通用控件ActProgType控件来和三菱PLC通讯 源码 ...

    使用MFC来和三菱PLC通讯 MXComponent控件ACTPROGTYPE 支持win7-win10

    由于以前的代码是在win7上使用 用的ActFXCPU控件 但是一直不支持win10 今天研究了下 win10 下面C++可以使用三菱mx的通用控件ActProgType控件来和三菱PLC通讯

    源码

    https://download.csdn.net/download/kinshy/11759818

    最新的MXComponent控件

    https://download.csdn.net/download/kinshy/11760334

    展开全文
  • MX Component,c#,winfrom,.net,控件读写三菱PLC-FX5U,在安装好三菱MX Component 工具 并配置好通道等参数之后,使用c# winfrom开发 PLC的通讯,包括单个值读取,批量读取,轮询等等。 以及写入等操作
  • 三菱通讯控件样例.rar

    2020-05-26 11:49:31
    三菱MX Component4 通讯控件使用样例。支持三菱全系列PLC,开发简单,方便工程移 植。支持winXP win7 win8.1 win10 32/64系统
  • 三菱通信控件

    2013-01-18 20:58:03
    三菱通信控件 利用它可以轻松完成三菱PLC通信
  • 程序说明:程序是使用C#基于以太网来读写三菱PLC数据的,程序中使用的是ActUtlType控件与PLC进行通信,将读取的数据显示出来。这只是一个演示程序,对初学者会有很大帮助。
  • C#通过三菱MX读写三菱PLC软元件,例如Y,M,D0等,包括32位整型。 C#通过三菱MX读写三菱PLC软元件,例如Y,M,D0等,包括32位整型。
  • 注意:QT安装时编译器一定要选上32位的,因为MX Component 4.16S提供的控件是32位的,使用64位编译器编译是,会报控件未注册。 MX Component 4.16S的安装与测试 MX Component 4.16S是三菱PLC官方上位机通讯中间件 ...

    注:本文为博主参考书籍和他人文章并加上自己的理解所编,作为学习笔记使用并将其分享出去供大家学习。若涉及到引用您的文章内容请评论区告知!如有错误欢迎指正!

    MX Component 4.16S的安装与测试

    MX Component 4.16S是三菱PLC官方上位机通讯中间件 ,C#,vb.net,c++.net和三菱PLC通讯时,可以调用该软件DLL和PLC通讯,使用非常方便。
    可以去三菱官网下载,需先注册账号。这里上传俩份手册MX Component Version 4 操作手册.pdf这份手册介绍MX Component工具的安装卸载及使用步骤注意事项,错误信息等。通过使用通用的函数,可以使迄今为止麻烦且复杂的串行通信及以太网通信的程序开发变得异常简单。MX Component Version 4编程手册.pdf这份手册介绍MX Component控件函数使用方法及编程步骤。

    下载地址 MX Component三菱官方下载

    在这里插入图片描述
    序列号:117-570766844(测试可用),也可以重新从官网免费获取。

    安装

    解压后先安装EnvMEL文件夹中的setup 在这里插入图片描述 在这里插入图片描述 安装完成后直接运行解压后文件夹中的setup即可:
    在这里插入图片描述

    之后公司什么的随意设置,在输入注册码:117-570766844
    在这里插入图片描述
    在这里插入图片描述
    如果遇到下面图片显示内容,允许安装即可:
    在这里插入图片描述
    安装完成后就会显示如下图片:
    在这里插入图片描述

    运行

    首先打开设置程序:
    在这里插入图片描述
    点击wizard:
    在这里插入图片描述
    设置站号:
    在这里插入图片描述
    然后点击next;
    PC侧通讯设置:
    (1)、选择通讯接口:网卡、串口等
    (2)、选择PLC
    (3)、设置通讯超时
    在这里插入图片描述
    然后点击next; PLC侧通讯设置方式1:
    (1)、PLC和PC网线直连可以选择选择”以太网端口直连”:
    (2)、选择网卡(会带出本机IP地址):
    在这里插入图片描述
    PLC侧通讯设置方式2:
    可以选择人工输入IP地址或者在网络中搜寻CPU:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    然后点击next;
    网络设置:
    站号类型:本站 PLC类型:FX5U
    在这里插入图片描述
    然后点击next;
    输入注释:
    在这里插入图片描述
    然后点击finish;
    设置完成之后就可以在Target Setting界面看到你的设置参数: 在这里插入图片描述
    在List View界面看到所有的PLC的通讯设置:
    在这里插入图片描述
    在connection Test界面测试通讯: 点击test:
    在这里插入图片描述
    测试成功:
    在这里插入图片描述

    QT的安装与使用

    注意:QT安装时编译器一定要选上32位的,因为MX Component 4.16S提供的控件是32位的,使用64位编译器编译是,会报控件未注册。

    双击qt-opensource-windows-x86-5.12.3.exe启动安装包
    在这里插入图片描述
    接着,会提示你登陆 Qt 账户。这个 Qt 账户对普通人来说没什么必要,所以直接点击下面的“Skip”跳过即可。
    在这里插入图片描述
    随后,便会弹出真正的开始安装界面,点击“下一步”。
    在这里插入图片描述
    在安装文件夹的界面,建议大家不要将 Qt 安装在系统盘 C 盘(比如我在此作了更改,将其安装到 D 盘。当然,你安装在 C 盘也是可以的),其他保持默认即可。继续点击“下一步”
    在这里插入图片描述
    下面,就到了重点了。在选择组件界面,请务必要选对安装 Qt 所需要的组件,否则你安装以后是无法正常运行的。

    首先,点击各项前面的 > 箭头展开子项的内容。
    在这里插入图片描述
    在 Qt5.12.3 一项中,如果你是使用 MinGW 进行编译,请务必选中 MinGW 模块。而如果你希望调用 VS 的编译器进行编译,则需要勾选对应的 VS 模块。当然,如果希望进行安卓开发,则安卓模块是少不了了。

    至于其余的一些模块,则可以根据自身需要勾选。这里着重介绍下 Qt WebEngine 和三个后面带TP的模块项。Qt WebEngine是谷歌开源的 Web 浏览器引擎模块,而带 TP 的模块则表示此模块目前是技术预览版。

    我的建议是,如果你是初学,这些则可以不选。千万不要以为柿子西瓜一箩筐什么都选上是最好的,这样一来是增大存储空间,二来多多少少会影响 Qt 运行时的速度,增加不必要的内存消耗。
    在这里插入图片描述
    下面,接着看工具项(Tools)的选择。

    第一项是CDB的调试器,如果你仅使用 MinGW进行编译,则此项可以不选。

    第二项虽然名字带 MinGW,但只是用于交叉编译的(交叉编译即在某一平台上编译用于其他平台的程序),如果用不到,也可以不选。

    至于第三项,那是用于 Perl 的。如果你电脑中本身没有安装 Perl,那是装不上的。

    选择完成后,继续点击“下一步”

    在这里插入图片描述
    接着,在打开的页面中勾选“我已经阅读并同意条款”(原文是英文)。然后,继续一路点击“下一步”,直到安装完成就可以了。
    在这里插入图片描述

    QT 新建工程

    1,运行QT软件,进入欢迎界面,点击“New Project”新建工程。
    在这里插入图片描述
    选择项目类型,模版后,确认
    在这里插入图片描述
    指定工程文件存放的路径,及工程名后,点击“下一步”
    在这里插入图片描述
    选择交叉编译器,因为MX Component控件是使用32位的编译器的,因此我们选用MinGW 32—bit交叉编译器。
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    到此一个新工程建立完毕。

    QT中Activex控件的使用

    1. 要在Qt下使用ActiveX控件,势必会失去跨平台的优势,但是有时候又不得不如此做。譬如我现在用MX控件开发与PLC通信的软件。当然也可以根据MC协议去编写与plc的通信软件,这个不在当前文章的阐述范围内。
      2.这里采用的是用Qt工具dumpcpp生成源文件,来操作相应的ActiveX控件。
      (1)dumpcpp.exe在Qt安装文件夹的bin目录下:
      在这里插入图片描述
      (2)打开控制台
      在这里插入图片描述
      (3)输入dumpcpp -help 获取函数使用帮助
      在这里插入图片描述
      (4)查看active控件UUID,网上有多种方法,这里不一一叙述,我是通过Qt Designer查看的。
      在这里插入图片描述
      在编辑栏中选中QAxWidget这个控件,并拖拉到右侧界面中,右键点击->设置控件。
      在这里插入图片描述
      选中要使用的控件,在com对象的文本编辑框中显示的是当前控件的UUID,{63885648-1785-41A4-82D5-C578D29E4DA8}。
      (5)输入 dumppcpp {63885648-1785-41A4-82D5-C578D29E4DA8}并回车。
      在这里插入图片描述
      生成俩个文件

    在这里插入图片描述

    (6)将dicomax.h 和dicomax.cpp导入项目,创建对象就行了。

    在项目栏中TEST 工程文件夹中右击,在弹出的窗口中点击“Add Existing Directory…”
    在这里插入图片描述
    选中 actutltypelib.cpp,actutltypelib.h 点击OK.文件添加成功如图:

    在这里插入图片描述
    在工程文件 TEST.pro 中加入:
    QT +=axcontainer

    部分程序

    登录界面的设计

    在项目栏中,右击->”Add New…”
    在页面中选择QT->QT 设计师界面类->Choose…
    在这里插入图片描述

    选择窗口模版后执行下一步
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    设计好的登录界面如下:
    在这里插入图片描述
    login_form.h文件内容如下:

    #ifndef LOGIN_FORM_H
    #define LOGIN_FORM_H
    
    #include <QDialog>
    
    namespace Ui {
    class login_form;
    }
    
    class login_form : public QDialog
    {
        Q_OBJECT
    
    public:
        explicit login_form(QWidget *parent = nullptr);
        ~login_form();
    signals:
    
    public slots:
        void login();//点击登录按钮是执行的槽函数
    
    private:
        Ui::login_form *ui;
    
    };
    
    #endif // LOGIN_FORM_H
    

    login_form.cpp文件内容如下:

    #include "login_form.h"
    #include "ui_login_form.h"
    
    #include<QDebug>
    #include<QMessageBox>
    
    login_form::login_form(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::login_form)
    {
        ui->setupUi(this);
    
        //设置窗体标题
        this->setWindowTitle(tr("登录界面"));
        ui->user_name->setPlaceholderText(tr("输入用户名"));
        ui->user_password->setPlaceholderText(tr("输入密码"));
        ui->user_password->setEchoMode(QLineEdit::Password);
        //单击登录按钮时 执行 LoginForm::login 槽函数(自定义);
        //单击退出按钮时 执行 LoginForm::close 槽函数(窗体的关闭函数,不用自己写)
        connect(ui->enter_Button,&QPushButton::clicked,this,&login_form::login);
        connect(ui->exit_Button,&QPushButton::clicked,this,&login_form::close);
    
    
    
    }
    
    login_form::~login_form()
    {
        delete ui;
    }
    
    
    void login_form::login()
    {
        //获得userNameLEd输入框的文本:userNameLEd->text();
        //trimmed()去掉前后空格
        //tr()函数,防止设置中文时乱码
        if(ui->user_name->text() == tr("") && ui->user_password->text() == tr(""))
        {
            accept();//关闭窗体,并设置返回值为Accepted
        }
        else
        {
            //标题              内容                OK按钮
            QMessageBox::warning(this, tr("警告!"),tr("用户名或密码错误!"),QMessageBox::Yes);
    
            //清空输入框内容
            ui->user_name->clear();
            ui->user_password->clear();
    
            //光标定位
            ui->user_name->setFocus();
        }
    }
    

    main.cpp内容如下:

    #include "mainwindow.h"
    #include <QApplication>
    #include <QDesktopWidget>
    #include "login_form.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
    
        w.setWindowTitle("主界面");//设置窗体标题
        w.move((QApplication::desktop()->width() - w.width()) / 2,
               (QApplication::desktop()->height() - w.height()) / 2);
    
        login_form login;
        login.move((QApplication::desktop()->width() - w.width()) / 2,
                    (QApplication::desktop()->height() - w.height()) / 2);
    
        if (login.exec() == QDialog::Accepted)//调用login.exec(),阻塞主控制流,直到完成返回,继续执行主控制流
        {
            w.show();
            return a.exec();
        }
        else
            return 0;
    
    
    }
    

    实际效果:
    登录界面
    在这里插入图片描述
    主界面:
    在这里插入图片描述

    通信指令

    Open 通信线路、电话线路的打开
    Close 通信线路的关闭
    SetDevice 软元件1 点的设置(4 字节数据) 
    GetDevice 软元件1 点的数据获取(4 字节数据)
    GetCpuType 可编程控制器CPU 型号读取
    SetCpuStatus 可编程控制器CPU 的远程RUN/STOP/PAUSE
    

    上位机界面设计

    通过网线将PLC与电脑连接在一起,当打开上位机时,点击打开,plc与上位机将建立通信,run,stop可以远程控制PLC的运行与停止。界面可以实时显示各轴的运行状态,也可以通过上位机更改PLC的参数设置。
    在设计三轴伺服移动平台控制系统中,我们用上位机代替按钮或开关来操作,上位机的主要作用是从用户窗口上接收信息,并将它转换成读写指令,再送给PLC,它同时能接收PLC发来的命令并加以执行。
    在这个系统中,工作时的上位机界面包括主界面如下图所示。主界面分为三个页面,分别是通信页面,调试页面,监控页面。
    上位机操作步骤如下:
    (1)在系统调试之前先打开上位机应用程序,以实现控制系统的调节;
    (2)进入通信页面,点击打开按键,将会建立与PLC的通信通道。点击RUN或者STOP进行PLC远程运行或停止。
    (3)在通信页面可以读取PLC任意软元件中储存的值,右侧是进行软元件单个读写与连续读写的画面。
    (4)在调试页面可以指定相应轴的各种参数,控制各个轴的运行状态。例:在与PLC通信正常的情况下,先进行复位操作,复位完成后,点击停止退出复位状态。点击测试进入调试状态。此时在调试界面中,点击指令速度编辑框,输入相应轴的移动速度,点击相应轴的使能按键,当值为正值是相应使能的轴正转,当值为负值时相应轴反向移动,即反转。
    (5)左侧的状态指示,实时显示三轴移动平台的运行情况,可以点击相应的按键,进行运行状态的切换。
    (6)点击监视页面,进入监视状态,在此页面可以形象的查看相应轴的移动状态。

    在这里插入图片描述
    通信页面

    在这里插入图片描述
    调试页面
    在这里插入图片描述监视页面

    程序下载地址

    https://download.csdn.net/download/qq_41868529/11390517

    本文完。

    展开全文
  • 三菱MX Component ActiveX动态连接库

    热门讨论 2010-06-07 16:14:56
    三菱MX Component ActiveX 动态连接库,用于上位机软件与三菱 FX/A/Q系列链接,具体使用方法请查看手册,这里只提供动态连接库和头文件
  • C#与三菱MXComponent通讯协议,包函内容有,通讯源代码,使用操作方法PDF,和配制方法,需要安装MXComponent软件,配制好标签后可以不启动软件,后台有服务,有需要的赶紧下载吧!
  • 无需在意协议,可简单实现从计算机到PLC、运动控制器等通信处理的Active X控件、.NET控件库。使用MX Component后,串口通信和以太网通信的程序开发变的简单。
  • C#通过三菱MX-Componment连接三菱PLC操作数据,数据的获取以及设置,MX-Componment
  • 三菱MX Component软件,及其操作手册和编程手册,安装此软件之后,可以很方便的用上位机软件(VB,C#,C++)开发与三菱PLC通信的软件
  • 三菱MX-component

    热门讨论 2011-11-02 08:53:15
    三菱公司推出的用于对PLC编程使用的最好用工具,不需要用户再通过串口指令对其读写控制,控件非常简单好用。试试就知道。
  • 安装好三菱控件,然后添加AxActUtlType控件,调用实例里边的读写PLC数据的函数即可。实例并非完整的项目,而是通讯相关的完整代码,包含建立通讯资源,初始化,连接,读写PLC数据,退出等。。。
  • 这篇文章讲述的是使用Qt开发与PLC进行通讯的上位机. https://blog.csdn.net/qq_41868529/article/details/90759145

    这篇文章讲述的是使用Qt开发与PLC进行通讯的上位机.

    https://blog.csdn.net/qq_41868529/article/details/90759145

    展开全文
  • MX Component控件是三菱公司通信软件包,是计算机和三菱PLC通讯插件。以FX系列PLC为例,通过以太网通讯方式配置接MX控件,以太网通讯模块可以采用FX3U-ENET-ADP或者NET30-FX。
  • labview如何和三菱MX 通讯的见解

    千次阅读 2019-04-24 10:37:27
    按理说:都是走TCP模块通讯,但是三菱PLC自己封装了一个MX Comm软件。 PC软件 通过MX 中继器 把信号发送到PLC 进行信号间的互通 安装好了MX软件,会有专用的DLL 库(ActUtlTypeLib.dll 当然也有其他这里只是一个...
  • 三菱 MX COMPONENT下载及安装测试

    万次阅读 多人点赞 2018-06-01 10:56:50
    1、下载地址:MX Component三菱官方下载 序列号:117-570766844(测试可用) 个人建议用云盘下载,本地下载比较慢,下载完成后解压缩即可。 2、安装 本机已安装,虚拟机安装好后再截图上传吧 3、运行 首先...
  • 连接三菱PLC的控件

    2011-10-12 13:58:23
    MX Compenet可用与PC与三菱PLC的连接,使用于WCS系统
  • 官方文档可查看MX Component编程手册:手册 | 资料中心 | 三菱电机自动化(中国)有限公司 (mitsubishielectric-fa.cn)。 一.控件简单解释 在查看源代码之前,我们需要一些C#的基础知识,脑海中有“控件”的概念...
  • 三菱FX3U通过以太网连接MX Component

    千次阅读 2020-06-06 12:31:46
    以FX系列PLC为例,通过以太网通讯方式配置接MX控件,以太网通讯模块可以采用FX3U-ENET-ADP或者NET30-FX。 一、MX Component控件参数配置 设置过程如下: 1.运行Communication Setup Utility。 2.点击“Wizard...
  • Reinstall MX Component. [重装MX Component ] Set it again on the communication settings utility. [在communication settings设置区域重新设置。] [HEX]>    ...
  • MX培训教材

    2014-04-16 13:06:27
    三菱MX componet VB控件链接
  • MXComponent4.18U.zip

    2019-09-17 17:45:01
    使用MFC来和三菱PLC通讯 MXComponent控件ACTPROGTYPE 支持...由于以前的代码是在win7上使用 用的ActFXCPU控件 但是一直不支持win10 今天研究了下 win10 下面C++可以使用三菱mx的通用控件ActProgType控件来和三菱PLC通讯
  • 无需在意协议,可简单实现从计算机到PLC、运动控制器等通信处理的Active X控件、.NET控件库。使用MX Component后,串口通信和以太网通信的程序开发变的简单。

空空如也

空空如也

1 2 3 4 5 6
收藏数 109
精华内容 43
关键字:

三菱mx控件