问题标签 [codesys]
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 2.3 - wago 750-842 - I/O
我需要你的帮助来解决我面临的一个“奇怪”问题。
Mywago 750-842
不写入数字输出,也不读取数字输入。
您可以在下面找到我非常简单的程序以及硬件配置。
总而言之,我有一个 8 通道 DO 模块、一个 8 通道 DI 模块和一个 2 通道 AI 模块。
我正在使用 Codesys 2.3.9.62。据我所知,750-842 与 Codesys v3 不兼容。
我正确收到了 2 AI,但我在程序中的 DI 总是错误的,无论真实的 DI 状态如何。
DO 也总是错误的,即使我激活了程序的输出。
我觉得我错过了一些非常简单的配置步骤或类似的东西。
我还想指出:
- 硬件正常工作,因为所有 I/O 都按预期响应 modbus 请求
- 程序是正确的,因为在模拟模式下一切都按预期工作
您能否就如何正确读取输入和写入输出以使硬件表现得像预期的那样给我建议?
plc - 为什么我在完成所有数学运算后会收到累加器扩展警告?
我正在编写一个程序来检查混合混凝土所需材料的温度。然后它将执行一个公式来确定达到所需混凝土温度所需的水温。我有公式的所有正确信息,所以这不是问题,但是当我编译程序时,我收到多个累加器扩展警告,每个都在数学语句之后。我尝试拆分数学,认为运行数字变得太大,但事实并非如此,因为它仍然有这个警告。当我运行程序时,如果我期望得到 80 度范围内的结果,我会得到疯狂的大正面或负面结果。第一个等式适用于寒冷天气条件,第二个等式适用于炎热条件。在我添加热方程之前,冷方程运行良好。
所以我的问题是:什么是累加器扩展,为什么我在数学之后会收到一个警告?
这是我的代码:
plc - 在 Codesys 中,如何定义预处理器参数?
我需要创建一定数量的结构 类型对,它们将进一步用作const参数,并且具有基本相同的一组值,但按比例缩放,如下所示(给定一个 n常数):
以及相关对:
通过分别创建这两个结构,它工作得很好,我使用它们来创建一个CONST数组以在SWITCH...CASE语句中使用 - 正如我们所熟知的那样,它只在其索引处接受常量,而不是变量。
然而,在一个结构中所做的每一项更改都必须在另一个结构中重构,这在“最佳实践”设计方面确实不是一种安全的方法。
我现在面临的问题是,如果我在全局变量列表 (GVL) 中创建CONST值,它在编译时间线中没有优先级,我的意思是,首先评估结构。
另一种选择是使用Pragmas,但它仅在特定范围内有效,这意味着它不会充当“全局参数”。
我只是想在编译之前定义上面的每个参数,这样我就可以定义一次,将一个除以 2。
struct - Codesys 将元素添加到派生结构
是否可以将元素添加到 struct.
StructDerived 的元素将在“枚举”函数中编号。完成后,StructDerived 元素用于 case 语句。
这个想法是准备一个完整的抽象函数,并准备好我需要的基本功能。当这个功能被扩展时,应该清楚在哪里添加什么。因此,例如机器中的所有单元都具有相同的布局。
我正在研究的是这样的:
记录“名称”以进行状态跟踪。看起来像列表或字典之类的东西会做很多工作。
感谢您对此事的任何建议。
raspberry-pi - How do I use system time as a trigger in codesys ladder?
Programming a raspberry pi with codesys, using mostly ladder, basically I need to write all data that is currently in a couple arrays to a csv file at midnight, so i'd like to be able to use a dt value as a trigger. I can't figure out how to use that value in ladder, however. I can display the local time on visualizer, but if i wanted something like "if localTime=#value" then coil 'Write' turns on, where is the actual variable for system time?
codesys - 有没有人要分享 Codesys SysLibFile.lib 文件?
我正在尝试将 PLC 变量的值保存在 CSV 文件中。我看到了一个使用 SysLibFile 库的示例,但我在任何地方都找不到它。有人要分享 SysLibFile.lib 文件吗?
plc - 仅 49 天后,我应该如何处理 Codesys SYS_TIME 溢出?
ABB PLC/codesys 编程中的SYS_TIME函数返回一个 DWORD,表示自 PLC 开启以来的毫秒数。(或者可能是硬重置/其他事件?找不到这方面的文档。)
Codesys 中 DWORD 的最大大小为 2 32 -1 = 4,294,967,295。
这意味着SYS_TIME 仅在 49.7 天后溢出!
任何人都可以确切地确认 SYS_TIME 函数在 49.7 天后返回的内容吗?它是否整数溢出并再次从零开始计数?
这对于将 SYS_TIME 用于诸如警告某些事件发生多长时间之类的功能具有重要的影响。(例如,通过 modbus 读取远程设备)。
假设它只是一个整数溢出并且 SYS_TIME 重置为零,那么程序员可以通过重置他们用来记录最后已知事件时间的变量来处理这个问题:
我希望有一些我错过的东西可以提供另一种方法。
然而 - 这是一个 GOTCHA,它可能会绊倒一个没有想到这一点的 PLC 程序员,导致一个明显功能齐全的 PLC 程序在现场使用 49 天后经过广泛测试而失败。
如果有一个返回 LWORD 的 SYS_TIME 替代方案,这将非常有帮助,这对 50 亿年的不间断服务有好处:-)
注意 - 我相信这个功能可能特定于 ABB AC500 系列 PLC,而不是标准的 Codesys 功能,所以这个问题主要针对 ABB 和 ABB PLC 程序员。
initialization - 使用明确定义了 FB_init 方法的 __NEW 初始化功能块
假设我有一个定义了 FB_init 方法的功能块 (A),例如:
我还有另一个功能块 (B),我想从中动态初始化这个 (A) FB:
我无法动态创建 A 功能块的实例。这甚至可能,还是我做错了什么?
PS。我正在使用施耐德 SoMachine V4.3
exception - 在 CODESYS 中抛出异常
我如何抛出标准系统异常(如果可能,创建自定义异常并抛出它们)。
想到的最简单的事情就是将变量除以零,但这充其量只是一种技巧。
AppGenerateException
我确实在库中找到了一个函数的提及CmpApp
,但我找不到它的任何文档,也找不到任何示例。任何人都可以为我指出一些文档吗?
csv - 在 CODESYS 中将数组导出为 CSV
我正在用另一个人的代码接管一个项目。我有一个 PLC,目前有来自压力传感器和热电偶的输入。然后它将这些数据缩放为 PSI 和华氏温度。从这些传感器中的每一个设置数据的方式将被格式化为一个数组。因此,一旦数据被缩放,它就位于一个数组中,该数组也在程序的网络变量列表中。我试图从数组中获取这些值中的每一个,每隔一定时间记录一次值(为了清楚起见,每秒记录 1 次),然后每秒将每条数据导出到 CSV 文件。甚至不知道该去哪里。这是我留下的代码,但我觉得它似乎不必要地复杂?
我不知道该去哪里使用此代码。它确实创建了一个 CSV 文件,但我希望能够每秒为一段数据创建一个 CSV 文件?如果有人有任何想法或资源,我可以检查一下,那就太好了。