来自 LUA 应用程序的入站数据
在将客户端应用程序提供的数据发送至主机之前,本地节点将对这些数据执行某些检查,如果检查失败,则将拒绝发送这些数据,并返回 Status-Acknowledge(Nack-2) 消息。 如果数据通过了检查,则它不会向应用程序返回任何确认信息(尽管主机稍后可能会执行此操作)。
如果客户端应用程序提供逻辑单元应用程序 (LUA) API,则 API 的设计可能会要求向应用程序发送数据入站的 LUA 谓词必须在逻辑节点完成数据检查后才能完成操作。 因此,本地节点在完成入站消息的发送检查后,将始终响应使用功能管理接口 (FMI) 的 LUA 变体的客户端应用程序。 这允许客户端应用程序完成 LUA 谓词的处理,并返回对 LUA 应用程序的控制。
如果入站消息通过了本地节点的发送检查,且将被发送至主机,则本地节点将向客户端应用程序发送 Status-Acknowledge(ACKLUA) 消息来指明这一点。 然后,客户端应用程序可以使用 OK 返回代码来完成 LUA 谓词处理。 请注意,Status-Acknowledge(ACKLUA) 消息并不意味着数据已成功发送到主机或主机已接收到数据。 随后可能会发送 Status-Acknowledge(Nack-1) 消息,指示主机拒绝了数据。
如果入站消息未通过本地节点发送检查,与非 LUA 客户端应用程序一样,它也将返回 Status-Acknowledge(Nack-2) 消息。 然后,客户端应用程序可以通过发送消息的 LUA 谓词的非 OK 返回代码向 LUA 应用程序报告这一情况。
如果客户端应用程序提供了 LUA API,则应等待 Status-Acknowledge(ACKLUA) 或 Status-Acknowledge(Nack-2),以确定是否向 LUA 发送谓词返回确定或错误返回代码。 如果不需要这种对本地节点发送检查的依赖性,则客户端应用程序可以忽略 Status-Acknowledge(ACKLUA) 消息。
请注意,在某些争用条件下,本地节点在回复客户端应用程序之前无法完成其发送检查。 在这些情况下,本地节点将返回 Status-Acknowledge(ACKLUA),但如果在剩余的发送检查期间检测到错误,则可能随后发送 Status-Acknowledge(Nack-2)。 因此,对于同一入站消息,客户端应用程序可能会收到 Status-Acknowledge(ACKLUA),后跟 Status-Acknowledge(Nack-2)。
在 FMI 的 LUA 变量的传输头 (TH) 中,将使用加急流指示符 (EFI)、目标地址字段 (DAF) 和原始地址字段 (OAF)。 将忽略其他字段(包括序列号字段)。 在 FMI 的 LUA 变量的 RH 中,将使用除队列响应指示符 (QRI) 和速度指示符 (PI) 之外的所有字段。
对于入站数据,FMI 的 LUA 变量的第一个字节是 TH[0]。
以下三个图形说明了应用程序针对不同消息可以发送的 Status-Acknowledge(ACKLUA) 确认协议。
在第一个图中,应用程序发送通过了本地节点发送检查的 Data 消息。
应用程序发送通过了本地节点发送检查的 Data 消息
在下图中,应用程序发送通过了本地节点发送检查的 Status-Acknowledge(Ack) 消息。
应用程序发送通过了本地节点发送检查的 Status-Acknowledge(Ack) 消息
在下图中,应用程序发送通过了本地节点发送检查的 Status-Acknowledge(Nack-1) 消息。
应用程序发送通过了本地节点发送检查的 Status-Acknowledge(Nack-1) 消息