问题标签 [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.
function - 我可以在 studio 5000 的结构化文本中声明用户定义的函数吗?
我习惯了python语法:
def function(par1, par2) 这里是函数体 返回结果
ST是否允许这样的用户定义功能?我正在使用工作室 5000。
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 地址和端口是正确的。此外,最后我不得不切换到我的实际网络适配器而不是“软件环回接口”
plc - 从电能表获取值到施耐德 PLC
我正在尝试从电能表中读取值,并将它们转换为 REAL(32 位浮点数)。在这种情况下,我正在读取第 1 相电压。每个值都通过两个寄存器读取。所以我收到了值17268 (MSW) 和2456 (LSW) 的 WORDS 将它们转换为 DWORD,然后在乘以 0.1 后转换为 REAL 值,但我没有得到我期望的答案。我应该得到245.0375伏。但是我得到 1.13E+08 请查看带有实时值的结构化文本的片段。 剪断
casting - 如何在结构化文本中将枚举转换为 uint
我有一个在 codesys 3.5 中运行的结构化文本程序,我想在其中将某些电机的模式设置为多个值。为了获得良好的封装代码,我定义了以下结构:
但是,一旦我尝试将此值分配给sint
驱动电机模式的适当变量(an),如下所示:
我得到错误:type PD4_modes cannot be cast to sint
。这是为什么?我以为我在结构中将模式定义为 uint ?因此不需要铸造,对吧?我也试图删除该属性strict
,但这并没有帮助......
plc - 是否可以向功能块添加静态参数?
是否可以编写带有一些静态参数化的功能块?具体来说,我可以制作一个具有静态容量的缓冲区,但是不同的实例可以有不同的容量吗?
理想情况下,我会想象一些常量参数,如下所示:
然后实例化将是这样的:
假设这是不可能的,那么为不同功能块实例管理不同存储大小的最佳方法是什么?
我将发布我最不坏的解决方法作为回答。
codesys - 如何使用 DataServer 在两个 CodeSys 控制器之间共享变量
我需要找到一个如何设置连接 2 个 Parker PAC320 控制器的 DataServer 的示例。
plc - 如何在 CoDeSys 2.3 中预览库的源代码
有没有办法在 CoDeSys 2.3 中预览导入库的源代码?当我检查库 *.lib 文件时,我可以看到它没有被编译也没有被混淆,但是在 CoDeSys 中没有进入它的选项。
我一直在浏览网页寻找答案,但找不到任何有意义的东西。
codesys - 如何在结构化文本中对变量进行分组?
如何在结构化文本中对变量进行分组?
假设我有n 个用于灯的全局变量:
然后我有一个按钮,按下它应该将所有变量设置为 TRUE:
如何以不必手动将每个变量设置为 TRUE 的方式对灯进行分组?
codesys - 关于 __POUNAME() 行为
我编写了一个自定义记录器,并希望添加 POU 的名称pszComponent
以便于调试。
我编写了一个自定义FB_init
,它接受 POU 的名称作为字符串作为输入,但遇到了令人费解的行为(至少对我而言)。
有人可以向我解释为什么以下编译
但以下
引发以下编译器错误?
是因为它__POUNAME()
的行为像一个功能块而不是我假设的功能吗?
这就是为什么
如果我将输入更改为字符串指针也可以吗?
编辑 1
我最初的FB_init
样子是这样的
因为我想用FB_logAdd(sCmpName:=__POUNAME())
(仍然抛出上述错误)初始化功能块
如果我使用FB_logAdd(sCmpName:=THIS^.___POUNAME())
,它会引发编译器错误
这是有道理的,因为__POUNAME()
它是一个运算符,实际上并不属于父功能块(我认为)