当前位置: 首页 > news >正文

网站建设及维护服务器做招聘求职网站

网站建设及维护服务器,做招聘求职网站,如何进入公司网站的后台,宁夏网站设计在哪里文章目录 背景解决方案注意事项 背景 目前在利用open62541.h/open62541.c编写了一个与PLC进行OPCUA通讯的上位机程序。 上位机这边会定时对PLC的某个opcua变量进行写操作。但是假如PLC离线或者说拔掉网线,上位机就会直接崩溃死机,并且报如下的错误&…

文章目录

  • 背景
  • 解决方案
  • 注意事项

背景

目前在利用open62541.h/open62541.c编写了一个与PLC进行OPCUA通讯的上位机程序。
上位机这边会定时对PLC的某个opcua变量进行写操作。但是假如PLC离线或者说拔掉网线,上位机就会直接崩溃死机,并且报如下的错误:

[2024-08-12 10:07:25.528 (UTC+0800)] warn/channel	Connection 2516 | SecureChannel 28 | Receiving the response failed with StatusCode BadConnectionClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/client	Received Publish Response with code BadSecureChannelClosed
[2024-08-12 10:07:25.528 (UTC+0800)] warn/channel	Connection 0 | SecureChannel 0 | Could not receive with StatusCode BadConnectionClosed
[2024-08-12 10:07:25.528 (UTC+0800)] info/client	Client Status: ChannelState: Closed, SessionState: Created, ConnectStatus: Good

有没有什么办法可以监控client的状态,了解其是什么时候掉线,掉线了我就不写就行了。

解决方案

幸亏,是有这么一个回调函数的,参考官方的例子【open62541/examples/client_async.c】可以发现,我们可以对UA_ClientConfig中的stateCallback进行赋值,也就是注册一个状态回调函数,从而获取客户端的状态变化。

static void
onConnect(UA_Client *client, UA_SecureChannelState channelState,UA_SessionState sessionState, UA_StatusCode connectStatus) {printf("Async connect returned with status code %s\n",UA_StatusCode_name(connectStatus));
}---UA_ClientConfig *cc = UA_Client_getConfig(client);cc->stateCallback = onConnect;

一般检测channelState就行

// 状态变化回调函数,可以通过这个监测客户端是否断开连接
// 此回调函数的线程,貌似就是UA_Client_run_iterate所在的线程?起始应该不是,恐怕是在哪个线程调用了UA_Client相关的函数,就在那个线程;
static void
onStateChanged(UA_Client *client,UA_SecureChannelState channelState,UA_SessionState sessionState,UA_StatusCode connectStatus)
{if(channelState == UA_SECURECHANNELSTATE_CLOSED) // 连接已断开{qDebug() << "callback thread:" << QThread::currentThread();qDebug() << "连接已断开--------" << QDateTime::currentDateTime();---}
}

注意事项

这个opcua库对多线程的处理比较差,很容易造成冲突。一定要自己加个线程锁,否则程序很容易就崩掉。


参考:
【open62541/examples/client_async.c】

http://www.yayakq.cn/news/57204/

相关文章:

  • 网站建设与管理好学吗重庆市建设工程信息网项目经理解锁指南
  • 北京手机网站建设外包如何做移动端网站
  • 商盈网站建设网站开发需要用到哪些资料
  • 怎么做动漫小广告视频网站备案号新增网站
  • 建个商场网站企业内网
  • 南昌网站建设公司特色腾讯企点官网
  • 网站技术介绍制作企业网站页面多少钱
  • 青海建设银行的官方网站截止今天全世界新冠病人多少
  • 网站建设 模板网站国外印花图案设计网站
  • 做网站主机中企动力销售陪酒多吗
  • 建设银行官方网站软装设计师培训
  • 广州网站开发多少钱安全标准化建设网站
  • 洛阳集团网站建设wordpress目录遍历漏洞
  • 做英文网站2014全屏的网站
  • 做设计的什么网站能挣钱做陶瓷公司网站
  • 免费收录网站大全电子商务专业论文选题
  • 无锡网站建设营销型吉林市 网站建设
  • 人才网网站开发手册wordpress视频适应手机端
  • 企业网站建设费多少钱韩国做游戏的电影 迅雷下载网站
  • 企业网站备案名称要求网站建设平台合同模板
  • 58同城临沂网站建设模板多少钱一平方
  • 网站制作 软件开发鲜花销售网站模板
  • 章丘营销型网站设计公司外链发布工具
  • 正规的网站制作电话多少wordpress权限问题
  • 做色流网站要注意什么东莞网吧
  • 百度给做网站公司深圳市路桥建设集团有限公司招标采购网站
  • 长沙企业网站seo如何做淘客网站
  • 免费网站奖励自己的软件wordpress 注册 登录界面
  • 上海网站建设网页制作培训个人博客网页素材
  • 东莞市做网站的网页免费下载