配置设备
您可以在相关设备编辑器中配置插入设备树的设备对象。可能性取决于设备描述。通用设备编辑器 "提供的选项卡可根据需要由特定设备选项卡进行补充。
要求:您打开了一个标准项目,在其设备树中插入了一个标准 PLC 和一个现场总线设备对象。
-
双击项目设备树中标准 PLC 的设备对象。
在 CODESYS 主窗口中打开“<设备名称>”编辑器。“通讯设置”选项卡位于前景中。切换到其他选项卡,对控制器进行配置设置。请参阅通用设备编辑器的帮助页面。
-
双击项目设备树中的现场总线设备对象。
在 CODESYS 主窗口中打开“<现场总线设备名称>”编辑器。具体选项卡视设备而定。有关配置选项,请参阅相应设备编辑器的帮助页面。如果在“工具 选项”,“设备编辑器”类别中选择了“显示通用设备配置视图”选项,则还可查看通用设备编辑器提供的选项卡。
另见
有关 I/O 映射的通用信息
能否将 I/O 映射配置到项目变量甚至整个功能块取决于设备类型。配置 I/O 映射意味着将设备的输入和输出通道与项目变量连接起来。我们还使用"映射 "一词来表示 。
设备的输入和输出与CODESYS 中变量的映射一般应注意以下几点:
-
对于映射到输入的变量,您没有写入权限。
-
您可以将现有变量映射到一个输入。
-
您可以直接在 I/O 映射中生成新的全局隐式变量,并将其映射到设备通道。
-
结构的内存布局由设备指定。
-
您可以更改 I/O 映射中的地址和固定值。
-
对于在“I/O 映射” 对话框中分配给 I/O 通道的每个变量,都可以在编译应用程序时生成 "强制变量"(详见下文)。例如,在设备调试期间,您可以使用这些变量,通过可视化/人机界面强制输入或输出值。
-
I/O 映射中的更改可通过在线更改传输到控制器。
-
如果使用指向设备输入的指针,访问将被视为写入访问,例如
pTest := ADR(input);
。这导致在生成代码时出现编译器警告:"...invalid assignment target
"。如果需要这种结构,必须先将输入值input
复制到一个具有写访问权限的变量中。 -
也可通过 IEC 代码中的 "AT 声明 "将 I/O 地址与变量连接起来。不过,由于设备配置经常会再次更改,我们建议您只在设备编辑器中进行分配。
如果使用 AT 声明,请注意以下几点:
-
AT 声明只适用于局部变量或全局变量,不适用于功能块的输入或输出变量。
-
不能为 AT 声明生成 I/O 的隐式 "强制变量"(见下文)。
-
如果将 AT 声明与结构变量或功能块变量一起使用,所有实例都将访问相同的内存位置。这就相当于在 C 语言等经典编程语言中使用 "静态变量"。
-




注意

