亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 工业技术

PLCnext Engineer 中掌握 C++ 简单与复杂数据类型

大家好,

本文将探讨 C++ 与 PLCnext Engineer 中的简单和复杂数据类型,包含简单和复杂两个练习。

假设您具备 C++ 和 PLCnext Engineer 基础经验。

准备工作

所需工具:C++ 编辑器、PLCnext Engineer 软件、Phoenix Contact PLC。我使用的环境:

我选用 Visual Studio,Eclipse 亦可。教程链接:Visual Studio、Eclipse。PLCnext Engineer 可在官网下载。

简单练习

创建一个检查 PLC 发送数字是否正确的小应用。新建 C++ 项目,打开头文件(形如 [ProjectName].hpp,忽略 [ProjectName]component.hpp)。定义一个输入端口和一个输出端口(仅适用简单数据类型):

//#port
//#attributes(input)
//#name(InputTest)
int64 InputTest = 0;

//#port
//#attributes(Output)
//#name(outputTest)
int64 OutputTest = 0;

打开 [ProjectName].cpp 编写逻辑,用 if 或 switch 判断数值。我用 if 结构:

void PLMProjectReadInputProgram::Execute() {
    if (InputTest == 1) { OutputTest = 15; }
    if (InputTest == 2) { OutputTest = 150; }
    if (InputTest == 3) { OutputTest = 1500; }
    if (InputTest == 4) { OutputTest = 15000; }
}

点击构建生成 PLC 可识别的库。若不清晰请参考上述教程。

PLCnext Engineer 中掌握 C++ 简单与复杂数据类型

在 PLCnext Engineer 中:组件标签页→编程→Local 文件夹→主程序→Variables,添加变量名、数据类型(需与 C++ 一致,对照表见此处)、用途(决定是否对外交互)。

PLCnext Engineer 中掌握 C++ 简单与复杂数据类型

连接变量:将生成的库(项目 bin 目录)复制到 C:\Users\Public\Documents\PLCnext Engineer\Libraries。组件标签页→Libraries→右键“add user library”选择库。

PLCnext Engineer 中掌握 C++ 简单与复杂数据类型

添加程序到任务:Plant 区域双击 PLCnext→“Tasks and Events”标签→在 MainInstance 后添加新程序(选类型或从组件区拖拽)。

PLCnext Engineer 中掌握 C++ 简单与复杂数据类型

“Port List”标签页会显示所有变量,将 PLC OUT 端口连到 C++ IN 端口,反之亦然。若失败请检查数据类型。

PLCnext Engineer 中掌握 C++ 简单与复杂数据类型 PLCnext Engineer 中掌握 C++ 简单与复杂数据类型

主程序 Code 视图中赋值测试:设输出变量为 1。

PLCnext Engineer 中掌握 C++ 简单与复杂数据类型

下载项目到 PLC,Port List 中应看到 C++ 返回 15。

复杂练习

实现结构体数组在 PLC 与 C++ 间双向传递。新建 C++ 项目,头文件定义汽车结构体:

public: // typedefs
    struct StrCar {
        StaticString<80> sbrand;
        int16 iHorsepower;
        int16 iYear;
        boolean xInsured;
    };

重要! C++ 与 PLCnext Engineer 中名称和类型必须完全一致!数据类型对照见此处。

定义输入输出端口为结构体数组:

//#port
//#attributes(Input)
//#name(CarIn)
StrCar CarToC[2];

//#port
//#attributes(Output)
//#name(CarOut)
StrCar CarFromC[2];

在 .cpp 中交换两辆车数据并赋予虚拟值:

// 将第二辆车数据赋给第一辆输出
CarFromC[0].sbrand = CarToC[1].sbrand;
CarFromC[0].iHorsepower = CarToC[1].iHorsepower;
CarFromC[0].iYear = CarToC[1].iYear;
CarFromC[0].xInsured = CarToC[1].xInsured;

// 给第二辆输出赋第一辆车数据
CarFromC[1].sbrand = CarToC[0].sbrand;
CarFromC[1].iHorsepower = CarToC[0].iHorsepower;
CarFromC[1].iYear = CarToC[0].iYear;
CarFromC[1].xInsured = CarToC[0].xInsured;

构建生成库后,在 PLCnext Engineer 中创建自定义数据类型:数据类型文件中定义结构体 StrCar 与数组 carList:

TYPE
    StrCar:
    STRUCT
        sBrand: STRING;
        iHorsepower: INT;
        iYear: INT;
        xInsured: BOOL;
    END_STRUCT
END_TYPE

TYPE
    carList: ARRAY[0..1] OF StrCar;
END_TYPE

重要! 名称和类型必须与 C++ 完全一致!

PLCnext Engineer 中掌握 C++ 简单与复杂数据类型 PLCnext Engineer 中掌握 C++ 简单与复杂数据类型

后续步骤同简单练习:复制库、添加用户库、加入任务、连接端口。Port List 中连接 PLC OUT 到 C++ IN。

PLCnext Engineer 中掌握 C++ 简单与复杂数据类型 PLCnext Engineer 中掌握 C++ 简单与复杂数据类型 PLCnext Engineer 中掌握 C++ 简单与复杂数据类型 PLCnext Engineer 中掌握 C++ 简单与复杂数据类型

主程序 Code 中赋值测试:

CarToC[0].sBrand := 'Audi';
CarToC[0].iHorsepower := 200;
CarToC[0].iYear := 2020;
CarToC[0].xInsured := TRUE;

CarToC[1].sBrand := 'Mazda';
CarToC[1].iHorsepower := 120;
CarToC[1].iYear := 2001;
CarToC[1].xInsured := FALSE;

部署运行后,输出列表将与输入列表交换顺序。可在 Port List 中查看变量值。

工业技术

  1. 非零初始条件下直流电抗电路高级分析
  2. 数字化程序编写:简单、高效、可靠
  3. 在PLCnext设备上用grpcurl安全远程访问gRPC
  4. 开发 PLCnext 控制台应用 (C#):初学者指南
  5. 在 PLCnext Linux 上安装 APT 包管理器:分步指南
  6. C++结构体与类:嵌入式开发者实战指南
  7. 拓展云疆界:新可用区、容器与多云策略
  8. C# 基础:输入输出核心技巧完全指南
  9. C++类与对象:面向对象编程实战指南
  10. C++ 指针与数组:深度掌握两者关系
  11. C 与 C++ 核心差异与选型指南
  12. C++日期时间完全指南:ctime库、tm结构体与格式化输出