Skip to main content

配置设备和 I/O 映射

您可以在相关设备编辑器中配置插入设备树的设备对象。可能性取决于设备描述。这 ”通用设备编辑器" 提供由设备特定选项卡根据需要补充的选项卡。

要求:您已经打开了一个标准项目,其设备树中有一个标准 PLC,并且在其下方插入了一个现场总线设备对象。

  1. 在项目的设备树中双击标准 PLC 的设备对象。

    <设备名称> 编辑器在主窗口中打开 CODESYS 窗户。这 通讯设置 选项卡在前台。更改到其他选项卡以便为控制器进行配置设置。请参阅通用设备编辑器的帮助页面。

  2. 双击项目设备树中的现场总线设备对象。

    <现场总线设备名称> 编辑器在主窗口中打开 CODESYS 窗户。特定选项卡可用,具体取决于设备。有关配置选项,请参见相应设备编辑器的帮助页面。如果 显示通用设备配置视图 选项被选中 工具 → 选项, 在里面 设备编辑器 类别,然后另请参阅通用设备编辑器提供的选项卡。

如果 PLC 的配置参数已被其他设备更改,例如通过可视化,配置文件 IoConfig.par 在控制器上创建。根据设备,在线模式下设备编辑器的参数对话框中可能有一个按钮,用于将当前参数写入此类文件。为了同时更新项目中更改的参数,您可以在线模式下读取参数文件。

要求:您有一个带设备树的标准项目,其中硬件环境与设备树中的 PLC 和可参数化设备映射。在控制器上有一个文件 IoConfig.par, 其中设备参数先前与当前值一起保存。

  1. 添加 读取 PLC 参数文件到配置 命令从界面菜单 设备 中的类别 工具 → 自定义 对话。

  2. 在设备树中选择 PLC 设备对象并打开上下文菜单。

  3. 点击 读取 PLC 参数文件到配置.

    CODESYS 自动建立与控制器的连接并从 par-file 中读取参数。这些在带有设备参数的选项卡上相应更新。

是否可以将 I/O 映射配置到项目变量甚至整个功能块取决于设备类型。配置 I/O 映射意味着将设备的输入和输出通道与项目的变量链接起来。我们也使用“映射“ 为了这。

一般注意以下关于设备输入和输出到变量的映射 CODESYS

  • 您没有对映射到输入的变量的写访问权。

  • 您只能将现有变量映射到一个输入。

  • 您可以直接在 I/O 映射中生成新的全局隐式变量并将它们映射到设备通道。

  • 结构的内存布局由设备指定。

  • 您可以更改 I/O 映射中的地址和固定值。

  • 对于分配给 I/O 通道的每个变量选项卡:<设备名称> I/O 映射对话框,您可以在应用程序编译期间生成“强制变量”(参见下文)。使用这些变量,例如在工厂调试期间,您可以通过可视化/HMI 在输入或输出上强制设置一个值。

  • I/O 映射中的更改可以通过在线更改传输到控制器。

  • 如果使用指向设备输入的指针,则该访问被认为是写访问,例如 pTest := ADR(input);.生成代码时,这会导致编译器警告:“...invalid assignment target"。如果你需要这种构造,你必须先复制输入值 input 到具有写访问权限的变量。

  • I/O 地址也可以通过 IEC 代码中的“AT 声明”与变量链接。但是,由于设备配置经常会再次更改,我们建议您仅在设备编辑器中进行分配。

    如果您使用 AT 声明,请注意以下事项:

    • AT 声明只能用于局部或全局变量,不能用于功能块的输入或输出变量。

    • 不能为 AT 声明生成 I/O 的隐式“强制变量”(见下文)。

    • 如果您使用带有结构变量或功能块变量的 AT 声明,所有实例都将访问相同的内存位置。这对应于在诸如“C”之类的经典编程语言中使用“静态变量”。

重要

如果使用指向设备输入的指针,则访问(例如, pTest := ADR(input);) 适用于写访问。生成代码时,这会导致编译器警告:“...invalid assignment target”。

