Test

Dependencies:   mbed-dev-OS5_10_4

Committer:
kevman
Date:
Fri Aug 07 07:24:21 2020 +0000
Revision:
0:014fad4dfb9d
Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:014fad4dfb9d 1 /*
kevman 0:014fad4dfb9d 2 -------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 3 Programm Name: EcmTel.CPP
kevman 0:014fad4dfb9d 4 Version: 1.0
kevman 0:014fad4dfb9d 5 Sprache: C
kevman 0:014fad4dfb9d 6 Compiler: MBED
kevman 0:014fad4dfb9d 7 Autor: PS
kevman 0:014fad4dfb9d 8 Copyright: PS
kevman 0:014fad4dfb9d 9
kevman 0:014fad4dfb9d 10 Funktion: Telegrammauswertung fuer EcmCom Programm auf LPC1768
kevman 0:014fad4dfb9d 11
kevman 0:014fad4dfb9d 12 Letzte Änderung für neue EcmWin Version 2.1 war
kevman 0:014fad4dfb9d 13 Ver.: 2.0.1.0
kevman 0:014fad4dfb9d 14
kevman 0:014fad4dfb9d 15
kevman 0:014fad4dfb9d 16 -------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 17 */
kevman 0:014fad4dfb9d 18 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 19 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 20 #include "Headers.h"
kevman 0:014fad4dfb9d 21
kevman 0:014fad4dfb9d 22
kevman 0:014fad4dfb9d 23
kevman 0:014fad4dfb9d 24
kevman 0:014fad4dfb9d 25 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 26 Interne Prototypen
kevman 0:014fad4dfb9d 27 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 28 extern int ScanNext(char *Line, int &Start, int Len);
kevman 0:014fad4dfb9d 29
kevman 0:014fad4dfb9d 30
kevman 0:014fad4dfb9d 31 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 32 Variablen, die nur in EcmTel verwendet werden
kevman 0:014fad4dfb9d 33 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 34 char TelCode[8];
kevman 0:014fad4dfb9d 35
kevman 0:014fad4dfb9d 36 int TelLen;
kevman 0:014fad4dfb9d 37
kevman 0:014fad4dfb9d 38 char *TelPos;
kevman 0:014fad4dfb9d 39
kevman 0:014fad4dfb9d 40
kevman 0:014fad4dfb9d 41 const char *CodeTab[11] = {"CN", "SK", "FR", "SW", "SC", "IC", "SI", "DI", "GD", "DY", "PA"
kevman 0:014fad4dfb9d 42 };
kevman 0:014fad4dfb9d 43
kevman 0:014fad4dfb9d 44 /* Die Codefunktionen sind:
kevman 0:014fad4dfb9d 45 CN: Kanalnummern setzen DecodeChannel()
kevman 0:014fad4dfb9d 46 SK: Kontakt Setzen DecodeContact()
kevman 0:014fad4dfb9d 47 FR: Freigabe, keine Komm. DecodeFreigabe()
kevman 0:014fad4dfb9d 48 SW: Set Watchdog DecodeSetWd()
kevman 0:014fad4dfb9d 49 SC: Set Analogausgang DecodeAnalogValue()
kevman 0:014fad4dfb9d 50 IC: Setzt den Ini Code DecodeIniCode(char *Line);
kevman 0:014fad4dfb9d 51 SI: Sendet den Ini Code SendIniCode(char *Line);
kevman 0:014fad4dfb9d 52
kevman 0:014fad4dfb9d 53 DI: Sendet die DevID Datei, damit EcmWin das angeschlossene Gerät erkennen kann
kevman 0:014fad4dfb9d 54 GD: Empfängt die DevID Datei,
kevman 0:014fad4dfb9d 55 DY: Dummy Telegramm damit die Leitung in beide Richtungen angesprochen wird
kevman 0:014fad4dfb9d 56 PA: Schaltet die Pumpe ein. SwitchPumpeOn
kevman 0:014fad4dfb9d 57
kevman 0:014fad4dfb9d 58 */
kevman 0:014fad4dfb9d 59
kevman 0:014fad4dfb9d 60
kevman 0:014fad4dfb9d 61
kevman 0:014fad4dfb9d 62 int (*FktPtr[])(char *) = {DecodeChannel, DecodeContact, DecodeFreigabe, DecodeSetWd,DecodeAnalogValue, DecodeIniCode, \
kevman 0:014fad4dfb9d 63 SendIniCode, SendDevFile, GetDevFile, RequestDummy, SwitchPumpeOn
kevman 0:014fad4dfb9d 64 };
kevman 0:014fad4dfb9d 65
kevman 0:014fad4dfb9d 66 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 67 Funktion CheckSioTel prueft den gesamten String und fieselt die einzelenen
kevman 0:014fad4dfb9d 68 Telegramme auseinander. Für jedes Telegramm wird separat DecodeTel aufgerufen,
kevman 0:014fad4dfb9d 69 welches den Inhalt des Telegramms auswertet
kevman 0:014fad4dfb9d 70 Der Telegrammanfang ist mit ! , das Ende mit $ gekennzeichnet
kevman 0:014fad4dfb9d 71 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 72 int CheckTel()
kevman 0:014fad4dfb9d 73 {
kevman 0:014fad4dfb9d 74 int i, Len;
kevman 0:014fad4dfb9d 75 char OldSign;
kevman 0:014fad4dfb9d 76
kevman 0:014fad4dfb9d 77 i=0;
kevman 0:014fad4dfb9d 78
kevman 0:014fad4dfb9d 79 Len = HostIf.nAwTelLen;
kevman 0:014fad4dfb9d 80 #ifdef SIO_DEBUG
kevman 0:014fad4dfb9d 81 // printf("HostIf.strTelAwBuf: %s\r\n",HostIf.strTelAwBuf);
kevman 0:014fad4dfb9d 82 #endif
kevman 0:014fad4dfb9d 83 // printf("%c#DG#HostIf.strTelAwBuf: %s%c\r\n",STX, HostIf.strTelAwBuf, ETX);
kevman 0:014fad4dfb9d 84
kevman 0:014fad4dfb9d 85 while(i < Len)
kevman 0:014fad4dfb9d 86 {
kevman 0:014fad4dfb9d 87 if(HostIf.strTelAwBuf[i] == STX) // hat Startzeichen erkannt. sollten Zeichen vor dem STX sein, dann werden diese verworfen
kevman 0:014fad4dfb9d 88 {
kevman 0:014fad4dfb9d 89 HostIf.ptrTelPos = &HostIf.strTelAwBuf[i+1];
kevman 0:014fad4dfb9d 90 HostIf.nTelLen = Len - i -1; // das Existieren von ETX wurde verher schon geprueft
kevman 0:014fad4dfb9d 91
kevman 0:014fad4dfb9d 92 OldSign = HostIf.strTelAwBuf[Len-1];
kevman 0:014fad4dfb9d 93 HostIf.strTelAwBuf[Len-1] = 0x00;
kevman 0:014fad4dfb9d 94 DecodeTel();
kevman 0:014fad4dfb9d 95 HostIf.strTelAwBuf[Len-1] = OldSign;
kevman 0:014fad4dfb9d 96 i = Len;
kevman 0:014fad4dfb9d 97 }
kevman 0:014fad4dfb9d 98 i++;
kevman 0:014fad4dfb9d 99 }
kevman 0:014fad4dfb9d 100 ChangeLedColor();
kevman 0:014fad4dfb9d 101 HostIf.fIsConnected = true;
kevman 0:014fad4dfb9d 102 return(0);
kevman 0:014fad4dfb9d 103 }
kevman 0:014fad4dfb9d 104 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 105 CompareTelCode: vergleicht den Inhalt des Telegramms mit der Tabelle
kevman 0:014fad4dfb9d 106 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 107 int CompareTelCode()
kevman 0:014fad4dfb9d 108 {
kevman 0:014fad4dfb9d 109 int i;
kevman 0:014fad4dfb9d 110
kevman 0:014fad4dfb9d 111 for(i=0;i<ANZ_TEL_CODE;i++)
kevman 0:014fad4dfb9d 112 {
kevman 0:014fad4dfb9d 113 if( (HostIf.TelCode[0] == CodeTab[i][0]) && (HostIf.TelCode[1] == CodeTab[i][1]) )
kevman 0:014fad4dfb9d 114 {
kevman 0:014fad4dfb9d 115 // printf("%s\n", HostIf.strTelAwBuf);
kevman 0:014fad4dfb9d 116 return(i);
kevman 0:014fad4dfb9d 117 }
kevman 0:014fad4dfb9d 118 }
kevman 0:014fad4dfb9d 119 return(-1);
kevman 0:014fad4dfb9d 120 }
kevman 0:014fad4dfb9d 121
kevman 0:014fad4dfb9d 122
kevman 0:014fad4dfb9d 123 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 124 Funktion DecodeTel prueft Telegramme auf Inhalt und Befehl. Wird nur aufgerufen,
kevman 0:014fad4dfb9d 125 wenn Telegramm vollständig.
kevman 0:014fad4dfb9d 126 TelPos zeigt auf Anfang de Telegramms, TelLen ist die Länge bis zum TelEnde
kevman 0:014fad4dfb9d 127 ------------------------------------------------------------------------------- */
kevman 0:014fad4dfb9d 128 int DecodeTel()
kevman 0:014fad4dfb9d 129 {
kevman 0:014fad4dfb9d 130 int i, Ret;
kevman 0:014fad4dfb9d 131
kevman 0:014fad4dfb9d 132 i =0;
kevman 0:014fad4dfb9d 133 while( (*(HostIf.ptrTelPos+i) == '#') && (i < HostIf.nAwTelLen) )
kevman 0:014fad4dfb9d 134 i++;
kevman 0:014fad4dfb9d 135
kevman 0:014fad4dfb9d 136 if( (*(HostIf.ptrTelPos+i) > 0x40) && (*(HostIf.ptrTelPos+i) < 0x5B)) // ist ein Zeichen aus den Grossbuchstaben
kevman 0:014fad4dfb9d 137 {
kevman 0:014fad4dfb9d 138 if( (*(HostIf.ptrTelPos+i+1) > 0x40) && (*(HostIf.ptrTelPos+i+1) < 0x5B)) // auch das zweite Zeichen ist ein Grossbuchstabe
kevman 0:014fad4dfb9d 139 {
kevman 0:014fad4dfb9d 140 if(*(HostIf.ptrTelPos+i+2) == '#') // erst kommen zwei Großbuchstaben und dann ein #
kevman 0:014fad4dfb9d 141 { // ist ein richtige Telegramm
kevman 0:014fad4dfb9d 142 HostIf.TelCode[0] = *(HostIf.ptrTelPos+i);
kevman 0:014fad4dfb9d 143 HostIf.TelCode[1] = *(HostIf.ptrTelPos+i+1);
kevman 0:014fad4dfb9d 144 HostIf.TelCode[2] = 0x00;
kevman 0:014fad4dfb9d 145 Ret = CompareTelCode();
kevman 0:014fad4dfb9d 146 if(Ret >= 0) // gütiger Wert
kevman 0:014fad4dfb9d 147 {
kevman 0:014fad4dfb9d 148 (*FktPtr[Ret])((char *)(HostIf.ptrTelPos+i+3));
kevman 0:014fad4dfb9d 149 }
kevman 0:014fad4dfb9d 150 else // findet keinen passenden Code
kevman 0:014fad4dfb9d 151 {
kevman 0:014fad4dfb9d 152 sprintf(HostIf.strErrorBuf,"%c#ER#Unbekanntes Telegramm", STX);
kevman 0:014fad4dfb9d 153 HostIf.fSendError = true;
kevman 0:014fad4dfb9d 154 // printf("%s",IdSendBuf);
kevman 0:014fad4dfb9d 155
kevman 0:014fad4dfb9d 156 }
kevman 0:014fad4dfb9d 157 }
kevman 0:014fad4dfb9d 158 }
kevman 0:014fad4dfb9d 159 }
kevman 0:014fad4dfb9d 160 return(0);
kevman 0:014fad4dfb9d 161 }
kevman 0:014fad4dfb9d 162 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 163 RequestDummy: Nichts tun
kevman 0:014fad4dfb9d 164 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 165 int RequestDummy(char *Line)
kevman 0:014fad4dfb9d 166 {
kevman 0:014fad4dfb9d 167 // MVars.m_fSendStatus = true;
kevman 0:014fad4dfb9d 168 return(1);
kevman 0:014fad4dfb9d 169 }
kevman 0:014fad4dfb9d 170
kevman 0:014fad4dfb9d 171
kevman 0:014fad4dfb9d 172 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 173 // Telegramm #IC#: Decode Ini File EcmWin sendet einen neuen IniFile
kevman 0:014fad4dfb9d 174 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 175 int DecodeIniCode(char *Line)
kevman 0:014fad4dfb9d 176 {
kevman 0:014fad4dfb9d 177 strcat(Line, "\r\n");
kevman 0:014fad4dfb9d 178 clSdCard.WriteFile(FileNames.IniFileName, Line);
kevman 0:014fad4dfb9d 179 OpenIni();
kevman 0:014fad4dfb9d 180 return(true);
kevman 0:014fad4dfb9d 181 }
kevman 0:014fad4dfb9d 182 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 183 // Telegramm #SI#: Send Ini File. EcmWin ruft den Inifile ab
kevman 0:014fad4dfb9d 184 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 185 int SendIniCode(char *Line)
kevman 0:014fad4dfb9d 186 {
kevman 0:014fad4dfb9d 187 int Ret, fEnde;
kevman 0:014fad4dfb9d 188
kevman 0:014fad4dfb9d 189 Ret = clSdCard.OpenFile( (char *)FileNames.IniFileName, FileNames.FileReadMode);
kevman 0:014fad4dfb9d 190
kevman 0:014fad4dfb9d 191 if(Ret == false)
kevman 0:014fad4dfb9d 192 {
kevman 0:014fad4dfb9d 193 sprintf(HostIf.strTempBuf, "%c#DG#Fehler beim Oeffnen der IniDatei %s %s",STX, FileNames.IniFileName, FileNames.FileReadMode);
kevman 0:014fad4dfb9d 194 SendTelToHost(false, false, 0); // weitere Telegramme und kein EOF
kevman 0:014fad4dfb9d 195 return(false); // Fehler beim Öffnen der Datei
kevman 0:014fad4dfb9d 196 }
kevman 0:014fad4dfb9d 197 SetTimerInterrupt(0);
kevman 0:014fad4dfb9d 198 fEnde = false;
kevman 0:014fad4dfb9d 199 sprintf(HostIf.strTempBuf, "%c#SI#",STX);
kevman 0:014fad4dfb9d 200 SendTelToHost(true, false, 0); // weitere Telegramme und kein EOF
kevman 0:014fad4dfb9d 201 do
kevman 0:014fad4dfb9d 202 {
kevman 0:014fad4dfb9d 203 Ret = clSdCard.ReadLine(HostIf.strTempBuf, 512); // HostIf.strCommonTmpBuf hat 512 Zeichen, mehr sind in einer Zeile nicht drin
kevman 0:014fad4dfb9d 204 if(Ret > 0)
kevman 0:014fad4dfb9d 205 {
kevman 0:014fad4dfb9d 206 SendTelToHost(true, false, 0); // weitere Telegramme, kein EOF, LF durch # ersetzen
kevman 0:014fad4dfb9d 207 }
kevman 0:014fad4dfb9d 208 else // wenn er mit Ret = 0 zurückkommt, dann sind die Fehler gecleart, Datei noch offen
kevman 0:014fad4dfb9d 209 {
kevman 0:014fad4dfb9d 210 HostIf.strTempBuf[0] = 0x00; // ETX wird spaeter drangehaengt
kevman 0:014fad4dfb9d 211 SendTelToHost(false, false, 0); // Gesamtdatei kleiner 16384 Bytes, daher ohne EOF
kevman 0:014fad4dfb9d 212 fEnde = true;
kevman 0:014fad4dfb9d 213 }
kevman 0:014fad4dfb9d 214 }
kevman 0:014fad4dfb9d 215 while(fEnde == false);
kevman 0:014fad4dfb9d 216 clSdCard.CloseFile();
kevman 0:014fad4dfb9d 217 if(MVars.m_fMessDlgOpened == true)
kevman 0:014fad4dfb9d 218 SetTimerInterrupt(1);
kevman 0:014fad4dfb9d 219 return(true);
kevman 0:014fad4dfb9d 220 }
kevman 0:014fad4dfb9d 221 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 222 // ScanNext: Such die nächste Stelle im Telegramm hinter dem #
kevman 0:014fad4dfb9d 223 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 224 int ScanNext(char *Line, int &Start, int Len)
kevman 0:014fad4dfb9d 225 {
kevman 0:014fad4dfb9d 226 while(*(Line+Start) != '#')
kevman 0:014fad4dfb9d 227 {
kevman 0:014fad4dfb9d 228 Start++;
kevman 0:014fad4dfb9d 229 if(Start >= Len)
kevman 0:014fad4dfb9d 230 return(false);
kevman 0:014fad4dfb9d 231 }
kevman 0:014fad4dfb9d 232 Start++;
kevman 0:014fad4dfb9d 233 if(Start >= Len)
kevman 0:014fad4dfb9d 234 return(false);
kevman 0:014fad4dfb9d 235 return(true);
kevman 0:014fad4dfb9d 236 }
kevman 0:014fad4dfb9d 237 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 238 // Telegramm #CN#: Kanalnummern, Anz. Messwerte und Gültige Kanäle werde uebertragen
kevman 0:014fad4dfb9d 239 // Kanalnummern, die uebertragen werden sollen
kevman 0:014fad4dfb9d 240 // Tel hat die Form: !#CN#0,1,2,3,4,5,6,7,4,5,6,7, 4,5,6,7,0,0|<CR><LF>
kevman 0:014fad4dfb9d 241 // Die ersten 8 Zahlen sind die Kanalnumern der Messkanaele, die naechste vier sind die Schaltkanaele
kevman 0:014fad4dfb9d 242 // die naechsten beiden sind Autorange
kevman 0:014fad4dfb9d 243 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 244 int DecodeChannel(char *Line)
kevman 0:014fad4dfb9d 245 {
kevman 0:014fad4dfb9d 246 int Start, Len,i;
kevman 0:014fad4dfb9d 247
kevman 0:014fad4dfb9d 248 // printf("%c#DG#Decode Channel Line %s %c\n", STX, Line, ETX);
kevman 0:014fad4dfb9d 249 MVars.m_fMessDlgOpened = true;
kevman 0:014fad4dfb9d 250 MVars.fAdReInit = false;
kevman 0:014fad4dfb9d 251 MVars.fEnableAuto = true; // damit EnableAutoRange gesetzt wird
kevman 0:014fad4dfb9d 252 MVars.nAktMittelAfter = 500; // in Grundstellung alle 500ms
kevman 0:014fad4dfb9d 253
kevman 0:014fad4dfb9d 254 Start = 0;
kevman 0:014fad4dfb9d 255 Len = strlen(Line);
kevman 0:014fad4dfb9d 256 // printf("%c#DG#LineLen Decode Channel %d %c\n", STX,Len, ETX);
kevman 0:014fad4dfb9d 257 for(i=0;i<8;i++)
kevman 0:014fad4dfb9d 258 {
kevman 0:014fad4dfb9d 259 MVars.dbAdSum[i] = 0.;
kevman 0:014fad4dfb9d 260 MVars.MwChn[i] = atoi(Line+Start);
kevman 0:014fad4dfb9d 261 if(ScanNext(Line,Start, Len) == false) return(false);
kevman 0:014fad4dfb9d 262 }
kevman 0:014fad4dfb9d 263 // printf("%c#DG#Decode Channel nach for i<8 %c\n", STX, ETX);
kevman 0:014fad4dfb9d 264
kevman 0:014fad4dfb9d 265 MVars.m_nAnzChnSend = 3;
kevman 0:014fad4dfb9d 266
kevman 0:014fad4dfb9d 267 for(i=0;i<3;i++)
kevman 0:014fad4dfb9d 268 MVars.m_fChnValid[i] = true;
kevman 0:014fad4dfb9d 269
kevman 0:014fad4dfb9d 270 // printf("%c#DG#Decode Channel nach fValid%c\n", STX, ETX);
kevman 0:014fad4dfb9d 271
kevman 0:014fad4dfb9d 272 MVars.SendAnzWerte = 2;
kevman 0:014fad4dfb9d 273 CalcSendAnzWerte();
kevman 0:014fad4dfb9d 274 if(MVars.SendAnzWerte == 1000)
kevman 0:014fad4dfb9d 275 {
kevman 0:014fad4dfb9d 276 MVars.AdConvTime = 0x18; // Startwert, längste Wandlungszeit
kevman 0:014fad4dfb9d 277 }
kevman 0:014fad4dfb9d 278 else if(MVars.SendAnzWerte == 500)
kevman 0:014fad4dfb9d 279 {
kevman 0:014fad4dfb9d 280 MVars.AdConvTime = 0x28; // Startwert, längste Wandlungszeit
kevman 0:014fad4dfb9d 281 }
kevman 0:014fad4dfb9d 282 else if(MVars.SendAnzWerte == 200)
kevman 0:014fad4dfb9d 283 {
kevman 0:014fad4dfb9d 284 MVars.AdConvTime = 0x58; // Startwert, längste Wandlungszeit
kevman 0:014fad4dfb9d 285 }
kevman 0:014fad4dfb9d 286 else
kevman 0:014fad4dfb9d 287 {
kevman 0:014fad4dfb9d 288 MVars.AdConvTime = 0x7F; // Startwert, längste Wandlungszeit
kevman 0:014fad4dfb9d 289 }
kevman 0:014fad4dfb9d 290 // printf("%c#DG#Decode Channel nach CalcSendAnz%c\n", STX, ETX);
kevman 0:014fad4dfb9d 291
kevman 0:014fad4dfb9d 292 // SetAdConversionTime();
kevman 0:014fad4dfb9d 293 // wait(2.0);
kevman 0:014fad4dfb9d 294 SetTimerInterrupt(1); // wenn er schon laeuft, dann passiert nichts
kevman 0:014fad4dfb9d 295
kevman 0:014fad4dfb9d 296 MVars.nAktMittelAfter = 500; // in Grundstellung alle 500ms
kevman 0:014fad4dfb9d 297
kevman 0:014fad4dfb9d 298 MVars.nSendAfter = 500;
kevman 0:014fad4dfb9d 299 MVars.m_nAnzValue = 1;
kevman 0:014fad4dfb9d 300
kevman 0:014fad4dfb9d 301 MVars.nDestCount = 0;
kevman 0:014fad4dfb9d 302 MVars.nMittelTimer =0;
kevman 0:014fad4dfb9d 303 MVars.nMessTimer = 0;
kevman 0:014fad4dfb9d 304 MVars.m_fStartTel = 0x01;
kevman 0:014fad4dfb9d 305 MVars.m_nSendValues = 1;
kevman 0:014fad4dfb9d 306 STemp[0] = 0x00;
kevman 0:014fad4dfb9d 307
kevman 0:014fad4dfb9d 308 // Ad7739Init();
kevman 0:014fad4dfb9d 309 Ad7739Start(0, 0,1);
kevman 0:014fad4dfb9d 310 // MVars.fAdReInit = true;
kevman 0:014fad4dfb9d 311 // printf("%c#DG#Ende Decode Channel%c\n", STX, ETX);
kevman 0:014fad4dfb9d 312
kevman 0:014fad4dfb9d 313 return(true);
kevman 0:014fad4dfb9d 314 }
kevman 0:014fad4dfb9d 315 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 316 void CalcSendAnzWerte()
kevman 0:014fad4dfb9d 317 {
kevman 0:014fad4dfb9d 318 if(MVars.SendAnzWerte >= 1000) // 1000 Werte Pro Sekunden
kevman 0:014fad4dfb9d 319 MVars.nMittelAfter = 1;
kevman 0:014fad4dfb9d 320 else if(MVars.SendAnzWerte == 500) // 500 Werte Pro Sekunden
kevman 0:014fad4dfb9d 321 MVars.nMittelAfter = 2;
kevman 0:014fad4dfb9d 322 else if(MVars.SendAnzWerte == 200) // 200 Werte Pro Sekunden
kevman 0:014fad4dfb9d 323 MVars.nMittelAfter = 5;
kevman 0:014fad4dfb9d 324 else if(MVars.SendAnzWerte == 100) // 100 Werte Pro Sekunden
kevman 0:014fad4dfb9d 325 MVars.nMittelAfter = 10;
kevman 0:014fad4dfb9d 326 else if(MVars.SendAnzWerte == 50) // 50 Werte Pro Sekunden
kevman 0:014fad4dfb9d 327 MVars.nMittelAfter = 20;
kevman 0:014fad4dfb9d 328 else if(MVars.SendAnzWerte == 20) // 20 Werte Pro Sekunden
kevman 0:014fad4dfb9d 329 MVars.nMittelAfter = 50;
kevman 0:014fad4dfb9d 330 else if(MVars.SendAnzWerte == 10) // 10 Werte Pro Sekunden
kevman 0:014fad4dfb9d 331 MVars.nMittelAfter = 100;
kevman 0:014fad4dfb9d 332 else if(MVars.SendAnzWerte == 4) // 4 Werte Pro Sekunden
kevman 0:014fad4dfb9d 333 MVars.nMittelAfter = 250;
kevman 0:014fad4dfb9d 334 else // if(MVars.SendAnzWerte == 2) // 2 Werte Pro Sekunden
kevman 0:014fad4dfb9d 335 MVars.nMittelAfter = 500;
kevman 0:014fad4dfb9d 336 }
kevman 0:014fad4dfb9d 337 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 338 // #SK# // beliebigen Kanal schalten
kevman 0:014fad4dfb9d 339 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 340 int DecodeContact(char *Line)
kevman 0:014fad4dfb9d 341 {
kevman 0:014fad4dfb9d 342 int Start,Len, SkChn;
kevman 0:014fad4dfb9d 343 bool SkLevel;
kevman 0:014fad4dfb9d 344
kevman 0:014fad4dfb9d 345 Start = 0;
kevman 0:014fad4dfb9d 346
kevman 0:014fad4dfb9d 347 Len = strlen(Line);
kevman 0:014fad4dfb9d 348 SkChn = atoi(Line);
kevman 0:014fad4dfb9d 349 while( (*(Line+Start) != '#') && (Start < Len) )
kevman 0:014fad4dfb9d 350 Start++;
kevman 0:014fad4dfb9d 351 Start += 1;
kevman 0:014fad4dfb9d 352 SkLevel = (bool)atoi(Line+Start);
kevman 0:014fad4dfb9d 353
kevman 0:014fad4dfb9d 354 if(SkChn == 0) // Start Kommando, Motor laeuft los
kevman 0:014fad4dfb9d 355 {
kevman 0:014fad4dfb9d 356 if(SkLevel == 0)
kevman 0:014fad4dfb9d 357 SwR0 = false;
kevman 0:014fad4dfb9d 358 else
kevman 0:014fad4dfb9d 359 {
kevman 0:014fad4dfb9d 360 SwR0 = true;
kevman 0:014fad4dfb9d 361 MVars.m_fSendStatus = true;
kevman 0:014fad4dfb9d 362 }
kevman 0:014fad4dfb9d 363 }
kevman 0:014fad4dfb9d 364 else if(SkChn == 1) // Direktion, wenn low, dann Gegenuhrzeigersinn
kevman 0:014fad4dfb9d 365 {
kevman 0:014fad4dfb9d 366 if(SkLevel == 0) SwR1 = false;
kevman 0:014fad4dfb9d 367 else SwR1 = true;
kevman 0:014fad4dfb9d 368 }
kevman 0:014fad4dfb9d 369
kevman 0:014fad4dfb9d 370
kevman 0:014fad4dfb9d 371 return(true);
kevman 0:014fad4dfb9d 372 }
kevman 0:014fad4dfb9d 373 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 374 // #FR# Pot. freigeben
kevman 0:014fad4dfb9d 375 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 376 int DecodeFreigabe(char *Line)
kevman 0:014fad4dfb9d 377 {
kevman 0:014fad4dfb9d 378 int i;
kevman 0:014fad4dfb9d 379
kevman 0:014fad4dfb9d 380 MVars.nMessArt = 0;
kevman 0:014fad4dfb9d 381 MVars.fSequenzMessung = false;
kevman 0:014fad4dfb9d 382 IrComp.fMitIrValue = false;
kevman 0:014fad4dfb9d 383 MVars.m_fMessDlgOpened = false;
kevman 0:014fad4dfb9d 384 FrqValues.fImpedance = false; // falls er auf Impedanzmessung war
kevman 0:014fad4dfb9d 385
kevman 0:014fad4dfb9d 386 Ad7739Stop();
kevman 0:014fad4dfb9d 387 for(i=0;i<ANZ_POT;i++)
kevman 0:014fad4dfb9d 388 MVars.nMessZustand[i] = 0;
kevman 0:014fad4dfb9d 389 IrComp.dbAOut[0] = 0.;
kevman 0:014fad4dfb9d 390 CalcDa(IrComp.dbAOut[0], 0);
kevman 0:014fad4dfb9d 391 MVars.m_nSendValues = 0;
kevman 0:014fad4dfb9d 392
kevman 0:014fad4dfb9d 393 LedsOff();
kevman 0:014fad4dfb9d 394 MVars.fEnableAuto = false; // damit EnableAutoRange gesetzt wird
kevman 0:014fad4dfb9d 395 nMyTimer = 0;
kevman 0:014fad4dfb9d 396 return(true);
kevman 0:014fad4dfb9d 397 }
kevman 0:014fad4dfb9d 398 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 399 // #SW# Set Watchdog
kevman 0:014fad4dfb9d 400 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 401 int DecodeSetWd(char *Line)
kevman 0:014fad4dfb9d 402 {
kevman 0:014fad4dfb9d 403 int Start,Len,i;
kevman 0:014fad4dfb9d 404
kevman 0:014fad4dfb9d 405 Start = 0;
kevman 0:014fad4dfb9d 406 Len = strlen(Line);
kevman 0:014fad4dfb9d 407 WDog.fEnabled = (bool)atoi(Line);
kevman 0:014fad4dfb9d 408
kevman 0:014fad4dfb9d 409 while( (*(Line+Start) != '#') && (Start < Len) )
kevman 0:014fad4dfb9d 410 Start++;
kevman 0:014fad4dfb9d 411 Start++;
kevman 0:014fad4dfb9d 412 WDog.nTimeOut = atoi(Line+Start);
kevman 0:014fad4dfb9d 413 WDog.nMsTimeOut = WDog.nTimeOut * 200;
kevman 0:014fad4dfb9d 414
kevman 0:014fad4dfb9d 415 while( (*(Line+Start) != '#') && (Start < Len) )
kevman 0:014fad4dfb9d 416 Start++;
kevman 0:014fad4dfb9d 417 Start++;
kevman 0:014fad4dfb9d 418 i=0;
kevman 0:014fad4dfb9d 419 while( (*(Line+Start) != '#') && (Start < Len) )
kevman 0:014fad4dfb9d 420 {
kevman 0:014fad4dfb9d 421 WDog.cSign[i] = *(Line+Start);
kevman 0:014fad4dfb9d 422 Start++; i++;
kevman 0:014fad4dfb9d 423 if(i > 7) break;
kevman 0:014fad4dfb9d 424 }
kevman 0:014fad4dfb9d 425 Start++;
kevman 0:014fad4dfb9d 426 WDog.fLogFile = (bool)atoi(Line+Start);
kevman 0:014fad4dfb9d 427 // printf("WatchDog: %d, %d, %s, %d",WDog.fEnabled, WDog.nTimeOut, WDog.cSign, WDog.fLogFile);
kevman 0:014fad4dfb9d 428 return(true);
kevman 0:014fad4dfb9d 429 }
kevman 0:014fad4dfb9d 430 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 431 // #SC# Analogausgang setzen
kevman 0:014fad4dfb9d 432 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 433 int DecodeAnalogValue(char *Line)
kevman 0:014fad4dfb9d 434 {
kevman 0:014fad4dfb9d 435 int Start,Chn;
kevman 0:014fad4dfb9d 436
kevman 0:014fad4dfb9d 437 Start = 0;
kevman 0:014fad4dfb9d 438
kevman 0:014fad4dfb9d 439 // return(true);
kevman 0:014fad4dfb9d 440 // printf("Puffer:%s",Line);
kevman 0:014fad4dfb9d 441 #ifdef SIO_DEBUG
kevman 0:014fad4dfb9d 442 printf("MessZustand: %d Flag Sequenzmessung %d\n",MVars.nMessZustand[0], MVars.fSequenzMessung);
kevman 0:014fad4dfb9d 443 #endif
kevman 0:014fad4dfb9d 444 if(MVars.fSequenzMessung) // nur wenn innerhalb der Sequenzmessung
kevman 0:014fad4dfb9d 445 MVars.m_fScan = false;
kevman 0:014fad4dfb9d 446 Chn = atoi(Line);
kevman 0:014fad4dfb9d 447 if(Chn > 0) Chn--; // bekommt 1 und 2, muss aber mit 0 und 1 arbeiten
kevman 0:014fad4dfb9d 448 Start += 2;
kevman 0:014fad4dfb9d 449 // printf("Ch:%d Val:%f\n",Channel,AOut);
kevman 0:014fad4dfb9d 450 IrComp.dbAOut[Chn] = atof(Line+Start);
kevman 0:014fad4dfb9d 451 #ifdef SIO_DEBUG
kevman 0:014fad4dfb9d 452 printf("DaValue: %f \n",IrComp.dbAOut[Chn]);
kevman 0:014fad4dfb9d 453 #endif
kevman 0:014fad4dfb9d 454 CalcDa(IrComp.dbAOut[Chn], Chn);
kevman 0:014fad4dfb9d 455
kevman 0:014fad4dfb9d 456 return(true);
kevman 0:014fad4dfb9d 457 }
kevman 0:014fad4dfb9d 458 /*-------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 459 // SendIdTel: Sendet das ID-Telegramm
kevman 0:014fad4dfb9d 460 -------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 461 int SendIdTel()
kevman 0:014fad4dfb9d 462 {
kevman 0:014fad4dfb9d 463 // TcpClient.send( TcpSendBuf, strlen(TcpSendBuf));
kevman 0:014fad4dfb9d 464 return(1);
kevman 0:014fad4dfb9d 465 }
kevman 0:014fad4dfb9d 466 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 467 // Telegramm #CN#: Kanalnummern, Anz. Messwerte und Gültige Kanäle werde uebertragen
kevman 0:014fad4dfb9d 468 // Kanalnummern, die uebertragen werden sollen
kevman 0:014fad4dfb9d 469 // Tel hat die Form: !#CN#0,1,2,3,4,5,6,7,4,5,6,7, 4,5,6,7,0,0|<CR><LF>
kevman 0:014fad4dfb9d 470 // Die ersten 8 Zahlen sind die Kanalnumern der Messkanaele, die naechste vier sind die Schaltkanaele
kevman 0:014fad4dfb9d 471 // die naechsten beiden sind Autorange
kevman 0:014fad4dfb9d 472 //--------------------------------------------------------------------------
kevman 0:014fad4dfb9d 473 int SwitchPumpeOn(char *Line)
kevman 0:014fad4dfb9d 474 {
kevman 0:014fad4dfb9d 475 int Start, Len,i;
kevman 0:014fad4dfb9d 476
kevman 0:014fad4dfb9d 477 Start = 0;
kevman 0:014fad4dfb9d 478 Len = strlen(Line);
kevman 0:014fad4dfb9d 479
kevman 0:014fad4dfb9d 480 IrComp.dbAOut[0] = atof(Line+Start);
kevman 0:014fad4dfb9d 481 CalcDa(IrComp.dbAOut[0], 0);
kevman 0:014fad4dfb9d 482 SwR0 = true;
kevman 0:014fad4dfb9d 483 MVars.m_fSendStatus = true;
kevman 0:014fad4dfb9d 484 return(true);
kevman 0:014fad4dfb9d 485 }