Bitsum für S7-1214 TIA 10.5

PhilippL

Level-1
Beiträge
250
Reaktionspunkte
28
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

hatte am Wochenende das Vergnügen meine ersten Schritte mit ner S7-1214 zu machen. Da die kleine ja leider kein AWL mehr kann, ich aber einen Baustein für Bitsum brauche stellt sich mir ein Problem.

Baustein in AWL für ne S7-300 hab ich und jetzt die Frage wie programmier ich das am einfachsten in KOP oder FUP ohne das ich 1000 Netzwerke brauche???

Oder hat jemand ne andere Idee???

Vielleicht steh ich auch irgendwie noch auf dem Schlauch und jemand hat ne zündende Idee...

Danke

Gruß
PhilippL
 
Lösung?

Hallo Leute!

gibt es eigentlich für dieses Problem eine Lösung?
Ich brauche unbedingt ein BITSUM (FC99) für die S7-1200. Hab schon versucht den AWL Code in FUP oder SCL zu schreiben, bin aber jedesmal vor eine Wand gestoßen, da ich noch nicht so mit SCL befreundet bin und in FUP konnte ichs auch leider nicht umsetzen.

bitte um Unterstützung
 
Das sollte doch für gar keine SPS ein Problem sein, einen BITSUM-Baustein selber zu schreiben.

BITSUM funktioniert so:
* zuerst eine Zählvariable auf 0 setzen.
* dann alle 32 Bits der zu untersuchenden Variable testen, ob sie 1 oder 0 sind. Wenn 1 dann erhöhe die Zählvariable.
* zum Schluß den Inhalt der Zählvariable zurückgeben, das ist die Anzahl gefundener Einsen (0...32)

Für das Bit-Testen gibt es mehrere Möglichkeiten:
* die Prüfvariable bitweise links oder rechts shiften oder rotieren und sehen, was für ein Bit rausgekommen ist
* die Prüfvariable mit einer Bitmaske ver-UNDen, wo nur ein Bit gesetzt ist
* ...

Man kann nun auf die Schnelle für jeden Bit-Test eine Zeile SCL schreiben oder professionell eine Schleife über alle 32 Bits programmieren.
Das geht sogar auch in FUP.

Ich meine, den BITSUM gibts schon fertig bei OSCAT als BIT_COUNT, höchstwahrscheinlich sogar schon in SCL oder ST.

Harald
 
In ner 300/400er hät Ichs so gelöst:

Code:
      L     0
      T     #SUMME


      L     17
lp:   T     #SCHLEIFE
      L     #IN_WORD
      SLD   1
      SRD   
      UW    W#16#1
      L     #SUMME
      +I    
      T     #SUMME
      L     #SCHLEIFE
      LOOP  lp

In TIA würds dann in KOP vieleicht auch so gehn: (Kanns mangels CPU nicht testen!)

tia1.jpgtia2.jpg
 
Zuletzt bearbeitet:
Dann kann ich ja den abgewandelten SCL-Code von zotos auch noch hinzufügen:
Code:
[FONT=courier new]FUNCTION BITSUM : INT[/FONT][FONT=courier new]
[/FONT]
[FONT=courier new]VAR_INPUT[/FONT]
[FONT=courier new]    InDWORD : DWORD;[/FONT]
[FONT=courier new]END_VAR[/FONT]
[FONT=courier new][/FONT]
[FONT=courier new]VAR_TEMP[/FONT]
[FONT=courier new]    TmpDWORD : DWORD;[/FONT]
[FONT=courier new]    TmpArray AT TmpDWORD : ARRAY[0..31] OF BOOL ;[/FONT]
[FONT=courier new]    i : INT;[/FONT]
[FONT=courier new]END_VAR[/FONT]
[FONT=courier new][/FONT]

[FONT=courier new]    TmpDWORD := InDWORD;[/FONT]
[FONT=courier new]    BITSUM := 0;[/FONT]
[FONT=courier new]    FOR i := 0 TO 31 DO[/FONT]
[FONT=courier new]        IF TmpArray[i] = True THEN [/FONT]
[FONT=courier new]            BITSUM := BITSUM + 1;[/FONT]
[FONT=courier new]        END_IF;[/FONT]
[FONT=courier new]    END_FOR;[/FONT]
[FONT=courier new]
[/FONT][FONT=courier new]END_FUNCTION[/FONT]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit DWORD würds dann in AWL auch noch kürzer gehn...
(JA geht auf 1200er nich...)

Code:
      L     0
      T     #SUMME


      L     32
lp:   T     #SCHLEIFE
      L     #IN_DWORD
      RRD   
      UW    W#16#1
      L     #SUMME
      +I    
      T     #SUMME
      L     #SCHLEIFE
      LOOP  lp
 
Zurück
Oben