Page 1 of 2
Opensource OPC UA für den Raspberry Pi
Posted: 22 Nov 2016, 17:31
by mimuel
Hallo,
übrigens gibt es ein freies
OPC UA für den Rasp:
Download hier:
https://github.com/FreeOpcUa
Doku hier:
http://python-opcua.readthedocs.io/en/latest/
In Python sehr einfach zu programmieren - funktionierte auf Anhieb!
Gruß Michael
Re: Opensource OPC UA für den Rasp
Posted: 29 Nov 2016, 11:27
by volker
Hallo Michael,
super! Vielen Dank für diese Links. Bin gespannt, ob hier jemand das mal ausprobiert und darüber berichtet...
Re: Opensource OPC UA für den Rasp
Posted: 13 Dec 2016, 12:23
by scrolllkock
Hallo Michael,
kannst du mir bei OPC UA behilflich sein?
Ich habe das Projekt installiert und bekomme bei Ausführung des scripts client-minimal.py auch eine Verbindung zum OPC UA Server auf meiner B&R Steuerung...
Aber weiter...?
Hier das leicht gewandelte Script:
Code: Select all
import sys
sys.path.insert(0, "..")
from opcua import Client
if __name__ == "__main__":
client = Client("opc.tcp://192.168.100.250:4840/server/")
# client = Client("opc.tcp://localhost:4840/freeopcua/server/")
# client = Client("opc.tcp://admin@localhost:4840/freeopcua/server/") #connect using a user
try:
client.connect()
# Client has a few methods to get proxy to UA nodes that should always be in address space such as Root or Objects
root = client.get_root_node()
print("Objects node is: ", root)
# Node objects have methods to read and write node attributes as well as browse or populate address space
print("Children of root are: ", root.get_children())
# get a specific node knowing its node id
#var = client.get_node(ua.NodeId(1002, 2))
#var = client.get_node("ns=3;i=2002")
var = client.get_node("ns=3;i=84")
print(var)
#var.get_data_value() # get value of node as a DataValue object
#var.get_value() # get value of node as a python builtin
#var.set_value(ua.Variant([23], ua.VariantType.Int64)) #set node value using explicit data type
#var.set_value(3.9) # set node value using implicit data type
# Now getting a variable node using its browse path
myvar = root.get_child(["0:Objects", "2:MyObject", "2:MyVariable"])
obj = root.get_child(["0:Objects", "2:MyObject"])
print("myvar is: ", myvar)
finally:
client.disconnect()
und hier die Ausgabe:
Code: Select all
pi@RevPi ~/python-opcua/examples $ python3 client-min*
Objects node is: Node(TwoByteNodeId(i=84))
Children of root are: [Node(TwoByteNodeId(i=85)), Node(TwoByteNodeId(i=86)), Node(TwoByteNodeId(i=87))]
Node(NumericNodeId(ns=3;i=84))
Traceback (most recent call last):
File "client-minimal.py", line 34, in <module>
myvar = root.get_child(["0:Objects", "2:MyObject", "2:MyVariable"])
File "../opcua/common/node.py", line 435, in get_child
result.StatusCode.check()
File "../opcua/ua/uatypes.py", line 201, in check
raise UaStatusCodeError(self.value)
opcua.ua.uaerrors._auto.BadNoMatch: The requested operation has no match to return.(BadNoMatch)
Was wollen mir diese beiden Zeilen sagen?
Objects node is: Node(TwoByteNodeId(i=84))
Children of root are: [Node(TwoByteNodeId(i=85)), Node(TwoByteNodeId(i=86)), Node(TwoByteNodeId(i=87))]
Re: Opensource OPC UA für den Rasp
Posted: 13 Dec 2016, 17:17
by mimuel
Hallo OhneNamen,
hier findest Du einen freien Client, damit kannst du auf die Objekte des Informationsmodells schauen - dann wird dir die Struktur im Programm klarer:
https://www.unified-automation.com/prod ... xpert.html
Am Wochenende werde ich mir deinen Code anschauen.
Gruß Michael
Re: Opensource OPC UA für den Rasp
Posted: 13 Dec 2016, 21:03
by volker
Hallo Michael,
ICH FINDE DAS SUPER!!! Danke für Deine Postings. Das ist gelebte Community. Weiter so!
Re: Opensource OPC UA für den Rasp
Posted: 14 Dec 2016, 13:59
by scrolllkock
Hallo Michael,
danke für den Denkanstoß mit der Windows Software!
Ich hatte das Problem, das im Beispiel nur ein Integer Identifier genutzt wurde, ich aber ein String benötige!
Hier die Schritte zum einrichten:
Download von github
Code: Select all
wget https://github.com/FreeOpcUa/python-opcua/archive/master.zip
entpacke zip
Python Setuptools installieren
Code: Select all
sudo apt-get install python-setuptools
Python pip installieren
Folgende Packete installieren gemäß freeopcUa Webseite
Code: Select all
sudo pip install enum34
sudo pip install trollius
sudo pip install futures
sudo apt-get install build-essential libssl-dev libffi-dev python-dev
sudo pip install cryptography
sudo pip install dateutil
FreeOpcUa installieren, dazu ins Verzeichnis von FreeOpcUa wechseln
Code: Select all
python setup.py build
sudo python setup.py install
Aufräumen
Und hier das Python Script um auf eine B&R Steuerung zuzugreifen:
Code: Select all
import time
sys.path.insert(0, "..")
from opcua import Client
if __name__ == "__main__":
ip = "192.168.100.250"
port = "4840"
variable = ["Variable_Bool","Variable_INT","Variable_Real","Variable_String"]
while 1:
if os.system("fping -t 250 "+ip) == 0:
print "B&R ist erreichbar"
break
else:
print "B&R nicht erreichbar!"
client = Client("opc.tcp://"+ip+":"+port+"/server/")
try:
client.connect()
# Client has a few methods to get proxy to UA nodes that should always be in address space such as Root or Objects
root = client.get_root_node()
while 1:
anzahlVar = len(variable)
i = 0
while i < anzahlVar:
# get a specific node knowing its node id
var = client.get_node("ns=6;s=::AsGlobalPV:"+variable[i])
varvalue = var.get_value()
#print varvalue
# Wert ablegen in virtueller Datei
fobj_out = open("/home/pi/tmp_br/"+variable[i],"w")
fobj_out.write(str(varvalue))
fobj_out.close()
time.sleep(1) # delays for 1 seconds
i = i + 1
finally:
client.disconnect()
Danke für die Hilfe,
Bernhard
Re: Opensource OPC UA für den Rasp
Posted: 14 Dec 2016, 15:53
by volker
Bernhard, auch Dir ein fettes Lob für diesen ausführlichen Beitrag! Das wird sicher vielen helfen...
Re: Opensource OPC UA für den Rasp
Posted: 14 Dec 2016, 16:41
by scrolllkock
Habe das python script nochmal angepasst.
Das Script wird beim Booten im Hintergrund gestartet und wartet, bis die SPS erreichbar ist.
Erst dann versucht der Client einen Verbindungsaufbau.
Die zu lesenden Variablen werden oben in ein Array eingetragen.
Im Script werden dann die vorbelegten Variablen ausgelesen und der Inhalt der Variable in eine Datei mit dem Namen der Variable eingetragen.
Das Verzeichnis habe ich vorher ins Ram gelegt, damit ich nicht so viele Schreibzyklen auf dem Speichermedium habe.
Damit können andere Programme, egal ob bash, python oder c, auch auf die Daten zugreifen.
Re: Opensource OPC UA für den Rasp
Posted: 16 Dec 2016, 12:39
by mimuel
Hallo Bernhardt,
dann bist Du ja selbst zum Ziel gekommen.
Mit dem vorgeschlagenen Client/Browser kannst Du die Veränderungen im Informationsmodell sehr plastisch anschauen.
Auf GitHub gibt es auch einen Browser geschrieben mir der Python Library.
schau mal hier :
https://github.com/FreeOpcUa
Gruß Michael
Re: Opensource OPC UA für den Rasp
Posted: 16 Dec 2016, 12:53
by mimuel
Sorry Bernhard,
den Link kanntest Du schon - ich meinte diesen:
https://github.com/FreeOpcUa/opcua-client-gui
Ich danke Dir für den B&R-Client - der kann mir auch noch nützlich sein,
obwohl ja OPC UA ja kein proprietäres Protokoll ist.
Gruß Michael