Ipuls erzeugen

Pontifex

Level-1
Beiträge
130
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute

Habe ein Problem ich bastele gerade an einer Sendeschittstelle für Programmnummern. Funktioniert so weit auch ganz gut hätte nur gerne das bei jedem mal wo daten gesendet werden oder die Schleife durchlaufen wird einen kurzen Impuls generiert. Irgendwie steh ich auf
dem Schlauch vielleicht könnt ihr mir weiterhelfen

FUNCTION_BLOCK "Daten Senden"
TITLE =
VERSION : 0.1

VAR_INPUT
Freigabe : BOOL ;
ACK : BOOL ;
DB_to_Send : BLOCK_DB ;
END_VAR
VAR_OUTPUT
Uebertragung_laeuft : BOOL ;
Sende_Ausgang : INT ;
Strobe : BOOL ;
Datensatznummer : INT ;
END_VAR
VAR
Merker1 : BOOL ;
Merker2 : BOOL ;
Merker3 : BOOL ;
Merker4 : BOOL ;
Merker5 : BOOL ;
Merker6 : BOOL ;
Merker7 : BOOL ;
Merker8 : BOOL ;
Flanke1 : "Flankenbaustein";
Flanke2 : "Flankenbaustein";
Flanke3 : "Flankenbaustein";
Flanke4 : "Flankenbaustein";
ADR : WORD ;
Daten_Ende : BOOL ;
Zwischenwert : WORD ;
END_VAR
BEGIN
NETWORK
TITLE =nummer senden
CALL #Flanke3 (
Eingang := #ACK);
U #Flanke3.Flanke_kommt;
S #Uebertragung_laeuft;
CALL #Flanke4 (
Eingang := #Daten_Ende);
U #Flanke4.Flanke_kommt;
R #Uebertragung_laeuft;

U #Freigabe;
UN #ACK;
= #Strobe;
CALL #Flanke1 (//pos Flanke
Eingang := #Freigabe);
U #Flanke1.Flanke_geht;
SPBN i_i;
L 0; // lade 0
T #ADR; // schreibe null auf adresse
T #Datensatznummer;
i_i: NOP 0;
UN #Freigabe; // keine Freigabe
BEB ; // Baustein beenden
// alle Werte geschrieben ?
L #ADR; // aktuelle Byte-Adresse laden
AUF #DB_to_Send
L DBLG // und mit Länge des DB vergleichen

>=D ; // wenn gleich oder größer
= #Daten_Ende; // Meldung rausgeben
BEB ; // Baustein beenden
// Int Werte Senden
CALL #Flanke2 (
Eingang := #ACK);
U #Flanke2.Flanke_kommt;
SPBN _00;
AUF #DB_to_Send; // DB Nochmal aufschlagen wegen Inst.
L #ADR; // aktuelle Byte-Adresse
SLD 3; // 3Bit links
LAR1 ; // in Adressregister 1 schreiben
+AR1 P#6.0; // Festes offset
L DBW [AR1,P#0.0]; // Sendedaten
T #Sende_Ausgang; // In Byte-Adresse transferieren
L #ADR; // *
+ 2; // Byte-Adresse +2 weil INT
T #ADR; // *
L #ADR;
L 2;
/I ;
T #Datensatznummer;
_00: NOP 0;


END_FUNCTION_BLOCK
 
Zurück
Oben