电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
新基建来了,带你走进工业互联网!
分 享
扫描二维码分享
新基建来了,带你走进工业互联网!
opcua
工业互联网
dreamadmirer
关注
发布时间: 2020-03-19
丨
阅读: 1384
##前言 社区真的是大佬云集,看到很多小伙伴分享一些DIY创意文章,都包含了很多干货,受益匪浅。但可惜的是,都是电子领域的。根据我一些研究内容,今天我想给大家分享关于工业领域的IT技术。最近国家发布了7个新基建项目,承载着中国为占领下一轮发展制高点的期望。工业互联网便是其中之一,重要程度不言而喻。希望通过这篇文章让大家近距离了解工业互联网、中国制造2025等概念,并给大家介绍一个核心技术-**OPC UA**,期望能抛砖引玉。 ![](https://cf05.ickimg.com/bbsimages/202003/f90da4974c9d5122ede5dd09ebec567b.png) ##相关背景 工业4.0、中国制造2025、“智能制造”等相关战略措施掀起了工业领域一波热潮,如何对工厂进行智能化改造和升级也引起了工业界技术人员与研究学者的广泛讨论。中国制造2025战略是2015年由国家正式提出,该战略主要包含了三个制造范式:数字化、网络化、智能化。这也表明了我国智能制造将实施三步走。数字化代表工业现场一切生产数据、运行状态、加工参数都能够被感知和采集,可以通过云端平台远程查看工厂运行情况,实现“黑灯工厂”。网络化代表着企业间、供应链间可以协同生产、分工合作,这样就最大化利用了闲置生产资源。智能化代表着工厂具有了智能感知、自主决策、迭代优化等能力,即工厂拥有“大脑”,具备了类似人类的思考能力。工业互联网是对应于数字化、网络化发展阶段,是中国制造2025的中间关键阶段。 目前我们国家绝大多数工厂仍处于自动化生产阶段,甚至还有一些工厂还未真正实现自动化。随着工厂规模不断扩大,提升产能的需求不断深化,工厂进行数字化改造已迫不及待。 数字化工厂强调对工业现场运行状态和加工进度等信息的实时监测,那么将涉及到一些问题。如何采集工厂内多个设备包含的信息尼?如何保证实时性和可行性尼? 一些工业领域的基本事实大家可能不太了解。比如:车间设备存在“信息孤岛”,由于加工精度和加工工艺的需求不同,工厂会购买不同厂商的数控机床或者其他设备,由于厂家为了维护自身利益,往往会在设备上使用本公司研发的通讯协议,这就导致了工厂内设备使用的通讯接口不尽相同,给数字化改造带来了巨大挑战。 ##OPC UA 协议 这时,IEC(国际电工委员会)推出了一个标准通讯协议-OPC UA,它集多种优点于一身:支持多种操作系统、兼容多个通讯协议、具有安全保护措施、适应性强(甚至仅16KB内存ARM单片机也支持)等等。几乎OPC UA满足了工业界对采集现场数据的所有需求,它让不同厂商、不同通讯协议的设备全部互联互通起来,以统一的信息模型来描述工厂内加工设备的基本属性、运行状态和加工进度等。换句话说,OPC UA相当于“万国语言翻译器”,将大家各自的语言翻译成通用语进行沟通,这就促使了工厂内部正在实现互联互通,也是工业互联网中非常重要的一环。 OPC UA 技术的广泛适用性使全新的垂直集成理念能够完全实施。对OPC UA 组件进行串级,从工厂底层到上端IT系统层面,信息能够安全和可靠地传输。在现场设备上,使用嵌入式UA 服务器。在自动化级的UA 组件,在企业级ERP、MES系统中可以集成UA 客户机,可以进行串级连接。UA 组件分布在不同的地理位置处,这样容易使用防火墙让彼此分开,保证了信息的安全性。工作模式类似于下图: ![](https://cf05.ickimg.com/bbsimages/202003/49f4f1acfa00859e224373a28718d3ab.jpg) ##一个实验demo 下面我将通过一个简单Demo来介绍一下如何来实现OPC UA通讯。OPC UA的工作模式为服务器/客户端模式,它的核心是:地址空间和信息模型。信息模型给出的数据格式标准,地址空间用来存放数据内容。专业性的内容本文就不多说了,有兴趣的小伙伴可以查阅官方文档。 ###1.前期准备 - **编程环境**:Pycharm和Spyder (之所以选择两个编程环境,是因为本文demo采用OPC UA的服务器/客户端模式。我只有一台电脑,因此一个IDE担当服务器,另一个IDE作为客户端。) - **编程语言**:python(已经有支持OPC UA库) 安装OPC UA库: 1. Pycharm软件内部setting中可以直接下载。(截图中下载的库名为freeopcua,是一个opcua开源库,包比较齐全。) ![](https://cf05.ickimg.com/bbsimages/202003/aeb2063296424be0a73a6d1eb1aedc73.png) > (记得切换清华的镜像下载源文,否则会很慢!) ![](https://cf05.ickimg.com/bbsimages/202003/732a216f74a898dc8917815c85d75537.jpg) 2. Cmd中下载。 输入Win+R,输入cmd进入命令行操作。 pip install opcua --index https://pypi.mirrors.ustc.edu.cn/simple/ ![](https://cf05.ickimg.com/bbsimages/202003/19124d0805699ed6dba8c5d08caa3152.png) ###2.程序编写 服务器端代码: ````python #encoding=utf-8 import sys sys.path.insert(0, "..") import time from opcua import ua, Server if __name__ == "__main__": # 实例化服务器 server = Server() # 设定服务器URI和名称。0.0.0.0:4840为本机。 server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/") server.set_server_name("FreeOpcUa Example Server") # 初始化namespace,可以被替换,下面的地址只是参考 uri = "http://examples.freeopcua.github.io" idx = server.register_namespace(uri) # 获取objects节点,并放置节点的地方 objects = server.get_objects_node() # 创建一个新的节点类型,并在地址空间中实例化它 myobj = objects.add_object(idx, "MyObject") myvar = myobj.add_variable(idx, "MyVariable", 5.5) myvar.set_writable() # 使得MyVar可写操作 # starting! # 开始运行! server.start() try: count = 0 print('Work started!') while True: time.sl
eep(1) # 输入将要发送给客户端的变量值 count = float(input("Please input the information :")) myvar.set_value(count) finally: # close connection, remove subcsriptions, etc # 关闭连接,并结束订阅等 server.stop() print('Work stopped!') ``` 客户端端代码: ```python # encoding=utf-8 import sys,time from opcua import Client sys.path.insert(0, "..") if __name__ == "__main__": # 需要连接user的地址 client = Client("opc.tcp://localhost:4840/freeopcua/server/") try: # 建立连接 res = client.connect() # 获取root下的Objects节点的所有子节点 root = client.get_root_node() print("Objects node is: ", root) print("Children of root are: ", root.get_children()) while (1): myvar = root.get_child(["0:Objects", "2:MyObject", "2:MyVariable"]) obj = root.get_child(["0:Objects", "2:MyObject"]) print("myvar is: ", myvar) print("myobj is: ", obj) # 对于Variable类型数据,使用get_value/get_data_value()获取存储的值 print("myvar is: ", root.get_children()[0].get_children()[1].get_variables()[0].get_value()) time.sl
eep(2) finally: # 断开连接 client.disconnect() ``` ###3. **实验结果**: 最终效果:服务器端输入什么数字,客户端中将显示出来。 ------------ ![](https://cf05.ickimg.com/bbsimages/202003/dadaa7cabeb8747bf7e5a5c9a8c29c17.jpg) ------------ 有问题的话,欢迎下方留言,一起讨论!
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
dreamadmirer
擅长:消费电子
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交