Sending requests and receiving responses

<< 点击显示目录 >>

主页  PVI通信 > PVI帮助信息 > PVI base system > PVICOM interface > Requests and responses >

Sending requests and receiving responses

名称中带有 "Request "字样PVICOM函数用于 发送请求(例如:PviLinkRequest、PviReadRequest、PviWriteRequest等)。

名称中带有 "Response "字样的PVICOM函数用于读取响应数据(例如,PviLinkResponse、PviReadResponse、PviWriteResponse,等等)。一个例外是使用PVICALLBACK_DATA类型的回调函数作为 用户信息。由于响应数据是直接传递给回调函数的,所以不需要使用PVICOM函数来读取。

对一个请求的响应同时也是一个请求确认。如果在PVI管理器或PVI线路中执行请求时发生错误,那么响应数据包括相应的错误代码。如果响应数据没有发生错误,那么响应就预示着该请求被正确执行。

对于每个请求,用户可以选择PVICOM应用是否应该收到响应。如果在调用请求函数时指定了用户信息("hResMsg "参数不等于0),那么总是会向应用程序发送一个响应。如果没有指定用户信息("hResMsg "参数为零),那么就不会向应用程序发送响应。然而,如果没有响应,应用程序就不能确定请求是否被正确执行,或者是否发生了错误。

可以使用 POBJ_ACC_CANCEL 访问类型发送一个取消一个或多个活动请求的请求  。这个取消功能既可以指某些请求,也可以指一个链接对象的所有请求。例如,一个时间密集型的请求(例如上传或下载模块)可以在完成之前被取消。在每个被取消的请求的响应数据中都会报告错误12043。取消请求的响应数据总是在被取消的请求的响应数据之后被发送到PVICOM应用程序。

如果应用程序在发送请求时已经定义了一个有效的用户信息,那么通常情况下,响应数据总是被发送到应用程序。只有在两种情况下,响应数据不会被送回活动的请求。

1.当释放一个链接对象(PVICOM函数 PviUnlinkRequest /PviXUnlinkRequest或 PviUnlinkAll)时,分配给它的所有请求被取消,响应数据被删除。

2.当释放一个通信实例时(PVICOM函数 PviDeinitialize 或PviXDeinitialize),所有分配给它的请求都被取消,响应数据被删除。

然而,不能确定一个请求是否在执行前就被取消了,或者只是执行后的响应数据被删除了。例如,在对象被释放之前,一个变量应该被设置回0。如果在PviUnlinkRequest函数之前直接调用PviWriteRequest函数,那么就不能保证写请求的执行。为了确保写请求被执行,PviUnlinkRequest函数只能在收到写请求的响应后被调用。

在客户机/服务器 通信连接中断的情况下,该程序取决于中断的长度。如果中断是在通信超时期内,那么数据传输就会在连接重新建立后继续。除非在处理请求时有延迟,否则PVICOM应用程序不会注意到中断。但如果中断的时间超过了通信超时允许的时间,那么所有未完成的请求都会触发用户信息,并在响应数据中记录相应的错误。