当前位置: 首页 > 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.dinnco.com/news/50874.html

相关文章:

  • 天猫商城入驻seo推广 课程
  • 申请自助建站英国搜索引擎
  • 无法与网站建立安全连接网站推广关键词工具
  • 视频制作软件电脑江门seo外包公司
  • 老域名做网站视频推广方案模板
  • 网站备案流程详解网站建设的重要性
  • 企业型网站制作长春网长春关键词排名站设计
  • 网站的制作过程行业网站有哪些平台
  • 小米路由器3 wordpress优化网站seo方案
  • 深圳手机网站建设安卓优化大师清理
  • 学习做网站教程2022最新新闻素材摘抄
  • 花钱让别人做的网站版权是谁的怎么才能创建一个网站
  • 苹果手机网站大全网址怎么创建
  • 网站制作的付款方式南阳seo优化
  • 网站ip地址查询自己如何做网站
  • 深圳网站模板建站网页设计首页制作
  • 河南智慧团建登录入口谷歌优化师
  • 有哪些创意平面设计公司seo平台代理
  • 眉山政府网站建设产品推广建议
  • 莱城高新区建设局网站成都做整站优化
  • 响应式网站价格网络营销理论基础有哪些
  • 利用网站开发诈骗海外推广
  • 制作动画的网站网站设计公司有哪些
  • 建设网站价格昆明seo关键词
  • 做简历的网站有站长工具服务器查询
  • 做app网站的公司名称合肥百度快照优化排名
  • 中企网站建设怎么找百度客服
  • 学电商比较好的网站有哪些常州网络推广平台
  • 重庆seo网站免费网页在线客服制作
  • 重庆网站公司推荐网络热词2022