在创建了C服务器之后,部署在linux端。接着要在自己客户端的界面上添加关于节点变量的刷新和方法的调用。而OPCUA的客户端有比较多的通用版本,在第一节简单示例中便有一个WIndow版本的客户端,可以查看所有服务器中创建的节点,方法和类型等等。

Python-OPCUA

而本人要将该客户端服务集成到Python版本客户端去,经过查找资料发现是有Python版本的库的,源码在https://github.com/FreeOpcUa/python-opcua上,安装如下:

Python安装包安装:

pip install opcua

或者下载源码进行Python setup.py install的方式进行安装。

测试如下,则表示安装成功了:

服务器方面的就不做详细说明,而且暂时没有使用Python进行编写服务器,交叉编译运行在arm上的服务器Python似乎有些困难的样子。

但是可以从Github上看到提供的一些关于创建服务器和客户端的例子,服务器的节点创建和Object创建都相当简单,如果能够使用Python进行编写服务器,我还是推荐Python,省得和指针捉迷藏了。

Client

本客户端是在一个线程进行刷新使用的,所以并没有使用到OPCUA的Pub/Sub订阅服务。

Python集成之后再次提供的接口真的相当简单,这里简单介绍使用,分为连接,读写节点,调用方法。

连接

简单的导入,添加地址:本linux端的ip为192.168.1.120,所以如下即可连接成功。

from opcua import Client
client = Client("opc.tcp://192.168.1.120:4840/freeopcua/server/")
client.connect()

读写节点

之前的服务器编辑节点时,大家应该知道我是使用的字符型id(ns=1;s=pos).

这里没有做扫描式显示,而是已经知道了服务器是有这么一个节点,便可以读可以写:

读值:

ret = client.get_node("ns=1;s=pos")
print(ret.get_value())

写值(这个未做尝试,但是看源码应该可以直接写个值,不要像下面第二行一样麻烦):

var = client.get_node("ns=1;s=pos")
var.set_value(23,ua.VariantType.Double)

调用方法

objects = client.get_objects_node()
met = objects.get_child("1:Pump")
retval = met.call_method("1:setpos", [True,True,True])
print(retval)

objects为协议的objects的大目录,met是我之前在服务器创建的Object的反馈。

直接调用call_method即可,注意对应上服务器上方法需要的输入数组的数目与类型,防止出错。

调用多参数方法

#要获取该方法的父节点!
ob = client.get_node("ns=1;s=parent")
v1 = ua.Variant([8],ua.VariantType.UInt16,dimensions=1,is_array=1)  #参数是列表形式
v2 = ua.Variant(["arg11"],ua.VariantType.String,dimensions=1,is_array=1) #参数是列表形式
ob.call_method("1:XXX",v1,v2)
#注意版本的更新,使用的0.98.12是可以的,0.98.7就有报错

客户端框架

调用一个线程即可,在里面0.1s进行连接与检测是否断开,断开的话1s再次不断循环连接,达到稳定的客户端的效果。

    def run(self):#运行一个线程flag = 0while True:if flag == 0:try:self.client = Client("opc.tcp://127.0.0.1:4840/freeopcua/server/")self.client.connect()self.objects = self.client.get_objects_node()flag = 1except :time.sleep(1)continuetry:actpos0 = self.client.get_node(XXX)YYY = actpos0.get_value()try:self.client.disconnect()except:passflag = 0time.sleep(0.1)

注意

1.定义方法的int型输入数组时,个人遇到反复无法成功调用方法的问题,后来发现设置int64可行,int16无法和Python版本的变量对应上。

2.INT64,INT32数据在实际使用上区分吧,有时候INT64不行的

3.数组类型进行赋值的时候目前只能将整个数组进行重新赋值,无法针对某一个元素进行单独赋值。这是我目前的已知,如果发现了单独赋值的功能再说。

OPCUA 复杂服务器对应的Python客户端(回调与方法)相关推荐

  1. pythontcp服务器框架_tcp服务器简单框架-python客户端

    tcp服务端为C++代码,在Windows下实现,代码如下: // a TCP Server #define WIN32_LEAN_AND_MEAN #define _WINSOCK_DEPRECAT ...

  2. 服务器响应回调函数,解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)...

    由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...

  3. 在 ASP.NET 网页中不经过回发而实现客户端回调

    一.使用回调函数的好处 在 ASP.NET 网页的默认模型中,用户会与页交互,单击按钮或执行导致回发的一些其他操作.此时将重新创建页及其控件,并在服务器上运行页代码,且新版本的页被呈现到浏览器.但是, ...

  4. ASP.NET无刷新客户端回调

    首先说一下:Page.ClientScript 用于管理脚本.注册脚本和向页添加脚本. 返回结果:一个 System.Web.UI.ClientScriptManager 对象. ClientScri ...

  5. ASP.NET 2.0 正式版中无刷新页面(客户端回调)的开发

    在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, ASP.NET2.0 自带的无刷新页面技术没有被很多人 ...

  6. 系统消息是放客户端还是服务器,系统消息是放客户端还是服务器

    系统消息是放客户端还是服务器 内容精选 换一换 删除弹性云服务器指定标签.需在客户端通过以下HTTP header指定微版本号:X-OpenStack-Nova-API-Version: 2.26.t ...

  7. ASP.NET2.0实现无刷新客户端回调

    Asp.Net2.0的客户端回调是一种很让人激动的方法,他能够让我们控制要提交什么数据给服务器而不用提交整个页面,同时服务器也只返回你所需要的数据而不要发回整个页面. 首先我们要说一个很重要的方法:G ...

  8. asp.net 客户端回调功能的实现机制探讨(响应部分及可能的优化)

    上一部分说道在发送前,已经将回调函数赋值成 xmlRequest.onreadystatechange=WebForm_CallbackComplete; 那么咱们就先来看看这个callback方法. ...

  9. 我们使用 Kafka 生产者在发消息的时候我们关注什么(Python 客户端 1.01 broker)...

    之前使用 Kafka 的客户端消费者比较多一点,而且也是无脑订阅使用也没有深入了解过具体的参数.总的来说使用不够细节. 这次公司项目活动期间暴露非常多的问题,于是有了这篇文章. 首先我们来拆解一下 K ...

最新文章

  1. 20位数字转化成6位不重复码_人力资源管理浅析身份证数字号码编排常识甄别年龄、性别、籍贯…...
  2. SPI分配传感器的寄存器
  3. python编程基础张勇答案_Python程序开发、编程基础阶段试题及答案
  4. 利用组策略管理器映射网络驱动器的方法
  5. idea lombok安装后还是标红_开发效率不高?强烈推荐这十款精选IDEA插件
  6. C扩展php的方法(制作php扩展库)
  7. 小米3g刷高格固件_高恪可刷机型清单
  8. 大华平台显示归属服务器离线,大华报警联网系统方案
  9. javascript 推拉式菜单
  10. 计算机专业基础820考什么,820计算机专业基础考纲
  11. mysql 唯一索引_mysql创建唯一索引
  12. 优化算法:《Lookahead Optimizer: k steps forward, 1 step back》
  13. 端端Clouduolc的安全机制
  14. c语言取余规则_这是我的C语言入门笔记
  15. hmmer建立hmmscan
  16. 为什么双赞安卓ARM工控主板应用前景那么好?
  17. wangEditor 生成的表格在页面不显示边框
  18. dotNet MSIL中的一些不常见IL指令
  19. 中国重型搅拌机市场深度研究分析报告
  20. 图片怎么添加边框?这些方法总会适合你

热门文章

  1. 男人,如何洞悉女人的内心世界笔记
  2. 想要制作好看的壁纸,有CorelDRAW就够啦
  3. 微信企业号加密异常处理:InvalidKeyException
  4. 网络对抗技术——实验四:恶意代码技术
  5. sql命令手册(转载)http://www.fanqiang.com
  6. Jetson Xavier NX学习笔记(三)系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版)
  7. 使用串口发送实现ACX720开发板时钟显示
  8. 戴尔电脑插上耳机之后仍然外放
  9. Matplotlib下plt常用指令总结
  10. 排污单位生产设施及污染治理设施用电(能)监控系统原理、作用、组成及功能