PLCnext用三种方式去编写一个功能块

先前提到的基于eCLR,PLCnext可以通过几种高级语言编写功能块、函数、等等,今天我们来试一下利用IEC61131、C++、C#去制作加法功能块。


1.准备工具

PLCnext Engineer & 1152 Simulator

PLCnext Engineer是上位编程软件,免费,1152模拟器是用来模拟PLC的,免费。


 toolChain

ToolChain是用来进行C#和C++的编译的,免费 


Visual Studio 2019

社区版免费(不能商用),ToolChain需要Visual Studio才能运行


SDK

找到2023的版本


2.安装

PLCnext Engineer & 1152仿真

直接一路默认即可


Visual Studio 2019

按这个最小配置即可


PLCnext ToolChain 

勾选下面的配置(没安装2022应该是灰色,确保2019的所有选项都勾上了)

设置MSBuild路径 

打开Terminal或者cmd

$ plcncli set setting MSBuildPath "${VS2019安装目录}\MSBuild\Current\Bin\MSBuild.exe"

 如果VS2019默认安装路径,则如下:

$ plcncli set setting MSBuildPath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"

SDK设置

打开Terminal或者cmd 设置安装的路径和sdk压缩包的位置

$ plcncli install sdk -d Path(希望sdk被安装的路径) -p path(axcf 1152.tar.xz,即sdk安装包中压缩文件的路径)
PS D:\SDK> plcncli install sdk -d .\1152\2023\ -p .\pxc-glibc-x86_64-mingw32-axcf1152-image-mingw-cortexa9t2hf-neon-axcf2152-toolchain-2023.0.tar.xz

[0%] Install SDK.
   -> [0%] Extracting tar.xz file
      -> [Infinite] Extracting .xz file pxc-glibc-x86_64-mingw32-axcf1152-image-mingw-cortexa9t2hf-neon-axcf2152-toolchain-2023.0.tar.xz...
         -> ..................................
      -> [Infinite] Extracting .xz file pxc-glibc-x86_64-mingw32-axcf1152-image-mingw-cortexa9t2hf-neon-axcf2152-toolchain-2023.0.tar.xz...: Done
   -> [50%] Extracting tar.xz file
      -> [0%] Extracting .tar archive
      -> [10%] Extracting .tar archive
      -> [20%] Extracting .tar archive
      -> [30%] Extracting .tar archive
      -> [40%] Extracting .tar archive
      -> [50%] Extracting .tar archive
      -> [60%] Extracting .tar archive
      -> [70%] Extracting .tar archive
      -> [80%] Extracting .tar archive
      -> [90%] Extracting .tar archive
      -> [100%] Extracting .tar archive
   -> [100%] Extracting tar.xz file
[100%] Install SDK.
Exploring the SDK D:\SDK\1152\2023\.
Successfully installed sdk .\pxc-glibc-x86_64-mingw32-axcf1152-image-mingw-cortexa9t2hf-neon-axcf2152-toolchain-2023.0.tar.xz in .\1152\2023\.

我们可以用命令行检查一下

PS D:\SDK> plcncli get sdks

{
  "sdks": [
    {
      "targets": [
        {
          "name": "AXCF1152",
          "version": "23.0.7.109",
          "longVersion": "2023.0.7 LTS (23.0.7.109)",
          "shortVersion": "23.0.7",
          "available": null
        }
      ],
      "path": "D:\\SDK\\1152\\2023\\"
    }
  ]
}

3. PLCnext创建工程

打开PLCnext Engineer(可能会有点久),选择1152 2023,双击首个项目,在Cockpit里选择仿真程序

设置好后,在项目上右键选择连接。第一次会比较久,账户名是admin,密码是plcnext,当然bilibili上也有更详细更丰富的教程,大家可以移步去看

PLCnext Simulator

b站 PLCnext教程

当然我们要编写程序的话,还是要断开连接 


