diff --git a/Console.cpp b/Console.cpp index 9943c924..00157d5f 100644 --- a/Console.cpp +++ b/Console.cpp @@ -114,7 +114,7 @@ int Console::iMode = 0; int Console::iConfig = 0; TPoKeys55 *Console::PoKeys55[2] = {NULL, NULL}; TLPT *Console::LPT = NULL; -MWDComm *Console::MWD = NULL; // maciek001: obiekt dla MWD +TMWDComm *Console::MWDComm = NULL; // maciek001: obiekt dla MWD int Console::iSwitch[8]; // bistabilne w kabinie, załączane z [Shift], wyłączane bez int Console::iButton[8]; // monostabilne w kabinie, załączane podczas trzymania klawisza @@ -126,13 +126,14 @@ Console::Console() iSwitch[i] = 0; // bity 0..127 - bez [Ctrl], 128..255 - z [Ctrl] iButton[i] = 0; // bity 0..127 - bez [Shift], 128..255 - z [Shift] } + MWDComm = NULL; }; Console::~Console() { delete PoKeys55[0]; delete PoKeys55[1]; - delete MWD; + delete MWDComm; }; void Console::ModeSet(int m, int h) @@ -177,17 +178,20 @@ int Console::On() PoKeys55[0] = NULL; } break; - case 5: // maciek001: MWD OK - MWD = new MWDComm(); - if (!(MWD->Open())) - { - delete MWD; - iMode = 0; - Global::iFeedbackMode = 0; - WriteLog("COM Port not open!"); - } - break; } + + if (Global::bMWDmasterEnable) + { + WriteLog("Opening ComPort"); + MWDComm = new TMWDComm(); + if (!(MWDComm->Open())) // jeżeli nie otwarł portu + { + WriteLog("ERROR: ComPort is NOT OPEN!"); + delete MWDComm; + MWDComm = NULL; + } + } + return 0; }; @@ -206,8 +210,8 @@ void Console::Off() PoKeys55[1] = NULL; delete LPT; LPT = NULL; - delete MWD; // maciek001: zamykanie portu COM i takie tam inne ;) - MWD = NULL; + delete MWDComm; + MWDComm = NULL; }; void Console::BitsSet(int mask, int entry) @@ -296,104 +300,57 @@ void Console::BitsUpdate(int mask) PoKeys55[0]->Write(0x40, 16 - 1, (iBits & 0x4000) ? 1 : 0); } break; - case 5: // maciek001: MWD lampki i kontrolki - /* out3: ogrzewanie sk?adu, opory rozruchowe, poslizg, zaluzjewent, -, -, czuwak, shp - out4: stycz.liniowe, pezekaznikróżnicobwpomoc, nadmiarprzetw, roznicowy obw. gł, - nadmiarsilniki, wylszybki, zanikprąduprzyjeździenaoporach, nadmiarsprezarki - out5: HASLER */ - if (mask & 0x0001) - if (iBits & 1) - { - MWD->WriteDataBuff[4] |= 1 << 7; // SHP HASLER też - if (!MWD->bSHPstate) - { - MWD->bSHPstate = true; - MWD->bPrzejazdSHP = true; - } - else - MWD->bPrzejazdSHP = false; - } - else - { - MWD->WriteDataBuff[4] &= ~(1 << 7); - MWD->bPrzejazdSHP = false; - MWD->bSHPstate = false; - } - if (mask & 0x0002) - if (iBits & 2) - MWD->WriteDataBuff[4] |= 1 << 6; // CA - else - MWD->WriteDataBuff[4] &= ~(1 << 6); - if (mask & 0x0004) - if (iBits & 4) - MWD->WriteDataBuff[4] |= 1 << 1; // jazda na oporach rozruchowych - else - MWD->WriteDataBuff[4] &= ~(1 << 1); - if (mask & 0x0008) - if (iBits & 8) - MWD->WriteDataBuff[5] |= 1 << 5; // wyłącznik szybki - else - MWD->WriteDataBuff[5] &= ~(1 << 5); - if (mask & 0x0010) - if (iBits & 0x10) - MWD->WriteDataBuff[5] |= 1 << 4; // nadmiarowy silników trakcyjnych - else - MWD->WriteDataBuff[5] &= ~(1 << 4); - if (mask & 0x0020) - if (iBits & 0x20) - MWD->WriteDataBuff[4] |= 1 << 0; // styczniki liniowe - else - MWD->WriteDataBuff[5] &= ~(1 << 0); - if (mask & 0x0040) - if (iBits & 0x40) - MWD->WriteDataBuff[4] |= 1 << 2; // poślizg - else - MWD->WriteDataBuff[4] &= ~(1 << 2); - if (mask & 0x0080) - if (iBits & 0x80) - MWD->WriteDataBuff[5] |= 1 << 2; // (nadmiarowy) przetwornicy? ++ - else - MWD->WriteDataBuff[5] &= ~(1 << 2); - if (mask & 0x0100) - if (iBits & 0x100) - MWD->WriteDataBuff[5] |= 1 << 7; // nadmiarowy sprężarki - else - MWD->WriteDataBuff[5] &= ~(1 << 7); - if (mask & 0x0200) - if (iBits & 0x200) - MWD->WriteDataBuff[2] |= 1 << 1; // wentylatory i opory - else - MWD->WriteDataBuff[2] &= ~(1 << 1); - if (mask & 0x0400) - if (iBits & 0x400) - MWD->WriteDataBuff[2] |= 1 << 2; // wysoki rozruch - else - MWD->WriteDataBuff[2] &= ~(1 << 2); - if (mask & 0x0800) - if (iBits & 0x800) - MWD->WriteDataBuff[4] |= 1 << 0; // ogrzewanie pociągu - else - MWD->WriteDataBuff[4] &= ~(1 << 0); - if (mask & 0x1000) - if (iBits & 0x1000) - MWD->bHamowanie = true; // hasler: ciśnienie w hamulcach HASLER rysik 2 - else - MWD->bHamowanie = false; - if (mask & 0x2000) - if (iBits & 0x2000) - MWD->WriteDataBuff[6] |= - 1 << 4; // hasler: prąd "na" silnikach HASLER rysik 3 - else - MWD->WriteDataBuff[6] &= ~(1 << 4); - if (mask & 0x4000) - if (iBits & 0x4000) - MWD->WriteDataBuff[6] |= 1 << 7; // brzęczyk SHP/CA - else - MWD->WriteDataBuff[6] &= ~(1 << 7); - // if(mask & 0x8000) if(iBits & 0x8000) MWD->WriteDataBuff[1] |= 1<<7; (puste) - // else MWD->WriteDataBuff[0] &= ~(1<<7); - break; - } + } + if (Global::bMWDmasterEnable) + { + // maciek001: MWDComm lampki i kontrolki + // out3: ogrzewanie sk?adu, opory rozruchowe, poslizg, zaluzjewent, -, -, czuwak, shp + // out4: stycz.liniowe, pezekaznikr??nicobwpomoc, nadmiarprzetw, roznicowy obw. g?, nadmiarsilniki, wylszybki, zanikpr?duprzyje?dzienaoporach, nadmiarsprezarki + // out5: HASLER */ + if (mask & 0x0001) if (iBits & 1) { + MWDComm->WriteDataBuff[4] |= 1 << 7; // SHP HASLER też + if (!MWDComm->bSHPstate) { + MWDComm->bSHPstate = true; + MWDComm->bPrzejazdSHP = true; + } + else MWDComm->bPrzejazdSHP = false; + } + else { + MWDComm->WriteDataBuff[4] &= ~(1 << 7); + MWDComm->bPrzejazdSHP = false; + MWDComm->bSHPstate = false; + } + if (mask & 0x0002) if (iBits & 2) MWDComm->WriteDataBuff[4] |= 1 << 6; // CA + else MWDComm->WriteDataBuff[4] &= ~(1 << 6); + if (mask & 0x0004) if (iBits & 4) MWDComm->WriteDataBuff[4] |= 1 << 1; // jazda na oporach rozruchowych + else MWDComm->WriteDataBuff[4] &= ~(1 << 1); + if (mask & 0x0008) if (iBits & 8) MWDComm->WriteDataBuff[5] |= 1 << 5; // wy??cznik szybki + else MWDComm->WriteDataBuff[5] &= ~(1 << 5); + if (mask & 0x0010) if (iBits & 0x10) MWDComm->WriteDataBuff[5] |= 1 << 4; // nadmiarowy silnik?w trakcyjnych + else MWDComm->WriteDataBuff[5] &= ~(1 << 4); + if (mask & 0x0020) if (iBits & 0x20) MWDComm->WriteDataBuff[4] |= 1 << 0; // styczniki liniowe + else MWDComm->WriteDataBuff[5] &= ~(1 << 0); + if (mask & 0x0040) if (iBits & 0x40) MWDComm->WriteDataBuff[4] |= 1 << 2; // po?lizg + else MWDComm->WriteDataBuff[4] &= ~(1 << 2); + if (mask & 0x0080) if (iBits & 0x80) MWDComm->WriteDataBuff[5] |= 1 << 2; // (nadmiarowy) przetwornicy? ++ + else MWDComm->WriteDataBuff[5] &= ~(1 << 2); + if (mask & 0x0100) if (iBits & 0x100) MWDComm->WriteDataBuff[5] |= 1 << 7; // nadmiarowy spr??arki + else MWDComm->WriteDataBuff[5] &= ~(1 << 7); + if (mask & 0x0200) if (iBits & 0x200) MWDComm->WriteDataBuff[2] |= 1 << 1; // wentylatory i opory + else MWDComm->WriteDataBuff[2] &= ~(1 << 1); + if (mask & 0x0400) if (iBits & 0x400) MWDComm->WriteDataBuff[2] |= 1 << 2; // wysoki rozruch + else MWDComm->WriteDataBuff[2] &= ~(1 << 2); + if (mask & 0x0800) if (iBits & 0x800) MWDComm->WriteDataBuff[4] |= 1 << 0; // ogrzewanie poci?gu + else MWDComm->WriteDataBuff[4] &= ~(1 << 0); + if (mask & 0x1000) if (iBits & 0x1000) MWDComm->bHamowanie = true; // hasler: ci?nienie w hamulcach HASLER rysik 2 + else MWDComm->bHamowanie = false; + if (mask & 0x2000) if (iBits & 0x2000) MWDComm->WriteDataBuff[6] |= 1 << 4; // hasler: pr?d "na" silnikach HASLER rysik 3 + else MWDComm->WriteDataBuff[6] &= ~(1 << 4); + if (mask & 0x4000) if (iBits & 0x4000) MWDComm->WriteDataBuff[6] |= 1 << 7; // brz?czyk SHP/CA + else MWDComm->WriteDataBuff[6] &= ~(1 << 7); + //if(mask & 0x8000) if(iBits & 0x8000) MWDComm->WriteDataBuff[1] |= 1<<7; (puste) + //else MWDComm->WriteDataBuff[0] &= ~(1<<7); + } }; bool Console::Pressed(int x) @@ -431,61 +388,43 @@ void Console::ValueSet(int x, double y) WriteLog(" calibrated=" + std::to_string(temp)); PoKeys55[0]->PWM(x, temp); } - if (iMode == 5 && MWD) // pwm-y i prędkość - { - unsigned int iliczba; - if (x == 0) - { - iliczba = (unsigned int)floor((y / (Global::fMWDzg[0] * 10) * Global::fMWDzg[1]) + - 0.5); // zbiornik główny - MWD->WriteDataBuff[12] = (unsigned char)(iliczba >> 8); - MWD->WriteDataBuff[11] = (unsigned char)iliczba; - } - else if (x == 1) - { - iliczba = (unsigned int)floor((y / (Global::fMWDpg[0] * 10) * Global::fMWDpg[1]) + - 0.5); // przewód główny - MWD->WriteDataBuff[10] = (unsigned char)(iliczba >> 8); - MWD->WriteDataBuff[9] = (unsigned char)iliczba; - } - else if (x == 2) - { - iliczba = (unsigned int)floor((y / (Global::fMWDph[0] * 10) * Global::fMWDph[1]) + - 0.5); // cylinder hamulcowy - MWD->WriteDataBuff[8] = (unsigned char)(iliczba >> 8); - MWD->WriteDataBuff[7] = (unsigned char)iliczba; - } - else if (x == 3) - { - iliczba = (unsigned int)floor((y / Global::fMWDvolt[0] * Global::fMWDvolt[1]) + - 0.5); // woltomierz WN - MWD->WriteDataBuff[14] = (unsigned char)(iliczba >> 8); - MWD->WriteDataBuff[13] = (unsigned char)iliczba; - } - else if (x == 4) - { - iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + - 0.5); // amp WN 1 - MWD->WriteDataBuff[16] = (unsigned char)(iliczba >> 8); - MWD->WriteDataBuff[15] = (unsigned char)iliczba; - } - else if (x == 5) - { - iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + - 0.5); // amp WN 2 - MWD->WriteDataBuff[18] = (unsigned char)(iliczba >> 8); - MWD->WriteDataBuff[17] = (unsigned char)iliczba; - } - else if (x == 6) - { - iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + - 0.5); // amp WN 3 - MWD->WriteDataBuff[20] = (unsigned int)(iliczba >> 8); - MWD->WriteDataBuff[19] = (unsigned char)iliczba; - } - else if (x == 7) - MWD->WriteDataBuff[0] = (unsigned char)floor(y); // prędkość - } + if (Global::bMWDmasterEnable) + { + unsigned int iliczba; + switch (x) + { + case 0: iliczba = (unsigned int)floor((y / (Global::fMWDzg[0] * 10) * Global::fMWDzg[1]) + 0.5); // zbiornik g??wny + MWDComm->WriteDataBuff[12] = (unsigned char)(iliczba >> 8); + MWDComm->WriteDataBuff[11] = (unsigned char)iliczba; + break; + case 1: iliczba = (unsigned int)floor((y / (Global::fMWDpg[0] * 10) * Global::fMWDpg[1]) + 0.5); // przew?d g??wny + MWDComm->WriteDataBuff[10] = (unsigned char)(iliczba >> 8); + MWDComm->WriteDataBuff[9] = (unsigned char)iliczba; + break; + case 2: iliczba = (unsigned int)floor((y / (Global::fMWDph[0] * 10) * Global::fMWDph[1]) + 0.5); // cylinder hamulcowy + MWDComm->WriteDataBuff[8] = (unsigned char)(iliczba >> 8); + MWDComm->WriteDataBuff[7] = (unsigned char)iliczba; + break; + case 3: iliczba = (unsigned int)floor((y / Global::fMWDvolt[0] * Global::fMWDvolt[1]) + 0.5); // woltomierz WN + MWDComm->WriteDataBuff[14] = (unsigned char)(iliczba >> 8); + MWDComm->WriteDataBuff[13] = (unsigned char)iliczba; + break; + case 4: iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 1 + MWDComm->WriteDataBuff[16] = (unsigned char)(iliczba >> 8); + MWDComm->WriteDataBuff[15] = (unsigned char)iliczba; + break; + case 5: iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 2 + MWDComm->WriteDataBuff[18] = (unsigned char)(iliczba >> 8); + MWDComm->WriteDataBuff[17] = (unsigned char)iliczba; + break; + case 6: iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 3 + MWDComm->WriteDataBuff[20] = (unsigned int)(iliczba >> 8); + MWDComm->WriteDataBuff[19] = (unsigned char)iliczba; + break; + case 7: MWDComm->WriteDataBuff[0] = (unsigned char)floor(y); // prędkość + break; + } + } }; void Console::Update() @@ -503,10 +442,11 @@ void Console::Update() Global::iPause |= 8; // tak??? PoKeys55[0]->Connect(); // próba ponownego podłączenia } - if (iMode == 5) // Obs?uga MWD OK - { - MWD->Run(); - } + if (Global::bMWDmasterEnable) + { + if (MWDComm->GetMWDState()) MWDComm->Run(); + else MWDComm->Close(); + } }; float Console::AnalogGet(int x) @@ -531,25 +471,19 @@ float Console::AnalogCalibrateGet(int x) b + Global::fCalibrateIn[x][0]; } - if (iMode == 5 && MWD) // maciek001: obs?uga hamulc?w (wej?? analogowych) OK - { - float b = MWD->fAnalog[x]; - // b = - // b*(Global::fMWDAnalogCalib[x][0]-Global::fMWDAnalogCalib[x][1])/Global::fMWDAnalogCalib[x][3]+Global::fMWDAnalogCalib[x][1]/Global::fMWDAnalogCalib[x][3]; - b = (b - Global::fMWDAnalogCalib[x][1]) / - (Global::fMWDAnalogCalib[x][1] - Global::fMWDAnalogCalib[x][0]); - switch (x) - { - case 0: - return (b * 8 - 2); - break; - case 1: - return (b * 10); - break; - default: - return 0; - } - } + if (Global::bMWDmasterEnable && Global::bMWDBreakEnable) + { + float b = (float)MWDComm->uiAnalog[x]; + b = (b - Global::fMWDAnalogInCalib[x][0]) / (Global::fMWDAnalogInCalib[x][1] - Global::fMWDAnalogInCalib[x][0]); + switch (x) + { + case 0: return (b * 8 - 2); + break; + case 1: return (b * 10); + break; + default: return 0; + } + } return -1.0; // odcięcie }; diff --git a/Console.h b/Console.h index 440bc63b..aedaff1f 100644 --- a/Console.h +++ b/Console.h @@ -13,7 +13,7 @@ http://mozilla.org/MPL/2.0/. class TConsoleDevice; // urządzenie podłączalne za pomocą DLL class TPoKeys55; class TLPT; -class MWDComm; // maciek001: dodana obsluga portu COM +class TMWDComm; // maciek001: dodana obsluga portu COM // klasy konwersji znaków wprowadzanych z klawiatury class TKeyTrans @@ -32,7 +32,7 @@ class Console static int iBits; // podstawowy zestaw lampek static TPoKeys55 *PoKeys55[2]; // może ich być kilka static TLPT *LPT; - static MWDComm *MWD; // maciek001: na potrzeby MWD + static TMWDComm *MWDComm; // maciek001: na potrzeby MWD static void BitsUpdate(int mask); // zmienne dla trybu "jednokabinowego", potrzebne do współpracy z pulpitem (PoKeys) // używając klawiatury, każdy pojazd powinien mieć własny stan przełączników diff --git a/Console/MWD.cpp b/Console/MWD.cpp index c400abc7..5f546ce3 100644 --- a/Console/MWD.cpp +++ b/Console/MWD.cpp @@ -22,55 +22,62 @@ http://mozilla.org/MPL/2.0/. #include -#define BYTETOWRITE 31 /* ilość bajtów przesyłanych z MaSzyny*/ -#define BYTETOREAD 16 /* ilość bajtów przesyłanych do MaSzyny*/ - HANDLE hComm; -MWDComm::MWDComm() // konstruktor +TMWDComm::TMWDComm() // konstruktor { - MWDTime = 0; - bSHPstate = false; - bPrzejazdSHP = false; - bKabina1 = true; // pasuje wyciągnąć dane na temat kabiny i ustawiać te dwa parametry! - bKabina2 = false; - bHamowanie = false; - bCzuwak = false; + MWDTime = 0; + bSHPstate = false; + bPrzejazdSHP = false; + bKabina1 = true; // pasuje wyciągnąć dane na temat kabiny i ustawiać te dwa parametry! + bKabina2 = false; + bHamowanie = false; + bCzuwak = false; - bRysik1H = false; - bRysik1L = false; - bRysik2H = false; - bRysik2L = false; + bRysik1H = false; + bRysik1L = false; + bRysik2H = false; + bRysik2L = false; - bocznik = 0; - nastawnik = 0; - kierunek = 0; - bnkMask = 0; + bocznik = 0; + nastawnik = 0; + kierunek = 0; + bnkMask = 0; - int i = 0; - while (i < BYTETOWRITE) - { - if (i < BYTETOREAD) - ReadDataBuff[i] = 0; - WriteDataBuff[i] = 0; - i++; - } - i = 0; - while (i < 6) - { - lastStateData[i] = 0; - maskSwitch[i] = 0; - bitSwitch[i] = 0; - i++; - } + int i = 6; + + while (i) + { + i--; + lastStateData[i] = 0; + maskData[i] = 0; + maskSwitch[i] = 0; + bitSwitch[i] = 0; + } + + i = 0; + while (i 0) return 1; @@ -149,26 +160,33 @@ inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM return 0; } -bool MWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zapis do zmiennych +bool TMWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zapis do zmiennych { - DWORD bytes_read; - ReadFile(hComm, &ReadDataBuff[0], BYTETOREAD, &bytes_read, NULL); + DWORD bytes_read; + ReadFile(hComm, &ReadDataBuff[0], BYTETOREAD, &bytes_read, NULL); - fAnalog[0] = - (float)((ReadDataBuff[9] << 8) + ReadDataBuff[8]) / - Global::fMWDAnalogCalib[0][2]; // 4095.0f; //max wartosc wynikająca z rozdzielczości - fAnalog[1] = - (float)((ReadDataBuff[11] << 8) + ReadDataBuff[10]) / Global::fMWDAnalogCalib[1][2]; - fAnalog[2] = - (float)((ReadDataBuff[13] << 8) + ReadDataBuff[12]) / Global::fMWDAnalogCalib[2][2]; - fAnalog[3] = - (float)((ReadDataBuff[15] << 8) + ReadDataBuff[14]) / Global::fMWDAnalogCalib[3][2]; - CheckData(); - - return TRUE; + if (Global::bMWDBreakEnable) + { + uiAnalog[0] = (ReadDataBuff[9] << 8) + ReadDataBuff[8]; + uiAnalog[1] = (ReadDataBuff[11] << 8) + ReadDataBuff[10]; + uiAnalog[2] = (ReadDataBuff[13] << 8) + ReadDataBuff[12]; + uiAnalog[3] = (ReadDataBuff[15] << 8) + ReadDataBuff[14]; + if (Global::bMWDdebugEnable && (Global::iMWDDebugMode & 1)) + { + WriteLog("Main Break = " + to_string(uiAnalog[0])); + WriteLog("Locomotiv Break = " + to_string(uiAnalog[1])); + } + if (Global::bMWDdebugEnable && (Global::iMWDDebugMode & 2)) + { + WriteLog("Analog input 1 = " + to_string(uiAnalog[2])); + WriteLog("Analog imput 2 = " + to_string(uiAnalog[3])); + } + } + if (Global::bMWDInputEnable) CheckData(); + return TRUE; } -bool MWDComm::SendData() // wysyłanie danych +bool TMWDComm::SendData() // wysyłanie danych { DWORD bytes_write; DWORD fdwEvtMask; @@ -178,29 +196,30 @@ bool MWDComm::SendData() // wysyłanie danych return TRUE; } -bool MWDComm::Run() // wywoływanie obsługi MWD + generacja większego opóźnienia +bool TMWDComm::Run() // wywoływanie obsługi MWD + generacja większego opóźnienia { - MWDTime++; - if (!(MWDTime % 5)) - { - if (GetMWDState()) - { - SendData(); - if (Global::bMWDInputDataEnable) - ReadData(); - return 1; - } - else - { - WriteLog("Port COM: connection ERROR!"); - // może spróbować się połączyć znowu? - return 0; - } - MWDTime = 0; - } + if (GetMWDState()) + { + MWDTime++; + if (!(MWDTime % Global::iMWDdivider)) + { + MWDTime = 0; + SendData(); + ReadData(); + return 1; + } + } + else + { + WriteLog("Port COM: connection ERROR!"); + Close(); + // może spróbować się połączyć znowu? + return 0; + } + return 1; } -void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną +void TMWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną { int i = 0; while (i < 6) @@ -257,298 +276,238 @@ void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowa // wciskanie przycisków klawiatury /*PORT0*/ - if (maskData[0] & 0x02 && lastStateData[0] & 0x02) - KeyBoard('M', 1); // wyłączenie wyłącznika szybkiego - else - KeyBoard('M', 0); // monostabilny - if (maskData[0] & 0x04 && lastStateData[0] & 0x04) - { // impuls załączający wyłącznik szybki - KeyBoard(0x10, 1); // monostabilny - KeyBoard('M', 1); - } - else - { - KeyBoard('M', 0); - KeyBoard(0x10, 0); - } - if (maskData[0] & 0x08 && lastStateData[0] & 0x08) - KeyBoard('N', 1); // odblok nadmiarowego silników trakcyjnych - else - KeyBoard('N', 0); // monostabilny - if (maskData[0] & 0x20 && lastStateData[0] & 0x20) - { // odblok nadmiarowego przetwornicy, ogrzewania poc. - KeyBoard(0x11, 1); // różnicowego obwodów pomocniczych - KeyBoard('N', 1); // monostabilny - } - else - { - KeyBoard('N', 0); - KeyBoard(0x11, 0); - } - if (maskData[0] & 0x40 && lastStateData[0] & 0x40) - KeyBoard('L', 1); // wył. styczników liniowych - else - KeyBoard('L', 0); // monostabilny - if (maskData[0] & 0x80 && lastStateData[0] & 0x80) - KeyBoard(0x20, 1); // kasowanie czuwaka/SHP - else - KeyBoard(0x20, 0); // kasowanie czuwaka/SHP + if (maskData[0] & 0x02) if (lastStateData[0] & 0x02) KeyBoard('M', 1); // wyłączenie wyłącznika szybkiego + else KeyBoard('M', 0); // monostabilny + if (maskData[0] & 0x04) if (lastStateData[0] & 0x04) { // impuls załączający wyłącznik szybki + KeyBoard(0x10, 1); // monostabilny + KeyBoard('M', 1); + } + else { + KeyBoard('M', 0); + KeyBoard(0x10, 0); + } + if (maskData[0] & 0x08) if (lastStateData[0] & 0x08) KeyBoard('N', 1); // odblok nadmiarowego silników trakcyjnych + else KeyBoard('N', 0); // monostabilny + if (maskData[0] & 0x20) if (lastStateData[0] & 0x20) { // odblok nadmiarowego przetwornicy, ogrzewania poc. + KeyBoard(0x11, 1); // różnicowego obwodów pomocniczych + KeyBoard('N', 1); // monostabilny + } + else { + KeyBoard('N', 0); + KeyBoard(0x11, 0); + } + if (maskData[0] & 0x40) if (lastStateData[0] & 0x40) KeyBoard('L', 1); // wył. styczników liniowych + else KeyBoard('L', 0); // monostabilny + if (maskData[0] & 0x80) if (lastStateData[0] & 0x80) KeyBoard(0x20, 1); // kasowanie czuwaka/SHP + else KeyBoard(0x20, 0); // kasowanie czuwaka/SHP /*PORT1*/ // puszczanie przycisku bistabilnego klawiatury - if (maskSwitch[1] & 0x02) - { - if (bitSwitch[1] & 0x02) - { - KeyBoard('X', 0); - KeyBoard(0x10, 0); - } - else - KeyBoard('X', 0); - maskSwitch[1] &= ~0x02; - } - if (maskSwitch[1] & 0x04) - { - if (bitSwitch[1] & 0x04) - { - KeyBoard('C', 0); - KeyBoard(0x10, 0); - } - else - KeyBoard('C', 0); - maskSwitch[1] &= ~0x04; - } - if (maskSwitch[1] & 0x10) - { - if (bitSwitch[1] & 0x10) - { - KeyBoard('H', 0); - KeyBoard(0x10, 0); - } - else - KeyBoard('H', 0); - maskSwitch[1] &= ~0x10; - } - if (maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40) - { - if (maskSwitch[1] & 0x20) - KeyBoard(0x10, 0); - if (maskSwitch[1] & 0x40) - KeyBoard(0x11, 0); - KeyBoard('B', 0); - maskSwitch[1] &= ~0x60; - } - if (maskSwitch[1] & 0x80) - { - if (bitSwitch[1] & 0x80) - { - KeyBoard('F', 0); - KeyBoard(0x10, 0); - } - else - KeyBoard('F', 0); - maskSwitch[1] &= ~0x80; - } + if (maskSwitch[1] & 0x02) { + if (bitSwitch[1] & 0x02) { + KeyBoard('X', 0); + KeyBoard(0x10, 0); + } + else KeyBoard('X', 0); + maskSwitch[1] &= ~0x02; + } + if (maskSwitch[1] & 0x04) { + if (bitSwitch[1] & 0x04) { + KeyBoard('C', 0); + KeyBoard(0x10, 0); + } + else KeyBoard('C', 0); + maskSwitch[1] &= ~0x04; + } + if (maskSwitch[1] & 0x10) { + if (bitSwitch[1] & 0x10) { + KeyBoard('H', 0); + KeyBoard(0x10, 0); + } + else KeyBoard('H', 0); + maskSwitch[1] &= ~0x10; + } + if (maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40) { + if (maskSwitch[1] & 0x20) KeyBoard(0x10, 0); + if (maskSwitch[1] & 0x40) KeyBoard(0x11, 0); + KeyBoard('B', 0); + maskSwitch[1] &= ~0x60; + } + if (maskSwitch[1] & 0x80) { + if (bitSwitch[1] & 0x80) { + KeyBoard('F', 0); + KeyBoard(0x10, 0); + } + else KeyBoard('F', 0); + maskSwitch[1] &= ~0x80; + } - if (maskData[1] & 0x02 && lastStateData[1] & 0x02) - { // przetwornica - KeyBoard(0x10, 1); // bistabilny - KeyBoard('X', 1); - maskSwitch[1] |= 0x02; - bitSwitch[1] |= 0x02; - } - else - { - maskSwitch[1] |= 0x02; - bitSwitch[1] &= ~0x02; - KeyBoard('X', 1); - } - if (maskData[1] & 0x04 && lastStateData[1] & 0x04) - { // sprężarka - KeyBoard(0x10, 1); // bistabilny - KeyBoard('C', 1); - maskSwitch[1] |= 0x04; - bitSwitch[1] |= 0x04; - } - else - { - maskSwitch[1] |= 0x04; - bitSwitch[1] &= ~0x04; - KeyBoard('C', 1); - } - if (maskData[1] & 0x08 && lastStateData[1] & 0x08) - KeyBoard('S', 1); // piasecznica - else - KeyBoard('S', 0); // monostabilny - if (maskData[1] & 0x10 && lastStateData[1] & 0x10) - { // ogrzewanie składu - KeyBoard(0x11, 1); // bistabilny - KeyBoard('H', 1); - maskSwitch[1] |= 0x10; - bitSwitch[1] |= 0x10; - } - else - { - maskSwitch[1] |= 0x10; - bitSwitch[1] &= ~0x10; - KeyBoard('H', 1); - } - if (maskData[1] & 0x20 || maskData[1] & 0x40) - { // przełącznik hamowania - if (lastStateData[1] & 0x20) - { // Shift+B - KeyBoard(0x10, 1); - maskSwitch[1] |= 0x20; - } - else if (lastStateData[1] & 0x40) - { // Ctrl+B - KeyBoard(0x11, 1); - maskSwitch[1] |= 0x40; - } - KeyBoard('B', 1); - } - if (maskData[1] & 0x80 && lastStateData[1] & 0x80) - { // rozruch wysoki/niski - KeyBoard(0x10, 1); // bistabilny - KeyBoard('F', 1); - maskSwitch[1] |= 0x80; - bitSwitch[1] |= 0x80; - } - else - { - maskSwitch[1] |= 0x80; - bitSwitch[1] &= ~0x80; - KeyBoard('F', 1); - } + if (maskData[1] & 0x02) if (lastStateData[1] & 0x02) { // przetwornica + KeyBoard(0x10, 1); // bistabilny + KeyBoard('X', 1); + maskSwitch[1] |= 0x02; + bitSwitch[1] |= 0x02; + } + else { + maskSwitch[1] |= 0x02; + bitSwitch[1] &= ~0x02; + KeyBoard('X', 1); + } + if (maskData[1] & 0x04) if (lastStateData[1] & 0x04) { // sprężarka + KeyBoard(0x10, 1); // bistabilny + KeyBoard('C', 1); + maskSwitch[1] |= 0x04; + bitSwitch[1] |= 0x04; + } + else { + maskSwitch[1] |= 0x04; + bitSwitch[1] &= ~0x04; + KeyBoard('C', 1); + } + if (maskData[1] & 0x08) if (lastStateData[1] & 0x08) KeyBoard('S', 1); // piasecznica + else KeyBoard('S', 0); // monostabilny + if (maskData[1] & 0x10) if (lastStateData[1] & 0x10) { // ogrzewanie składu + KeyBoard(0x11, 1); // bistabilny + KeyBoard('H', 1); + maskSwitch[1] |= 0x10; + bitSwitch[1] |= 0x10; + } + else { + maskSwitch[1] |= 0x10; + bitSwitch[1] &= ~0x10; + KeyBoard('H', 1); + } + if (maskData[1] & 0x20 || maskData[1] & 0x40) { // przełącznik hamowania + if (lastStateData[1] & 0x20) { // Shift+B + KeyBoard(0x10, 1); + maskSwitch[1] |= 0x20; + } + else if (lastStateData[1] & 0x40) { // Ctrl+B + KeyBoard(0x11, 1); + maskSwitch[1] |= 0x40; + } + KeyBoard('B', 1); + } - /*PORT2*/ + if (maskData[1] & 0x80) if (lastStateData[1] & 0x80) { // rozruch wysoki/niski + KeyBoard(0x10, 1); // bistabilny + KeyBoard('F', 1); + maskSwitch[1] |= 0x80; + bitSwitch[1] |= 0x80; + } + else { + maskSwitch[1] |= 0x80; + bitSwitch[1] &= ~0x80; + KeyBoard('F', 1); + } - if (maskSwitch[2] & 0x01) - { - if (bitSwitch[2] & 0x01) - { - KeyBoard('P', 0); - KeyBoard(0x10, 0); - } - else - KeyBoard('P', 0); - maskSwitch[2] &= ~0x01; - } - if (maskSwitch[2] & 0x02) - { - if (bitSwitch[2] & 0x02) - { - KeyBoard('O', 0); - KeyBoard(0x10, 0); - } - else - KeyBoard('O', 0); - maskSwitch[2] &= ~0x02; - } - if (maskData[2] & 0x01 && lastStateData[2] & 0x01) - { // pantograf przedni - KeyBoard(0x10, 1); // bistabilny - KeyBoard('P', 1); - maskSwitch[2] |= 0x01; - bitSwitch[2] |= 0x01; - } - else - { - maskSwitch[2] |= 0x01; - bitSwitch[2] &= ~0x01; - KeyBoard('P', 1); - } - if (maskData[2] & 0x02 && lastStateData[2] & 0x02) - { // pantograf tylni - KeyBoard(0x10, 1); // bistabilny - KeyBoard('O', 1); - maskSwitch[2] |= 0x02; - bitSwitch[2] |= 0x02; - } - else - { - maskSwitch[2] |= 0x02; - bitSwitch[2] &= ~0x02; - KeyBoard('O', 1); - } - if (maskData[2] & 0x04 && lastStateData[2] & 0x04) - { // przyhamowanie przy poślizgu - KeyBoard(0x10, 1); // monostabilny - KeyBoard(0x0D, 1); - } - else - { + //PORT2 + if (maskSwitch[2] & 0x01) { + if (bitSwitch[2] & 0x01) { + KeyBoard('P', 0); + KeyBoard(0x10, 0); + } + else KeyBoard('P', 0); + maskSwitch[2] &= ~0x01; + } + if (maskSwitch[2] & 0x02) { + if (bitSwitch[2] & 0x02) { + KeyBoard('O', 0); + KeyBoard(0x10, 0); + } + else KeyBoard('O', 0); + maskSwitch[2] &= ~0x02; + } - KeyBoard(0x0D, 0); - KeyBoard(0x10, 0); - } - /*if(maskData[2] & 0x08 && lastStateData[2] & 0x08){ // przyciemnienie świateł - KeyBoard(' ',0); // bistabilny - KeyBoard(0x10,1); - KeyBoard(' ',1); - }else{ - KeyBoard(' ',0); - KeyBoard(0x10,0); - KeyBoard(' ',1); - } - if(maskData[2] & 0x10 && lastStateData[2] & 0x10) { // przyciemnienie świateł - KeyBoard(' ',0); // bistabilny - KeyBoard(0x11,1); - KeyBoard(' ',1); - }else{ - KeyBoard(' ',0); - KeyBoard(0x11,0); - KeyBoard(' ',1); - }*/ - if (maskData[2] & 0x20 && lastStateData[2] & 0x20) - KeyBoard(0x66, 1); // odluźniacz - else - KeyBoard(0x66, 0); // monostabilny - if (maskData[2] & 0x40 && lastStateData[2] & 0x40) - { // syrena wysoka - KeyBoard(0x10, 1); // monostabilny - KeyBoard('A', 1); - } - else - { - KeyBoard('A', 0); - KeyBoard(0x10, 0); - } - if (maskData[2] & 0x80 && lastStateData[2] & 0x80) - KeyBoard('A', 1); // syrena niska - else - KeyBoard('A', 0); // monostabilny - /*PORT3*/ + if (maskData[2] & 0x01) if (lastStateData[2] & 0x01) { // pantograf przedni + KeyBoard(0x10, 1); // bistabilny + KeyBoard('P', 1); + maskSwitch[2] |= 0x01; + bitSwitch[2] |= 0x01; + } + else { + maskSwitch[2] |= 0x01; + bitSwitch[2] &= ~0x01; + KeyBoard('P', 1); + } + if (maskData[2] & 0x02) if (lastStateData[2] & 0x02) { // pantograf tylni + KeyBoard(0x10, 1); // bistabilny + KeyBoard('O', 1); + maskSwitch[2] |= 0x02; + bitSwitch[2] |= 0x02; + } + else { + maskSwitch[2] |= 0x02; + bitSwitch[2] &= ~0x02; + KeyBoard('O', 1); + } + if (maskData[2] & 0x04) if (lastStateData[2] & 0x04) { // przyhamowanie przy poślizgu + KeyBoard(0x10, 1); // monostabilny + KeyBoard(0x0D, 1); + } + else { - if (maskSwitch[3] & 0x01) - { - if (bitSwitch[3] & 0x01) - { - KeyBoard('J', 0); - KeyBoard(0x10, 0); - } - else - KeyBoard('J', 0); - maskSwitch[3] &= ~0x01; - } + KeyBoard(0x0D, 0); + KeyBoard(0x10, 0); + } + /*if(maskData[2] & 0x08) if (lastStateData[2] & 0x08){ // przyciemnienie świateł + KeyBoard(' ',0); // bistabilny + KeyBoard(0x10,1); + KeyBoard(' ',1); + }else{ + KeyBoard(' ',0); + KeyBoard(0x10,0); + KeyBoard(' ',1); + } + if(maskData[2] & 0x10) if (lastStateData[2] & 0x10) { // przyciemnienie świateł + KeyBoard(' ',0); // bistabilny + KeyBoard(0x11,1); + KeyBoard(' ',1); + }else{ + KeyBoard(' ',0); + KeyBoard(0x11,0); + KeyBoard(' ',1); + }*/ + if (maskData[2] & 0x20) if (lastStateData[2] & 0x20) KeyBoard(0x66, 1); // odluźniacz + else KeyBoard(0x66, 0); // monostabilny + if (maskData[2] & 0x40) if (lastStateData[2] & 0x40) { // syrena wysoka + KeyBoard(0x10, 1); // monostabilny + KeyBoard('A', 1); + } + else { + KeyBoard('A', 0); + KeyBoard(0x10, 0); + } + if (maskData[2] & 0x80) if (lastStateData[2] & 0x80) KeyBoard('A', 1); // syrena niska + else KeyBoard('A', 0); // monostabilny - if (maskData[3] & 0x01 && lastStateData[3] & 0x01) - { // bateria - KeyBoard(0x10, 1); // bistabilny - KeyBoard('J', 1); - maskSwitch[3] |= 0x01; - bitSwitch[3] |= 0x01; - } - else - { - maskSwitch[3] |= 0x01; - bitSwitch[3] &= ~0x01; - KeyBoard('J', 1); - } + + //PORT3 + + if (maskSwitch[3] & 0x01) { + if (bitSwitch[3] & 0x01) { + KeyBoard('J', 0); + KeyBoard(0x10, 0); + } + else KeyBoard('J', 0); + maskSwitch[3] &= ~0x01; + } + + if (maskData[3] & 0x01) if (lastStateData[3] & 0x01) { // bateria + KeyBoard(0x10, 1); // bistabilny + KeyBoard('J', 1); + maskSwitch[3] |= 0x01; + bitSwitch[3] |= 0x01; + } + else { + maskSwitch[3] |= 0x01; + bitSwitch[3] &= ~0x01; + KeyBoard('J', 1); + } /* if(maskData[3] & 0x04 && lastStateData[1] & 0x04) { KeyBoard(0x10,1); @@ -790,7 +749,7 @@ void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowa WriteDataBuff[6] &= ~(1 << 3); } -void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury +void TMWDComm::KeyBoard(int key, bool s) // emulacja klawiatury { INPUT ip; // Set up a generic keyboard event. diff --git a/Console/MWD.h b/Console/MWD.h index 5963c08b..ad35ee87 100644 --- a/Console/MWD.h +++ b/Console/MWD.h @@ -19,48 +19,53 @@ http://mozilla.org/MPL/2.0/. #define MWDH //--------------------------------------------------------------------------- +#define BYTETOWRITE 31 // ilość bajtów przesyłanych z MaSzyny +#define BYTETOREAD 16 // ilość bajtów przesyłanych do MaSzyny + typedef unsigned char BYTE; typedef unsigned long DWORD; -class MWDComm +class TMWDComm { - private: - int MWDTime; // - char lastStateData[6], maskData[6], maskSwitch[6], bitSwitch[6]; - int bocznik, nastawnik, kierunek; - char bnkMask; +private: + int MWDTime; // + char lastStateData[6], maskData[6], maskSwitch[6], bitSwitch[6]; + int bocznik, nastawnik, kierunek; + char bnkMask; - bool ReadData(); // BYTE *pReadDataBuff); - bool SendData(); // BYTE *pWriteDataBuff); - void CheckData(); // sprawdzanie zmian wejść i kontrola mazaków HASLERA - void KeyBoard(int key, bool s); + bool ReadData(); //BYTE *pReadDataBuff); + bool SendData(); //BYTE *pWriteDataBuff); + void CheckData(); //sprawdzanie zmian wejść i kontrola mazaków HASLERA + void KeyBoard(int key, bool s); - bool bRysik1H; - bool bRysik1L; - bool bRysik2H; - bool bRysik2L; + //void CheckData2(); - public: - bool Open(); // Otwarcie portu - bool Close(); // Zamknięcie portu - bool Run(); // Obsługa portu - bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty + bool bRysik1H; + bool bRysik1L; + bool bRysik2H; + bool bRysik2L; - // zmienne do rysików HASLERA - bool bSHPstate; - bool bPrzejazdSHP; - bool bKabina1; - bool bKabina2; - bool bHamowanie; - bool bCzuwak; +public: + bool Open(); // Otwarcie portu + bool Close(); // Zamknięcie portu + bool Run(); // Obsługa portu + bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty - float fAnalog[4]; // trzymanie danych z wejść analogowych + // zmienne do rysików HASLERA + bool bSHPstate; + bool bPrzejazdSHP; + bool bKabina1; + bool bKabina2; + bool bHamowanie; + bool bCzuwak; + + unsigned int uiAnalog[4]; // trzymanie danych z wejść analogowych - BYTE ReadDataBuff[17]; // bufory danych - BYTE WriteDataBuff[31]; + BYTE ReadDataBuff[BYTETOREAD]; //17]; // bufory danych + BYTE WriteDataBuff[BYTETOWRITE]; //31]; - MWDComm(); // konstruktor - ~MWDComm(); // destruktor + TMWDComm(); // konstruktor + ~TMWDComm(); // destruktor }; #endif diff --git a/Globals.cpp b/Globals.cpp index 348fa827..d8cabf78 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -191,17 +191,20 @@ int Global::iBpp = 32; // chyba już nie używa się kart, na których 16bpp co //randomizacja std::mt19937 Global::random_engine = std::mt19937(std::time(NULL)); // maciek001: konfiguracja wstępna portu COM -bool Global::bMWDdebugEnable = false; -bool Global::bMWDInputDataEnable = false; -unsigned int Global::iMWDBaudrate = 500000; -std::string Global::sMWDPortId = "COM1"; // nazwa portu z którego korzystamy - na razie nie działa -bool Global::bMWDBreakEnable = false; // zmienić na FALSE!!! jak już będzie działać wczytywanie z *.ini -double Global::fMWDAnalogCalib[4][3] = {{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023},{1023, 0, 1023}}; // wartość max potencjometru, wartość min potencjometru, rozdzielczość (max. wartość jaka może być -1) -double Global::fMWDzg[2] = {0.9, 1023}; -double Global::fMWDpg[2] = {0.8, 1023}; -double Global::fMWDph[2] = {0.6, 1023}; -double Global::fMWDvolt[2] = {4000, 1023}; -double Global::fMWDamp[2] = {800, 1023}; +bool Global::bMWDmasterEnable = false; // główne włączenie portu! +bool Global::bMWDdebugEnable = false; // włącz dodawanie do logu +int Global::iMWDDebugMode = 0; // co ma wyświetlać w logu +std::string Global::sMWDPortId = "COM1"; // nazwa portu z którego korzystamy +unsigned long int Global::iMWDBaudrate = 9600; // prędkość transmisji danych +bool Global::bMWDInputEnable = false; // włącz wejścia +bool Global::bMWDBreakEnable = false; // włącz wejścia analogowe +double Global::fMWDAnalogInCalib[4][2] = { { 0, 1023 },{ 0, 1023 },{ 0, 1023 },{ 0, 1023 } }; // wartość max potencjometru, wartość min potencjometru, rozdzielczość (max. wartość jaka może być) +double Global::fMWDzg[2] = { 0.9, 1023 }; +double Global::fMWDpg[2] = { 0.8, 1023 }; +double Global::fMWDph[2] = { 0.6, 1023 }; +double Global::fMWDvolt[2] = { 4000, 1023 }; +double Global::fMWDamp[2] = { 800, 1023 }; +int Global::iMWDdivider = 5; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- @@ -806,93 +809,94 @@ void Global::ConfigParse(cParser &Parser) >> Global::Background[2]; // b } // maciek001: ustawienia MWD - else if (token == "mwddebug") - { // czy włączyć obslugę hamulców - Parser.getTokens(); - Parser >> token; - bMWDdebugEnable = (token == "yes"); - } - else if (token == "comportname") - { - Parser.getTokens(); - Parser >> sMWDPortId; - if (bMWDdebugEnable) - WriteLog("PortName " + sMWDPortId); - } - else if (token == "mwdbaudrate") - { // pobierz prędkość transmisji danych - Parser.getTokens(1, false); - Parser >> iMWDBaudrate; - if (bMWDdebugEnable) - WriteLog("PortName " + to_string(iMWDBaudrate)); - } - else if (token == "mwdbreakenable") - { // czy włączyć obsługę hamulców - Parser.getTokens(); - Parser >> token; - bMWDBreakEnable = (token == "yes"); - } - else if (token == "mwdinputenable") - { - Parser.getTokens(); - Parser >> token; - bMWDInputDataEnable = (token == "yes"); - } - else if (token == "mwdbreak") // wartość max dla potencjometru hamulca zasadniczego - { - Parser.getTokens(); - Parser >> token; - int i = stol_def(token, -1); // numer wejďż˝cia - if ((i >= 0) && (i <= 3)) - { - Parser.getTokens(3, false); - Parser >> fMWDAnalogCalib[i][0] // max -> 2^16 -1 - >> fMWDAnalogCalib[i][1] // min -> 0 - >> - fMWDAnalogCalib[i][2]; // rozdzielczość -> 255 maksymalna możliwa wartość z ADC - if (bMWDdebugEnable) - WriteLog("Break settings " + to_string(i) + ": " + - to_string(fMWDAnalogCalib[i][0]) + " " + - to_string(fMWDAnalogCalib[i][1]) + " " + - to_string(fMWDAnalogCalib[i][2])); - } - } - else if (token == "mwdzbiornikglowny") - { - Parser.getTokens(2, false); - Parser >> fMWDzg[0] >> fMWDzg[1]; - if (bMWDdebugEnable) - WriteLog("AirTank settings: " + to_string(fMWDzg[0]) + " " + to_string(fMWDzg[1])); - } - else if (token == "mwdprzewodglowny") - { - Parser.getTokens(2, false); - Parser >> fMWDpg[0] >> fMWDpg[1]; - if (bMWDdebugEnable) - WriteLog("MainAirPipe settings: " + to_string(fMWDpg[0]) + " " + - to_string(fMWDpg[1])); - } - else if (token == "mwdcylinderhamulcowy") - { - Parser.getTokens(2, false); - Parser >> fMWDph[0] >> fMWDph[1]; - if (bMWDdebugEnable) - WriteLog("AirPipe settings: " + to_string(fMWDph[0]) + " " + to_string(fMWDph[1])); - } - else if (token == "mwdwoltomierzwn") - { - Parser.getTokens(2, false); - Parser >> fMWDvolt[0] >> fMWDvolt[1]; - if (bMWDdebugEnable) - WriteLog("Volt settings: " + to_string(fMWDvolt[0]) + " " + to_string(fMWDvolt[1])); - } - else if (token == "mwdamperomierzwn") - { - Parser.getTokens(2, false); - Parser >> fMWDamp[0] >> fMWDamp[1]; - if (bMWDdebugEnable) - WriteLog("Amp settings: " + to_string(fMWDamp[0]) + " " + to_string(fMWDamp[1])); - } + else if (token == "mwdmasterenable") { // główne włączenie maszyny! + Parser.getTokens(); + Parser >> token; + bMWDmasterEnable = (token == "yes"); + if (bMWDdebugEnable) WriteLog("SerialPort Master Enable"); + } + else if (token == "mwddebugenable") { // logowanie pracy + Parser.getTokens(); + Parser >> token; + bMWDdebugEnable = (token == "yes"); + if (bMWDdebugEnable) WriteLog("MWD Debug Mode On"); + } + else if (token == "mwddebugmode") { // co ma być debugowane? + Parser.getTokens(1, false); + Parser >> iMWDDebugMode; + if (bMWDdebugEnable) WriteLog("Debug Mode = " + to_string(iMWDDebugMode)); + } + else if (token == "mwdcomportname") { // nazwa portu COM + Parser.getTokens(); + Parser >> sMWDPortId; + if (bMWDdebugEnable) WriteLog("PortName " + sMWDPortId); + } + else if (token == "mwdbaudrate") { // prędkość transmisji danych + Parser.getTokens(1, false); + Parser >> iMWDBaudrate; + if (bMWDdebugEnable) WriteLog("Baud rate = " + to_string((int)(iMWDBaudrate / 1000)) + (" kbps")); + } + else if (token == "mwdinputenable") { // włącz wejścia + Parser.getTokens(); + Parser >> token; + bMWDInputEnable = (token == "yes"); + if (bMWDdebugEnable && bMWDInputEnable) WriteLog("MWD Input Enable"); + } + else if (token == "mwdbreakenable") { // włącz obsługę hamulców + Parser.getTokens(); + Parser >> token; + bMWDBreakEnable = (token == "yes"); + if (bMWDdebugEnable && bMWDBreakEnable) WriteLog("MWD Break Enable"); + } + else if (token == "mwdmainbreakconfig") { // ustawienia hamulca zespolonego + Parser.getTokens(2, false); + Parser >> fMWDAnalogInCalib[0][0] >> fMWDAnalogInCalib[0][1]; + if (bMWDdebugEnable) WriteLog("Main break settings: " + to_string(fMWDAnalogInCalib[0][0]) + (" ") + to_string(fMWDAnalogInCalib[0][1])); + } + else if (token == "mwdlocbreakconfig") { // ustawienia hamulca lokomotywy + Parser.getTokens(2, false); + Parser >> fMWDAnalogInCalib[1][0] >> fMWDAnalogInCalib[1][1]; + if (bMWDdebugEnable) WriteLog("Locomotive break settings: " + to_string(fMWDAnalogInCalib[1][0]) + to_string(" ") + to_string(fMWDAnalogInCalib[1][1])); + } + else if (token == "mwdanalogin1config") { // ustawienia hamulca zespolonego + Parser.getTokens(2, false); + Parser >> fMWDAnalogInCalib[2][0] >> fMWDAnalogInCalib[2][1]; + if (bMWDdebugEnable) WriteLog("Analog input 1 settings: " + to_string(fMWDAnalogInCalib[2][0]) + to_string(" ") + to_string(fMWDAnalogInCalib[2][1])); + } + else if (token == "mwdanalogin2config") { // ustawienia hamulca lokomotywy + Parser.getTokens(2, false); + Parser >> fMWDAnalogInCalib[3][0] >> fMWDAnalogInCalib[3][1]; + if (bMWDdebugEnable) WriteLog("Analog input 2 settings: " + to_string(fMWDAnalogInCalib[3][0]) + to_string(" ") + to_string(fMWDAnalogInCalib[3][1])); + } + else if (token == "mwdmaintankpress") { // max ciśnienie w zbiorniku głownym i rozdzielczość + Parser.getTokens(2, false); + Parser >> fMWDzg[0] >> fMWDzg[1]; + if (bMWDdebugEnable) WriteLog("MainAirTank settings: " + to_string(fMWDzg[0]) + to_string(" ") + to_string(fMWDzg[1])); + } + else if (token == "mwdmainpipepress") { // max ciśnienie w przewodzie głownym i rozdzielczość + Parser.getTokens(2, false); + Parser >> fMWDpg[0] >> fMWDpg[1]; + if (bMWDdebugEnable) WriteLog("MainAirPipe settings: " + to_string(fMWDpg[0]) + to_string(" ") + to_string(fMWDpg[1])); + } + else if (token == "mwdbreakpress") { // max ciśnienie w hamulcach i rozdzielczość + Parser.getTokens(2, false); + Parser >> fMWDph[0] >> fMWDph[1]; + if (bMWDdebugEnable) WriteLog("AirPipe settings: " + to_string(fMWDph[0]) + to_string(" ") + to_string(fMWDph[1])); + } + else if (token == "mwdhivoltmeter") { // max napięcie na woltomierzu WN + Parser.getTokens(2, false); + Parser >> fMWDvolt[0] >> fMWDvolt[1]; + if (bMWDdebugEnable) WriteLog("VoltMeter settings: " + to_string(fMWDvolt[0]) + to_string(" ") + to_string(fMWDvolt[1])); + } + else if (token == "mwdhiampmeter") { + Parser.getTokens(2, false); + Parser >> fMWDamp[0] >> fMWDamp[1]; + if (bMWDdebugEnable) WriteLog("Amp settings: " + to_string(fMWDamp[0]) + to_string(" ") + to_string(fMWDamp[1])); + } + else if (token == "mwddivider") { + Parser.getTokens(1, false); + Parser >> iMWDdivider; + } } while ((token != "") && (token != "endconfig")); //(!Parser->EndOfFile) // na koniec trochę zależności if (!bLoadTraction) // wczytywanie drutów i słupów diff --git a/Globals.h b/Globals.h index 2793ed30..c2b2b708 100644 --- a/Globals.h +++ b/Globals.h @@ -333,16 +333,19 @@ class Global static double CutValueToRange(double min, double value, double max); // maciek001: zmienne dla MWD - static bool bMWDdebugEnable; - static unsigned int iMWDBaudrate; - static std::string sMWDPortId; - static bool bMWDBreakEnable; - static bool bMWDInputDataEnable; - static double fMWDAnalogCalib[4][3]; - static double fMWDzg[2]; - static double fMWDpg[2]; - static double fMWDph[2]; - static double fMWDvolt[2]; - static double fMWDamp[2]; + static bool bMWDmasterEnable; // główne włączenie portu COM + static bool bMWDdebugEnable; // logowanie pracy + static int iMWDDebugMode; + static std::string sMWDPortId; // nazwa portu COM + static unsigned long int iMWDBaudrate; // prędkość transmisji + static bool bMWDInputEnable; // włącz wejścia + static bool bMWDBreakEnable; // włącz wejścia analogowe (hamulce) + static double fMWDAnalogInCalib[4][2]; // ustawienia kranów hamulca zespolonego i dodatkowego - min i max + static double fMWDzg[2]; // max wartość wskazywana i max wartość generowana (rozdzielczość) + static double fMWDpg[2]; + static double fMWDph[2]; + static double fMWDvolt[2]; + static double fMWDamp[2]; + static int iMWDdivider; }; //--------------------------------------------------------------------------- diff --git a/Texture.h b/Texture.h index 168bdfe1..5779c7cc 100644 --- a/Texture.h +++ b/Texture.h @@ -25,7 +25,7 @@ struct opengl_texture { void load(); void create(); // members - GLuint id{ -1 }; // associated GL resource + GLuint id{ (GLuint) -1 }; // associated GL resource bool has_alpha{ false }; // indicates the texture has alpha channel bool is_ready{ false }; // indicates the texture was processed and is ready for use std::string traits; // requested texture attributes: wrapping modes etc diff --git a/Train.cpp b/Train.cpp index 27010ef9..e557dcbe 100644 --- a/Train.cpp +++ b/Train.cpp @@ -3758,7 +3758,7 @@ bool TTrain::Update( double const Deltatime ) { if (DynamicObject->Mechanik ? (DynamicObject->Mechanik->AIControllFlag ? false : - Global::iFeedbackMode == 4 ) : + (Global::iFeedbackMode == 4 || (Global::bMWDmasterEnable && Global::bMWDBreakEnable))) : false) // nie blokujemy AI { // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba // Firleju: dlatego kasujemy i zastepujemy funkcją w Console @@ -3782,7 +3782,7 @@ bool TTrain::Update( double const Deltatime ) if (ggLocalBrake.SubModel) { if (DynamicObject->Mechanik ? - (DynamicObject->Mechanik->AIControllFlag ? false : Global::iFeedbackMode == 4) : + (DynamicObject->Mechanik->AIControllFlag ? false : (Global::iFeedbackMode == 4 || Global::bMWDmasterEnable)) : false) // nie blokujemy AI { // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba // Firleju: dlatego kasujemy i zastepujemy funkcją w Console