[西门子] 西门子博途:组态S7连接

[复制链接]
查看162 | 回复0 | 2024-6-9 20:44:28 | 显示全部楼层 |阅读模式
>

简介
在程序编辑器的巡视窗口中分配 PUT 和 GET 指令的连接参数。 所有参数均保存在相应的背景数据块中。
连接组态的结构
连接组态由以下部分组成:


用于 PUT 和 GET 的通信指令

调用在线和诊断功能

“属性”(Properties) 选项卡中的“组态”(Configuration) 选项卡

“组态”(Configuration) 选项卡的区域导航

连接参数的常规属性
显示在线和诊断功能
如果单击开始在线和诊断功能的图标,相关 CPU 将自动转入在线状态。 网络视图中的连接表将打开。 此外,“诊断”(Diagnostics) 选项卡和连接信息显示在巡视窗口中。
输入连接参数
在“组态”(Configuration) 选项卡中输入所需的连接参数。 “组态”(Configuration) 选项卡的区域导航包含“连接参数”(Connection parameters) 组。该组包含连接组态。 在此处可使用系统函数输入连接的参数。 分配了所有需要的参数后,在区域导航中的“连接参数”(Connection parameters) 组后面设置一个复选标记。
可使用“PUT”指令将数据写入一个远程 CPU。
在控制输入 REQ 的上升沿启动指令:

  • 写入区指针 (ADDR_i) 和数据 (SD_i) 随后会发送给伙伴 CPU。伙伴 CPU 则可以处于 RUN 模式或 STOP 模式。
  • 从已组态的发送区域中 ((SD_i) 复制了待发送的数据。伙伴 CPU 将发送的数据保存在该数据提供的地址之中,并返回一个执行应答。
  • 如果没有出现错误,下一次指令调用时会使用状态参数 DONE = "1" 来进行标识。上一作业已经结束之后,才可以再次激活写入过程。
如果写入数据时访问出错,或如果未通过执行检查,则会通过 ERROR 和 STATUS 输出错误和警告。
使用指令的要求

  • 已在伙伴 CPU 属性的“保护”(Protection) 保护中激活“允许借助 PUT/GET 通信从远程伙伴访问”(Permit access with PUT/GET communication from remote partner) 函数。
  • 使用“PUT”指令访问的块是通过访问类型“标准”创建的。
  • 请确保由参数 ADDR_i 和 SD_i 定义的区域在数量、长度和数据类型等方面都匹配。
  • 待写入区域(ADDR_i 参数)必须与发送区域(SD_i 参数)一样大。
参数
下表列出了“PUT”指令的参数:




参数
声明
数据类型
存储区
说明
REQ
Input
BOOL
I、Q、M、D、L 或常量
控制参数 request,在上升沿时激活数据交换功能。
ID
Input
WORD
I、Q、M、D、L 或常量
用于指定与伙伴 CPU 连接的寻址参数。
DONE
Output
BOOL
I、Q、M、D、L
状态参数 DONE:

  • 0:作业未启动,或者仍在执行之中
  • 1:作业已执行,且无任何错误。
ERROR


Output


BOOL


I、Q、M、D、L
状态参数 ERROR 和 STATUS,错误代码:

  • ERROR=0
    STATUS 的值为:

    • 0000H:既无警告也无错误
    • <> 0000H:警告,详细信息请参见 STATUS。

  • ERROR=1
    出错,有关该错误类型的详细信息,请参见 STATUS。
STATUS
Output
WORD
I、Q、M、D、L
ADDR_1
InOut
REMOTE
I、Q、M、D
指向伙伴 CPU 上用于写入数据的区域的指针。
指针 REMOTE 访问某个数据块时,必须始终指定该数据块。
示例:P#DB10.DBX5.0 字节 10。
传送数据结构(例如 Struct、 Array)时,参数 ADDR_i 处必须使用以下数据类型。

  • 对于所有固件版本的 S7-1200 CPU 和固件版本为 V2.8.2 的 S7-1500 CPU:BYTE、CHAR、WORD、INT、DWORD、DINT 或 REAL
  • 固件版本小于 V2.8.2 的 S7-1500-CPU:CHAR
注:因此,自固件版本 V2.8.2 起,用户可以从 S7-300、S7-400 和 S7-1200 CPU 将包含“PUT”的程序传输到 S7-1500 CPU。
ADDR_2
InOut
REMOTE
ADDR_3
InOut
REMOTE
ADDR_4
InOut
REMOTE
SD_1
InOut
VARIANT
I、Q、M、D、L
指向本地 CPU 上包含要发送数据的区域的指针。
仅允许 BOOL 数据类型(不允许:位数组、BYTE、CHAR、WORD、INT、DWORD、DINT、REAL)。
以下情况适用于固件版本低于 V2.8.2 的 S7-1500 CPU:传送数据结构(例如 Struct、 Array)时,参数 SD_i 处必须使用数据类型 CHAR。
注:因此,自固件版本 V2.8.2 起,用户可以从 S7-300、S7-400 和 S7-1200 CPU 将包含“PUT”的程序传输到 S7-1500 CPU。
SD_2
InOut
VARIANT
SD_3
InOut
VARIANT
SD_4
InOut
VARIANT


ERROR 和 STATUS 参数
下表列出了关于由 "PUT" 指令的参数 ERROR 和 STATUS 输出的所有特定错误信息。




ERROR
STATUS(十进制)
说明
0
11
警告:由于前一作业仍处于忙碌状态,因此未激活新作业。
0
25
已开始通信。作业正在处理。
1
1
通信故障,例如

  • 连接描述信息未加载(本地或远程)。
  • 链路断开(如电缆故障、CPU 关闭或者 CP 处于 STOP 模式)。
  • 尚未与伙伴建立连接。
1
2


  • 伙伴 CPU 的否定应答。该功能无法执行。
  • 未授予对伙伴 CPU 的访问权限。在 CPU 设置中激活访问。
1
4
指向数据存储的指针出错:

  • 参数 SD_i 和 ADDR_i 的数据类型彼此不兼容。
  • SD_i 区域的长度大于待写入的 ADDR_i 参数的数据长度。
  • 不能访问 SD_i。
  • 已经超过了最大用户数据大小。
  • 参数 SD_i 和 ADDR_i 的数量不一致。
1
8
访问伙伴 CPU 时出错(例如,数据块未加载或不受写保护)。
1
10
无法访问本地用户存储器(例如,访问某个已经删除的数据块)。
1
20


  • 已超出并行作业的最大数量。
  • 该作业当前正在执行,但优先级较低(首次调用)。
1
W#16#80C3
(仅 S7-1500)

  • 已超出并行作业的最大数量。
  • 该作业当前正在执行,但优先级较低(首次调用)。


数据一致性
发送操作激活之后(在 REQ 的上升沿),会从用户程序中复制要从发送区 SD_i 中发送的数据。块调用之后,可以对这些区进行写操作,且不会破坏当前的发送数据。


说明
状态参数 DONE 的值变为“1”时,发送操作才算结束。


示例
在以下示例中,通过 S7 连接将 CPU 1 中的数据记录传送到 CPU 2 中。待发送数据记录的数据类型为 INT。
要求

  • 两个 S7-1500 系列的 CPU 通过 PROFINET 进行互连,但连接尚未组态。
  • 通过“<CPU> > 属性 > 保护”(<CPU> > Properties > Protection) 下的低保护级别,确保可以对 CPU 进行读写访问。


  • 可通过指令 PUT/GET 进行访问。



CPU 1 中的程序
在全局数据块中,创建 6 个变量存储“PUT”数据。

在全局数据块中,创建 1 个变量存储待发送的数据记录。

程序段 1:互连“PUT”指令的参数,如下所示:

程序段 2:保存 PUT 的错误状态,如下所示。

程序段 3:保存 PUT 的成功状态,如下所示。

PUT 的组态
要互连输入参数 ID,可通过“属性 > 组态”(Properties > Configuration) 打开指令“PUT”的向导。
执行以下连接设置:




区域
设置
端点
选择通信伙伴。
系统将自动输入剩余的连接数据。将自动创建一个 S7 连接,并在输入参数 ID 处输入该标识符。
激活
确保与 CPU 1间的连接激活。


CPU 2 中的程序
在全局数据块中,创建 1 个变量存储待接收的数据记录。

在数据块的“属性 > 特性”(Properties > Attributes) 中,禁用优化块访问。

PUT 的操作特性
输入参数 REQ(“start”)返回信号状态“TRUE”时,启动指令“PUT”。该指令将调用连接数据,并与 S7 连接的通信伙伴进行数据通信。为此,S7 连接的标识符将存储在输入参数 ID 中。
通过参数 SD_1,识别待发送 CPU 1 数据记录的存储位置(“writeValue”)。通过参数 ADDR_1,识别 CPU 2 中数据记录的存储位置(“myValue”)。传送数据记录(“writeValue”)并在 CPU 2 的存储位置(“myValue”)进行指示。

执行成功时,输出参数 DONE(“done”)处的信号状态为“TRUE”,且输出参数 STATUS(“status”)的值为“16#0000”。由于输出参数的值仅在有效时才显示,因此成功状态将保存在变量“memDoneStat”中。输出参数 ERROR(“error”)或变量“memErrStatus”用于指示处理无错误。





GET:从远程 CPU 读取数据说明
使用指令“GET”,可以从远程 CPU 读取数据。
在控制输入 REQ 的上升沿启动指令:

  • 要读出的区域的相关指针 (ADDR_i) 随后会发送给伙伴 CPU。伙伴 CPU 则可以处于 RUN 模式或 STOP 模式。
  • 伙伴 CPU 返回数据:

    • 如果回复超出最大用户数据长度,那么将在 STATUS 参数处显示错误代码“2”。
    • 下次调用时,会将所接收到的数据复制到已组态的接收区 (RD_i) 中。



  • 如果状态参数 NDR 的值变为“1”,则表示该动作已经完成。
只有在前一读取过程已经结束之后,才可以再次激活读取功能。如果读取数据时访问出错,或如果未通过数据类型检查, 则会通过 ERROR 和 STATUS 输出错误和警告。
“GET”指令不会记录伙伴 CPU 上所寻址到的数据区域中的变化。
使用指令的要求

  • 已在伙伴 CPU 属性的“保护”(Protection) 保护中激活“允许借助 PUT/GET 通信从远程伙伴访问”(Permit access with PUT/GET communication from remote partner) 函数。
  • 使用“GET”指令访问的块是通过访问类型“标准”创建的。
  • 请确保由参数 ADDR_i 和 SD_i 定义的区域在数量、长度和数据类型等方面都匹配。
  • 待读取的区域(ADDR_i 参数)不能大于存储数据的区域(RD_i 参数)。
参数
下表列出了“GET”指令的参数:




参数
声明
数据类型
存储区
说明
REQ
Input
BOOL
I、Q、M、D、L 或常量
控制参数 request,在上升沿时激活数据交换功能。
ID
Input
WORD
I、Q、M、D、L 或常量
用于指定与伙伴 CPU 连接的寻址参数。
NDR
Output
BOOL
I、Q、M、D、L
状态参数 NDR:

  • 0:作业尚未开始或仍在运行。
  • 1:作业已成功完成。
ERROR


Output
BOOL
I、Q、M、D、L
状态参数 ERROR 和 STATUS,错误代码:

  • ERROR=0
    STATUS 的值为:

    • 0000H:既无警告也无错误
    • <> 0000H:警告,详细信息请参见 STATUS 。

  • ERROR=1
    出错。STATUS 提供了有关错误类型的详细信息。
STATUS
Output
WORD
I、Q、M、D、L
ADDR_1
InOut
REMOTE
I、Q、M、D


指向伙伴 CPU 上待读取区域的指针。
指针 REMOTE 访问某个数据块时,必须始终指定该数据块。
示例:P#DB10.DBX5.0 字节 10。
ADDR_2
InOut
REMOTE
ADDR_3
InOut
REMOTE
ADDR_4
InOut
REMOTE
RD_1
InOut
VARIANT
I、Q、M、D、L
指向本地 CPU 上用于输入已读数据的区域的指针。
RD_2
InOut
VARIANT
RD_3
InOut
VARIANT
RD_4
InOut
VARIANT


参数 ERROR 和 STATUS
下表列出了关于由指令“GET”通过参数 ERROR 和 STATUS 输出的所有特定错误信息。




ERROR
STATUS(十进制)
说明
0
11
警告:由于前一作业仍处于忙碌状态,因此未激活新作业。
0
25
已开始通信。作业正在处理。
1
1
通信故障,例如

  • 连接描述信息未加载(本地或远程)
  • 连接中断(例如:电缆故障、CPU 关闭或者 CP 处于 STOP 模式)
  • 尚未与伙伴建立连接
1
2


  • 接收到伙伴设备的否定应答。该功能无法执行。
  • 远程站的响应超出了用户数据的最大长度。
  • 伙伴 CPU 上的访问保护已激活。在 CPU 设置中禁用访问保护。
1
4
指向数据存储 RD_i 的指针出错:

  • 参数 RD_i 和 ADDR_i 的数据类型彼此不兼容。
  • RD_i 区域的长度小于待读取的 ADDR_i 参数的数据长度。
1
8
访问伙伴 CPU 时出错。
1
10
无法访问本地用户存储器(例如,访问某个已经删除的数据块)。
1
20


  • 已超出并行作业的最大数量。
  • 该作业当前正在执行,但优先级较低(首次调用)。
1
W#16#80C3
(仅 S7-1500)

  • 已超出并行作业的最大数量。
  • 该作业当前正在执行,但优先级较低(首次调用)。




说明
数据一致性
在初始化另一个作业之前,如果完整读取当前正使用的接收区域 RD_i 部分内容,将一致性地接收数据。


示例
在以下示例中,通过 S7 连接在 CPU 1 中读取 CPU2 的数据记录。待发送数据记录的数据类型为 INT。
要求


  • 两个 S7-1500 系列的 CPU 通过 PROFINET 进行互连,但连接尚未组态。
  • 通过“<CPU> > 属性 > 保护”(<CPU> > Properties > Protection) 下的低保护级别,确保可以对 CPU 进行读写访问。

  • 可通过指令 PUT/GET 进行访问。



    CPU 1 中的程序
    在全局数据块中,创建 6 个变量存储“GET”数据。

    在全局数据块中,创建 1 个变量存储待接收的数据记录。

    程序段 1:互连“GET”指令的参数,如下所示:

    程序段 2:保存 GET 的错误状态,如下所示。

    程序段 3:保存 GET 的成功状态,如下所示。

    GET 的组态
    要互连输入参数 ID,可通过“属性 > 组态”(Properties > Configuration) 打开指令“GET”的向导。
    执行以下连接设置:




    区域
    设置
    端点
    选择通信伙伴。
    系统将自动输入剩余的连接数据。将自动创建一个 S7 连接,并在输入参数 ID 处输入该标识符。
    激活
    确保与 CPU 1间的连接激活。


    CPU 2 中的程序
    在全局数据块中,创建 1 个变量存储待发送的数据记录。

    在数据块的“属性 > 特性”(Properties > Attributes) 中,禁用优化块访问。

    GET 的操作特性
    输入参数 REQ(“start”)的信号状态为“TRUE”时,启动指令“GET”。该指令将调用连接数据,并与 S7 连接的通信伙伴进行数据通信。为此,S7 连接的标识符将存储在输入参数 ID 中。
    通过参数 ADDR_1,识别待发送 CPU 2 数据记录的存储位置(“myValue”)。系统将读取输出数据记录(“myValue”),并在参数 RD_1 处输入识别的存储位置(“readValue”)。

    执行成功时,输出参数 NDR(“done”)处的信号状态为“TRUE”,且输出参数 STATUS(“status”)的值为“16#0000”。由于输出参数的值仅在有效时才显示,因此成功状态将保存在变量“memDoneStat”中。输出参数 ERROR(“error”)或变量“memErrStatus”用于指示处理无错误。





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则