4. IEC61131

展开工程,双击PLCnext,可以看到已经有一个示例程序叫做Main,我们在右侧组件栏双击,打开程序,选择FBD

在界面输入add

在引脚处分别输入var1 var2  输出设置为var1

 

鼠标框选后,上面会出现VAR  VARe字样,我们创建局部变量,点击VAR

在工程项目上右键,选择写入并启动项目

给var2一个值 2  开始运行


5. C#

打开Visual Studio,选择PLCnext C# Firmware Library

命名为CsharpAdd,选择放在同一目录 

在工程树目录右键添加新建项,选择PLCnext Function Block  名字叫做AddCs

using Iec61131.Engineering.Prototypes.Common;
using Iec61131.Engineering.Prototypes.Methods;
using Iec61131.Engineering.Prototypes.Pragmas;
using Iec61131.Engineering.Prototypes.Types;
using Iec61131.Engineering.Prototypes.Variables;
using System;
using System.Iec61131Lib;
using System.Runtime.InteropServices;

namespace CsharpAdd
{
    [FunctionBlock]
    public class AddCs
    {
        [Input]
        public short IN1;
        [Input]
        public short IN2;
        [Output]
        public short OUT;

        [Initialization]
        public void __Init()
        {
            // TODO: Initialize the variables of the function block here
        }

        [Execution]
        public void __Process()
        {
            OUT = (short)(IN1 + IN2);
        }
    }
}

 点击重新生成项目后,在资源目录的bin下面会出现文件

回到PLCnext Engineer中,我们把该库加载 

组件栏的编程下会出现CsharpAdd文件夹,里面有我们编译好的功能块,直接拖拽到之前IEC61131的程序中 

按照之前的方式,我们新建var3和var4,将var3作为输出 

右键项目进行写入和下装,给var4一个值,可以看到正常运行起来了

 6. C++

用C++需要用到C#去定义功能块的输入输出接口,由C++去实现功能

我们打开Visual Studio新建一个工程,叫做NativeAdd,SDK选择1152 2023

 

在工程树右键,添加新建项,选择PLCnext Native Function Block,名称叫做Addnativecpp.cs 

using System;
using System.Iec61131Lib;
using System.Runtime.InteropServices;
using Eclr;
using Iec61131.Engineering.Prototypes.Types;
using Iec61131.Engineering.Prototypes.Variables;
using Iec61131.Engineering.Prototypes.Methods;
using Iec61131.Engineering.Prototypes.Common;
using Iec61131.Engineering.Prototypes.Pragmas;

namespace NativeAdd
{
    [Native]
    [FunctionBlock]
    public class Addnativecpp
    {
        [Input]
        public short IN1;
        [Input]
        public short IN2;
        [Output]
        public short OUT;

        [Initialization]
        public void __Init()
        {
            //  No implementation in C# part; implement in native method
        }

        [Execution]
        public void __Process()
        {
            // No implementation in C# part; implement in native method
        }
    }
}

可以看到,接口定义和纯C#是类似的,但是Process里面是空的了,因为我们要用C++去编写逻辑。右键重新生成,然后打开资源目录

 进入Cpp文件夹,找到Addnativecpp-cli.cpp

// Addnativecpp native assembly code template.
// PHOENIX CONTACT Software embedded CLR native assembly builder tool generated source file.
// use this file to implement your own native code

#include "eclr.h"
#include "NativeAdd.h"

// class NativeAdd.Addnativecpp implementation
void __PInvoke__ NativeAdd::Addnativecpp::__Init()
{
    // implement your code here !
}

void __PInvoke__ NativeAdd::Addnativecpp::__Process()
{
    // implement your code here !
    OUT=IN1+IN2;
}

NativeAdd::Addnativecpp::Addnativecpp()
{
    // implement your constructor code here !
}

void __PInvoke__ NativeAdd::Addnativecpp::ctor()
{
    // automatically generated auxiliary constructor : calls the constructor by displacement new operator !
    // @Begin automatically generated code, do not modify !
    new (this) NativeAdd::Addnativecpp();
    // @End automatically generated code
}

 在终端输入 plcncli generate code

然后输入plcncli build all 

最后输入plcncli deploy 就可以得到我们的库了

同样添加用户库,添加var5 var6 ,输出为var5

 


总结

我们用简单的三种方式去进行建立功能块,当然C#和C++同时都可建立函数、实例程序

这里需要注意几点:

1. 纯C#的平台是全系通用,开发出一个功能块可以适用于所有PLCnext设备

2.C++的不是全系通用,需要根据不同的设备使用不同的SDK,不过好在在开发的时候可以选择多个SDK,一次性就能把所有的SDK都选上,功能块会自动匹配对应的设备类型。

3.C++可以结合第三方的代码,例如sqlite3、inflexdb、socket、mqtt等等。用户可以根据自己的功能去整合成功能块或者函数或者实例程序,灵活度非常高。

当然还有很多好玩的功能,后面我会慢慢讲(不定期更新))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/632514.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通俗易懂的策略模式讲解

什么是策略模式? 策略模式是一种设计模式,它允许你定义一系列的算法(策略),并将每个算法封装成一个对象。这样,你可以轻松地切换不同的算法,而不需要改变原始代码。 一个简单的例子 假设你是…

ACM实训冲刺第八天

【碎碎念】由于昨天做的题都有思路,加上今天有点疲惫,故今天先不复习了,直接开始今天的算法学习 Tokitsukaze and All Zero Sequence 问题 思路 读入测试用例数:首先读取一个整数t,表示接下来会有t组数据需要处理。遍…

【达梦数据库】搭建 DM->mysql dblink

DM->mysql dblink 1安装mysql odbc rpm -ivh mysql-connector-odbc-5.3.14-1.el7.x86_64.rpm2mysql创建远程用户与远程数据库 mysql> show databases; ------------------------- | Database | ------------------------- | information_schema | …

【Linux系统编程】第十九弹---进程状态(下)

​​​​​​​ ✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、僵尸进程 2、孤儿进程 3、运行状态 4、阻塞状态 5、挂起状态 6、进程切换 总结 1、僵尸进程 上一弹…

OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL

市面上关于终端(手机)操作系统在 3GPP 协议开发的内容太少了,即使 Android 相关的学习文档都很少,Android 协议开发书籍我是没有见过的。可能是市场需求的缘故吧,现在市场上还是前后端软件开发从业人员最多&#xff0c…

【Open AI】GPT-4o深夜发布:视觉、听觉跨越式升级

北京时间5月14日1点整,OpenAI 召开了首场春季发布会,CTO Mira Murati 在台上和团队用短短不到30分钟的时间,揭开了最新旗舰模型 GPT-4o 的神秘面纱,以及基于 GPT-4o 的 ChatGPT,均为免费使用。 本文内容来自OpenAI网站…

微服务架构:注册中心 Eureka、ZooKeeper、Consul、Nacos的选型对比详解

微服务架构(Microservices Architecture)是一种基于服务拆分的分布式架构模式,旨在将复杂的单体应用程序拆分为一组更小、更独立的服务单元。这些服务单元可以独立开发、测试、部署,并使用不同的技术栈和编程语言。它们通过轻量级…

外贸业务中的12个“坑”,你踩到了吗?

在竞争激烈的外贸领域,企业在拓展市场的同时,也面临着各种潜在的陷阱和风险。对于外贸公司而言,如何在复杂的交易过程中识破陷阱,防范潜在风险,成为确保企业长远发展的关键一环。 以下是一些外贸企业可能遇到的陷阱&a…

Nebula街机模拟器 Mac移植版(400+游戏roms)汉化版

