Test
Dependencies: mbed-dev-OS5_10_4
Diff: MySources/Struct.h
- Revision:
- 0:014fad4dfb9d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MySources/Struct.h Fri Aug 07 07:24:21 2020 +0000 @@ -0,0 +1,444 @@ +/*------------------------------------------------------------------------------- +Programm Name: Struct.H +Version: 1.0 +Sprache: C +Compiler: CrossStudio Ver. 2.0 +Autor: PS +Copyright: PS + + +Funktion: Strukturen fuer EcmCom + +28.10.2012: + +-------------------------------------------------------------------------------*/ +#define UINT8 unsigned char +#define uint8_t UINT8 +#define UINT16 unsigned int +#define uint16_t UINT16 +#define uint UINT16 +#define BYTE unsigned char +#define UINT32 unsigned long +#define uint32_t unsigned long +#define INT16 int + +#define FALSE false +#define TRUE true + +#define LOW 0 +#define HIGH 1 + +#define ANZ_POT 2 +#define ANZ_POLY 101 + +#define GEN_TYP_QST 1 +#define GEN_TYP_FKT 0 + + +/*=========================================================================== +Die nachfolgende Struktur dient zur Speicherung der Startup Konfiguration +===========================================================================*/ +struct StartUp +{ + int HwConfig; // KOnfiguration der Hardware + int StpConfig; // ohne oder mit seriell to parallel + + int PotAnz; // 0 = 1 Pot. 1 = 2 Pot. + int AoInvert[ANZ_POT]; + float Offset[ANZ_POT]; + int PotTyp[ANZ_POT]; // 0=Alter, 1=PGU + bool fPotActive[ANZ_POT]; + bool fStartConnection; + bool fNoiseMeasurement; + +}; +typedef struct StartUp START_UP; + +/*=========================================================================== +Die nachfolgende Struktur dient zur Verwaltung der Watchdogfunktion +===========================================================================*/ +struct strWatchDog +{ + int fEnabled; // 0=kein Watchdog, 1=Watchdog aktiv + int nTimeOut; // Timeout-Zeit für Watchdog + char cSign[8]; // Watchdog Zeichen was vom Host gesendet wird + int nCounter; + int nMsTimeOut; + int fLogFile; + int fHandShake; +}; +typedef struct strWatchDog WATCH_DOG; + +/*=========================================================================== +Die nachfolgende Struktur dient zur Speicherung der Messkanaele +===========================================================================*/ +struct MChn1 +{ + float VarGalvFaktor; // Variabler Faktor für die Ansteuerung Galvanostat + +}; +typedef struct MChn1 M_KANAL; + +/*=========================================================================== + Die nachfolgende Struktur ist für die Meßparameter +===========================================================================*/ +struct StrMPara +{ + int RpDauer[ANZ_POT]; // Dauer der Ruhepotentialmessung + int RpDauerVor[ANZ_POT]; // Dauer der Ruhepotentialmessung + int RpDauerNach[ANZ_POT]; // Dauer der Ruhepotentialmessung + int IBereichPos[ANZ_POT]; // Position im Array + float IKritPos[ANZ_POT]; // Positiver Endwert des Kritischen Stromdichtebereiches + float IKritNeg[ANZ_POT]; // Negativer Endwert des Kritischen Stromdichtebereiches + int UKritPos[ANZ_POT]; // Positiver Endwert des Potential bei Galvanostat + int UKritNeg[ANZ_POT]; // Negativer Endwert des Potential bei Galvanostat + int GrenzVerhalten[ANZ_POT]; // Verhalten bei Grenzwertüberschreitung + float ProbenGroesse[ANZ_POT]; // Größe der Probe + float dUdTRpEnde[ANZ_POT]; // dU/dt für Rp-Ende + double SMax[ANZ_POT]; // für Galvanostat + int PolarisationsStart[ANZ_POT];// Start der Polarisation absolut oder relativ +}; +typedef struct StrMPara MESS_PARAMETER; + +/*=========================================================================== +Struktur Deklaration für die Quasistationäre Funktion +===========================================================================*/ +struct strQst1 { + int StartPotential; + int EndPotential; + float StufenHoehe; + float StufenDauer; + int AufAb; + int StartWertRelativ; + int AnzZyklen; + float flW_StartPotential; // Variable zum arbeiten + float flW_EndPotential; // Variable zum arbeiten + float flW_StufenHoehe[2]; // Variable zum arbeiten + long nW_StufenDauer; + int nW_Richtung; + int nW_StepCounter; + }; +typedef struct strQst1 QST_DATEN; + +/*=========================================================================== + Struktur Definition für die Frequenzwerte and den DDS +===========================================================================*/ +struct strFrqValues +{ + BYTE OutH0, OutH1; + BYTE OutL0, OutL1; + BYTE Clock; + int nFilterAuto; + BYTE AdControlLow; // 0x00=Sinus, 0x02 = Dreieck + bool fImpedance; + BYTE V1, V2, Mux; + bool fSendEnable; + uint16_t nAktAmplitude; + uint16_t nLastAmplitude; +}; +typedef struct strFrqValues FRQ_VALUES; + +/*=========================================================================== + Struktur zum Speichern der Generatorwerte +===========================================================================*/ +struct FktStr2 +{ + int AnzPoly; // Anzahl der Polygone einer Fuktion + long nAnzZyklus; // Anzahl der Zyklen + long ZyklusStartPunkt; // Einstiegspunkt für den Zyklus + int PolyNummer[ANZ_POLY+1]; // Satznummer + double ZeitWert[ANZ_POLY+1];// Abs. Zeitwerte der Polygone + float SpngWert[ANZ_POLY+1]; // Programmierter Spannungsw. der Polygone + double ScanRate[ANZ_POLY+1]; // Scanrate in mV/s + int ScanRichtung[ANZ_POLY+1]; // Richtung auf/ab/Sprung/Haltepot. + float RealSpngWert[ANZ_POLY+1]; // Tatsächlicher Spannungsw. der Polygone + + double Schritt[ANZ_POLY+2]; + unsigned long Count[ANZ_POLY+2]; + int GenActive; + long ZCount; // Zähler für Zyklus während der Messung + double GenVal; + int SetVal; // Der aktuell zu setztende Integer-Wert + int LastSetVal; // Der zuletzt gesetzte Integer-Wert + float MaxUS, MinUS; + float MaxTime; + int StartWertRelativ; + int FolgeWerteRelativ; + float flZyklusOffset; + int nZlOffsetMode; + float flScanOffset; + int VpStatus; // wird vorpolarisiert, dann muá das eingearbeitet werden + UINT16 nAktZyklus; +}; +typedef struct FktStr2 FKT_WERTE; + +/*=========================================================================== +Struktur Deklaration für die Scanner Variablen +===========================================================================*/ +struct strScanVal +{ + unsigned long GenCount; + int GenPos; + int Skiped; + int Vz; + bool SetStop; + bool fNewCycle; + float MaxUValue; + float MinUValue; + int AoMinWert, AoMaxWert; +}; +typedef struct strScanVal SCAN_VAL; +/*=========================================================================== +Struktur Deklaration für die Puls Variablen. Übernimmt die Pulswerte aus dem +Datentelegramm und hält die Werte ohne das sie vom Programm verändert werden +===========================================================================*/ +struct strPulsValue +{ + int nPulsCounter; + int nPulsPauseCounter; + float flPulsStartPot; + float flUpperPulsValue; + float flLowerPulsValue; + long nAnzPulsUp; + long nAnzPulsDown; + float flPulsOffset; +}; +typedef struct strPulsValue PULS_VALUE; + +/*=========================================================================== +Struktur Deklaration für Puls Variablen. Diese Strukturvariablen dienen zum +Arbeiten, können verändert werden und müssen im Bedarfsfalls aus den Basisdaten +neu geladen werden +===========================================================================*/ +struct strPulsWorkValue +{ + int nPulsCounter; + int nPulsPauseCounter; + float flUpperPulsValue; + float flLowerPulsValue; + float flPulsStartPot; + long nAnzPulsUp; + long nAnzPulsDown; + float flPulsOffset; + bool nPulsState; +}; +typedef struct strPulsWorkValue PULS_WORK_VALUES; + + +/*=========================================================================== + Die nachfolgende Struktur ist für Variablen, die während der Messung + von allen Messmodulen benötigt werden. Eine solche Struktur sollte für + jeden zu messenden Potentiostaten separat angelegt werden. So läßt sich + das Messen besser für Parallel-Messungen erweitern. +===========================================================================*/ +struct StrMVariables +{ + int BetriebsArt; // Potentiostat=0, Galvanostat=1 + int Circuit; // OLP=0, I-Zelle = 1, Messung Ende = 2 + float flAktIRange; // Aktueller Max-Strom in mA + float RangeFaktor; + float IAktInVolt; + int GenDateiTyp; // normal oder QST + int m_nReversePotential; + int m_nLastPotential; + int nMessArt; + int nReversed; + +}; +typedef struct StrMVariables MESS_VARIABLES; + +/*=========================================================================== + Die nachfolgende Struktur ist für Variablen, die der I-Bereichsprüfung und + Umschaltung dienen. +=========================================================================== +struct StrIRange +{ + int RangeAnz[ANZ_POT]; + int AktRange[ANZ_POT]; + int nIRangeMax[ANZ_POT]; + int nIRangeMin[ANZ_POT]; + UINT32 lIMax[ANZ_POT]; + UINT32 lIMin[ANZ_POT]; + UINT32 lIMaxCompare[ANZ_POT]; + UINT32 lIMinCompare[ANZ_POT]; + + int TempRange; + int AutoRange[ANZ_POT]; // 0=aktiv, 1=nicht aktiv + int IDownCount[ANZ_POT]; + bool m_fIRangeSwitchedUp[ANZ_POT]; + BYTE RangeValue[ANZ_POT]; + int Iz1, Iz2; + float I1, I2; + float IInVolt[ANZ_POT]; + bool m_fCheckRange; + bool m_fAussenStromLos; +}; +typedef struct StrIRange I_RANGE; +*/ +/*=========================================================================== + Struktur Definition der Werte für die Änderung der Senderate während der Messung +===========================================================================*/ +struct NewScanRate +{ + int nNewSendeRate; + bool fFallBack; // nach einer bestimmten Anzahl zurücksetzen + int nFallBackTime; // zurück zur alten Einstellung nach n Sekunden + int nNewAutoRange; + int nNewRange; // neuer Bereich, wenn nicht -1 dann setzen + int nOldSendAnzWerte; + int nOldAutoRange; + int nOldIntervall; + int nExtSigOnOff; + int n2ndExtSigOnOff; +}; +typedef struct NewScanRate NEW_SCAN_RATE; + + +/*=========================================================================== + Struktur Definition von MessVariables +===========================================================================*/ +struct MessVariables +{ + + int MwChn[16]; + int SwitchChn[4]; + bool m_fChnValid[16]; // Sagt, welcher Kanal übertragen wird, es werden 16 übertragen + int ZInfo[2]; // liefert dem Hauptrechner die Info, wo der Messablauf ist + + int nAnzahlSchritte; // Anzahl der Schritte pro Sekunde + float FrkValue[ANZ_POT]; + + int SendAnzWerte; // Anzahl Werte, die pro Sekunden gesendet werden + int SendAnzSave; // Zwischenspeicher fuer das Sendintervall +// int m_nStoreMwIntervall; // Zeitabstand, in dem die Messwerte gespeichert werden + int m_nAnzChnSend; // Zählt die Kanäle die gesendet werden + int m_nSendValues; // das Senden von Single-Messdaten wird mit 1, Cont.Messdaten mit 2 freigegeben + int nMessZustand[ANZ_POT]; + int nOldZustand[ANZ_POT]; + +//------------------------------------------------------------------------------ + + long double dbAdSum[ANZ_POT*4]; + double dbAdResult[ANZ_POT*4]; + int nChnAverage[ANZ_POT*4]; + + long nMwMittelCount; // wird nach jedem erfolgreichen Lesen des A/D Wandlers incrementiert + int nMittelTimer; // zählt die Zeit, über die bisher gemittelt wurde + int nMittelAfter; // ist die Zeit in ms, nach der gemäß der Anzahl der Werte eine Mittelung durchgeführt wird + int nAktMittelAfter; // ist der aktuelle Wert nach dem gemittelt wird + int nSendTimer; // zählt die Zeit zwischen dem senden der Werte + int nDaTimer; // zählt die Zeit zwischen der DA Wandlung + int nSendAfter; // ist die Zeit in ms, nach der die Daten gesendet werden + int nDestCount; // zählt die Werte im Zielpuffer der versendet wird + bool m_fStartTel; // sagt, daß ein STX mit MW gesendet werden muss + int m_nAnzValue; + int nTelLen; + bool m_fSendStatus; + bool m_fPotGal; + bool m_fDoFinishMeasurement; + bool m_fFinishMeasurement; + bool m_fMeasurementFinished; + bool m_fDisableStopTel; + +// int nMwMittelVal; // ist der Endwert, nachdem gesendet wird + int nSecCounter[2]; + bool m_fScan; // Flag zum aktivieren des Scanners + bool m_fScanPuls; + bool m_fPulsMessung; + bool m_fQstMessung; + bool m_fCellSwitchOff; + bool m_fChangeMittelValue; + bool fAdReInit; + int m_nSendAnz; + int nSwapNr; // Nummer des Puffers in den die aktuellen Messdaten geschrieben werden + + int Frk1, Frk2; + float Fr1, Fr2; + int m_nSendStart; + int m_nSendEnd; // beginnt wieder von vorne + int nMwPerBlock; + int fTelStart; + int nBlockCount; + int nIpsDebug; + uint8_t CsSpiMask; +// Ports für den I/O Zugriff + uint16_t nRefPort; + uint8_t nCurrentPort; + uint8_t nRingPort; + uint8_t nExtPort; + uint8_t nGenPort; + uint8_t nNoisePort; + + uint8_t nUGain; + uint8_t nIGain; + uint8_t CsOff; + uint8_t IrKompPort; + int m_fMessDlgOpened; + uint8_t AdConvTime; + bool fChangeCt; + int nKurveForm; + + int nMwMittelVal; + int m_nStoreMwIntervall; + + + int nMessArt; + int nMessTimer; + bool fSequenzMessung; + uint8_t fEnableAuto; // wenn true, dann wir Enable Autorange gesetzt + int nAnzPot; + +}; +typedef struct MessVariables MESS_VARS; + +/*=========================================================================== + Struktur Speichern der der A/D Daten +===========================================================================*/ +struct AnalogDigital +{ + double AdResult[8][16]; // wird auch fuer den digitalen Filter verwendet + UINT32 AdRingBuf[8][1024]; + long AdTempU, AdTempU1, AdTempI, AdDiff; + double FKoeff[11]; + uint8_t nStartFk, nEndeFk; + double dbUFkResult, dbIFkResult; + double dbUNoiseGainFaktor, dbINoiseGainFaktor; +}; +typedef struct AnalogDigital AD_VAL; + + +/*=========================================================================== + Struktur für das IR-Handling +===========================================================================*/ +struct IrCompensation +{ + double dbRArray[8]; + uint8_t nRIndex; + bool fMitIrValue; + bool fMosFetState; + bool fMosFetOpen; + bool fWaitForIrVoltage; + bool fSendInfo; + bool fIrInProcess; + bool fCalculate; + + double dbIrValue[16], dbRValue, dbOldRValue; + double dbIrAddVoltage, dbKorrVoltage; + + double dbUDiffValue, dbLastIValue, dbUScale; + uint8_t nIChn, nUChn; + double dbAOut[2]; + double dbDiv, dbUDisplay; // zum Berechnen der Spannung + uint16_t nMosFetCounter; + uint8_t n100msCounter; // wird alle 100ms incrementiert, Zeitfenster für die IR-Unterbrechung + uint8_t nOffCount; + uint8_t nOffSollCount; + uint16_t nSollCounter; + uint8_t nStartupCounter; + uint8_t nDistanceCounter; + uint8_t nSkipCounter; + +}; +typedef struct IrCompensation IR_COMP; + +