我正在使用 OpcNetApi.dll 驱动程序连接 Softing opc 服务器,并且我在 Windows 服务中每秒从订阅读取方法读取几个标签,最初它读取的值可以持续几个小时,比如 10 或 15 小时,但后来我不断得到这个 ReadMaxAge每次读取都例外,当我重新启动服务器时,它又开始正常工作了几个小时。我试图寻找原因,但没有运气。
有谁知道 ReadMaxAge 异常请帮忙。
因此,我对使用 OpcNetApi 编写的 OPC 客户端进行了长期测试(6 天!),连接到 MatrikonOPC 服务器进行模拟,结果完全没有崩溃。我还检查了 OpcNetApi 的代码!底层 COM 对象抛出异常(当然不提供详细信息)。目前我怀疑它崩溃是因为 OPC 服务器本身没有运行。我已经在我的“生产”应用程序中添加了额外的日志记录来验证我的怀疑。
编辑:到目前为止,还没有与“ReadMaxAge”相关的崩溃(服务已经运行了一周)。我建议您在发生异常时验证您正在连接的 OPC 服务器是否在线。
在我的例子中,它可以连续保持大约 3 到 4 天。发生这种情况时,重新启动服务将再次起作用。目前我正试图让服务在发生这种情况时自动重启。显然,这是暂时的,可以让它继续下去。
private void OpcServer_OPCError(string flags, Exception e)
{
logger.Error("OPC error: {error}", e.Message);
// Let OS to restart service
this.ExitCode = 1;
this.Stop();
}
一旦服务退出错误,设置服务恢复选项如下; 服务恢复选项