nebula星云模拟器是电脑上最热门的街机游戏模拟器之一,玩家可以通过这个小巧的模拟器软件进行多款经典街机游戏启动和畅玩,本次移植的包含400多款游戏roms,经典的三国志、三国战纪、拳皇、街霸、合金弹头、1941都包含在内。 下载地址&#xf…

电感式传感器

电感传感器是基于电磁感应原理,将被测非电量(如位移、压力、振动等)转换为电感量变化的一种结构性传感器。利用自感原理的有自感式传感器(可变磁阻式),利用互感原理的有互感式(差动变压器式和涡…

aigc在前端中的应用-CodeGeex

前言:目前市场上优秀的智能编程助手有很多,其中以GitHub Copilot,Tabnine为最,但是目前这两款优质的智能编程助手都是需要付费的。如果不选择花费的话,在这里我们向小伙伴推荐免费的智能编程助手codegeex,性…

嵌入式——AStyle格式化工具

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 keil配置快捷键配置 AStyle(Artistic Style)是一个开源的代码自动格式化工具,可以用于自动化代…

## 23 使用BERT进行文本分类:PyTorch实战指南

文章目录 前言理解BERTPyTorch环境搭建数据准备模型建立训练模型模型评估与应用结论 前言 文本分类是自然语言处理(NLP)领域的一项基本任务,它的目的是将一个文本序列指派到一个或多个类别中。这项技术被广泛应用于垃圾邮件检测、情感分析、…

月薪20K+的策划人简历应该怎么写?

一般咱们大多数策划在写简历前,都是先直接找模板,然后按照模板的框架直接往里面填内容。 最后草草收场,直接拿去海投简历,结果发现没有拿到任何面试邀约。 策划写简历前的第一件事要梳理自己的能力模型和岗位JD。 因为只有先梳…

做DFMEA最难点,功能分析如何做?——FMEA软件

​免费试用FMEA软件-免费版-SunFMEADFMEA,即设计失效模式与影响分析,是一种在产品设计阶段就预见并预防潜在失效模式的重要工具。然而,在DFMEA的众多步骤中,功能分析无疑是其中的一大难点。它要求我们深入理解产品的各个系统、部件…

Excel 计算多个日期区间的交集中的工作日数

Excel表格有多对起止时间形成了区间组,如B3:C3共12组时间区间 ABCDEF12Ramadan StartsRamadan Ends323-Apr-2022-May-20Date11-Apr-24412-Apr-2111-May-21Date212-Apr-2452-Apr-221-May-22Expected6622-Mar-2320-Apr-23Caculated710-Mar-248-Apr-24828-Feb-2529-Ma…

ArcGIS arcpy代码工具——关于标识码的那些事(查找最大标识码、唯一性检查、重排序、空值赋值)

系列文章目录 ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改 ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片 ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板 ArcGIS arcpy代码工具——定制属性表字段输出表格 ArcGIS arc…

碳纳米管须状触嗅觉多模态融合传感器在皮革奢侈品真伪鉴定下的设计探索

一、设计方案 1.传感器选择 触觉传感器:选择基于碳纳米管(CNT)聚合物的柔性MEMS触觉微传感器,由于碳纳米管具有高度的灵敏度和选择性、柔韧性,可以作为触觉传感器,检测材料的微观结构和机械特性。嗅觉传感…

防火墙组网

防火墙的职责 控制和防护——在安全策略上即可体现,防火墙可以根据安全策略来抓取流量,之后做出对应的动作。吞吐量表示防火墙同一时间处理的数据量。传统防火墙(包过滤防火墙),相当于一个严格的规则表,和ACL(访问控制…

vue3 ElementUI 日期禁选当日前, 当日后,3天后

今日之前禁用 代码: ( 主要是 :disabledDate“disabledDateFun” ) <el-date-picker v-model"queryForm.selectedDate"type"date"range-separator"-"placeholder"选择日期":disabledDate"disabledDateFun" clearable /&…