问题标签 [pfc200]

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

plc - 指针表

我正在使用 Wago PLC - PFC200 - 用于家庭自动化。我已经做了大部分的事情,比如灯光或百叶窗自动化。最近我决定做一些重构,我开始认为这样的 PLC 不是带有垃圾收集器的 PC,它可能是有益的,而不是在表中将 POU 传递给那些 POU 的指针。

我从这样的事情开始:

宣言:

Relay我的 POU(程序组织单元 - 就像一个班级)在哪里。

初始化:

POU方法中的用法:

但我可能有益于为变量节省一些内存并采用这种方法:

宣言:

初始化:

POU方法中的用法:

这有意义吗?我家里有 15 个房间,大多数房间都有不止一盏灯(所以有更多的Relay物体)。不多,但是,PLC不是PC,有一些内存限制。

0 投票
1 回答
303 浏览

plc - VAR RETAIN PERSISTENT 的使用

我在我的家庭自动化项目中使用 WAGO PLC PFC200。我有很多 POU,每个房间都有。每个房间都实现了 IRoom 接口,并使用基本 POU 进行通用逻辑,例如关闭所有灯。对于灯光管理,我正在使用

  • FbEvaluateShortLongPressfromWagoAppBuilding处理墙上按钮的短按和长按(它也可以是 OSCAT 库中的功能块)
  • FbLatchingRelayWagoAppBuilding作为 PLC 数字输出的切换开关

我想保存状态FbLatchingRelay以防例如:断电。我希望在电源恢复时打开所有在掉电之前关闭的灯。

我已经通过在我的 POU 中声明一个区域FbLatchingRelay来解决它。VAR RETAIN PERSISTENT但是在读到这里之后:

如果将功能块中的局部变量声明为 RETAIN,CODESYS 会将该功能块的完整实例存储在 Retain 范围内(功能块的所有数据);但是,只有声明的 RETAIN 变量会被这样处理。

我决定更改它,以免浪费 RETAIN 内存用于 POU 中但不需要存储为 RETAIN 的一堆变量。

所以现在我有这样的东西:

  • VAR RETAIN PERSISTENT 区域仅在我的主程序中声明
  • 它只为每个房间(每个 POU)存储所需数据的结构 - FbLatchingRelay POU 和一些其他变量
  • 在初始化房间(POU)时,我使用 VAR_IN_OUT 将这些结构传递到我的房间
  • 每个房间(POU)都使用这个数据

PLC_PRG:

浴室POU:

这是一个好方法吗?你怎么看?它使项目有点复杂,但我不会为不应该存在的东西(整个 POU)浪费 RETAIN 内存。

0 投票
1 回答
196 浏览

plc - 整个功能块真的存储在 RETAIN 内存中吗?

在 CodeSys手册中,我们可以读到:

"如果将功能块中的局部变量声明为 RETAIN,CODESYS 会将这个功能块的完整实例存储在 Retain 范围内(功能块的所有数据);但是,只有声明的 RETAIN 变量会被这样处理。 "

但是真的有人测试过吗?我创建了一个只有以下变量的功能块:

我的程序只实现了这个功能块的一个实例。在运行时使用SIZEOF显示功能块大小为 312 字节

现在,如果我右键单击设备,然后转到“设备内存信息”,我的保留数据的大小只有 203 字节。

如果功能块的完整实例存储在保留范围中,我希望保留数据大小与功能块大小(312 字节)相同,但事实并非如此,它只有 203 字节(大小保留数据)。说明书有误吗?

0 投票
0 回答
31 浏览

plc - OSCAT BUILDING 功能块 BLIND_NIGHT 似乎不起作用

我有 BLIND_NIGHT 的问题。这个功能块在我的情况下似乎不起作用。日落来临时我已经连接到 PLC 并且什么也没发生 我的代码如下所示:

这是代码:

我还遇到了一个问题,即断电后百叶窗会自动升起——我不希望这就是为什么我引入了 xInit 全局变量,该变量默认为假,在第一个 PLC 循环后设置为真。由于 PLC 的重新启动并没有将百叶窗向上移动。我正在使用 IN := FALSE for BLIND_INPUT 测试整个代码,但它也没有帮助,BLIND_NIGHT 不起作用。

您在这里看到任何明显的问题吗?

0 投票
1 回答
97 浏览

plc - 铸造功能块

我正在使用 Wago PFC200 进行家庭自动化。我得到了基本功能块:

FUNCTION_BLOCK ABSTRACT Room

和两个接口:

我房间的实例如下所示:

FUNCTION_BLOCK Garage EXTENDS Room IMPLEMENTS ILights, IBlinds

在我的 PLC_PRG 中,我有我房间的所有实例:

在 PLC_PRG 下,我有一些方法,例如:自动化 blids:

但是我在 _rooms 数组中遇到了以下编译错误:C0032: Cannot convert type 'POINTER TO Garage' to type 'POINTER TO IBlinds'

我的功能块实际上实现了 IBlinds。有没有办法投射功能块?