string MyVarName = "blnSteuerung";
FieldInfo FI = ClassXYZ.GetType().GetField(MyVarName);
// FC STAT.ANZ 18.10.1999, P. Wahlen
// Der Baustein bietet die Möglichkeit, beliebige Ein-,Aus-gänge und Merker
// auf einen Ausgangsformaloperanden zu legen. Man kann damit z.B.: einen
// Merker auf eine Prüflampe legen.
//
// ACHTUNG!!!...
//-------------
// Es ist günstiger die ADF-Überwachung auszuschalten,bzw.im entsprechenden
// Fehler-OB den Operand auf einen Merker zu setzen.
// Die elegantere Lösung ist die Grenzwerte der E,A und M im FC zu überwachen.
CLR // HM vorbereiten
= #HM_E
= #HM_A
= #HM_M
L #Bit_Nr // - Bit-Nr ok ?
L 0
<I
SPB BitK // - Sprung, bei Bit-Nr < 0
L #Bit_Nr
L 7
>I
SPB BitK // - Sprung, bei Bit-Nr > 7
SPA maxE // - Grenzwert setzen überspr.
BitK: T #Bit_Nr // - Grenzwert (0, 7) nach Bit-Nr
// ---------- Byteadresse begrenzen
maxE: L #Operand // Operand E (1) erhalten
L 1
<>I
SPB maxA
= #HM_E
L #maxE
SPA maxG
maxA: L #Operand // Operand A (0) erhalten?
L 0
<>I
SPB maxM
= #HM_A
L #maxA
SPA maxG
maxM: L 2 // kein Ein-, Ausgang; dann
T #Operand // M (2) nach Operand
SET
= #HM_M
L #maxM
maxG: T #maxG // Bytegrenzwert setzen
L #Byte_Nr // - Byte-Nr ok ?
L 0
<I
SPB BytK // - Sprung, bei Byte-Nr < 0
L #Byte_Nr
L #maxG
>I
SPB BytK // - Sprung, bei Byte-Nr > maxG
SPA Komb // - Grenzwert setzen überspr.
BytK: T #Byte_Nr // - Grenzwert (0, maxG) nach Byte-Nr
// ---------- Byte + Bit kombinieren
Komb: L #Byte_Nr
SLD 3 // auf richtige Pos. schieben
L #Bit_Nr
OD // verknüpfen
T #Zeiger // = Byte + Bit
// ---------- Eingang
UN #HM_E // Operand E erhalten
SPB Ausg // sonst Sprung
U E [ #Zeiger]
SPA Anz
// ---------- Ausgang
Ausg: UN #HM_A // Operand A erhalten?
SPB Merk
U A [ #Zeiger]
SPA Anz
// ---------- Merker
Merk: U M [ #Zeiger] // kein Ein-, Ausgang; dann Operand M
// ---------- zuweisen
Anz: = #Ausgang // nach Ausgang übertragen
Programmierarbeit sparenbeliebige Ausgänge in der SPS ein- und ausschalten (...)
man würde sich so eine Menge Programmierarbeit in der SPS und viele Schaltschranktaster ersparen
Du weißt, daß man bei SPS im RUN nur Ausgänge steuern kann, denen vom Programm nichts zugewiesen wird? Du müsstest viel zusätzlichen und umständlichen Code in der SPS programmieren, damit so ein Steuern überhaupt funktioniert und müsstest ständig Angst haben, daß Du Deine Anlage zu Schrott kaputtsteuerst. Du kannst Deine Hochsprachen-Erfahrung nicht mit SPS-Programmierung vergleichen. Informiere Dich mal über die zyklische Arbeitsweise von SPS.
Harald
Du weißt, daß man bei SPS im RUN nur Ausgänge steuern kann, denen vom Programm nichts zugewiesen wird? Du müsstest viel zusätzlichen und umständlichen Code in der SPS programmieren, damit so ein Steuern überhaupt funktioniert und müsstest ständig Angst haben, daß Du Deine Anlage zu Schrott kaputtsteuerst. Du kannst Deine Hochsprachen-Erfahrung nicht mit SPS-Programmierung vergleichen. Informiere Dich mal über die zyklische Arbeitsweise von SPS.
//Ausgang Start
U "AusgangsmerkerA10.0"
S A10.1
//Ausgang Stopp
U "AusgangsmerkerA10.0"
FN "FlankenmerkerMXX.X"
R A10.1
den Code kannst du dir sparen, wenn du dir einen Freien Ausgang (wo nix angeschlossen ist) (bzw. einen freien Merker) definierst.Code://Ausgang Start U "AusgangsmerkerA10.0" S A10.1 //Ausgang Stopp U "AusgangsmerkerA10.0" FN "FlankenmerkerMXX.X" R A10.1
Das sind aber schon die ganz alten Tricks aus der Programmierkiste, da gab's ja auch den Spruch: "Faul darf man sein, aber nicht dumm."Richtig faule Programmierer machen sich z.B. einen Merker-Bereich für die Programmzuweisungen (z.B. M100.0 - M149.7) und einen Bereich für die manuellen Übersteuerungen oder "Handbetrieb" (z.B. M200.0 - M249.7) und ver-Odern die Bereiche am Ende Doppelwordweise und weisen dann an die Ausgänge zu (z.B. A0.0 - A49.7) Ausschalten von im Programm eingeschalteten Ausgängen gibt es da nicht, weil das macht dann doch noch ein bisschen mehr Arbeit...
Harald
// ---------- Byte + Bit kombinieren
L #ByteNr //Byte-Nummer laden
SLD 3 //Byte um 3 Bit nach links schieben, damit Platz für das Bit bleibt, welches später per OD verknüpft wird
L #BitNr //Bit-Nummer laden
OD //Byte und Bit per OR verknüpfen
T #Pointer //Byte + Bit in #Pointer übertragen
// ---------- Pointer aus letztem Zyklus mit aktuellem Pointer vergleichen und bei Unterschied den letzten Ausgang deaktivieren
L #LastPointer
T #LastPointerTmp //LastPointer inLastPointerTmp kopieren, wegen indirekter Adressierung
L #Pointer
L #LastPointer
<>I //Zeiger vergleichen
R A [ #LastPointerTmp] //wenn ungleich, LastPointerTmp rücksetzen
// ---------- Ausgang aktivieren, wenn #aktivieren == true
U #Aktivieren //true laden
S A [ #Pointer] //Zeigervariable auf True setzen
// ---------- Ausgang bei fallender Flanke von #Aktivieren deaktivieren
U #Aktivieren
FN #FlankenMerker
R A [ #Pointer]
// ---------- aktuellen Pointer in LastPointer transferieren
L #Pointer
T #LastPointer
//S7Netplus Ausgang aktivieren:
PLC.Write("DB200.DBD0", ByteNr); //ByteNr - DWord
PLC.Write("DB200.DBD4", BitNr); //BitNr - DWord
PLC.Write("DB200.DBX8.0", true); //Aktivieren - Merker
//S7Netplus Ausgang deaktivieren:
PLC.Write("DB200.DBX8.0", false); //Aktivieren - Merker
Offensichtlich hat er keine Angst.Du müsstest (...) ständig Angst haben, daß Du Deine Anlage zu Schrott kaputtsteuerst.
Und hiermit wird dann auch noch jeder zum kaputtsteuern der Anlage eingeladen, der Zugriff zum Netzwerk der SPS hat. Da braucht ein Bösewicht nur den Stromlaufplan der Anlage, um gezielt Schäden anzurichten oder die Produktion von Ausschuss zu forcieren, und muß noch nichtmal in dem Gebäude sein wo die Anlage steht.Die Variablen "ByteNr", "BitNr" und "Aktivieren" werden von PC-Seite aus direkt in den zum FB gehörenden DB geschrieben:
Code://S7Netplus Ausgang aktivieren: PLC.Write("DB200.DBD0", ByteNr); //ByteNr - DWord PLC.Write("DB200.DBD4", BitNr); //BitNr - DWord PLC.Write("DB200.DBX8.0", true); //Aktivieren - Merker //S7Netplus Ausgang deaktivieren: PLC.Write("DB200.DBX8.0", false); //Aktivieren - Merker
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?