本篇文章讲述的是使用C++ mfc与三菱plc成功建立连接,并在程序中实现与PLC的数据交换。

1.建立连接

三菱公司提供了三菱PLC和上位机的通讯辅助软件:MX Component

1. 下载并安装MX Component软件:网上搜索MX Component下载安装即可,此处不做详细描述;
 2. 安装完成后打开Communication Setup Utility,软件图标如图所示:(注意,打开软件时请以管理员身份运行,否则设置完测试连接时会出现权限不够的提示)

3. 点击Wizard向导,随着向导进行连接相关配置;

4.逻辑站点号随便填一个数字即可,后面可以在总览中看到这个(但请注意,如果使用的utl方式,这个会在程序中使用):

然后点击next到下一步。

5.这一步选择连接方式和连接的PLC种类,以及设置连接超时时间。此处我用的是以太网连接方式,连接的是三菱FX5U PLC,设置如下图:

设置完成后点next进行到下一步。

6.这一步是输入PLC的IP地址

可点击

按钮,它会自动查找当前与电脑连接的设备

完成后进行下一步

7.此处一般用默认即可,不需要更改,直接进入下一步;

8.这一步是填写注释,用于说明这一次的连接配置,可以不写,此处我填个1:

完成后点finish

9.选到Connection test栏进行连接测试

点test按钮,出现如下连接成功标志则说明配置成功,否则检查前面几步再重新测试。

到此连接配置已经完成,关掉软件,下面开始讲述程序编写。

2.程序设计

下面我将以我编写的测试程序为例对具体的步骤进行详细讲解。

1.新建MFC应用程序,编辑主界面,我的测试程序主界面如下

这两个图标是三菱厂商提供的activex控件,在主界面中右键“插入ActiveX控件”,这两个控件分别对应下面两个:

本文中的实际连接测试中只用到了第一种操作方式,但包含了两种方式的操作代码。

点击添加的activex控件,右键“添加变量”,

两个添加的控件都要进行如下操作,名字自己定义。

添加完activex控件后,会自动往工程中添加两个头文件,再加上actDefine文件,总共三个和PLC相关的头文件,

编辑代码,在主对话框的头文件中包含上面三个文件:

此外,可以在头文件中看到,头文件中自动加了这两句代码:

,这就是我们刚在界面上创建的变量。

下面开始具体讲代码实现,包括:创建连接、关闭连接、获取指定端口值、设置指定端口值。每一个功能都专门写成一个函数,

下面先讲创建打开连接函数,代码如下:

void Cplctest1Dlg::OnBnClickedOpenButton()
{// TODO:  在此添加控件通知处理程序代码long lRet;CString  MsgStr;UpdateData(TRUE);m_return_edit = L"";        //界面上的控件,用于显示操作返回值,返回0代表操作成功// ActProgType Controltry{if (0 == m_nCurType)             //UTL连接{//此处的参数1就是我们在MX COMPONENT中设置向导里面设置的逻辑站号1,实际设置的数字是    几这里就是几m_ActUltType.put_ActLogicalStationNumber(1);    // Exec set-property method lRet = m_ActUltType.Open();    // Open method exec}//此种方法程序中其实没用,但是也加了进来,后面几个函数也是如此else if (1 == m_nCurType){m_ActProType.put_ActHostAddress(L"192.168.3.250");m_ActProType.put_ActUnitType(UNIT_FXVETHER);// Exec set-property method   0x2001  // Ethernet(FX5CPU) IP  m_ActProType.put_ActProtocolType(PROTOCOL_TCPIP);// Exec set-property method lRet = m_ActProType.Open();   // Exec OPEN method }//输出m_return_edit.Format(L"0x%08x", lRet);}catch (COleDispatchException *Exception){// OLE IDispatch Interface Error//MsgStr.LoadString(IDS_STRING103);AfxMessageBox(L"打开连接失败");//Exception->Delete();}//显示到界面UpdateData(FALSE);
}

再是获取端口值函数代码:

