>
简介 CPU 可以作为多种通信服务的服务器。这也就是说,即使还没有为 CPU 组态和编程建立连接,其它通信参与者也可以访问 CPU 数据。 因此作为服务器的本地 CPU 无法控制与客户端的通信。 CPU 参数的“保护”(Protection) 区域中的参数“连接机制”(Connection mechanisms) 用于指定运行期间本地 CPU 是否允许执行此类通信。 允许借助 PUT/GET 通信从远程伙伴访问 默认情况下,禁用“允许借助 PUT/GET 通信从远程伙伴访问 (...) ”(Permit access with PUT/GET communication from remote partners (...)) 选项。如果激活该选项,则只能在本地 CPU 和通信伙伴间需要通过组态或编程建立的通信连接中对 CPU 数据进行读写访问。例如,可以通过 BSEND/BRCV 指令进行访问。 本地 CPU 仅作为服务器的连接(即表示本地 CPU 上不存在使用通信伙伴进行的通信组态/编程),因此无法在操作 CPU 时进行。例如, 如果要允许从客户端访问 CPU 数据,也就是不希望限制 CPU 的通信服务,则激活“允许借助 PUT/GET 通信从远程伙伴访问”(Permit access with PUT/GET communication from remote partners) 选项。 功能运用
说明 使用指令“GET”,可以从远程 CPU 读取数据。 在控制输入 REQ 的上升沿启动指令: 只有在前一读取过程已经结束之后,才可以再次激活读取功能。如果读取数据时访问出错,或如果未通过数据类型检查, 则会通过 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: | ERROR
| Output | BOOL | I、Q、M、D、L | 状态参数 ERROR 和 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 | 通信故障,例如 | 1 | 2 | | 1 | 4 | 指向数据存储 RD_i 的指针出错: | 1 | 8 | 访问伙伴 CPU 时出错。 | 1 | 10 | 无法访问本地用户存储器(例如,访问某个已经删除的数据块)。 | 1 | 20 | 已超出并行作业的最大数量。 该作业当前正在执行,但优先级较低(首次调用)。
| 1 | W#16#80C3 | (仅 S7-1500) 已超出并行作业的最大数量。 该作业当前正在执行,但优先级较低(首次调用)。
|
说明 数据一致性 在初始化另一个作业之前,如果完整读取当前正使用的接收区域 RD_i 部分内容,将一致性地接收数据。 |
示例 在以下示例中,通过 S7 连接在 CPU 1 中读取 CPU2 的数据记录。待发送数据记录的数据类型为 INT。 要求
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”用于指示处理无错误。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |