这段时间由於公司稍微忙一点,所以我就先把脑内的存稿一一先放出来,
软件的实作过程等有空档我再慢慢边重作边介绍出来。
OPC UA的全名是 OPC Unified Architecture(OPC统一架构)。
OPC UA是OPC基金会应用在自动化技术的机器对机器网络传输协议(节录自wiki)。
简单来说,OPC UA就是应用於工业放面的通讯协定,主要是微软和一些传统软件解决
方案商主导的一个通讯格式,早期主要是出现在 Window相关的解决方案,过了一阵子
就有相关的开源版本。
这边主要是使用 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彼此是相关的?
:D 这个部分的概念,其实跟把训练好的模型还有过程的Loss value、Metrics v...
今日练习档 ԅ( ¯་། ¯ԅ) 经过昨天的排序介绍後,今天就来到了排序後通常会进行的「筛选」,接着...
对比现在忙碌的工作 开始怀念过去两个月居家办公的时光 在相对有余裕的时候下厨 挑选自己喜欢的食物 一...
前言 把写入资料、制作讯号灯的功能模组化了,接着要整合整个程序,所以制作了run_get_data....
图片去背 ( 遮罩 ) 教学原文参考:图片去背 ( 遮罩 ) 这篇文章会介绍使用 GIMP 的图层遮...