FB Eingang als INT?

Alex1987

Level-2
Beiträge
18
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe eine komplette Haussteuerung seit 8 Jahren via 750-881.
Dort habe ich die Uhrzeit und das Datum immer per "Hand" Eingabe vorgegeben. Diese würde ich gerne via SYSRTCGETTIME aus meiner SPS auslesen.
Der Output als DT funktioniert auch. Ich kann auch den HOUR_OF_DT als INT Wert ausgeben lassen. Jedoch kann ich den FB_Uhrzeit oder FB_SCHALTUHR keine INT werte eingeben.
Wie bekomme ich die Variable in meine FB_Uhrzeit als INT eingefügt?

Danke & Gruß
Alex
 
VAR_INPUT
wIN_YEAR: WORD;
bIN_MONTH: BYTE;
bIN_DAY: BYTE;
bHOUR: BYTE;
bMINUTE: BYTE;
bSECOND: BYTE;

Das sind die erwarteten Eingangstypen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... dann solltest du da auch nicht versuchen einen INT zu übergeben wo ein BYTE erwartet wird.
Man kann einen INT-Wert aber zu einem Byte wandeln (wenn man will) ...

Andere Möglichkeit : du änderst den FB und dessen Schnittstelle ...
 
Genau das ist ja das Problem. Aus der SYSRTCGETTIME Uhrzeit meiner Steuerung kommt nur INT bzw. DT raus. Ich benötige aber BYTE Eingangswerte.
Wie kann ich die Werte denn Wandeln?
 
Zuletzt bearbeitet:
Genau das ist ja das Problem. Aus der SYSRTCGETTIME Uhrzeit meiner Steuerung kommt nur INT bzw. DT raus. Ich benötige aber BYTE Eingangswerte.
Wie kann ich die Werte denn Wandeln?
:unsure: Was für ein DatenTyp ist denn mit BYTE gemeint? Für mein Verständnis wäre das ein Logik-Typ wie WORD oder DWORD, aber eben mit "nur" 8 Bit.
Da aber anscheinend eine FestPunktZahl gemeint ist, könnte SINT (short integer, WerteBereich: -128..127) oder noch wahrscheinlicher(?) USINT (unsigned short integer, WerteBereich: 0..255) in Frage kommen?

PS:
Ich sehe gerade, bei Codesys werden die Typen BYTE, WORD und DWORD ausser zu den "binären Datentypen" [worunter ich widerwillig *) die "Logik-DatenTypen" verstehen würde] auch zu den "ganzzahligen Datentypen" gezählt.
*) widerwillig, weil m.E. die Bezeichnung "binär" für BOOL passt, aber nicht für DatenTypen, die mehr als 1 Bit haben.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Man kann einen INT-Wert aber zu einem Byte wandeln (wenn man will) ...

Genau das ist ja das Problem. Aus der SYSRTCGETTIME Uhrzeit meiner Steuerung kommt nur INT bzw. DT raus. Ich benötige aber BYTE Eingangswerte.
Wie kann ich die Werte denn Wandeln?
Ein bisschen Mühe mußt du dir schon geben ... ich habe aber eigentlich mit wandeln (siehe oben) schon das passende Stichwort gegeben ...
Schau doch mal ob es da nicht eventuell etwas passendes gibt ... (du möchtest von einem INT ein Byte machen)
 
:unsure: Was für ein DatenTyp ist denn mit BYTE gemeint? Für mein Verständnis wäre das ein Logik-Typ wie WORD oder DWORD, aber eben mit "nur" 8 Bit.
Da aber anscheinend eine FestPunktZahl gemeint ist, könnte SINT (short integer, WerteBereich: -128..127) oder noch wahrscheinlicher(?) USINT (unsigned short integer, WerteBereich: 0..255) in Frage kommen?
Tatsächlich wird hier mit BYTE auch tatsächlich Byte gemeint sein. Wenn du genau schaust dann kannst du Tag, Monat, Stunde, Minute und Sekunde prima in jeweils einem Byte darstellen. Lediglich Jahr fällt da dann raus - deshalb wurde hier WORD gewählt.
Was hier noch fehlt ist DayOfWeek - der würde aber genauso ganz problemlos in ein Byte hineinpassen.

Eine andere Frage ist allerdings, warum der Ersteller des Ziel-FB (FB_Uhrzeit) nicht INT gewählt hat - aber dazu hatte ich ja schon vorgeschlagen, diesen Baustein dann zu ändern ... :unsure:
 
Mit welcher Software und Version programmierst Du denn? Gibt es da vielleicht einen fertigen Baustein, der den DT (DATE_AND_TIME) in BYTEs zerlegt? Vielleicht gibt es da auch was bei OSCAT? Das ist eigentlich simple Mathematik zum selbermachen, wofür sich eine Function in ST programmiert anbietet. Aus der Hilfe zu Codesys:
Die Datentypen TIME, TIME_OF_DAY (kurz TOD), DATE und DATE_AND_TIME (kurz DT) werden intern wie DWORD behandelt.
(...)
Bei DATE und DT wird die Zeit in Sekunden angegeben, wobei ab dem 1. Januar 1970 um 00:00 Uhr gerechnet wird.

Spezialität Codesys: DWORD wird wie UDINT behandelt, WORD wie UINT und BYTE wie USINT.

Harald
 
Habe es jetzt rausgefunden das ich einfach als Baustein z.B. INT_TO_BYTE als Converter nutzen kann. Genau das wollte ich doch nur wissen :)

Jetzt funktioniert es. Konnte DT damit komplett in einzelne BYTE Werte separieren. Bzw. Year als WORD.
 
Zurück
Oben