Az OPC-UA protokoll egyre jobban terjed el az ipari hálózatoknál. Az ipari eszközök, a PLC-k egy nem elhanyagolható része még nem "ismeri" az OPC-UA protokollt, de Python nyelven már különböző alkalmazások készíthetők, amelyek segítségével ez a kommunikációs szabvány kényelmesen tesztelhető, megismerhető. Ebben a cikkben egy egyszerű szerver-kliens alkalmazás implementálását végezzük el.
A következő alkalmazás egy szervert valósít meg, létrehozásra kerül egy "PLC1" objektum, amely öt mérési eredményt állít elő. Az öt mérési eredmény közül három véletlenszerűen kerül előállításra, a "Test1" és a "Test2" változók pedig konstansok.
import opcua, random, time
opcServer = opcua.Server()
opcServer.set_server_name("WebElektronika - OPCUA - Szerver")
opcServer.set_endpoint("opc.tcp://192.168.56.113:4840")
opcNamespace = opcServer.register_namespace("http://192.168.56.113:4840")
opcServer.start()
objPLC1 = opcServer.get_objects_node()
PLC1 = objPLC1.add_object(opcNamespace, "PLC_1")
PLC1_sensor1 = PLC1.add_variable(opcNamespace, "Temperature", 40)
PLC1_sensor1.set_writable(writable=True)
PLC1_sensor2 = PLC1.add_variable(opcNamespace, "Humidity", 50)
PLC1_sensor2.set_writable(writable=True)
PLC1_sensor3 = PLC1.add_variable(opcNamespace, "Distance", 15)
PLC1_sensor3.set_writable(writable=False)
PLC1_sensor4 = PLC1.add_variable(opcNamespace, "Test1", 10)
PLC1_sensor4.set_writable(writable=True)
PLC1_sensor5 = PLC1.add_variable(opcNamespace, "Test2", 20)
PLC1_sensor5.set_writable(writable=True)
while True:
rand1 = random.randrange(15, 45)
rand2 = random.randrange(15, 60)
rand3 = random.randrange(15, 70)
print(str(rand1) + " - " + str(rand2) + " - " + str(rand3))
PLC1_sensor1.set_value(rand1)
PLC1_sensor2.set_value(rand2)
PLC1_sensor3.set_value(rand3)
time.sleep(10)
Indítsuk el az OPC-UA szervert, és a terminálablakban 10 másodpercenként megjelenik a három véletlenszerűen előállított szám, amelyek természetesen elérhetők OPC-UA protokollon keresztül a kliensek számára.
sudo python3 opcuaServer2.py
1. ábra Elindításra került az OPC-UA szerver
Készítsük el most a klienst, egyik lehetséges megvalósítást láthatjuk a következő sorokban. Ez az alkalmazás megjeleníti a szerver változóinak a neveit, az elindításkor megkapott véletlenszámokat és a konstansok értékeit is.
from opcua import Client
client = Client("opc.tcp://192.168.56.113:4840")
client.connect()
root = client.get_root_node()
print("Objects node is: " + str(root))
objects = client.get_objects_node()
objChild = objects.get_children()[1]
darab = len(objChild.get_children())
for i in range(0, darab):
state = objChild.get_children()[i]
print(str(state.get_browse_name()) + " - " + str(state.get_value()))
client.close_session()
A következő ábrán látható az OPC-UA kliens futtatása.
python3 opcUAKliens_Alap1.py
2. ábra Az OPC-UA kliens alkalmazás futtatása
Módosítsuk a klienst implementáló Python alkalmazást úgy, hogy a kliens állandóan megjelenítse a szerver által előállított változók értékeit. Nem történik itt most feliratkozás, 5 másodpercenként lekéri a szervertől az öt változó értékét.
import sys
import time
from opcua import Client
if __name__ == '__main__':
try:
client = Client("opc.tcp://192.168.56.113:4840")
client.connect()
print("Connected to OPC UA Server")
root = client.get_root_node()
print("Objects node is: " + str(root))
except Exception as err:
print("Server not found....")
sys.exit(1)
while True:
objects = client.get_objects_node()
objChild = objects.get_children()[1]
darab = len(objChild.get_children())
for i in range(0, darab):
state = objChild.get_children()[i]
print(str(state.get_browse_name()) + " - " + str(state.get_value()))
time.sleep(5)
Indítsuk el ezt a Python klienst is, az eredmény a következő ábrán látható.
python opcUAKliens_Alap2.py
3. ábra Az új kliens futtatása
A hálózati forgalom részlete látható a 4. ábrán, érdemes a következő filtert alkalmazni azért, hogy csak az OPC-UA protokoll kerüljön megjelenítésre a Wireshark grafikus felületén.
opcua
4. ábra Hálózati forgalom részlete
Az nmap (grafikus megjelenítésnél a ZenMap) használata az IT biztonság, illetve az üzemeltetés területén dolgozó szakembereknél szinte elkerülhetetlen. Az ingyenes szoftver segítségével tesztelhetők a számítógépeink, a számítógéphálózatunk, vizsgálha. . . .
A Python programozási nyelv nagyon elterjedt a fejlesztők körében. Használják beágyazott rendszereknél, webes alkalmazásoknál, IT biztonság különböző területein, stb. Látható, hogy nagyon széles a felhasználási területe ennek a nyelvnek, ideje volt m. . . .
Bemutatjuk most a saját (!) Wifi-s hálózatunk tesztelésének az alapjait. Megnézzük, hogy hogyan lehet biztonságos jelszót választani. Feltörhetetlen rendszer nem létezik, de megismerve a tesztelés folyamatát, válaszokat kaphatunk arra vonatkozólag, h. . . .