如果您需要这种构造,则必须首先复制输入值(input) 到具有写访问权限的变量。

提示

作为替代方案,您可以使用 AT 声明将变量分配给编程代码中的地址。但是,考虑到设备配置可能发生的变化,我们建议您仅在设备编辑器中进行分配。

提示

您可以将设备的 I/O 映射配置导出到 csv 文件或从这样的文件中导入。

有关更多信息,请参阅: 将 I/O 映像导出为 CSV

有关更多信息,请参阅: 为强制 I/O 生成隐式变量

要求:支持 I/O 映射配置的设备 CODESYS 插入到项目的设备树中。在 I/O 映射 在设备编辑器中的选项卡中,您将获得设备输入和输出通道的表格显示以及地址和数据类型的规范。

映射“太大”的数据类型

如果大于字节的数据类型的变量映射到字节地址,则该变量的值将被截断为字节大小。用于监控变量值 I/O 映射 对话框,这意味着,在地址的“根”元素中,将显示项目中当前变量的值。字节的当前单个位值连续显示在其下方的位元素中,但这可能不足以用于整个变量值。

提示

如果 UNION 在映射对话框中由 I/O 通道表示,则取决于设备是否也可以映射到“根”元素。

  1. 例如,在 POU 中,声明一个变量 xBool4 类型的 BOOL 您想通过它从应用程序访问目标设备的输入。

  2. 要打开设备编辑器,请双击设备树中的设备对象,然后单击 <设备名称> I/O 映射 标签。

  3. 观察 多变的 显示设备输入的列 _cds_icon_input_channel.png 通道和设备输出 _cds_icon_output_channel.png 频道,仍然可以按组织排序 _cds_icon_folder.png 节点,取决于设备。我们假设有一个设备输入类型 BYTE.它显示在其下方的各个位地址(位通道) BYTE 节点。

  4. 注意:映射结构化变量时,编辑器会阻止您同时输入结构变量(例如: %QB0) 和单个结构元素(例如: %QB0.1QB0.2)。因此,如果在映射表中有一个带有位通道条目子树的主条目,则适用以下情况: 然后您可以在主条目的行或子元素的行中指定一个变量(位通道),但不是两者兼而有之。

    您现在可以使用合适类型的变量占用整个通道,或者使用合适类型的变量占用其各个位通道地址 BOOL 或者 BIT.首先,双击一个位输入通道 变量 柱子。

    将打开一个输入字段。

  5. 为了在通道上放置现有变量,您必须输入所需的项目变量和完整路径。按 _cds_icon_three_dots.png 打开输入助手。例如,选择变量 Application.PLC_PRG.xBool4 宣布于 PLC_PRG.

    变量被插入。这 _cds_icon_map_to_existing_variable.png 符号显示在 映射 柱子。现在地址被划掉了。这并不意味着该地址不再可用,因为现有变量的值是在另一个内存空间中管理的。但是:为了避免在写入值时出现歧义,您不应使用其他变量占用地址,尤其是在输出的情况下。

    注意:对于编译器版本 V3.5 SP11 及更高版本,在映射到现有变量时,变量的初始化值会自动用作默认值。您可以编辑 默认值 仅当您映射到新创建的变量或未指定映射时才使用字段。在旧版本中,用户必须明确指定默认值和初始化值相同。

    _cds_mapping_bit_on_existing_variable.png
  6. 再次删除变量赋值。点击频道根目录, BYTE 节点。再次使用输入助手选择变量 Application.PLC_PRG.byte_gotodevice.

    变量被插入,主通道的所有位地址都被划掉,你不应该额外占用它们。

    _cds_mapping_root_on_existing_variable.png

在下文中,您会将设备输出映射到一个全局隐式变量,您最近为此直接在 I/O 映射 对话。

提示

I/O 映射 因此,对话框是声明全局变量的另一个地方。

