Hallo mal wieder,
ich kriegs nicht auf die Palette....
Ich versuche einen String (also den 1400er Datentyp) zusammenzubauen, per UDP zu senden und wieder zu löschen, damit er für den nächsten Durchlauf clean ist:
[highlight=epc]
TempSend = $$
TempSendLenght = 0u16
TempGesendet = AUS
if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHolzofen_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherUnten_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(HLSpeicherZurHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherMitte_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLSpeicherVonHeizung_Temperature,$$);
TempSend = TempSend + $\n$;
TempSendLenght = size(TempSend);
sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
sendudp (5050u16,192.168.178.210,convert(setdate(),$$)+$,$ +convert(hour(),$$)+$:$+convert(minute(),$$)+$:$+c onvert(second(),$$)+$,$+convert(HLHeizung_Temperat ure,$$)+$,$+convert(HLHolzofen_Temperature,$$)+$,$ +convert(RLHolzofen_Temperature,$$)+$,$+convert(Sp eicherOben_Temperature,$$)+$,$+convert(SpeicherUnt en_Temperature,$$)+$,$+convert(RLHeizung_Temperatu re,$$)+$,$+convert(HLSpeicherZurHeizung_Temperatur e,$$)+$,$+convert(SpeicherMitte_Temperature,$$)+$, $+convert(RLSpeicherVonHeizung_Temperature,$$),0x0 D,0x0A);
TempGesendet = EIN;
} else {
TempGesendet = AUS;
TempSend = $$
} endif
[/highlight]
In dieser Version wird das Datum und die Zeit nicht in den String eingebaut. Warum?
Außerdem wird am Ende des Strings kein CR/LF angehängt. Um das hinzukriegen hab ich jetzt zig Sachen probiert. Wie kriegt man das hin?
In einer anderen Version wird die TempSend nicht im Else-Zweig gelöscht, sondern mit Hilfe der Hilfsvariablen TempGesendet in einer extra if-Abfrage. Dann wird TempSend aber nie leer, sondern ist immer 1399 Zeichen lang. Außerdem wird hier Datum und Zeit nicht in die Variable TempSend gepackt.
[highlight=epc]
TempSend = $$
TempSendLenght = 0u16
TempGesendet = AUS
if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHolzofen_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherUnten_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(HLSpeicherZurHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherMitte_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLSpeicherVonHeizung_Temperature,$$);
TempSend = TempSend + $\n$;
TempSendLenght = size(TempSend);
sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
sendudp (5050u16,192.168.178.210,convert(setdate(),$$)+$,$ +convert(hour(),$$)+$:$+convert(minute(),$$)+$:$+c onvert(second(),$$)+$,$+convert(HLHeizung_Temperat ure,$$)+$,$+convert(HLHolzofen_Temperature,$$)+$,$ +convert(RLHolzofen_Temperature,$$)+$,$+convert(Sp eicherOben_Temperature,$$)+$,$+convert(SpeicherUnt en_Temperature,$$)+$,$+convert(RLHeizung_Temperatu re,$$)+$,$+convert(HLSpeicherZurHeizung_Temperatur e,$$)+$,$+convert(SpeicherMitte_Temperature,$$)+$, $+convert(RLSpeicherVonHeizung_Temperature,$$),0x0 D,0x0A);
TempGesendet = EIN;
} endif
if delay(TempGesendet,7000u64) then {
TempGesendet = AUS;
TempSend = $$
} endif
[/highlight]
Kann mir da mal jemand auf die Sprünge helfen. Ich möchte halt Datum, Zeit, mehrere Temperaturen und ein Return/Linefeed senden. Ohne Nullbytes dazwischen. Das muss doch irgendwie möglich sein.
Yapon
ich kriegs nicht auf die Palette....
Ich versuche einen String (also den 1400er Datentyp) zusammenzubauen, per UDP zu senden und wieder zu löschen, damit er für den nächsten Durchlauf clean ist:
[highlight=epc]
TempSend = $$
TempSendLenght = 0u16
TempGesendet = AUS
if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHolzofen_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherUnten_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(HLSpeicherZurHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherMitte_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLSpeicherVonHeizung_Temperature,$$);
TempSend = TempSend + $\n$;
TempSendLenght = size(TempSend);
sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
sendudp (5050u16,192.168.178.210,convert(setdate(),$$)+$,$ +convert(hour(),$$)+$:$+convert(minute(),$$)+$:$+c onvert(second(),$$)+$,$+convert(HLHeizung_Temperat ure,$$)+$,$+convert(HLHolzofen_Temperature,$$)+$,$ +convert(RLHolzofen_Temperature,$$)+$,$+convert(Sp eicherOben_Temperature,$$)+$,$+convert(SpeicherUnt en_Temperature,$$)+$,$+convert(RLHeizung_Temperatu re,$$)+$,$+convert(HLSpeicherZurHeizung_Temperatur e,$$)+$,$+convert(SpeicherMitte_Temperature,$$)+$, $+convert(RLSpeicherVonHeizung_Temperature,$$),0x0 D,0x0A);
TempGesendet = EIN;
} else {
TempGesendet = AUS;
TempSend = $$
} endif
[/highlight]
In dieser Version wird das Datum und die Zeit nicht in den String eingebaut. Warum?
Außerdem wird am Ende des Strings kein CR/LF angehängt. Um das hinzukriegen hab ich jetzt zig Sachen probiert. Wie kriegt man das hin?
In einer anderen Version wird die TempSend nicht im Else-Zweig gelöscht, sondern mit Hilfe der Hilfsvariablen TempGesendet in einer extra if-Abfrage. Dann wird TempSend aber nie leer, sondern ist immer 1399 Zeichen lang. Außerdem wird hier Datum und Zeit nicht in die Variable TempSend gepackt.
[highlight=epc]
TempSend = $$
TempSendLenght = 0u16
TempGesendet = AUS
if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHolzofen_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherUnten_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(HLSpeicherZurHeizung_Temperature,$$)+$,$;
TempSend = TempSend + convert(SpeicherMitte_Temperature,$$)+$,$;
TempSend = TempSend + convert(RLSpeicherVonHeizung_Temperature,$$);
TempSend = TempSend + $\n$;
TempSendLenght = size(TempSend);
sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
sendudp (5050u16,192.168.178.210,convert(setdate(),$$)+$,$ +convert(hour(),$$)+$:$+convert(minute(),$$)+$:$+c onvert(second(),$$)+$,$+convert(HLHeizung_Temperat ure,$$)+$,$+convert(HLHolzofen_Temperature,$$)+$,$ +convert(RLHolzofen_Temperature,$$)+$,$+convert(Sp eicherOben_Temperature,$$)+$,$+convert(SpeicherUnt en_Temperature,$$)+$,$+convert(RLHeizung_Temperatu re,$$)+$,$+convert(HLSpeicherZurHeizung_Temperatur e,$$)+$,$+convert(SpeicherMitte_Temperature,$$)+$, $+convert(RLSpeicherVonHeizung_Temperature,$$),0x0 D,0x0A);
TempGesendet = EIN;
} endif
if delay(TempGesendet,7000u64) then {
TempGesendet = AUS;
TempSend = $$
} endif
[/highlight]
Kann mir da mal jemand auf die Sprünge helfen. Ich möchte halt Datum, Zeit, mehrere Temperaturen und ein Return/Linefeed senden. Ohne Nullbytes dazwischen. Das muss doch irgendwie möglich sein.
Yapon
Kommentar