ich hab folgendes problem. bei dem als anlage angefügte programm eines Function_Blocks möchte ich die erste adresse (%MX0.0) gern über eine "Input_VAR" vergeben. bei den restlichen adressen soll automatisch die Bitstelle um 1 erhöht werden? ist sowas möglich? ich hab leider nich allzuviel programmiererfahrung in der sps-programmierung
danke schonmal
micha
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
der erste eingang beginnt immer bei bit 0 (allerdings erhöht sich das Byte der eingäng um 2) d.h. erste adresse im ersten funktionsblock beginnt wie in der abbildung bei 0.0 und geht immer bis 0.4. die adresse des zweiten funktionsblocks soll bei 2.0 beginnen usw. bei den ausgängen ists analog. im ersten FB hab die ausgänge die adresse 1.0 bis 1.7 der zweite FB hätte dann ab 3.0 bis 3.7
hilfts weiter?
micha
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
VAR
  StartAdresseMerker: POINTERTODWORD;
  GewuenschteWortnummer: DINT;
  Temp:DWORD;
  B: BOOL;
  N: BYTE;END_VAR(*SetztdasN. BitvonTempaufB*)StartAdresseMerker:=ADR(%MD0)+GewuenschteWortnummer*2;    (*Adresse des ganzen Wortes ermitteln*)Temp:=StartAdresseMerker^;                      (*Einlesen des aktuellen Zustands des Ausgangswortes*)IFB=TRUETHEN                              (*SetzendesBits*)
  Temp:=(TempORSHL(1,N));ELSE
  Temp:=(TempANDROL(4294967294,N));END_IF;StartAdresseMerker^:=Temp;                      (*Zurückschreiben des ganzen Wortes*)
B ist der Zustand des gewünschten Ausgangs, N die Bitnummer, GewuenschteWortnummer die Wortnummer
Vielleicht geht's auch einfacher, keine Ahnung. Die Logik mit SHL und ROL kann bei fixen Bitnummern natürlich einfacher ausfallen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
vielen dank erstmal für deine mühe. sieht ja ganz schön wild aus
ich hab das porgramm jetz in meinen Function_Block reinkopiert. Allerdings hab ich die Variable "GewuenschteWortnummer" als Var_Input deklariert, weil ich diese Variable ja "außen" an den FunctionBlock schreiben will. (siehe Abbildung 2)
Wenn ich nun auf "Alles Ãœbersetzen" Klicke kommt ne Fehlermeldung "Var, VAR_INPUT, VAR_OUTPUT" oder VAR_IN_OUT erwartet markiert wird die erste zeile nach "End VAR"
Ne frage hab ich auch noch, wie ich nun die "errechneten Adressen" in den Kontaktplan des Function Blockes einbinde also die erste adresse nehm ich mal an steht in "StartAdresseMerker" wo stehn aber die anderen adressen, wo die Bitstelle um 1 erhöht wurde ich hoffe du kannst mir helfen
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Alles ab Zeile 17(in Deinem Screenshot) gehört ins Programm rein, nicht in den Deklarationsteil. Mein Beispiel ist allerdings in ST geschrieben, nicht in KOP. Am einfachsten wird es sein wenn Du Deiner Funktion nicht nur das Wort mit gibst sondern auch die einzelnen Bits als BOOL. Anbei ein Screenshot von dieser Funktion (als FB).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
hallo,
ich hab folgendes problem. bei dem als anlage angefügte programm eines Function_Blocks möchte ich die erste adresse (%MX0.0) gern über eine "Input_VAR" vergeben. bei den restlichen adressen soll automatisch die Bitstelle um 1 erhöht werden? ist sowas möglich? ich hab leider nich allzuviel programmiererfahrung in der sps-programmierung
danke schonmal
micha
soll der erste Eingang immer nur Bit 0 sein (also nur die Wortnummer variabel)? Weiviele Bits fortlaufend sollen es insgesamt sein?
hallo,
der erste eingang beginnt immer bei bit 0 (allerdings erhöht sich das Byte der eingäng um 2) d.h. erste adresse im ersten funktionsblock beginnt wie in der abbildung bei 0.0 und geht immer bis 0.4. die adresse des zweiten funktionsblocks soll bei 2.0 beginnen usw. bei den ausgängen ists analog. im ersten FB hab die ausgänge die adresse 1.0 bis 1.7 der zweite FB hätte dann ab 3.0 bis 3.7
hilfts weiter?
micha
B ist der Zustand des gewünschten Ausgangs, N die Bitnummer, GewuenschteWortnummer die Wortnummer
Vielleicht geht's auch einfacher, keine Ahnung. Die Logik mit SHL und ROL kann bei fixen Bitnummern natürlich einfacher ausfallen.
hallo oberchefe,
vielen dank erstmal für deine mühe. sieht ja ganz schön wild aus
ich hab das porgramm jetz in meinen Function_Block reinkopiert. Allerdings hab ich die Variable "GewuenschteWortnummer" als Var_Input deklariert, weil ich diese Variable ja "außen" an den FunctionBlock schreiben will. (siehe Abbildung 2)
Wenn ich nun auf "Alles Ãœbersetzen" Klicke kommt ne Fehlermeldung "Var, VAR_INPUT, VAR_OUTPUT" oder VAR_IN_OUT erwartet markiert wird die erste zeile nach "End VAR"
Ne frage hab ich auch noch, wie ich nun die "errechneten Adressen" in den Kontaktplan des Function Blockes einbinde also die erste adresse nehm ich mal an steht in "StartAdresseMerker" wo stehn aber die anderen adressen, wo die Bitstelle um 1 erhöht wurde ich hoffe du kannst mir helfen
Alles ab Zeile 17(in Deinem Screenshot) gehört ins Programm rein, nicht in den Deklarationsteil. Mein Beispiel ist allerdings in ST geschrieben, nicht in KOP. Am einfachsten wird es sein wenn Du Deiner Funktion nicht nur das Wort mit gibst sondern auch die einzelnen Bits als BOOL. Anbei ein Screenshot von dieser Funktion (als FB).
und so rufst Du diesen FB auf (z.B. in KOP):
hallo,
vielen dank für deine antwort. ich werds gleich mal ausprobieren.
micha