【Day6】Opcua的介绍与连线

这段时间由於公司稍微忙一点,所以我就先把脑内的存稿一一先放出来,

软件的实作过程等有空档我再慢慢边重作边介绍出来。

1.Opcua是啥?

OPC UA的全名是 OPC Unified Architecture(OPC统一架构)。

OPC UA是OPC基金会应用在自动化技术的机器对机器网络传输协议(节录自wiki)。

简单来说,OPC UA就是应用於工业放面的通讯协定,主要是微软和一些传统软件解决

方案商主导的一个通讯格式,早期主要是出现在 Window相关的解决方案,过了一阵子

就有相关的开源版本。

2.简单的建立连线

这边主要是使用 Python 简单的在树梅派建立一个传输传感器数据的本地 Server

主要是根据网路一个不知名的案例改成我自己需要的版本。

有兴趣可以参考一下。

下面是 Server 端,在这边只是简单的模拟工厂的机台。

from opcua import ua,Server
from random import randint
import datetime
import time
import Adafruit_DHT 

server =Server()

url ="opc.tcp://192.168.50.128:4840"
#需转成自己server的ip

server.set_endpoint(url)

DHT_SENSOR = Adafruit_DHT.DHT11

DHT_PIN = 4

'''
security_policy =   [
                        ua.SecurityPolicyType.NoSecurity,
                        
                    ]
server.set_security_policy(security_policy)
policyIDs =   [
                "Anonymous"
            ]
server.set_security_IDs(policyIDs)
'''
#server.set_security_policy([ua.)SecurityPolicyType.Basic256_SignAndEncrypt])
name ="OPCUA_SIMULATION_SERVER"

addspace =server.register_namespace(name)

node =server.get_objects_node()

Param =node.add_object(addspace,"Parameters")

Temp = Param.add_variable(addspace,"Temperature", 0)
Humid = Param.add_variable(addspace,"Humidity", 0)
Time = Param.add_variable(addspace,"Time" ,0)

Temp.set_writable()
Humid.set_writable()
Time.set_writable()

server.start()
print("Server started at {}".format(url))

while True:
    Humidity, Temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
    TIME = datetime.datetime.now()
    print("Temp={0:0.2f}*C  Humidity={1:0.2f}%".format(Temperature, Humidity))
    Temp.set_value(Temperature)
    Humid.set_value(Humidity)
    Time.set_value(TIME)

    time.sleep(2)

另外的就是客户端,这边我是在django上面接收资料,不过接收的方式也是根据原本的python 程序码版本修改的。
下面的是原本的版本。

from opcua import ua,Client
import time

url ="opc.tvp://192.168.1.52:4840"

client =Client(url)
'''
client.user_certificate = None
client.user_private_key = None
#client.set_security(client, None, None)
security_policy = [
    ua.SecurityPolicyType.NoSecurity,

]

client.set_security(client, security_policy, None)
'''
#client.secure_channel_id = None

client.connect()
print("Client Connected")

while True:
    Temp = client.get_node("ns=2;i=2")
    Temperature = Temp.get_value()
    print(Temperature)

    Humid = client.get_node("ns=2;i=3")
    Humidity = Humid.get_value()
    print(Humidity)

    TIME = client.get_node("ns=2;i=4")
    TIME_value = TIME.get_value()
    print(TIME_value)

    time.sleep(1)

放入 Django Views的版本就大概节录一下

def getCollectorData(request):
    
    MachineData={            
        'DeviceId': 1,
        'DeviceName':'1,
        'Status': random.randint(0,1), #设备运行状态
        'OverheadFlow':random.randint(1,10) ,#'顶流量',
        'Power': random.randint(10000,100000), #功率
        #中间跳过 这边只是简单的初始化,其实没啥必要
        'totalGoodProductionNumber':random.randint(1,10), #'生产良品总数'
    }


    
    #url ="opc.tcp://192.168.3.221:4840"
     
    client =Client('opc.tcp://192.168.3.221:4840')
    client.connect()
   

    node_Oil_Temp_Current_Val = client.get_node("ns=1;i=1336")
    val_Oil_Temp_Current_Val = node_Oil_Temp_Current_Val.get_value()
    MachineData['Oil_Temp_Current_Val']= val_Oil_Temp_Current_Val
   

    #中间跳过  大致上跟上面的结构没啥差异

    totalGoodProductionNumber = client.get_node("ns=1;i=1323")
    totalGoodProductionNumber = totalGoodProductionNumber.get_value()
    MachineData['totalGoodProductionNumber']= totalGoodProductionNumber
     
    
    client.disconnect()
    
    Collector={
    'CollectorId': 1,
    'CollectorName':'1#采集器',
    'Status': 0,
    'DeviceList':[MachineData],
    }

    #新增一笔记录
    totalProductionNumber=MachineData['totalProductionNumber'],
    OilTempCurrentValPhase1=MachineData['OilTempCurrentValPhase1'], 
    #中间跳过 
    totalGoodProductionNumber=MachineData['totalGoodProductionNumber']) 
    unit.save()  #写入资料库  
    return HttpResponse( json.dumps(Collector));
    ```

<<:  Day 8 Self-attention(二) 如何算出input彼此是相关的?

>>:  方法的输入处理,其实不简单!

Day 16. Unity: 来学Implement data persistence between sessions

:D     这个部分的概念,其实跟把训练好的模型还有过程的Loss value、Metrics v...

Day-9 Excel筛选大秘辛

今日练习档 ԅ( ¯་། ¯ԅ) 经过昨天的排序介绍後,今天就来到了排序後通常会进行的「筛选」,接着...

【day8】居家办公的早餐diy卷饼

对比现在忙碌的工作 开始怀念过去两个月居家办公的时光 在相对有余裕的时候下厨 挑选自己喜欢的食物 一...

【D30】模组化#5:执行讯号灯程序

前言 把写入资料、制作讯号灯的功能模组化了,接着要整合整个程序,所以制作了run_get_data....

Day 7 图片去背 ( 遮罩 )

图片去背 ( 遮罩 ) 教学原文参考:图片去背 ( 遮罩 ) 这篇文章会介绍使用 GIMP 的图层遮...