问题标签 [iec61131-3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arrays - 已排序的非顺序元素的查找表
我有一个元素数组。该数组按元素的 ID 排序,但 ID 是非连续的,例如 ID 编号之间存在间隙。
我今天使用二进制搜索来查找特定的 ID。
ID 为 3 个字节,提供了大约 1600 万种可能性。给定数组中的 ID 数量要少得多,可能是 10 000。
这是一个嵌入式/plc 平台,这意味着我不能有一个 16MB 的查找表,这会占用太多内存。我看过这样的位集,但我不确定这是否是正确的方法,或者如何计算数组偏移量。
我意识到这可能是一个艰难的问题,因为我想做旧的“内存速度”权衡,但我的内存非常少,可能只有 2MB 或更少的内存可用。但是硬件是固定的。
编辑:数组的元素对于给定的应用程序是固定的,没有插入或删除数组元素。
如何构建/预计算查找表或类似的表以加快查找 ID?
谢谢
plc - 比较 2 个字符数组并在 S7 1500 (PLC) 上找到匹配项
我目前正在使用 ST(SCL) 在 S7 1500 上进行小型编码练习,其中将 2 个数组 A(长度较大)和 B 相互比较并检查匹配元素。
然而,数组 B 由字母数字字符和特殊字符(分号)组成,例如:“12345;12346B;12347A”等,这与没有分号的数组 A 不同。我想实现分隔符或 EndSeparator 为 ';' 的拆分功能 将一堆数字分开并将拆分后的数字与数组 A 元素进行比较,以检查数组 A 中是否也存在 12345。
我使用 LOWER_BOUND 和 UPPER_BOUND 来限制数组,因为数组 A 的范围是未定义的。
我该怎么做?任何指针将不胜感激。:)
参考:
plc - DB_ANY 作为 Plc 数据类型
如何将 DB_ANY 转换为 plc 数据类型以获得对 DB 成员的符号访问?这是标准访问数据库。换句话说,我想间接访问特定类型的数据库并获得对数据库成员的符号访问。
enums - 如何在 Yaskawa MotionWorks IEC 3 中声明数据类型 ENUM?
我正在尝试在 MotionWorks 中添加我自己的枚举。创建新数据类型后,唯一可用的类型是 ARRAY、STRING、STRUCT。
编写以下代码:
不编译。Yaskawa 似乎遵守 ENUM (根据此列表),但我不知道如何声明它。
编辑:我可以执行以下操作:
但它似乎没有创建一个枚举,因为我无法访问它的价值。我可以像访问结构一样访问它。
编辑2:
如果我声明:
并设置变量
然后在我尝试使用的代码中:
它编译,但不会运行。
尝试使用此代码将无法编译:
twincat - 如果 VAR_INPUT 是 INTERFACE 类型,值是按引用传递还是按值传递?
在 TwinCAT 和 CodeSys IEC-61131 编程环境中,可以VAR_INPUT
使用 anINTERFACE
作为类型规范来声明 POU。我相信 TwinCAT 和 CoDeSys 中对接口的支持是对标准 IEC-61131 语言定义的扩展。
问题1:调用POU时,interfaceVAR_INPUT
是否有pass-by-value(即输入FB的状态在每次执行被调用的FB时复制)或pass-by-reference语义?
问题 2:此行为在哪里指定或记录在案?
plc - 如何为电机中的控制器状态创建时序?
定时可用于在触发或关闭同一电机时产生延迟,或在不同电机之间产生打开或关闭延迟。这是一项用于保护电机的功能,可避免以非常短的间隔驱动。在警报情况下,电机会自动禁用(随着时间的推移优先)以避免进一步损坏。
通过创建一个子例程来读取机器的状态来启动我的代码,这将告诉我它是打开还是关闭。然后创建一个读取处于警报状态的机器的子程序,然后我检查了机器是否处于警报状态。在这段代码下面,我创建了一个驱动电机的例程,然后创建一个例程来触发必须连接电机上的输出,我用一个 else 完成了我的代码,它关闭了电机。
我还没有测试代码。但是我一般用CFC来测试。
python - 是否有使用 OPA UA 传输数据的 IEC 61131 / IEC 61499 PLC 功能块?
我有一个 Python (TensorFlow + Gekko) 中的机器学习和高级控制应用程序,我需要将它与提供数据采集和最终元素控制的可编程逻辑控制器 (PLC) 集成。我可以使用机架式 Linux(首选)或 Windows Server 作为计算引擎,通过 OPC-UA(用于过程控制的 OLE - 通用架构)进行数据传输吗?
有一个Python OPC-UA / IEC 62541 客户端(和服务器)和一个Python MODBUS 包,我在连接到艾默生 DeltaV、霍尼韦尔 Experion/TDC3000 和横河 DCS 等分布式控制系统 (DCS) 时在其他项目中使用过. 我可以对诸如 Siemens Simatic S7-300 等 PLC 功能块做同样的事情吗?西门子拥有支持 TensorFlow 的较新 PLC,例如 SIMATIC S7-1500 NPU(神经处理单元)模块,但出于多种原因需要外部服务器。S7-300 支持 IEC 61131 标准和 PROFINET CBA 标准(西门子的 IEC 61499 标准)。
下面是我想用来与功能块通信的最小功能块。
iec61131-3 - IEC 61131-3 编程中的 SFC 步骤
所以我有一个问题,在我的 SFC 中它跳转到一个初始步骤,但在该步骤中写入的命令不会注册。
在 SFC 结束时,步将 5 输入到 A_Status(INT)。下一个转换检查 A_Status 的值是否为 5。到目前为止没有问题,但是在转换后跳转到 SFC 的开头,其中第一步应该将 0 输入到 A_Status 中,A_Status 保持在 5。
我的程序的循环时间是 100 毫秒。我曾尝试减慢周期,但没有奏效。这里似乎有什么问题?也许在这样的序列中使用的相同变量不起作用?
将不胜感激。
plc - 是否可以在结构化文本中间接索引数组(IEC 61131-3 标准)
我有一个结构数组: myStructure[0..100]
我想按名称索引该结构。
它通过给每个索引一个名称来工作:
所以在结构中索引一个成员:(myStructure[P103_AI].value
即索引myStructure[11].value)
但是,是否可以间接索引?
即如果不关心TempString : STRING[30];
在运行时更改 TempString 以索引数组。
这是一些伪代码来描述我想做的事情:
plc - 在结构化文本中清除整个结构的最佳方法是什么
这就是我现在的样子
是否有另一种方法可以使结构无效,而无需清除和使用struct_NULL