问题标签 [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.
plc - 在 Codesys 中,如何定义预处理器参数?
我需要创建一定数量的结构 类型对,它们将进一步用作const参数,并且具有基本相同的一组值,但按比例缩放,如下所示(给定一个 n常数):
以及相关对:
通过分别创建这两个结构,它工作得很好,我使用它们来创建一个CONST数组以在SWITCH...CASE语句中使用 - 正如我们所熟知的那样,它只在其索引处接受常量,而不是变量。
然而,在一个结构中所做的每一项更改都必须在另一个结构中重构,这在“最佳实践”设计方面确实不是一种安全的方法。
我现在面临的问题是,如果我在全局变量列表 (GVL) 中创建CONST值,它在编译时间线中没有优先级,我的意思是,首先评估结构。
另一种选择是使用Pragmas,但它仅在特定范围内有效,这意味着它不会充当“全局参数”。
我只是想在编译之前定义上面的每个参数,这样我就可以定义一次,将一个除以 2。
plc - 在结构化文本中:是否可以在循环代码中用单行写入多维数组?
以下工作正常:
但是,如果我想在一行代码中修改所有值怎么办?
即以下是我想做的伪代码。(注意,它实际上不起作用)
plc - 如何将变量类型作为参数传递给 IEC61131-3 结构化文本 (TwinCAT3) 中的函数?
这就是我想要的(这是 FB 对象的构造函数):
typeOfVariable
例如,在这种方法中,我将传递给参数REAL
,该方法将创建REAL
具有 size 的变量数组1
。- 我需要知道
type
我声明了什么,typeOfVariable
以便它可以存储type
另一个变量的数据。
工作示例是
__NEW()
动态创建数组的方法。此方法接受一个参数,例如
REAL
orINT
。
这是它的代码:
plc - 如何在 IEC61131-3 结构化文本(TwinCAT3)中每隔 N 秒调用一次函数?
我想在代码中做什么?
我想创建一个由 4 种方法组成的功能块:start
, stop
, run
, calculate
. Start
方法将调用具有周期性调用方法run
的循环的方法。只有当方法被调用时,方法内的 while 循环才会结束。while
calculate
run
stop
我已经尝试过的:
- 当我调用它时,
object.start()
我希望它开始一个循环,只要我不调用该stop
方法。
- 循环将在
run
方法中。循环将包含一个以workingFlag
变量为条件的 while 循环。while 循环何时workingFlag
会True
不断触发一个计时器结构,该结构将每 0.1S 调用该calculate
方法。
- 最后,该
stop
方法将设置workingFlag
为False
,理论上它将结束run
方法中的循环。
问题是什么?
- 在我打电话后,
object.start()
我的整个 PC 崩溃了。因此......我认为我的代码出了点问题(:
我想用这个实现什么?
- 该对象将是一个 PID 控制器。而且我希望主要在我希望它进行调节以及需要它关闭时
program
调用该方法。start
stop
- 直到今天,我都在手动调用
calculate
主程序中的方法timer
,您可以在上面的方法中找到该run
方法。 - 我对这种方法的问题是,当我有更多的 PID(或我需要定期调用的其他函数)时,代码很快就会变得混乱。
- 因此,我想创建一个具有本地功能
timers
并自行管理定期调用的功能块。
那么请任何建议如何解决这个问题?
plc - 为什么我不能将输出变量作为参数传递给 IEC61131-3 结构化文本 (TwinCAT3) 中的功能块构造函数?
我有一个功能块A
,它有一个变量output
(在FUNCTION_BLOCK A
方法中定义)和这个FB_init
方法:
当我按如下方式调用此构造函数时:
- 我收到语法错误:
Identifier 'output' not defined
. 但是我确实在构造函数方法中定义了这个参数。 - 当我尝试编译项目时,出现另一个错误:
No matching FB_init method found for instantiation of A
- 有谁知道问题出在哪里?以及如何将变量作为输出参数传递给功能块?
- 我想基本上将FB 构造函数中
localoutput
的变量output
(的 FB )链接起来。A
twincat - 如何确定在给定持续时间内事件的最大第 n 次发生?
怎么判断一个事件的第n个事件的时间间隔不超过一定时间呢?例如,一个事件最多可以发生 5 times
every 10 minutes
.
在 STL 中我们可以使用这个
这种方法似乎不是实现期望的最佳方法。还有另一种最佳方法吗?
任何帮助,将不胜感激。
twincat - 如何在 TwinCAT 中热启动一个方法?
基于 Beckoff站点定义的方法的特点之一是:
方法的所有数据都是临时的,并且仅在方法执行时有效(堆栈变量)。这意味着 TwinCAT 会在每次调用方法时重新初始化您在方法中声明的所有变量和功能块。
有没有办法在 plc 循环中使用方法作为warm start!
这意味着我们在没有重新初始化的情况下使用该方法,并且方法声明变体在我们第一次调用它时只运行一次,其余时间被称为变量保留它们自己的值?
plc - Twincat3驱动开发硕士论文
如果那里有任何 PLC 程序员或 Twincat3 用户。我想在一家公司写关于 Twincat3 的硕士论文。基本上,他们有不同种类的测试台,他们希望有人为他们开发驱动程序。我没有使用 PLC 或 C++ 或 IEC61131 语言的经验。是否有可能在 3 个月内学会这些,然后开始写论文?在开始之前我有三个月的实习时间。我有点怀疑。尽管作为一名电气工程专业的学生,这令人生畏,但我别无选择。我提前谢谢你。此外,测试台主要是电力电子或电机测试台。我相信我需要在 twincat3 中自动化测试过程。此致
labview - Twincat3:无法通过 Tc2_ModbusSrv 库(在虚拟 PLC 上)连接到 LabVIEW 的 Modbus TCP/IP 服务器
我正在尝试Hello World
使用 Twincat3 和虚拟 PLC(在我的计算机上本地运行的 PLC)创建一个简单的 Modbus TCP/IP 程序。
- 我已经设置了一个 LabVIEW Modbus TCP/IP 主 + 从程序(两者都在工作,请参见下面的屏幕截图)。
- 我可以在LabVIEW的主程序和从程序之间发送数据。并且还从 Python 脚本中读取数据(所以我确定它们都在工作)。
- 现在我尝试使用Beckhoff 示例创建一个 Twincat3 程序来设置一些寄存器。
我试过的:
- 我尝试将
ipAddr
参数更改为:'localhost', '192.168.88.1', '192.168.88.126'
- 我也尝试过
nUnitID
设置:(0, 1, 16#FF
由16#FF
Beckhoff 文档指定)
这是我的倍福代码:
为了使这个示例工作,我应该在我的代码中进行哪些更改?
关于LabVIEW程序的信息:
- 我正在使用 Modbus TCP 主/从示例
- IP 地址设置为
'localhost'
,端口设置为502
(应该与我的 Beckhoff 代码中的 IP 地址匹配) - 我 100% 确定它可以工作,因为我也尝试过通过 Python 脚本连接到这个程序。
我的 LabVIEW 程序的图片:
编辑
virtual PLC
我的意思是这个目标PLC :
plc - 是否可以向功能块添加静态参数?
是否可以编写带有一些静态参数化的功能块?具体来说,我可以制作一个具有静态容量的缓冲区,但是不同的实例可以有不同的容量吗?
理想情况下,我会想象一些常量参数,如下所示:
然后实例化将是这样的:
假设这是不可能的,那么为不同功能块实例管理不同存储大小的最佳方法是什么?
我将发布我最不坏的解决方法作为回答。