问题标签 [structured-text]

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.

0 投票
1 回答
571 浏览

javascript - 如何将 TwinCat 3 HMI 中的 CSS 元素链接到参数

我在 twincat 的 HMI HTMLhost 中使用 了状态指示器Web 组件。

我创建了 HTMLhost 并将这些行添加到脚本中:

它看起来像这样: HTMLhost 中的状态指示器

我还在参数中创建了一个 BOOL 值,以将 PLC 的状态从激活更改为停用,如下所示:

用于更改状态的 BOOL 变量

问题是我不知道如何链接<status-indicator positive></status-indicator>到那个 BOOL 参数,所以它可以用来从 PLC 改变它的状态?

感谢您的帮助,在此先感谢。

0 投票
3 回答
360 浏览

plc - 如何将变量类型作为参数传递给 IEC61131-3 结构化文本 (TwinCAT3) 中的函数?

这就是我想要的(这是 FB 对象的构造函数):

  • typeOfVariable例如,在这种方法中,我将传递给参数REAL,该方法将创建REAL具有 size 的变量数组1
  • 我需要知道type我声明了什么,typeOfVariable以便它可以存储type另一个变量的数据。

  • 工作示例是__NEW()动态创建数组的方法。

  • 此方法接受一个参数,例如REALor INT

这是它的代码:

0 投票
2 回答
335 浏览

plc - 如何在 IEC61131-3 结构化文本(TwinCAT3)中每隔 N 秒调用一次函数?

我想在代码中做什么?

我想创建一个由 4 种方法组成的功能块:start, stop, run, calculate. Start方法将调用具有周期性调用方法run的循环的方法。只有当方法被调用时,方法内的 while 循环才会结束。whilecalculaterunstop

我已经尝试过的:

  1. 当我调用它时,object.start()我希望它开始一个循环,只要我不调用该stop方法。
  1. 循环将在run方法中。循环将包含一个以workingFlag变量为条件的 while 循环。while 循环何时workingFlagTrue不断触发一个计时器结构,该结构将每 0.1S 调用该calculate方法。
  1. 最后,该stop方法将设置workingFlagFalse,理论上它将结束run方法中的循环。