void Cplctest1Dlg::OnBnClickedGetvalueButton()
{// TODO:  在此添加控件通知处理程序代码long lRet;long lValue;CString  MsgStr;UpdateData(TRUE);        //获取界面中填写的端口号m_return_edit = "";m_retval1 = "";            //获取数值显示控件m_retval2 = "";            //此控件用于显示PLC型号,此函数没用//判断设备名是否为空if (L"" == m_devicename_edit){AfxMessageBox(L"选择软原件名为空,请正确输入软原件名");return;}try{if (0 == m_nCurType)            //UTL连接模式{lRet = m_ActUltType.GetDevice(m_devicename_edit, &lValue);// 获取数值}else if (1 == m_nCurType)        //prog连接模式{// ActProgType ControllRet = m_ActProType.GetDevice(m_devicename_edit, &lValue);   //获取数值}if (lRet == 0x00){ // 返回值为0,说明获取成功,用两种形式显示数值m_retval1.Format(L"0x%04x(%d)", lValue, lValue);   // Device Value}// Renew ReturnValue m_return_edit.Format(L"0x%08x", lRet);}catch (COleDispatchException *Exception){// OLE IDispatch Interface Error//MsgStr.LoadString(IDS_STRING103);AfxMessageBox(L"获取软原件值出错");//Exception->Delete();}UpdateData(FALSE);
}

然后是设置端口值函数代码:

void Cplctest1Dlg::OnBnClickedSetvalueButton()
{// TODO:  在此添加控件通知处理程序代码long lValue;long lRet;CString  MsgStr;UpdateData(TRUE);m_return_edit = "";m_retval1 = "";m_retval2 = "";if (m_devicename_edit == ""){// Not Enter DeviceName ErrorAfxMessageBox(L"选择的软原件名为空");return;}lValue = m_devicevalue_edit;try{// ActUtlType Controlif (0 == m_nCurType){lRet = m_ActUltType.SetDevice(m_devicename_edit, lValue);   // 设置值}else if (1 == m_nCurType){// ActProgType ControllRet = m_ActProType.SetDevice(m_devicename_edit, lValue); // 设置值}// Renew ReturnValue m_return_edit.Format(L"0x%08x", lRet);}catch (COleDispatchException *Exception){// OLE IDispatch Interface ErrorAfxMessageBox(L"获取软原件值出错");}UpdateData(FALSE);        //在界面上更新得到的数据
}

再是关闭连接函数代码:

void Cplctest1Dlg::OnBnClickedCloseButton()
{// TODO:  在此添加控件通知处理程序代码long lValue;long lRet;CString  MsgStr;UpdateData(TRUE);m_return_edit = "";m_retval1 = "";m_retval2 = "";try{if (0 == m_nCurType){lRet = m_ActUltType.Close();  // 关闭连接}else if (1 == m_nCurType){lRet = m_ActProType.Close();   // 关闭连接}// Renew ReturnValue m_return_edit.Format(L"0x%08x", lRet);}catch (COleDispatchException *Exception){// OLE IDispatch Interface ErrorAfxMessageBox(L"连接关闭失败");}UpdateData(FALSE);
}

3.软件测试结果演示

点击打开连接,返回值为0后设置软元件“D1”的值为1,然后再读取,显示结果如下:

至此,C++ MFC和PLC的通讯就讲解完了,欢迎大家在评论区提出问题和不同意见,需要文中演示程序的也可以在评论区和我说,谢谢!

