2017-11-01 5 views
1

Ich möchte einige Werte aus einem SPS in TwinCat 3 über ADS Route mit pyads geschrieben lesen. Die Werte müssen gelesen werden, wenn der Zyklus aufgetreten ist. In meinem Python-Skript bekomme ich zuerst die Zykluszeit meines SPS. Ich habe eine Zeit zum Lesen definiert (5000 ms), mit der Lesezeit und der erkannten Zykluszeit (10 ms) berechne ich die Anzahl der zu lesenden Werte.Pyads lesen Wert bei Benachrichtigung: wenn TwinCat-Zyklus aufgetreten ist

In einer while-Schleife möchte ich die definierte Anzahl von Werten lesen.

Im Code sieht es so etwas wie folgt aus:

plc = pyads.Connection('172.18.51.64.1.1', 851) 
plc.open() 
cycle_time = plc.read_by_name('Main.lrCycleTime', pyads.PLCTYPE_LREAL) 
time_to_read = 5000 #milliseconds 
values_to_read = int(time_to_read/cycle_time) 
count = 0 
read_values = [] 
while count < values_to_read: 
    count += 1 
    array_PLC = plc.read_by_name('Main.arrNumbers', pyads.PLCTYPE_ARR_LREAL(2)) 
    read_values.append(array_PLC) 

Wenn ich das tue, habe ich einfach nur einige Werte abzufragen. Das bedeutet, dass jeder Wert mehrere Male existiert und ich die vordefinierten 5000 ms nicht lese.

Kennt jemand die Pyads-Bibliothek? Gibt es Möglichkeiten, eine Art Benachrichtigung zu erhalten, wenn ein Zyklus aufgetreten ist? Ich möchte im Python-Skript keinen Timer setzen. Nur um sicher zu gehen, einen Zyklus nicht zu überspringen, während ich lese.

Antwort

0

TwinCat Ads bietet Funktionen zum Empfangen von Benachrichtigungen. Sie können eine Benachrichtigung hinzufügen/konfigurieren, um den Wert einer Variablen zu verschiedenen Zeitpunkten (bei jedem Zyklus, bei Änderung ...) zu erhalten.

pyads umschließt einfach die TwinCatAds.Dll und bietet eine komfortablere Python-Schnittstelle, wie die Dokumentation sagt.

Siehe hierzu sample for notification

Verwandte Themen