Test
Dependencies: mbed-dev-OS5_10_4
Main/main.cpp
- Committer:
- kevman
- Date:
- 2020-08-07
- Revision:
- 0:014fad4dfb9d
File content as of revision 0:014fad4dfb9d:
/*------------------------------------------------------------------------------- Programm Name: Main.C Version: 1.0 Sprache: C++ Compiler: mbed Autor: PS Copyright: PS Funktion: Main Funktionen 04.08.2016: Projekt: EcmComFrdm -------------------------------------------------------------------------------*/ #include "Headers.h" // #define Ad0IsRdyDown() (LPC_GPIO0->FIOCLR & 0x000800000) // #define Ad1IsRdyDown() (LPC_GPIO0->FIOCLR & 0x001000000) //const char* MyIp = "192.168.2.99"; //const char* HostIp = "192.168.2.8"; //const char* MySub = "255.255.255.0"; //const char* MyGw = "0.0.0.0"; /*------------------------------------------------------------------------------- Main Funktion. -------------------------------------------------------------------------------*/ int main() { InitMain(); ConnectIrq(); g_fDisableDataRead = false; // Ad7739Start(0, 0,1); // MVars.m_fMessDlgOpened = true; MVars.nAktMittelAfter = 500; while (true) { CheckAnalogIn(); if(nMyTimer > 0) // Scanner Verarbeitung { CheckTimerHandlingAndScanner(); } /* if(g_nChn1Counter > 1000) { printf("%c#DG#Channel 1 Counter: %ld %c\n", STX, g_nChn1Counter, ETX); g_nChn1Counter = 0; } else if(g_nChn2Counter > 1000) { printf("%c#DG#Channel 2 Counter: %ld %c\n", STX, g_nChn2Counter, ETX); g_nChn2Counter = 0; } */ if(HostIf.nInTel > 0) CheckCommInterface(); CheckEcmWinConnect(); #ifdef TOUCH_DISPLAY CheckEvent(); // TFT Event #endif #ifdef DO_AUTO_START if(g_fDoAutostart == true) g_fDoAutostart = CheckAutoStart(); // kommt false zurueck, dann wird der Aufruf beendet #endif CheckZustand(); // Zustand der Messung } } /*------------------------------------------------------------------------------- Funktion CheckCommInterface prüft ob ueber die Kommunikationsschnittstelle eine Anforderung kommt. -------------------------------------------------------------------------------*/ int CheckCommInterface() { if(TransferSioTel() == true) { // ChangeLedColor(); // printf("%c#DG#HostIf.strTelAwBuf: %s%c\r\n",STX, HostIf.strTelAwBuf, ETX); CheckTel(); } return(true); } /*------------------------------------------------------------------------------- Funktion CheckEcmWinConnect: Bearbeitet alle Methoden die mit der Messung ueber EcmWin zu tun haben. -------------------------------------------------------------------------------*/ int CheckEcmWinConnect() { if(!MVars.m_fMessDlgOpened) { g_nChn2Counter++; if(g_nChn2Counter > 50000) { // printf("%c#DG#Channel 2 Counter: %ld %c\n", STX, g_nChn2Counter, ETX); ChangeLedColor(); g_nChn2Counter = 0; } } if(MVars.m_fMessDlgOpened) { // ReadAllAdChannels(); if(MVars.nMittelTimer >= MVars.nAktMittelAfter) { CheckDaAd(); MVars.nMittelTimer -= MVars.nAktMittelAfter; ChangeLedColor(); } CheckZustand(); } #ifdef DO_AUTO_START else if(m_fAutoStart == true) // ist in der Autostart Funktion { if(MVars.nMittelTimer >= MVars.nAktMittelAfter) // nAktMittelAfter muss ueber die Sequenz neu gestzt werden { if(CheckDaAd() == false) { DisableAutoMode(); } MVars.nMittelTimer -= MVars.nAktMittelAfter; ChangeLedColor(); } if (g_nTftTimer >= 1000) { RequestDateTime(); g_nTftTimer = 0; if(m_fAutoStart == true) DoStatusLed = !DoStatusLed; } } #endif else { if (g_nTftTimer >= 1000) { // RequestDateTime(); g_nTftTimer = 0; } } return(true); } /*------------------------------------------------------------------------------- DoReInit: Initialisieren des AD Wandlers -------------------------------------------------------------------------------*/ int DoReInit() { uint8_t Status0, Status1; // DigitalOut Test(PTC16); #ifdef TFT_DEBUG printf("DOR_C: %08X DIR_C: %08X DDR_C:%08X \r\n", GPIOC->PDOR, GPIOC->PDIR, GPIOC->PDDR); // PTC 16 auf Output schalten #endif // GPIOC->PDDR |= 0x00010000; // PTC 16 auf Output schalten MVars.fAdReInit = false; MVars.m_nSendValues = 1; // fängt an, in Grundstellung zu senden g_fRdy0 = false; g_fRdy1 = false; // ConnectIrq(); g_fDisableDataRead = false; Ad7739Start(0, 0,1); // 0=Kanal mit dem begonnen wird, Wandler 0, Mode // Ad7739CommonStart(0, 1); nMyTimer = 0; g_nAdSetPos = 0; g_nAdGetPos = 0; g_nAdCount = 0; MVars.m_nSendValues = 1; // fängt an, in Grundstellung zu senden ZustandsTimer = 0; return(true); } /*------------------------------------------------------------------------------- Funktion CheckZustand prüft alle eingehenden Telegramme auf Inhalt und Befehl -------------------------------------------------------------------------------*/ int CheckZustand() { if(MVars.fAdReInit == true) { MVars.fAdReInit = false; DoReInit(); } if(MVars.m_nSendValues == 0) // nichts senden { nMyTimer = 0; ZustandsTimer = 0; return(0); } // MVars.dbAdSum[0] += (long double)AdcHs1.read_u16(); // MVars.dbAdSum[1] += (long double)AdcHs2.read_u16(); // MVars.nMwMittelCount++; #ifdef TFT_DEBUG // printf("AdResult_0: %f \n",MVars.dbAdSum[0]); #endif // g_nAdGetPos++; g_nAdGetPos &= 0x3FF; // AdVal->AdRingBuf[0][g_nAdSetPos] = AdcHs1.read_u16(); // AdVal->AdRingBuf[1][g_nAdSetPos] = AdcHs2.read_u16(); // g_nAdSetPos++; g_nAdSetPos &= 0x03FF; // g_nAdCount++; // CheckDaAd(); if(ZustandsTimer >= 100) // die Zustände werden dadurch alle 100ms überprüft { MVars.nSecCounter[0] += 100; IrComp.n100msCounter++; ZustandsTimer -= 100; if(MVars.m_nSendValues == 1) // senden in Grundstellung { CheckGrundZustand(); } else if(MVars.m_nSendValues == 2) // senden während Messung { CheckRunZustand(); } } return(0); } /*------------------------------------------------------------------------------- CheckGrundZustand: -------------------------------------------------------------------------------*/ int CheckGrundZustand() { MVars.m_fDisableStopTel = false; return(true); } /*------------------------------------------------------------------------------- CheckRunZustand: -------------------------------------------------------------------------------*/ int CheckRunZustand() { switch(MVars.nMessZustand[0]) { case -1: break; case 0: break; case 1: break; case 2: MVars.nSecCounter[0] = 0; break; case 3: break; case 4: break; case 5: if(MPara.RpDauerNach[0] > 0) { if(MVars.nSecCounter[0] >= 1000) { MVars.nSecCounter[0] -= 1000; MPara.RpDauerNach[0]--; } } else { MVars.m_fDoFinishMeasurement = true; MVars.m_fDisableStopTel = true; } break; case 6: // schickt nur kontinuierlich die Werte break; default: break; } if(MVars.m_fDoFinishMeasurement == true) // wird von Stopkommando aus EcmTel gesetzt { MVars.m_fDoFinishMeasurement = false; MVars.m_fFinishMeasurement = true; MVars.m_fScan = false; #ifdef SIO_DEBUG printf("MessZustand: %d \n",MVars.nMessZustand[0]); printf("SwOCP:%d\n",MVars.SwitchChn[0]); #endif } return(true); } /*------------------------------------------------------------------------------- ChangeConversionTime: Im Fall dass die Wandlungszeit geändert werden muss -------------------------------------------------------------------------------*/ void ChangeConversionTime() { MVars.fChangeCt = false; SetAdConversionTime(); // wait(0.2); // led1 = !led1; } /*------------------------------------------------------------------------------- SendMessungStart: Startet die Messung -------------------------------------------------------------------------------*/ int SendMessungStart() { sprintf(HostIf.strTempBuf,"%c#MG#%c", STX, ETX); SendTelToHost(false, false, false); return(0); } /*------------------------------------------------------------------------------- SendMessungStop: Stoppt die Messung -------------------------------------------------------------------------------*/ int SendMessungStop() { sprintf(HostIf.strTempBuf,"%c#MS#%c", STX, ETX); SendTelToHost(false, false, false); return(0); }