C++ MFC与三菱PLC通讯相关推荐

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

    使用MFC来和三菱PLC通讯 MXComponent控件ACTPROGTYPE 支持win7-win10 由于以前的代码是在win7上使用 用的ActFXCPU控件 但是一直不支持win10 今天研究 ...

  2. PLC通讯实现-C#实现三菱PLC通讯(三)

    PLC通讯实现-C#实现三菱PLC通讯MXComponent(三) 背景 抽象设计 三菱PLC通讯实现MXComponent 背景 本人近十年的工作都与工业软件相关.其中工控系统开发过程中有一个必要环 ...

  3. 使用python写一个计算机与三菱PLC通讯的代码

    好的.首先,你需要确保你已经安装了适用于 Python 的三菱 PLC 通讯库,例如 pyMELSEC. 然后,你可以使用以下代码来连接三菱 PLC 并读取一个地址的值: import pyMELSE ...

  4. Labview通讯三菱Q PLC,Labvew TCP通讯三菱PLC ,MCTCP,三菱PLC连接LabVIEW,LabVIEW和三菱PLC 通讯

    Labview通讯三菱Q PLC,Labvew TCP通讯三菱PLC ,MCTCP,三菱PLC连接LabVIEW,LabVIEW和三菱PLC 通讯 三菱官方MC协议,简单方便,完胜OPC协议. ,源码 ...

  5. tk6071iq怎么恢复出厂设置_威纶触摸屏TK6071IQ与三菱PLC通讯怎么设置

    威纶触摸屏TK6071IQ与三菱PLC通讯怎么设置威纶通触摸屏和三菱PLC通讯不上,老是提示PLC没反应,该怎么设置呢? 解决思路: 你设置同样的波特率,同样的位数,同样的停止位,站号不能相同,就是说 ...

  6. 编程软件和三菱PLC通讯不上是什么原因

    编程软件和三菱PLC通讯不上是什么原因 [1]PLC的输出是不带电源的吗?比如说我要控制个110V继电器.是不是要加个电源?怎么接线? 答:PLC的输出端口仅仅是一个驱动负载的开关,本身是不带电源的, ...

  7. LabVIEW视觉尺寸测量 范例包含尺寸测量和数据库工具带三菱plc通讯

    LabVIEW视觉尺寸测量 范例包含尺寸测量和数据库工具带三菱plc通讯. 包含一份软件调试说明书及调试操作视频! 现有:69100614186286191苏州工控代理商

  8. C#上位机与PLC通讯源码 C#与三菱PLC通讯MC协议

    C#上位机与PLC通讯源码 C#与三菱PLC通讯MC协议 ID:696642996063203

  9. 三菱PLC 通讯 python代码

    前几天,需要使用到激光传感器,需要PLC来控制.就学习了一下PC与PLC通讯. 学的不深,可能有很多问题,欢迎指正. PLC那一端是电气的同事帮忙弄的,使用的是MC协议. 一开始,我是用的是二进制方式 ...

  10. 三菱PLC与第三方设备TCP通讯_【原创干货】一台威纶通触摸屏与多台三菱PLC通讯案例,欢迎收藏!...

    到这里为止,我们触摸屏和PLC的设置及程序就全部完成了.大家可以照着操作下载一遍,原理是不是很简单呢? 在实际项目应用中,我们经常需要使用一台触摸屏对多台设备进行监控操作.这就是我们常说的一屏多机.它 ...

最新文章

  1. 【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则性质 | 非频繁项集超集性质 | 频繁项集子集性质 | 项集与超集支持度性质 )
  2. php ar 模式,AR技术也被称为什么技术
  3. MySQL删除同一个字段的多条记录
  4. Python基础学习----参数和返回值
  5. php 生成密码字典,密码字典生成工具crunch的简单使用
  6. hu3201 Build a Fence 解题报告
  7. 为长篇文档快速创建目录
  8. html5下input的placeholder标签兼容ie9
  9. 大数据系统应包含哪些功能模块
  10. BAT中for循环如何执行多条命令
  11. CruiseControl 安装和启动
  12. 恢复威金病毒感染的EXE文件小方法(转)
  13. 可以免费领取卡巴斯基激活码的活动
  14. 《自控力》 第二章读书笔记
  15. 20194311姜晨昊Exp2-后门原理与实践
  16. 历年ACM-ICPC比赛
  17. cannot simultaneously fetch multiple bags 异常的解决办法
  18. 【MATLAB】基本数学操作
  19. Infortrend与英方合作推出存储灾备一体化解决方案
  20. 有机元素分析不同操作模式

热门文章

  1. 用什么软件测试电脑硬件的问题,新电脑检测软件-我买了新电脑,用什么软件测试比较好?最好还能看见自己详细配置的软 爱问知识人...
  2. 教师使用计算机的能力提升,河南省中小学教师信息技术应用能力提升工程实效研究...
  3. 解决 误删Path环境变量的问题
  4. 免费软件时代的来临!可以媲美金蝶用友的ERP产品,完全免费使用。
  5. 错误报告函数:strerror和perror
  6. GStreamer的Decodebin插件
  7. python标准库math中用来计算平方根的函数_Python程序设计试题(卷)库
  8. Vuex 的简单模拟、了解Vuex
  9. IPC--印制电路板的一种标准
  10. 汽车租赁管理系统的设计与实现(JSP+SqlServer在线租车网站)