问题是什么?

  • 在我打电话后,object.start()我的整个 PC 崩溃了。因此......我认为我的代码出了点问题(:

我想用这个实现什么?

  • 该对象将是一个 PID 控制器。而且我希望主要在我希望它进行调节以及需要它关闭时program调用该方法。startstop
  • 直到今天,我都在手动调用calculate主程序中的方法timer,您可以在上面的方法中找到该run方法。
  • 我对这种方法的问题是,当我有更多的 PID(或我需要定期调用的其他函数)时,代码很快就会变得混乱。
  • 因此,我想创建一个具有本地功能timers并自行管理定期调用的功能块。

那么请任何建议如何解决这个问题?

0 投票
2 回答
329 浏览

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
0 投票
1 回答
308 浏览

plc - 如何在没有 PLC 的情况下运行 Twincat 程序?

我是 Twincat 的初学者,一直在玩它。我看了这个播放列表,这个人解释了结构化文本并在他的系统上成功运行了一个程序。但是,当我尝试在我的系统上运行时,我收到错误 0x1028。然后我读到我必须在 Twincat 中将并行端口配置为 IO 端口 - 不知道该怎么做。请帮忙!

0 投票
2 回答
179 浏览

java - 仅在从高到低时为真

我正在尝试一种通用的方法来编程只有当位从高到低时才为真(做一些逻辑)的东西。

编程语言无关紧要,但我更喜欢 JAVA 或结构化文本。

任何帮助,将不胜感激。

0 投票
1 回答
334 浏览

twincat - Twincat 3 使用 FB_MBReadRegs Modbus

当工厂 IO 发送/接收输入和保持寄存器时,我无法让 FB_MBReadinputs 在 Twincat 中工作。

首先,这是我目前从 Factory IO 处理 Modbus 的工作片段:

它在状态机中运行并愉快地生成字节,然后由 MBWriteCoils 再次写入。

但我无法工作的是 FB_MBReadRegs。在 MBReadInputs 和 MBReadRegs 之间,Beckhoff 的示例看起来几乎相同,我首先遇到 ADS 错误 1794 并将 VAR 更改为 DINT 和 WORD,但现在没有任何反应,而是出现错误。我期望 X、Y 和 Z 坐标到寄存器上的任何字节、位或整数,但绝对没有任何反应。

我已经尝试简化并找出问题所在,这是目前正在发生的事情:


据我所知,@kolyur 添加建议应该如何作为状态机的一部分。

显然现在我有一个新的尝试,如果 FB_MBReadRegs=bBusy THEN... 不起作用。“错误功能块 'FB_MBReadRegs' 必须实例化才能被访问”。所以这是明天要弄清楚的项目。

玩了一段时间后,我仍然没有完全掌握使用或不使用 %I*,但是 %M*(或 %MB0 和 %MB64)确实起到了作用。在https://forge.codesys.com/forge/talk/CODESYS-V2/thread/cc22cd1dc1/中找到了部分解决方案 无论如何,我误解了 MBReadRegs 的作用,因为 MBReadInputRegs 是从 Factorio 接收位置信息/任何内容时的位置.

下面显然是工作代码片段:


稍后再编辑:

bErr 1794 不会消失的新情况。

  • 由于某种原因,cbLength 不再喜欢 100,但必须读取其大小
  • 还要重启。如果我只是切断 PLC 电源开关的电源,就可以避免无用的故障排除。尽管逻辑上认为软件重启同样好,但无论如何硬重置内存问题都会好转。
0 投票
3 回答
341 浏览

twincat - Twincat 3:为数组位命名

整个PLC东西的初学者,所以欢迎指正。

我正在尝试整理我的项目,目前的情况是:我从 modbus 收到 16 字节数组。这些在 Factory IO 中充当按钮、灯、传送带。

因此,我没有用它的位“IO.GAB_FactoryIO_Inputs[0].0”来引用“开始按钮”,而是做了一个笨拙的转换 POU 和 GVL 来遍历每个位并给它们一个新名称。所以它目前看起来像这样的 200 行:

还有这个

这一切都按原样工作,但我不禁感到它的业余、笨拙和减慢速度。

我已经阅读了有关结构、枚举和别名的内容,并且认为结构将是我的救星,只需将它们轻松地安排在“机柜”内,如下所示:

隐藏在结构内部的是 stCNC Sensor1 = IO.GAB_FactoryIO_Inputs[9].4; 之间的转换。

但由于某种原因,这根本不起作用。我很可能会从错误的角度出发,但不知道接下来要寻找什么。


到目前为止,编辑工作正在进行中。好像我掌握了基础知识。@kolyur 有足够简单的示例可以遵循,所以我从那里开始,然后向 @Steve 和 @YAVA 示例前进:

0 投票
2 回答
283 浏览

plc - 如何在 TwinCat3 中保存整数变量的值?

我在 TwinCat 中有一个程序,其中每 10 秒更新 5 个整数变量以表示 5 个泵的状态。我想将这些正在生成的值保存到文本文件或 CSV 文件中,以便稍后从 PLC 中提取。下面的代码:

我希望创建一个新的 CSV 文件,然后用变量值填充。我对 TwinCat 非常缺乏经验,阅读 Beckhoff 网站也没有什么帮助。

0 投票
0 回答
29 浏览

structured-text - 如何在运行时获取可视化控件的宽度

我正在尝试在 HMI 上创建滚动文本。我生成了一个公式,根据控件的宽度检查(文本的长度,乘以像素/字符/字体大小)。如果文本的长度大于控件的宽度,我将滚动文本。我的代码如下

bScroll := ((wlen(g_ScrollText.wsTxt)*g_ScrollText.swFontSz]) > visCmd.Width);

如何在运行时从可视化命令按钮获取 .Width 参数?