问题标签 [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 回答
51 浏览

function - 我可以在 studio 5000 的结构化文本中声明用户定义的函数吗?

我习惯了python语法:

def function(par1, par2) 这里是函数体 返回结果

ST是否允许这样的用户定义功能?我正在使用工作室 5000。

0 投票
2 回答
284 浏览

plc - 为什么我无法通过 Modbus 在我的 TwinCAT 3 项目中从 Factory IO 接收任何数据?

我已经设置了第一个工厂 IO 教程场景,只有一个输入和一个输出(线圈)。我已将出厂 IO 配置为使用具有以下设置的“Modbus TCP/IP 服务器”:

我运行模拟并将其置于一个输入(传感器)应该返回一个值的状态。

在我的 TwinCAT 项目中,我有以下内容:

宣言:

执行:

在 TwinCAT 中,我执行“激活配置”、“在运行模式下重新启动 TwinCAT”,登录,将程序下载到虚拟 PLC,然后点击开始。该程序似乎正在运行,但字节数组inputs显示全零。

我尝试切换到我的实际 IP 地址而不是家庭,我已将其从多个功能重构为仅一个“主”功能。我的代码错了吗?在 TwinCAT 或 Factory IO 中是否有一些我不知道的设置来允许它工作?

编辑:我已经在自己的回答中解释了问题的原因,那是因为我没有将 TCP/IP 插件安装到 TwinCAT。但是,将来可能会帮助某人知道当我检查“nErrId”字段时,我得到的值为“6”,根据文档,这意味着无法访问 Modbus 服务器。这就是导致我检查连接本身的原因,因为 IP 地址和端口是正确的。此外,最后我不得不切换到我的实际网络适配器而不是“软件环回接口”

0 投票
1 回答
53 浏览

plc - 从电能表获取值到施耐德 PLC

我正在尝试从电能表中读取值,并将它们转换为 REAL(32 位浮点数)。在这种情况下,我正在读取第 1 相电压。每个值都通过两个寄存器读取。所以我收到了值17268 (MSW) 和2456 (LSW) 的 WORDS 将它们转换为 DWORD,然后在乘以 0.1 后转换为 REAL 值,但我没有得到我期望的答案。我应该得到245.0375伏。但是我得到 1.13E+08 请查看带有实时值的结构化文本的片段。 剪断

0 投票
2 回答
340 浏览

casting - 如何在结构化文本中将枚举转换为 uint

我有一个在 codesys 3.5 中运行的结构化文本程序,我想在其中将某些电机的模式设置为多个值。为了获得良好的封装代码,我定义了以下结构:

但是,一旦我尝试将此值分配给sint驱动电机模式的适当变量(an),如下所示:

我得到错误:type PD4_modes cannot be cast to sint。这是为什么?我以为我在结构中将模式定义为 uint ?因此不需要铸造,对吧?我也试图删除该属性strict,但这并没有帮助......

0 投票
3 回答
294 浏览

oop - 如何在结构化文本的功能块中对成员变量使用访问说明符?(倍福,TwinCAT)

OOP 的一个重要部分是使用访问说明符使成员方法和变量无法从对象外部访问。
当声明一个功能块方法时很容易控制访问说明符,但是我还没有找到一种方法来控制对成员变量的访问。

有可能吗?如果可以,怎么做?

1

0 投票
3 回答
156 浏览

plc - 是否可以向功能块添加静态参数?

是否可以编写带有一些静态参数化的功能块?具体来说,我可以制作一个具有静态容量的缓冲区,但是不同的实例可以有不同的容量吗?

理想情况下,我会想象一些常量参数,如下所示:

然后实例化将是这样的:

假设这是不可能的,那么为不同功能块实例管理不同存储大小的最佳方法是什么?

我将发布我最不坏的解决方法作为回答。

0 投票
0 回答
32 浏览

codesys - 如何使用 DataServer 在两个 CodeSys 控制器之间共享变量

我需要找到一个如何设置连接 2 个 Parker PAC320 控制器的 DataServer 的示例。

0 投票
1 回答
66 浏览

plc - 如何在 CoDeSys 2.3 中预览库的源代码

有没有办法在 CoDeSys 2.3 中预览导入库的源代码?当我检查库 *.lib 文件时,我可以看到它没有被编译也没有被混淆,但是在 CoDeSys 中没有进入它的选项。

我一直在浏览网页寻找答案,但找不到任何有意义的东西。

0 投票
3 回答
58 浏览

codesys - 如何在结构化文本中对变量进行分组?

如何在结构化文本中对变量进行分组?
假设我有n 个用于灯的全局变量:

然后我有一个按钮,按下它应该将所有变量设置为 TRUE:

如何以不必手动将每个变量设置为 TRUE 的方式对灯进行分组?

0 投票
0 回答
66 浏览

codesys - 关于 __POUNAME() 行为

我编写了一个自定义记录器,并希望添加 POU 的名称pszComponent以便于调试。
我编写了一个自定义FB_init,它接受 POU 的名称作为字符串作为输入,但遇到了令人费解的行为(至少对我而言)。

有人可以向我解释为什么以下编译

但以下

引发以下编译器错误?


是因为它__POUNAME()的行为像一个功能块而不是我假设的功能吗?
这就是为什么

如果我将输入更改为字符串指针也可以吗?

编辑 1

我最初的FB_init样子是这样的

因为我想用FB_logAdd(sCmpName:=__POUNAME())(仍然抛出上述错误)初始化功能块

如果我使用FB_logAdd(sCmpName:=THIS^.___POUNAME()),它会引发编译器错误

这是有道理的,因为__POUNAME()它是一个运算符,实际上并不属于父功能块(我认为)