如果使用指向设备输入的指针,则访问(例如pTest := ADR(input);
)适用于写入访问。这导致在生成代码时出现编译器警告:"...invalid assignment target
"。
如果需要这种结构,必须先将输入值 (input
) 复制到一个具有写访问权限的变量中。
作为替代方法,您可以使用 AT 声明将变量分配给编程代码中的地址。不过,考虑到设备配置可能会发生变化,我们建议您只在设备编辑器中进行分配。
您可以将设备的 I/O 映射配置导出到csv
文件,或从此类文件导入。
将设备输入连接到现有项目变量("映射)
要求:支持CODESYS 中 I/O 映射配置的设备会插入项目的设备树中。因此,在设备编辑器的“I/O 映射” 标签页上,可以用表格显示设备的输入和输出通道,并说明地址和数据类型。




注意

映射 "过大 "数据类型
如果数据类型大于字节的变量被映射到字节地址,变量值将被截断为字节大小。对于在“I/O 映射” 对话框中监控变量值,这意味着在地址的根元素中显示变量在项目中的当前值。字节的当前单个位值会依次显示在下方的位元素中,但这可能不足以显示整个变量值。
如果 UNION 在映射对话框中用 I/O 通道表示,那么是否也可以映射到根元素取决于设备。
-
例如,在 POU 中声明一个
BOOL
类型的变量xBool4
,以便从应用程序访问目标设备的输入。 -
要打开设备编辑器,请双击设备树中的设备对象,然后双击“<设备名称> I/O 映射” 选项卡。
-
观察“变量” 栏,显示设备输入通道
和设备输出通道
,仍可根据设备按组织节点
排序。我们假设有一个
BYTE
类型的设备输入。它与BYTE
节点下方的各个位地址(位通道)一起显示。 -
请注意:在映射结构变量时,编辑器会阻止您输入结构变量(例如:
%QB0
)和单个结构元素(例如:%QB0.1
和QB0.2
)。因此,如果映射表中有一个主条目,其子树是位信道条目,则适用以下情况:然后,您可以在主条目行或子元素(位通道)行中指定变量,但不能同时指定。现在,您可以使用适当类型的变量占用整个通道,也可以使用
BOOL
或BIT
类型的适当变量占用各个位通道地址。首先,双击“变量” 列中的位输入通道。输入框打开。
-
要在通道上放置现有变量,必须输入所需的项目变量和完整路径。按
打开输入助手。例如,选择
PLC_PRG
中声明的变量Application.PLC_PRG.xBool4
。插入变量。人机界面符号 (
) 显示在“ 映射” 栏中。该地址现已被划掉。这并不意味着该地址不再可用,因为现有变量的值由另一个内存空间管理。但是:为了避免在写入数值时产生歧义,还是不应该用其他变量占用地址,尤其是在输出的情况下。
请注意:对于 V3.5 SP11 及更高版本的编译器,在将变量映射到现有变量时,会自动使用变量的初始化值作为默认值。只有在映射到新创建的变量或未指定映射时,才能编辑“默认值” 字段。在旧版本中,用户必须明确指定默认值和初始化值相同。
-
再次删除变量赋值。单击频道根节点,即
BYTE
节点。再次使用输入助手选择变量Application.PLC_PRG.byte_gotodevice
。插入变量后,主通道的所有位地址都会被击穿,您不应再占用它们。
将设备输入映射到最近创建的项目变量
下面您将把设备输出映射到一个全局隐式变量,该变量是您最近在“I/O 映射” 对话框中直接创建的。
因此,“I/O 映射” 对话框是声明全局变量的另一个地方。
要求:支持CODESYS 中 I/O 映射配置的设备会插入项目的设备树中。因此,在设备编辑器的“I/O 映射” 标签上,您将看到设备输入和输出通道的表格显示,以及地址和数据类型的说明。
-
要打开设备编辑器,请双击设备树中的设备对象,然后双击“<设备名称> I/O 映射” 选项卡。
-
在映射表中点击“变量” 列中的通道条目,以打开输入字段。
-
为新变量输入一个简单的名称(不含 '
.
' )(例如myBool
)。CODESYS 会将变量创建为项目中的隐式全局变量,并直接分配给通道地址。因此,在这种情况下,地址不会像与现有变量
的映射那样被删除。
将设备与功能块实例连接
如果设备支持,您可以将整个功能块映射到输入或输出通道。这样,您就可以计算信号变化的频率或缩放通道值,以便进行维护等工作。
在此,您将把一个设备输出通道映射到一个功能块。在此示例中,程序块对通道输出值进行缩放。
要求:项目中链接了一个支持 FB 映射的数字输出设备。有一个功能块“Scale_Output_Int” ,其实现方式如下。功能块本身的属性以及处理通道输出的输出参数之前的属性都很重要。
{attribute 'io_function_block'} FUNCTION_BLOCK Scale_Output_Int VAR_INPUT iInput : INT; iNumerator : INT; iDenominator : INT :=1; iOffset : INT := 0; END_VAR VAR_OUTPUT {attribute 'io_function_block_mapping'} iOutput : INT; END_VAR VAR END_VAR IF iDenominator <> 0 THEN iOutput := TO_INT(TO_DINT(iInput) * TO_DINT(iNumerator) / TO_DINT(iDenominator)) + iOffset;
-
打开设备编辑器的“<设备名称> I/O 映射” 选项卡。双击应连接到功能块的输出。点击
“为 IO 通道添加 FB 按钮” 。
将打开“Select Function Block” 对话框。在左侧,你至少可以看到 “Application” 节点下面的功能块 “Scale_Output_int”。项目中包含相应功能块的链接库也会显示出来供选择。
-
选择 POU
myScaleOutputInt
。单击 “OK” 后,将在映射对话框中输入“变量”中的功能块参数
iOutput
的路径。路径包括应用程序名称、设备通道名称和所选 FB 输出(例如:App1.Out_4_Int_myScale_Output_Int_1.iOutput
)。 -
选择通道并单击
“转到实例” 。
焦点切换到“<设备名称> IEC 对象” 选项卡和为新 IEC 对象创建的条目
Out_4_Int_myScale_Output_Int_1
。在联机模式下的该视图中,您可以看到Out_4_Int
通道iOutput
参数的当前值,该值按 FB 缩放。您也可以像在其他监控视图中一样写入和强制输入数值。
更改和固定 I/O 映射中的地址值
您可以在“<设备名称> I/O 映射” 标签的映射表中更改整个通道的地址值(但不能更改通道中单个子元素的地址值!)。这样就可以根据指定的机器配置进行寻址,即使模块布局发生变化,也能保留地址值。默认情况下,更改布局会自动调整地址值。
要求:您的项目有 I/O 映射。请参阅上述帮助页面的相应部分。
-
要打开设备编辑器,请双击设备树中的设备对象,然后双击“<设备名称> I/O 映射” 选项卡。
-
在映射表中点击“Address” 列中的通道条目,以打开输入字段。这只适用于通道的 "根 "地址,而不适用于通道的某个子元素。
因此,请更改表中通道的顶层地址条目,例如从
QB0
更改为QB1
。退出输入框。地址值已更改。地址前显示符号
。表示地址固定。通道子元素的地址也会相应改变。如果现在更改设备对象在设备树中其他带有输入/输出通道的设备对象中的位置,CODESYS 不会像不固定时那样根据新的顺序调整这些地址。
-
要撤销手动更改或修复,请再次打开地址值输入框,删除地址输入,然后按 Enter 键。
CODESYS 将地址和后续相关地址重置为更改前的值,并删除符号
。
配置 I/O 变量更新
根据项目中链接的设备,CODESYS 会以不同方式更新应用于其输入和输出的变量。您可以在“I/O 映射” 对话框中明确更改相关设置。
在线模式下监控 I/O 映射中的变量
要求:您使用包含 I/O 映射的设备配置编译了一个应用程序,但没有出错。相关硬件和总线系统正在运行。您已通过“Online Login” 命令连接到控制器,并加载和启动了应用程序。
-
在设备编辑器中打开 PLC 的“I/O 映射” 选项卡。要打开编辑器,请双击设备树中的设备对象。
映射表现在还包含“当前值” 和“新值” 列。
如果结构变量被映射到地址1 的 "根 "元素上,CODESYS 在联机模式下不会在该行显示值。例如,如果
DWORD
变量被映射到地址上,那么 "根 "行和其下的缩进位通道行都会对各自的值进行监控。原则上,如果值由多个子元素组成,"根 "行中的字段始终为空。
1 'root' = 绘图对话框中该地址的顶部元素
-
在“新值” 一栏中为条目输入某个变量值,然后按[F7] 强制输入或按[Ctrl]+[F7] 写入该值。
与在声明编辑器或监控列表中的监控一样,强制变量值会显示在“Current Value” 一栏中,并带有前缀红色 F 符号或写入值。




注意

在联机模式下,PLC 无法读取 PLC 代码不使用的输入和输出,因此显示的值可能不正确。“相关变量的当前值” 显示为灰色背景。

- (1)
-
控制器上的强制值
- (2)
-
控制器上未使用的值,以灰色显示
生成用于强制输入/输出的隐式变量
在设备或机器的调试过程中,可能有必要 "强制 "输入和输出的数值。如果设备支持该功能,则可以为此生成特殊的 "强制值变量",并在人机界面可视化中使用。
要求:设备支持该功能。您有一个项目,其中为设备配置了 I/O 映射,并包含一个程序对象PLC_PRG
。
-
双击设备树中的设备对象,打开设备编辑器“PLC 设置” 选项卡。
-
激活选项“为 IO 映射生成强制变量” 。
-
按[F11] 编译应用程序。
根据以下语法为每个 I/O 通道创建两个变量,其中通道名称中的空格用下划线代替:
<device name>_<channel name>_<IEC address>_Force
BOOL
型,用于激活和解除强制。<device name>_<channel name>_<IEC address>_Value
的数据类型,用于定义要在通道上强制使用的值。这些变量可在输入助手中的“变量类别中找到” /“IoConfig_Globals_Force_Variables。”您可以在CODESYS 的编程对象、可视化、符号配置等中使用它们。
-
打开功能块“PLC_PRG” ,将焦点设置在执行部分,然后按F2 。
输入助手打开。如上所述,这些变量可在“变量类别” /“IoConfig_Globals_Force_Variables” 中使用。
当 "强制变量 "输入端出现上升沿时,就会以 "值变量 "给出的值强制相应的输入或输出。下降沿使强制失效。通过将 "Force "变量重置为
FALSE
来停用,是强制输入新值的必要条件。
注意以下限制。
-
只有在设备的“I/O 映射” 中映射到现有或最近创建的变量的通道,才能通过隐式强制变量进行强制。
-
对于未使用的输入和输出,或通过应用程序中的 AT 声明映射到变量的输入和输出,无法通过隐式强制变量进行强制。
-
您希望通过该机制强制使用的 I/O 通道必须由CODESYS 在至少一个任务中使用。
-
CODESYS 通过红色 "强制 "符号识别监控中的强制输入,但不识别强制输入/输出。强制值仅被 I/O 驱动程序隐式用于写入设备。
在一个对话框中为多台设备进行输入/输出映射
有一个表格显示设备的 I/O 映射,以及设备树中插入在其下方的所有子元素的 I/O 映射。在这里,您可以编辑 I/O 映射,编辑方式与各设备编辑器的单个映射表完全相同。
要求:在项目的设备树中,插入了多个 PLC,每个 PLC 都启用了 I/O 映射配置。
-
选择设备树的根节点,然后单击右键菜单“Edit I/O Mapping” 。
此时将打开“Edit I/O Mapping” 对话框,在表格中显示项目中插入的所有设备的 I/O 映射配置。编辑条目的方法与在相关设备编辑器的“I/O 映射” 对话框中编辑条目的方法相同。
-
现在选择设备树中的一个控制对象,并在右键菜单中选择“Edit I/O Mapping” 命令。
“编辑 I/O 映射” 对话框现在只显示所选对象中和所选对象下 I/O 映射配置的 I/O 表。
-
在表格上方的栏中设置所需的“过滤器” ,或在“搜索变量” 栏中输入变量名,以查看该变量在映射中的使用情况。
该窗口的操作方法与“<设备名称> I/O 映射” 标签页的操作方法相同。