2010-06-21 7 views
5

Kann sich ein Eingang X1 ändern, während die Befehlssequenz noch verarbeitet wird?Eine Frage zu SPS-Anweisungen

z.B.

LD X1 
AND X2 
OUT Y1 

LD X1 // Can X1 loaded here differ from the previous one? 
AND X3 
OUT Y1 

Dank

+2

Sie sollten wahrscheinlich angeben, welche Art von PLC Sie hier sprechen –

Antwort

1

Eine übliche Technik besteht darin, eine Kopie der E/A-Register an eine interne Speicheradresse anzulegen, so dass der Programmierer sicher sein kann, dass sein E/A zwischen den Befehlen nicht wechselt. Machen Sie die Eingaben am Anfang des Scans und kopieren Sie sie am Ende des Scans zu Ihren Ausgaben.

0

Ja, es kann selbstverständlich - die wahrscheinlich es wird sehr niedrig in diesem Intervall zu ändern, so dass, wenn Sie einen Fehler haben, wo man davon ausgegangen, daß diese beiden Werte werden nie dann unterscheiden es kann für eine Weile nicht angezeigt werden.

7

Viele, aber nicht alle SPSen arbeiten mit einem E/A-Abbild. Die Eingänge werden gelesen und in Registern gespeichert. Während der Bearbeitung arbeiten Sie mit dem IO-Image. Das Bild wird am Ende des Zyklus aktualisiert. Auf diese Weise können sich die Eingänge während der Bearbeitung nicht ändern, sondern nur zwischen den Zyklen.

+0

Zusätzlicher Hinweis: Einige PLCs können verschiedene IO-Images (1 pro SPS Task) haben. Der Wert könnte sich also ändern, wenn Sie diesen Code in einer anderen Task ausführen, die nicht der Task entspricht, in der die IO aktualisiert wird. Sie sollten sicherstellen, dass der Code in der richtigen Task ausgeführt wird. –

3

Jim C Antwort hinzuzufügen, es ist erwähnenswert, auch, dass viele (die meisten?) PLCs Sie einen speziellen „immediate“ Anweisung des Typs, die den Status des Kontakts/Relais/input/etc liest verwenden können direkt (im Gegensatz zum Lesen aus dem E/A-Abbild), wenn der CPU-Scan diesen bestimmten Strompfad erreicht. Dies aktualisiert das E/A-Abbild normalerweise nicht, was bedeutet, dass alle anderen normalen Lesevorgänge dieses Kontakts für den Rest der CPU-Abtastung den alten Wert in dem Register lesen, es sei denn, sie sind ebenfalls vom "Sofort" -Typ.

Beispiel:

//Start of Program 
// Here the CPU scan starts with X1 closed, X2 closed in the IO image  

LD X1 //(X1 = closed) 
AND X2 //(X2 = closed) 
OUT Y1 //(Y1 will be set high/closed) 

// **suddenly X1 opens** 
//(using LDI here to denote "immediate") 

LDI X1 //(open - reading true status) 
AND X2 //(closed) 
OUT Y1 //(Y1 will now open) 

LD X1 //(reading from image = closed, still) 
AND X2 //(closed) 
OUT Y1 //(Y1 will close again) 

END of Program 

Dann auf der nächsten CPU scannen das Bild mit dem neuen Wert aktualisieren (X1 = offen) und alle drei Sprossen wird Y1 offen zurück.

Sofortige Befehle werden normalerweise mit einer Zeitstrafe belegt, da die SPS mehr Zeit benötigt, um den aktuellen Wert des Kontakts zu suchen, anstatt das Bild zu lesen. Sie können jedoch nützlich sein, je nachdem, wie Ihr Programm arbeiten soll. Diese Anweisungen MÜSSEN jedoch explizit verwendet werden, und die normale Operation besteht einfach darin, aus dem E/A-Abbild zu lesen, wie Jim bemerkte.

ps: Ich habe "LDI" hier verwendet, um die unmittelbare Anweisung zu bezeichnen, aber alle PLCs verwenden unterschiedliche Syntax. Koyos zum Beispiel verwenden STR (store) anstelle von LD und STRI (store sofort).