PLC结构化文本(ST)——泛型常量(Generic Constatnt)

news/2024/9/19 20:44:59/文章来源:https://www.cnblogs.com/JSheng/p/18418443

PLC Structured Text Object Oriented Programming

PLC结构化文本(ST)——泛型常量(Generic Constatnt)

泛型常量

最近将TwinCAT3升级到最新版本Build 4026.10发现一个比较有意思的变量类型,也是TC3.1 Build 4026新增的一个类型泛型常量(Generic Constatnt)。其实CODESYS很早就新增了这个类型,而TwinCAT3在最新发布的编译器版本上才增加,以至于我近几日才知道存在这个东西。

泛型常量是 VAR_GENERIC CONSTANT 功能块的声明区域,直到分配功能块实例才分配初始化值。

但是这里的泛型后面加了一个CONSTANT常量,就是限定了泛型只能使用在常量类型上。说到泛型这里解释一下C#中的概念:

允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。——C# 泛型(Generic)|菜鸟教程

PLC中就是我们在写FB时先不去确定常量的值,直到实例化FB或者继承(EXTENDS)FB时才指定静态常量的实际值。

官方例程

这里用的是CODESYS的程序实例,倍福的官方例程写的不太走心,就不作为参考了。

  • 实例化
FUNCTION_BLOCK FB_MyString 
VAR_GENERIC CONSTANTmaxlen : UDINT := 1;
END_VAR
VARtest : ARRAY[0..maxlen-1] OF BYTE;
END_VAR
PROGRAM PLC_PRG
VAR CONSTANTcconst: DINT := 1000;
END_VAR
VAR    fbMyString1 : FB_MyString<100>;fbMyString2 : FB_MyString<(2 * cconst)>;arrMyString : ARRAY [0..5] OF FB_MyString<100>;
END_VAR
  • 继承
INTERFACE IString 
METHOD Append : BOOL 
VAR_INPUT     strAppend : IString; 
END_VAR 
METHOD Assign : BOOL
VAR_INPUT     stringIn: String; 
END_VAR 
METHOD ToString : STRING
VAR_INPUT 
END_VAR 
PROPERTY Length : DINT
FUNCTION_BLOCK MyString IMPLEMENTS IString 
VAR_GENERIC CONSTANT        maxlen : UDINT; 
END_VAR 
FUNCTION_BLOCK LongString EXTENDS MyString<1000>
FUNCTION_BLOCK MySpecialString EXTENDS MyString<maxlen2>
VAR_GENERIC CONSTANT        maxlen2 : UDINT:= 1; 
END_VAR METHOD ToLatin1: STRING 
PROGRAM PLC_PRG 
VAR CONSTANT     cconst: DINT := 1000; 
END_VAR
VAR     string1 : MyString<100>;string2 : MyString<(2 * cconst)>;derived1 : LongString;derived2 : MySpecialString<100>;
END_VAR 
string1.Assign ('Welt'); 
string2.Assign ('Hallo '); 
string2.Append(string1); 
derived2.ToLatin1('Hello World');
  • 多个泛型常量
    一个FB可以声明多个泛型常量,在使用时按照声明顺序依次用,隔开传入参数即可。
FUNCTION_BLOCK FB_MyString 
VAR_GENERIC CONSTANTmaxlen1 : UDINT := 1;maxlen2 : UDINT := 2; maxlen3 : UDINT := 3;   
END_VAR
VARtest1 : ARRAY[0..maxlen1-1] OF BYTE;test2 : ARRAY[0..maxlen2-1] OF BYTE;test3 : ARRAY[0..maxlen3-1] OF BYTE;
END_VAR
PROGRAM PLC_PRG
VAR    fbMyString1 : FB_MyString<100,200,300>;arrMyString : ARRAY [0..5] OF FB_MyString<100,200,300>;
END_VAR

IEC61131-3PLC编程中,目前泛型这个概念只支持常量,相比之下还是C#语言的泛型好用,可以说不是一个层级的。这样看来从CODESYS增加泛型概念,隐隐感觉IEC61131-3 PLC ST有往高级语言发展的趋势。

总结

倍福TwinCAT平台目前只有TC3.1 Build 4026支持泛型常量,最后希望各个平台支持更多类型的泛型吧。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wordpress安装

