Systematik Bits in codesys

Zuviel Werbung?
-> Hier kostenlos registrieren
b_500, xtakt : byte;

b_500 := (b_500 OR MUX(b_500 AND 2#0000_0111, 2#0101_0011, 0))+1;
xtakt := (((xtakt OR 2#0010_1000)+1) AND 2#0101_0111) OR (b_500 AND 2#1010_1000);
OK
icon14.png
, viele Programmierer hätten das weitaus umständlicher gelöst.

Man sieht aber schon, daß es effizienter und bequemer ist, einfach ein Taktmerker-Byte aus der Firmware zu nutzen, als dies selber zu erzeugen. Taktmerker/Blinkmerker braucht man ja eigentlich immer.


PS: man sollte noch erwähnen, daß der Zweizeiler immer ausgeführt werden muß, wenn der Q von dem FB _ah_Pulse_Gen TRUE ist.

Harald
 
man sollte noch erwähnen, daß der Zweizeiler immer ausgeführt werden muß, wenn der Q von dem FB _ah_Pulse_Gen TRUE ist.

in der lib ist die funktion "_ah_Taktmerker" noch etwas optimiert und eigenständig,
die funktion wird auch intern ohne den pulsegenerator ausgeführt ;)
der pulsgenerator dient nur für eigenständige pulse

die deklaration im hauptprogramm sieht dann so aus

PROGRAM PLC_PRG
VAR
takt : _ah_Taktmerker;
x : BYTE;
END_VAR

im programmteil wird dann die funktion jeden zyklus aufgerufen

takt(xtakt := x);
 
Guten Tag,

ich weiß dass dieser Thread sehr alt ist aber trotzdem finde ich die Funktion von HeHo sehr gut.
Wenn ich seine Lib in der Simulation verwende dann ist alles okay.

Möchte ich das Projekt auf den Wago 750-880 Controller übertragen, dann bekomme ich den Fehler:
Folgende Funktionen konnten nicht gebunden werden


Laut Forenbeiträgen tritt dieser Fehler auf, wenn die Bibliothek als externe statt als interne gespeichert wurde.
Die Bibliothek ist Passwortgeschützt und lässt sich für mich nicht öffnen und damit neu speichern.


Über eine Antwort und eventuelle Hilfe würde ich mich freuen.

Schöne Ostern
Harald

PS. HeHo hatte ich bereits eine PM geschickt aber leider keine Antwort erhalten (bis jetzt)
 
Hallo Harald,
jeweils als interne und externe Lib gespeichert.
PS: ich verwende absolut keine andere Lib in meinem Projekt!
Gruß
 

Anhänge

  • HeHo_Util_10ab.zip
    5,4 KB · Aufrufe: 53
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey,

ich weiß auch, dass dieser Thread nun schon "ziemlich" alt ist, aber denke mal, dass ist und bleibt aktuell.
Der Vollständigkeit halber will ich meins auch mal zeigen.

Kommt ganz normal in PLC_PRG rein und wird alle 10ms aufgerufen. (Leider kennt die Forensoftware keine Tabs :p)
Code:
// MainTask wird alle 10ms aufgerufen
//Bits                   %MX0.7    %MX0.6    %MX0.5    %MX0.4    %MX0.3    %MX0.2    %MX0.1    %MX0.0
//Frequenz in Hz          0,5        0,625    1        1,25    2        2,5        5        10
//Periodendauer in Sek.    2        1,6        1        0,8        0,5        0,4        0,2        0,1
bCycles50MS := bCycles50MS - BYTE#1;
IF bCycles50MS = 0 THEN
    b50MS := b50MS + BYTE#1;
    bCycles50MS := 5;
END_IF


bCycles250MS := bCycles250MS - BYTE#1;
IF bCycles250MS = 0 THEN
    b250MS := b250MS + BYTE#1;
    bCycles250MS := 25;
END_IF


%MX0.0 := b50MS.0;
%MX0.1 := b50MS.1;
%MX0.2 := b50MS.2;
%MX0.3 := b250MS.0;
%MX0.4 := b50MS.3;
%MX0.5 := b250MS.1;
%MX0.6 := b50MS.4;
%MX0.7 := b250MS.2;
 
Zurück
Oben