要求:支持 I/O 映射配置的设备 CODESYS 插入到项目的设备树中。在 I/O 映射 在设备编辑器中的选项卡中,您将看到设备输入和输出通道的表格显示以及地址和数据类型的规范。

  1. 要打开设备编辑器,请双击设备树中的设备对象,然后单击 <设备名称> I/O 映射 标签。

  2. 单击映射表中的通道条目 多变的 列以打开输入字段。

  3. 指定一个简单的名称(不带“.") 用于新变量(例如: myBool)。

    CODESYS 将变量创建为项目中的隐式全局变量,并将其直接分配给通道地址。因此,在这种情况下,地址不会像映射到现有变量的情况那样出现 _cds_icon_create_new_variable.png.

    _cds_mapping_to_new_variable.png

如果设备支持,您可以将整个功能块映射到输入或输出通道。例如,这使您可以计算信号变化的频率或缩放通道值以进行维护。

在这里,您将设备输出通道映射到功能块。在此示例中,模块缩放通道输出值。

要求:项目中链接了具有支持 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;
  1. 打开 I/O 映射 设备模块的选项卡。双击应连接到功能块的输出。点击 _cds_icon_add_fb.png 为 IO 通道添加 FB 按钮。

    选择功能块 对话框打开。在左侧,您至少可以看到功能块 Scale_Output_int 以下 应用 节点。项目中链接的包含相应功能块的库也将显示以供选择。

  2. 选择 POU myScaleOutputInt.

    点击后 , 功能块参数的路径 iOutput 在里面 多变的 在映射对话框中输入。该路径包含应用程序名称、设备通道名称和选定的 FB 输出(例如: App1.Out_4_Int_myScale_Output_Int_1.iOutput)。

  3. 选择频道并点击 _cds_icon_goto_definition.png 转到实例 按钮。

    焦点切换到 <设备名称> IEC 对象 选项卡和为新 IEC 对象创建的条目 Out_4_Int_myScale_Output_Int_1.在此在线模式的视图中,您可以看到参数的当前值 iOutput 对于频道 Out_4_Int 由 FB 缩放。您还可以像在其他监视视图中一样写入和强制该值。

有关更多信息,请参阅: 选项卡:'<设备名称> IEC 对象io_function_block, io_function_block_mapping

您可以更改整个通道的地址值(但不能更改通道的单个子元素!) <设备名称> I/O 映射 标签。这使您可以根据指定的机器配置调整寻址并保留地址值,即使模块布局发生变化。默认情况下,布局的更改会导致地址值的自动调整。

要求:您的项目具有 I/O 映射。请参阅上面帮助页面的相应部分。

  1. 要打开设备编辑器,请双击设备树中的设备对象,然后单击 <设备名称> I/O 映射 标签。

  2. 单击映射表中的通道条目 地址 列以打开输入字段。这仅适用于通道的“根”地址,而不适用于其特定的子元素。

    因此,更改表中通道的顶部地址条目,例如从 QB0QB1.退出输入字段。

    地址值已更改。这 _cds_icon_address_fixed.png 符号显示在地址前。表示地址是固定的。通道子元素的地址也相应改变。如果您现在在设备树中使用输入/输出通道更改设备对象在其他设备对象中的位置, CODESYS 不会像没有修复的情况那样使这些地址适应新的顺序。

    _cds_modifying_address_in_mapping_dialog.png
  3. 要撤消手动更改或修复,请再次打开地址值的输入字段,删除地址条目并按 Enter 键。

    CODESYS 将相关地址和后续地址重置为更改前的值并删除 _cds_icon_address_fixed.png 象征。

有关更多信息,请参阅: 地址

根据您在项目中连接的设备, CODESYS 以不同方式更新应用于其输入和输出的变量。您可以在 I/O 映射 对话。

要求:您已使用包含 I/O 映射的设备配置正确编译了应用程序。相关的硬件和总线系统正在运行。您已通过 在线 → 登录 命令并已加载并启动应用程序。

  1. 打开 I/O 映射 设备编辑器中 PLC 的选项卡。要打开编辑器,请双击设备树中的设备对象。

    映射表现在还包含 当前值新价值 列。

    如果结构变量映射到地址的“根”元素1, CODESYS 在线模式下此行不显示值。例如,如果一个 DWORD 变量映射到地址,但是,在“根”行和它下面的缩进位通道行中都监视相应的值。

    原则上,如果值由多个子元素组成,“根”行中的字段始终为空。

    1 "root" = 映射对话框中此地址的顶部元素

  2. 为列中的条目输入某个变量值 新价值 并按下 F7 强迫或 Ctrl+F7 写入值。

    与在声明编辑器或监视列表中监视的情况一样,强制变量值显示在列中 当前值 带有前缀的红色 F 符号或书面值。

重要

PLC 代码不使用的输入和输出在在线模式下不会被 PLC 读取,因此显示的值可能不正确。这 当前值 相关的变量以灰色背景显示。

_cds_img_mapping_online.png

在设备或机器调试期间,可能需要“强制”应用在输入和输出上的值。如果设备支持这一点,您可以为此目的生成特殊的“强制变量”并使用它们,例如在 HMI 可视化中。

要求:设备支持该功能。您有一个项目,其中为设备配置了 I/O 映射并包含程序对象 PLC_PRG.

  1. 打开设备编辑器, PLC 设置 选项卡,双击设备树中的设备对象。

  2. 激活选项 为 IO 映射生成力变量.

  3. F11 编译应用程序。

    根据以下语法为每个 I/O 通道创建两个变量,其中通道名称中的空格被下划线替换:

    <device name>_<channel name>_<IECaddress>_force 类型的 BOOL 用于强制的激活和停用

    <device name>_<channel name>_<IECaddress>_value 用于定义要在通道上强制的值的通道的数据类型

    这些变量在类别中的输入助手中可用 变量 / IoConfig_Globals_Force_Variables。 您可以在 CODESYS 在编程对象、可视化、符号配置等中。

  4. 打开功能块 PLC_PRG,在执行部分设置焦点并按 F2.

    输入助手打开。变量在类别中可用 变量 / IoConfig_Globals_Force_Variables 如上所述。

    “强制变量”输入处的上升沿激活使用“值变量”给定的值强制相应的输入或输出。下降沿取消强制。通过将“Force”变量重置为停用 FALSE 是能够强制一个新值的要求。

请注意以下限制。

  • 通过隐式力变量强制仅适用于映射到 I/O 映射 设备的现有或最近创建的变量。

  • 对于未使用的输入和输出或通过应用程序中的 AT 声明映射到变量的输入和输出,无法通过隐式强制变量进行强制。

  • 您想通过该机制强制使用的 I/O 通道必须由 CODESYS 在至少一项任务中。

  • CODESYS 用红色 Force 符号标识监控中的强制输入,而不是强制输入/输出。强制值仅由 I/O 驱动程序隐式用于写入设备。

有关更多信息,请参阅: 变量的强制和写入

有一个表格显示设备的 I/O 映射以及设备树中插入在其下方的所有子元素的 I/O 映射。您可以在此处以与在相应设备编辑器的各个映射表中完全相同的方式编辑 I/O 映射。

要求:在项目的设备树中插入了多个 PLC,每个 PLC 都启用 I/O 映射配置。

  1. 选择设备树的根节点并单击 编辑 I/O 映射 在上下文菜单中。

    编辑 I/O 映射 对话框打开,其中插入项目的所有设备的 I/O 映射配置显示在表格中。您可以使用与在 I/O 映射 相关设备编辑器的对话框。

  2. 现在选择设备树中的一个控制对象并选择 编辑 I/O 映射 命令再次在上下文菜单中。

    编辑 I/O 映射 对话框现在仅显示在选定对象中和下方找到的 I/O 映射配置的 I/O 表。

  3. 设置一个想要的 筛选 在表格上方的栏中或在 搜索变量 字段以查看此变量在映射中的使用。

    在此窗口中的工作方法与在此窗口中描述的方法相同 <设备名称> I/O 映射 标签。