1. 说明LNMP经典网站环境, Linux系统,Nginx网站服务,MySQL数据库(Mariadb),PHP(运行环境) Wordpress PHP代码.2. 建议的搭建顺序MySQL数据库(mariadb) PHP环境 php 7.x Nginx 直接安装即可2.1. 部署数据库查看代码 # 1.安装mariadb数据库 root@iZ2zei5cw2j6q770mgp5kvZ:~# apt …

一个cmakelist的例子(自动处理多个proto)

背景: 由于项目需要,把所有的proto文件放在了统一的文件夹中,为了方便更新以及加快编译速度,要把这个proto自动转成.cc .pb.h文件,再编译成so。 为此,写了个cmakelist.txt。主要功能: 1)自动遍历指定目录下所有proto文件,调用ptotoc生成.cc文件,如下图:cc文件存放在…

Hadoop(十三)HDFS DataNode

一、DataNode工作机制1、一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳 2、DataNode启动后向NameNode注册,通过后,周期性(6小时)的向NameNode上报所有的块信息 3、心跳是每3秒一…

Hadoop(十三)DataNode

一、DataNode工作机制1、一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳 2、DataNode启动后向NameNode注册,通过后,周期性(6小时)的向NameNode上报所有的块信息 3、心跳是每3秒一…

Hadoop(十二)NameNode 和 SecondaryNameNode

一、NN和2NN工作机制 1、NameNode中的元数据存储在哪里?存储在NameNode节点的磁盘中会导致效率过低,因为经常需要进行随机访问和响应客户请求;存储在内存中,一旦元数据丢失,整个集群就无法工作,也不合适。因此产生了在磁盘中备份元数据的FsImage。 引入Edits文件(只进行…

高效数据移动指南 | 如何快速实现数据库 MySQL 到 MongoDB 的数据同步?

本专题将基于实践经验,从常见需求入手,为大家介绍热门数据源与数据目标之间的数据同步(全量/增量)如何实现?了解如何快速搭建数据管道,实现数据的高效迁移与无缝同步。本文教程为:MySQL → MongoDB 的数据同步任务。在现代企业中,数据无处不在,贯穿于各个业务环节和系…

一文带你精通二项式反演!不服来看!

前言 原题:《二项式反演学习笔记》。 这里有我关于二项式反演的一些思考和领会,包含理论推导和在信息学竞赛中的应用。网络上的教程都太潦草了,难以深入理解。因此,这里将以详细的证明为主,介绍二项式反演在 OI 中的使用。 如果你只想快速浏览结论,可以点击这里查看结论。…

解决ZBLOG网站运行中出现JavaScript加载失败问题

当 Z-Blog 网站运行中出现“JavaScript 加载失败”的问题时,可能的原因有几个方面,包括但不限于插件冲突、HTTPS 配置问题、CDN 问题等。以下是针对这些问题的一些解决方案: 1. 插件冲突问题描述:某些插件可能与 Z-Blog 核心或其他插件存在冲突,导致 JavaScript 无法正常加…

zblog 404.php 怎么写,zblogphp主题错误之模板选择

在 Z-Blog PHP 中,如果你想要自定义 404 页面(即当用户访问不存在的页面时显示的页面),你可以创建一个 404.php 文件。下面是创建一个简单的 404 页面的基本步骤和示例代码: 创建 404.php 文件创建文件:在你的主题目录中创建一个名为 404.php 的文件。 添加基本 HTML 结构…

zblog上传安装主题插件不成功的原因和解决办法

当在 Z-Blog 中上传安装主题或插件不成功时,可能的原因有很多。下面列出了一些常见的原因及相应的解决办法: 1. 文件大小超出限制问题描述:上传的文件包可能超出了服务器允许的最大文件大小。 解决方法:检查后台的“全局设置”中的“允许上传文件的大小”,并适当增大这个值…

本地调试多服务

本地idea如果同一个服务,想开多个服务,只需要改下端口重新启动,配置如下 1、打开idea的Services (老版本的idea应该是Run bashboard) 2、如图所示的两个stockApplication就是相同的服务,不同的端口 3、点击其中一个StockApplication8082右击找到Copy Configuration 这样…

zblog显示Allowed memory size of 6553652 bytes exhauste

当 Z-Blog 显示 “Allowed memory size of 6553652 bytes exhausted” 错误时,这意味着 PHP 的内存限制已达到上限。这种错误通常发生在处理大量数据或执行复杂操作时。以下是解决此问题的一些常见步骤: 1. 增加 PHP 内存限制 方法一:修改 php.ini 文件定位 php.ini 文件找到…