首页 > 其他分享 >PLC结构化文本(ST)——泛型常量(Generic Constatnt)

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

时间:2024-09-18 14:38:00浏览次数:11  
标签:END 常量 Generic ST 泛型 FB PLC VAR MyString

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 CONSTANT
    maxlen : UDINT := 1;
END_VAR
VAR
    test : ARRAY[0..maxlen-1] OF BYTE;
END_VAR
PROGRAM PLC_PRG
VAR CONSTANT
    cconst: 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 CONSTANT
    maxlen1 : UDINT := 1;
    maxlen2 : UDINT := 2; 
    maxlen3 : UDINT := 3;   
END_VAR
VAR
    test1 : 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支持泛型常量,最后希望各个平台支持更多类型的泛型吧。

标签:END,常量,Generic,ST,泛型,FB,PLC,VAR,MyString
From: https://www.cnblogs.com/JSheng/p/18418443

相关文章

  • 一个cmakelist的例子(自动处理多个proto)
    背景:由于项目需要,把所有的proto文件放在了统一的文件夹中,为了方便更新以及加快编译速度,要把这个proto自动转成.cc.pb.h文件,再编译成so。为此,写了个cmakelist.txt。 主要功能:1)自动遍历指定目录下所有proto文件,调用ptotoc生成.cc文件,如下图:cc文件存放在上一级目录,目录结构类......
  • Sybase「退役」在即,某公共卫生机构如何实现 SAP Sybase 到 PostgreSQL 的持续、无缝数
    使用TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代OGG,Kettle等同步工具,以及基于Kafka的ETL解决方案,「CDC+流处理+数据集成」组合拳,加速仓内数据流转,帮助企业将真正具有业务价值的数据作用到实处,将“实时数仓”方法论落进现实。TapData持续迭代产品......
  • P11071 「QMSOI R1」 Distorted Fate
    介绍一种好想、在线、空间小、跑的还挺快的做法(?)先暂时不考虑修改,只考虑怎么快速求解询问。询问相当于区间内前缀按位或的和。根据按位或的性质,当区间内某个值在某一位下是\(1\),那么所有包含这个值的前缀的按位或结果在该位下都为\(1\)。考虑拆位,单独考虑每一位对答案的贡献,......
  • 为什么有些公司规定所有接口都用POST?揭秘背后的逻辑
    在API设计中,选择正确的HTTP方法对于确保接口的语义正确性、安全性和可维护性至关重要。你可能会遇到一些公司规定所有接口都使用POST方法,这种做法背后有着一系列的考虑。本文将探讨为什么有些公司会做出这样的规定,并分析其背后的逻辑。HTTP方法的语义在HTTP协议中,常见的方法有GET、......
  • @RequestMapping 和 @GetMapping等子注解的区别及其用法
    常用的请求映射注解介绍@GetMapping用于处理HTTPGET请求。等价于 @RequestMapping(method=RequestMethod.GET)。1@GetMapping("/path")2publicStringhandleGetRequest(){3return"GETrequesthandled";4}@PostMapping用于处理HTTPPOST请求。等价于 ......
  • 卸载工具 Ashampoo UnInstaller 下载及使用说明
    AshampooUnInstaller是一个小巧而强大的系统监视及完美清理工具软件中文名又称阿香婆卸载工具,主要以安全智能、专业高效、且删除彻底等特色亮点而著称。该版本已授权,可以使用全部功能。软件截图:使用说明:1、将压缩文件解压到固定位置,不要随意移动。2、解压后,双击start_Un......
  • 56.【C语言】字符函数和字符串函数(strtok函数)(未完)
    目录12.strtok函数(较复杂)*简单使用总结:*优化12.strtok函数(较复杂)*简单使用strtok:stringintotokenscplusplus的介绍点我跳转翻译:函数strtokchar*strtok(char*str,constchar*delimiters);总结:delimiters参数指向一个字符串,定义了用......
  • Docker拉取镜像报错:failed to register layer: exit status 22: unpigz: abort: zlib
    今天在甲方的服务器上升级Docker容器时拉取镜像报错failedtoregisterlayer:exitstatus22:unpigz:abort:zlibversionlessthan1.2.3,很纳闷明明在阿里云上测试的时候没有这个问题来着,遂开始查资料发现是pigz的bug,将其升级即可重写拉取镜像运行操作步骤:安装新版本c......
  • zblog显示Allowed memory size of 6553652 bytes exhauste
    当Z-Blog显示“Allowedmemorysizeof6553652bytesexhausted”错误时,这意味着PHP的内存限制已达到上限。这种错误通常发生在处理大量数据或执行复杂操作时。以下是解决此问题的一些常见步骤:1.增加PHP内存限制方法一:修改 php.ini 文件定位 php.ini 文件找......
  • gh-ost
    优质博文:IT-BLOG-CN一、gh-ost的作用gh-ost是由Github提供的OnlineDDL工具,使用binlog代替之前的触发器做异步增量数据同步,从而降低主库负载。基于触发器的OnlineDDL工具原理:【1】根据原表结构执行alter语句,新建一个更新表结构之后的表,称为幽灵表,对用户是透明的。【2......