codesys - 带参数的用户定义函数
问题描述
在 codesys 中,一些函数支持在其他语言中通常称为“params”的函数,即可以采用不同数量的类似类型变量的函数。例如ADD运算符(梯形图功能)。
我的问题是,是否有任何方法可以在用户定义的函数中做同样的事情?
到目前为止,我唯一的想法是ARRAY [*] OF SOMETHING
使用LOWER_BOUND
并UPPER_BOUND
进行计算。这确实有效,但需要用户在每次想要调用我的函数时创建一个额外的数组变量。例如,我们有CONCAT
连接 2 个字符串的函数。假设我想要一个CONCAT_ALL
接受n 个字符串并将它们全部连接起来的函数:
STRS: ARRAY [0..9] OF STRING := [STR1, STR2, STR3, STR4, STR5, STR6, STR7, STR8, STR9, STR10];
// This works, but I want to avoid creating an array variable!
CONALL1: STRING := CONCAT_ALL(STRINGS := STRS);
// This doesn't work!
CONALL2: STRING := CONCAT_ALL(STRINGS := [STR1, STR2, STR3, STR4, STR5, STR6, STR7, STR8, STR9, STR10]);
(编辑:有人问我,我使用的是 Schneider Electric Machine Expert 1.2 或 CODESYS 编译器 3.5.12.80)
解决方案
未来有希望!
在 Codesys V3.5 SP16 中,似乎终于可以使用带有可选参数的函数和方法。当然,这将出现在非 codesys 产品中,例如 TwinCAT 和 Schneider,在以后的版本中。
这意味着您最终可以创建一个包含 100 个参数的 CONCAT,并使用例如 3 来调用它!惊人的。
https://www.codesys.com/fileadmin/data/Images/Download/features-and-improvements-V35SP16-en.pdf
推荐阅读
- c# - 如果 cnic 存在于 tbl_2 中,我已将 cnic 从 tbl_1 复制到 tbl_2 并将密码存储在 tbl_2 中。但密码没有存储在 tbl_2
- node.js - Alexa handlerInput.requestEnvelope.context.Viewport 未定义
- r - 如何计算r中的比例?
- c++ - 我们应该在子进程中使用退出还是返回
- dart - RxDart - Void 类型的 BehaviorSubject/Observable
- node.js - firebase-admin (nodejs) 无法验证身份验证令牌 (JWT)
- graphql - 如何在 django-graphene 中改变手机号码?
- pandas - 使标签后的所有值都具有该标签的相同值
- visual-studio-code - vscodevim中是否有进入插入模式/普通模式或其他模式的命令?
- php - Slim Framework 4 中的 Doctrine CLI