QT+C++与PLC进行以太网通讯

目录

  • 前言
    • 通讯测试
    • QT+OpenCV使用ACT控件的问题

前言

以前没有了解过PLC,更不了解PLC通讯,但是新项目必须要跟PLC进行通讯,没办法只能硬着头皮上,搞了差不多一周多,中间一度想要放弃,遇到很多问题也是迟迟解决不了,下面我也会把中间遇到的问题贴上来,以便帮到更多小伙伴。

通讯测试

首先了解了一下上位机与PLC通讯的验证程序,我们用的是三菱PLC-FX5U,例程里有各种语言的代码,如图1,我用的是Vc.NET进行测试,这个是C++ MFC完成的,接下来是通讯测试,需要用到两个软件,如下图2所示。
QT+C++与PLC进行以太网通讯_第1张图片
图1
图2
图2
一、使用GX Works3可以打开一个PLC模拟器,不用使用真实的PLC进行测试,新建工程,右键蓝色区域->在线可以打开软元件/缓冲存储器批量监视,可以对寄存器进行监视和操作,最后打开“模拟开始”完成模拟器的建立。
QT+C++与PLC进行以太网通讯_第2张图片
QT+C++与PLC进行以太网通讯_第3张图片
在这里插入图片描述
二、打开Communication Setup Unility,Wizard->输入Logical station number->next->PC side I/F->CPU type->next->finish。
QT+C++与PLC进行以太网通讯_第4张图片
QT+C++与PLC进行以太网通讯_第5张图片
Connection test选定上面的Logical station number,点击test,连接成功显示Communication test is successful.否则显示GX Simulator3 did not start error…,检测GX 软件是否模拟开始。
三、打开对应的例程代码
我用的是vs2015打开Sample2010.运行之后显示界面如下图所示。填入上面的Logical station number,点击Open按钮,连接成功则下方的Output中的Return显示为0x00000000 [HEX]。
下方的Random Read/Write模块是用来读/写任意一个地址的值。Block Read/Write可以连续写多个地址的值。在DeviceName中输入要读/写的地址,在DeviceSize中输入读/写的个数,DeviceData输入要写入的值(读不用),点击ReadDeviceRandom2可以读取对应地址的值,显示在最下方Output中的Data中,点击WriteDeviceRandom2可以将写入DeviceData的值写入对应地址中。至此通讯测试结束。
QT+C++与PLC进行以太网通讯_第6张图片

QT+OpenCV使用ACT控件的问题

我的界面是用QT写的,视觉是用OpenCV实现的,需要将控件添加到QT中,查了一下发现三菱PLC的ACT控件只能在32位编译器才能使用,但是OpenCV3之后是没有x86的,需要手动生成。
一、手动生成x86
1、以opencv4.1为例进行说明,安装路径下有个3rdparty文件夹,里面包含ffmpeg和ippicv两个文件夹。首先新建一个.cache文件夹与3rdparty同一目录下,必须要用cmd建立,输入md .cache。
2、在.cache文件夹下新建两个文件夹ffmpeg和ippicv。
3、然后下载对应的ffmpeg和ippicv动态库。
已有的ffmpeg和ippicv文件夹下有ffmpeg.cmake和ippicv.cmake文件,打开ffmpeg.cmake第一行便是我们要下载的文件。打开ippicv.cmake找到win32下对应的文件,点击这里找到对应名称进行下载。
QT+C++与PLC进行以太网通讯_第7张图片
QT+C++与PLC进行以太网通讯_第8张图片
解压后,将ffmpeg_version.cmake,opencv_ffmpeg.dll,opencv_ffmpeg_64.dll三个文件复制到.cache下新建的ffmpeg文件夹中。将ippicv_2019_win_ia32_20180723_general.zip复制到.cache下新建的ippicv文件夹中,并在名称前加上上图中的HASH码,如下所示。
QT+C++与PLC进行以太网通讯_第9张图片
并将3rdparty文件夹复制到build文件夹下,便于编译。
4、需要安装python3和cmake,安装过程就不再赘述了。打开cmake-gui.exe,输入.cache所在路径和build路径。点击Configure,弹出框中选定Visual Studio 14 2015,点击finish。
QT+C++与PLC进行以太网通讯_第10张图片
配置完成之后再此点击配置,生成(Generate),提示Configuring Done和Generating Done之后关闭CMake。
5、在build文件夹下生成OpenCV.sln,用vs2015打开之后点击 “生成->生成解决方案”,等待几分钟提示编译完成。
QT+C++与PLC进行以太网通讯_第11张图片
打开build->bin->Debug文件夹会看到生成的动态库,共享库和可执行文件。
右键选中解决方案中CMake Targets下的INSTALL->仅用于项目->仅生成INSTALL(B),完成之后在build文件夹下生成一个install文件夹,包括x86 Debug模式下的动态库和共享库。release版本的生成与debug模式下相同。最后将你需要的库添加到工程配置中。
二、x64改成x86
一开始我是在x64下编译的,qt打开之后无法添加ACT控件,只能先换成X86,可能有一些小问题,我的基本上没啥问题。接下来在需要的界面添加ACT控件,拖动QAxWidget控件到界面上任一位置,右键选择“设置控件->MITSUBISHI ActUtlType Control",控件添加成功。
还需要在你的代码中添加.h和.cpp文件,这两个文件需要手动生成,方法如下:
打开qt所在目录下的bin文件夹,找到dumpcpp.exe,cmd打开此路径,输入dumpcpp空格加添加控件时下方的一串字符,便会生成actutltypelib.h和actutltypelib.cpp,将这两个文件复制到你的工程目录下,加载.h文件即可使用。
QT+C++与PLC进行以太网通讯_第12张图片
三、更改配置文件
3.1、选择Qt VS Tools->Qt Options,将默认版本改为msvc2015,
QT+C++与PLC进行以太网通讯_第13张图片
3.2、选择Qt VS Tools->Qt Project Settings->Qt Modules,选中ActiveQt continer和ActiveQt server。
3.3、选择“项目->属性->链接器->输入->附加依赖项”中添加Qt5AxBased.lib
和Qt5AxContainerd.lib。

你可能感兴趣的:(QT+C++与PLC进行以太网通讯)