在MetaFacture中，在线模式可更改PLC中的变量值。在这里，我们区分强制和写入预先准备好的值。

写入是通过***写入值***命令 ***(\[ Ctrl \] +\[ F7 \] )***完成的，并一次将变量设置为准备好的值。这样该值就可以在任何时候被程序再次覆盖。

强制执行是通过***强制值***命令(***\[ F7 \]*** )完成的，并永久地设置准备好的值。有关更多信息，请参见下文：

在不同的地方可以准备一个值来强制或写入:

- 声明部分：***准备值***字段
- FBD/LD/IL编辑器的实现部分：内联监测字段
- 查看视图：***准备值***字段

有关这方面的说明，请参见下文。如果您想为已经强制的值再次准备一个值，则会打开***准备值***对话框，其中包含处理当前强制值的选项。

---

### 强制的功能性​

在任务循环的开始和结束(对于其他任务类型，则为处理循环)时，将准备好的值设置为相应的变量。

任务在每个周期的处理顺序如下：

1.读取输入

2.强制：在第一次程序调用之前，runtime系统将所有准备好的值写入变量，而不管它们是否被任务使用。

3.处理IEC代码

4.强制：在最后一次程序调用之后，runtime系统将所有准备好的值写入变量，而不管任务是否使用它们。

5.写入输出

注意: 在处理代码时，强制变量可能会在循环中临时获得不同的值，因为IEC代码执行了一个赋值。然后变量只在循环结束时才再次接收强制值。变量值也可以被客户机在中期对应用程序符号的写访问所覆盖。这种情况请参见设备对象***属性***中的与***IEC任务同步访问变量***选项，或符号配置中的***配置与IEC任务的同步***设置。这样PLC处理器支持的客户端写访问的同步可以与任务周期一起启用。

**提示！**

强制值用符号![](https://resource.helplook.net/docker_production/3648ne/article/AENnBbqR/672212531ff4a.png)标记。MetaFacture执行强制，直到用户通过以下操作之一显式地解除它：

- 执行***取消对所有值的强制***命令
- 在***准备值***对话框中解除强制操作
- 注销应用程序  
    如果在注销时强制变量仍然存在，那么将打开一个对话框，提示是否应该取消对所有变量的强制。如果您通过点击否进行响应，那么强制值将在下一次登录时再次应用。

---

### 强制声明部分​

要求：您的应用程序包含一个带有声明的POU。该应用程序处于在线模式。

  
1.选择命令***工程 ➔ 编辑对象***在编辑器中打开POU。

2.在编辑器的声明部分中，双击列（1）变量的***准备值***。  
⇒可以编辑该字段并输入值。当它是一个布尔值时，您可以通过点击该字段来更改该值。

![](https://resource.helplook.net/docker_production/3648ne/article/AENnBbqR/672212a1473fb.png)

3.对其他变量执行步骤2。

4.点击调试 ➔ 强制值。  
⇒变量值将被准备值覆盖。值用![](https://resource.helplook.net/docker_production/3648ne/article/AENnBbqR/672212bdbb7f5.png)符号标记。

![](https://resource.helplook.net/docker_production/3648ne/article/AENnBbqR/672212cae1f05.png)

---

### 强制执行部分​

要求：应用程序处于在线模式。

  
1.选择命令***工程 ➔ 编辑对象***在编辑器中打开POU。

2.在编辑器的实现部分中，双击内联监视字段（1）。  
⇒***准备值***对话框打开。

3.在字段中输入新值为***下一次写入或强制操作准备新值***。  
⇒准备值出现在在线监视字段中。

![](https://resource.helplook.net/docker_production/3648ne/article/AENnBbqR/6722130e6d34c.png)

4.点击***调试 ➔ 强制值。***⇒变量的值将被准备好的值覆盖。值用![](https://resource.helplook.net/docker_production/3648ne/article/AENnBbqR/6722132d50ea1.png)符号标记。

![](https://resource.helplook.net/docker_production/3648ne/article/AENnBbqR/67221339bd52e.png)

---

### 一个列表查看和编辑所有强制变量​

要求：该应用程序处于在线模式。多个变量强制。

  
1.点击***视图 ➔ 监视 ➔ 监视全部强制***。  
⇒监视全部强制视图打开。它以监视列表的形式包含应用程序的当前所有强制变量。

2.选择列表中的所有行，然后在视图左上角列表框的下拉列表中点击***强制 ➔ 取消强制并保留所有选定值***。  
⇒这些变量是非强制性的，它们将获得强制之前的值。

---

### 强制CFC中的功能块输入​

要求：应用程序的CFC POU包含功能块，并且该应用程序处于离线模式。

   
**提示！**

这种强制在内部使用数据断点，因此与使用***强制值***命令或***\[ F7 \]*** 强制不同。

由命令***强制FB输入***的值不响应命令***显示所有强制***或***取消强制值***。

  
1.双击树中的对象，打开CFC POU的编辑器。

2.使能所需功能块的可强制性。选择CFC中的POU元素，然后点击***CFC ➔ 准备POU元素进行强制***。

3.登录到目标设备上的应用程序。在CFC中，选择POU的输入，然后在上下文菜单中点击***强制FB 输入***。  
⇒***强制值***对话框打开。

4.为输入设置一个新值。一个TON POU的例子: 对于布尔输入IN为FALSE，或对于PT输入(时间)为t#4s。点击***确定***已确认。  
⇒设置值立即被强制。POU元素的左上方显示一个绿色圆圈，该元素中输入的名称以绿色突出显示。对于布尔值，在输入处会打开一个带有该值的小型监视视图。在监视视图中，例如在声明部分中，在值列中显示强制值。

5.要删除强制值，请再次点击***强制FB输入***。在***强制值***对话框中，选择***删除值***选项。  
⇒强制被取消。输入从控制器获取当前值。