16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 20:59:19 +02:00

Merge pull request #1 from maciek001/mover_in_c++

MWD change
This commit is contained in:
tmj-fstate
2017-02-16 14:33:34 +01:00
committed by GitHub
8 changed files with 595 additions and 690 deletions

View File

@@ -114,7 +114,7 @@ int Console::iMode = 0;
int Console::iConfig = 0; int Console::iConfig = 0;
TPoKeys55 *Console::PoKeys55[2] = {NULL, NULL}; TPoKeys55 *Console::PoKeys55[2] = {NULL, NULL};
TLPT *Console::LPT = 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::iSwitch[8]; // bistabilne w kabinie, załączane z [Shift], wyłączane bez
int Console::iButton[8]; // monostabilne w kabinie, załączane podczas trzymania klawisza 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] iSwitch[i] = 0; // bity 0..127 - bez [Ctrl], 128..255 - z [Ctrl]
iButton[i] = 0; // bity 0..127 - bez [Shift], 128..255 - z [Shift] iButton[i] = 0; // bity 0..127 - bez [Shift], 128..255 - z [Shift]
} }
MWDComm = NULL;
}; };
Console::~Console() Console::~Console()
{ {
delete PoKeys55[0]; delete PoKeys55[0];
delete PoKeys55[1]; delete PoKeys55[1];
delete MWD; delete MWDComm;
}; };
void Console::ModeSet(int m, int h) void Console::ModeSet(int m, int h)
@@ -177,17 +178,20 @@ int Console::On()
PoKeys55[0] = NULL; PoKeys55[0] = NULL;
} }
break; 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; return 0;
}; };
@@ -206,8 +210,8 @@ void Console::Off()
PoKeys55[1] = NULL; PoKeys55[1] = NULL;
delete LPT; delete LPT;
LPT = NULL; LPT = NULL;
delete MWD; // maciek001: zamykanie portu COM i takie tam inne ;) delete MWDComm;
MWD = NULL; MWDComm = NULL;
}; };
void Console::BitsSet(int mask, int entry) 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); PoKeys55[0]->Write(0x40, 16 - 1, (iBits & 0x4000) ? 1 : 0);
} }
break; break;
case 5: // maciek001: MWD lampki i kontrolki }
/* out3: ogrzewanie sk?adu, opory rozruchowe, poslizg, zaluzjewent, -, -, czuwak, shp if (Global::bMWDmasterEnable)
out4: stycz.liniowe, pezekaznikróżnicobwpomoc, nadmiarprzetw, roznicowy obw. gł, {
nadmiarsilniki, wylszybki, zanikprąduprzyjeździenaoporach, nadmiarsprezarki // maciek001: MWDComm lampki i kontrolki
out5: HASLER */ // out3: ogrzewanie sk?adu, opory rozruchowe, poslizg, zaluzjewent, -, -, czuwak, shp
if (mask & 0x0001) // out4: stycz.liniowe, pezekaznikr??nicobwpomoc, nadmiarprzetw, roznicowy obw. g?, nadmiarsilniki, wylszybki, zanikpr?duprzyje?dzienaoporach, nadmiarsprezarki
if (iBits & 1) // out5: HASLER */
{ if (mask & 0x0001) if (iBits & 1) {
MWD->WriteDataBuff[4] |= 1 << 7; // SHP HASLER też MWDComm->WriteDataBuff[4] |= 1 << 7; // SHP HASLER też
if (!MWD->bSHPstate) if (!MWDComm->bSHPstate) {
{ MWDComm->bSHPstate = true;
MWD->bSHPstate = true; MWDComm->bPrzejazdSHP = true;
MWD->bPrzejazdSHP = true; }
} else MWDComm->bPrzejazdSHP = false;
else }
MWD->bPrzejazdSHP = false; else {
} MWDComm->WriteDataBuff[4] &= ~(1 << 7);
else MWDComm->bPrzejazdSHP = false;
{ MWDComm->bSHPstate = false;
MWD->WriteDataBuff[4] &= ~(1 << 7); }
MWD->bPrzejazdSHP = false; if (mask & 0x0002) if (iBits & 2) MWDComm->WriteDataBuff[4] |= 1 << 6; // CA
MWD->bSHPstate = false; else MWDComm->WriteDataBuff[4] &= ~(1 << 6);
} if (mask & 0x0004) if (iBits & 4) MWDComm->WriteDataBuff[4] |= 1 << 1; // jazda na oporach rozruchowych
if (mask & 0x0002) else MWDComm->WriteDataBuff[4] &= ~(1 << 1);
if (iBits & 2) if (mask & 0x0008) if (iBits & 8) MWDComm->WriteDataBuff[5] |= 1 << 5; // wy??cznik szybki
MWD->WriteDataBuff[4] |= 1 << 6; // CA else MWDComm->WriteDataBuff[5] &= ~(1 << 5);
else if (mask & 0x0010) if (iBits & 0x10) MWDComm->WriteDataBuff[5] |= 1 << 4; // nadmiarowy silnik?w trakcyjnych
MWD->WriteDataBuff[4] &= ~(1 << 6); else MWDComm->WriteDataBuff[5] &= ~(1 << 4);
if (mask & 0x0004) if (mask & 0x0020) if (iBits & 0x20) MWDComm->WriteDataBuff[4] |= 1 << 0; // styczniki liniowe
if (iBits & 4) else MWDComm->WriteDataBuff[5] &= ~(1 << 0);
MWD->WriteDataBuff[4] |= 1 << 1; // jazda na oporach rozruchowych if (mask & 0x0040) if (iBits & 0x40) MWDComm->WriteDataBuff[4] |= 1 << 2; // po?lizg
else else MWDComm->WriteDataBuff[4] &= ~(1 << 2);
MWD->WriteDataBuff[4] &= ~(1 << 1); if (mask & 0x0080) if (iBits & 0x80) MWDComm->WriteDataBuff[5] |= 1 << 2; // (nadmiarowy) przetwornicy? ++
if (mask & 0x0008) else MWDComm->WriteDataBuff[5] &= ~(1 << 2);
if (iBits & 8) if (mask & 0x0100) if (iBits & 0x100) MWDComm->WriteDataBuff[5] |= 1 << 7; // nadmiarowy spr??arki
MWD->WriteDataBuff[5] |= 1 << 5; // wyłącznik szybki else MWDComm->WriteDataBuff[5] &= ~(1 << 7);
else if (mask & 0x0200) if (iBits & 0x200) MWDComm->WriteDataBuff[2] |= 1 << 1; // wentylatory i opory
MWD->WriteDataBuff[5] &= ~(1 << 5); else MWDComm->WriteDataBuff[2] &= ~(1 << 1);
if (mask & 0x0010) if (mask & 0x0400) if (iBits & 0x400) MWDComm->WriteDataBuff[2] |= 1 << 2; // wysoki rozruch
if (iBits & 0x10) else MWDComm->WriteDataBuff[2] &= ~(1 << 2);
MWD->WriteDataBuff[5] |= 1 << 4; // nadmiarowy silników trakcyjnych if (mask & 0x0800) if (iBits & 0x800) MWDComm->WriteDataBuff[4] |= 1 << 0; // ogrzewanie poci?gu
else else MWDComm->WriteDataBuff[4] &= ~(1 << 0);
MWD->WriteDataBuff[5] &= ~(1 << 4); if (mask & 0x1000) if (iBits & 0x1000) MWDComm->bHamowanie = true; // hasler: ci?nienie w hamulcach HASLER rysik 2
if (mask & 0x0020) else MWDComm->bHamowanie = false;
if (iBits & 0x20) if (mask & 0x2000) if (iBits & 0x2000) MWDComm->WriteDataBuff[6] |= 1 << 4; // hasler: pr?d "na" silnikach HASLER rysik 3
MWD->WriteDataBuff[4] |= 1 << 0; // styczniki liniowe else MWDComm->WriteDataBuff[6] &= ~(1 << 4);
else if (mask & 0x4000) if (iBits & 0x4000) MWDComm->WriteDataBuff[6] |= 1 << 7; // brz?czyk SHP/CA
MWD->WriteDataBuff[5] &= ~(1 << 0); else MWDComm->WriteDataBuff[6] &= ~(1 << 7);
if (mask & 0x0040) //if(mask & 0x8000) if(iBits & 0x8000) MWDComm->WriteDataBuff[1] |= 1<<7; (puste)
if (iBits & 0x40) //else MWDComm->WriteDataBuff[0] &= ~(1<<7);
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;
}
}; };
bool Console::Pressed(int x) bool Console::Pressed(int x)
@@ -431,61 +388,43 @@ void Console::ValueSet(int x, double y)
WriteLog(" calibrated=" + std::to_string(temp)); WriteLog(" calibrated=" + std::to_string(temp));
PoKeys55[0]->PWM(x, temp); PoKeys55[0]->PWM(x, temp);
} }
if (iMode == 5 && MWD) // pwm-y i prędkość if (Global::bMWDmasterEnable)
{ {
unsigned int iliczba; unsigned int iliczba;
if (x == 0) switch (x)
{ {
iliczba = (unsigned int)floor((y / (Global::fMWDzg[0] * 10) * Global::fMWDzg[1]) + case 0: iliczba = (unsigned int)floor((y / (Global::fMWDzg[0] * 10) * Global::fMWDzg[1]) + 0.5); // zbiornik g??wny
0.5); // zbiornik główny MWDComm->WriteDataBuff[12] = (unsigned char)(iliczba >> 8);
MWD->WriteDataBuff[12] = (unsigned char)(iliczba >> 8); MWDComm->WriteDataBuff[11] = (unsigned char)iliczba;
MWD->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
else if (x == 1) MWDComm->WriteDataBuff[10] = (unsigned char)(iliczba >> 8);
{ MWDComm->WriteDataBuff[9] = (unsigned char)iliczba;
iliczba = (unsigned int)floor((y / (Global::fMWDpg[0] * 10) * Global::fMWDpg[1]) + break;
0.5); // przewód główny case 2: iliczba = (unsigned int)floor((y / (Global::fMWDph[0] * 10) * Global::fMWDph[1]) + 0.5); // cylinder hamulcowy
MWD->WriteDataBuff[10] = (unsigned char)(iliczba >> 8); MWDComm->WriteDataBuff[8] = (unsigned char)(iliczba >> 8);
MWD->WriteDataBuff[9] = (unsigned char)iliczba; MWDComm->WriteDataBuff[7] = (unsigned char)iliczba;
} break;
else if (x == 2) case 3: iliczba = (unsigned int)floor((y / Global::fMWDvolt[0] * Global::fMWDvolt[1]) + 0.5); // woltomierz WN
{ MWDComm->WriteDataBuff[14] = (unsigned char)(iliczba >> 8);
iliczba = (unsigned int)floor((y / (Global::fMWDph[0] * 10) * Global::fMWDph[1]) + MWDComm->WriteDataBuff[13] = (unsigned char)iliczba;
0.5); // cylinder hamulcowy break;
MWD->WriteDataBuff[8] = (unsigned char)(iliczba >> 8); case 4: iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 1
MWD->WriteDataBuff[7] = (unsigned char)iliczba; MWDComm->WriteDataBuff[16] = (unsigned char)(iliczba >> 8);
} MWDComm->WriteDataBuff[15] = (unsigned char)iliczba;
else if (x == 3) break;
{ case 5: iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + 0.5); // amp WN 2
iliczba = (unsigned int)floor((y / Global::fMWDvolt[0] * Global::fMWDvolt[1]) + MWDComm->WriteDataBuff[18] = (unsigned char)(iliczba >> 8);
0.5); // woltomierz WN MWDComm->WriteDataBuff[17] = (unsigned char)iliczba;
MWD->WriteDataBuff[14] = (unsigned char)(iliczba >> 8); break;
MWD->WriteDataBuff[13] = (unsigned char)iliczba; 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);
else if (x == 4) MWDComm->WriteDataBuff[19] = (unsigned char)iliczba;
{ break;
iliczba = (unsigned int)floor((y / Global::fMWDamp[0] * Global::fMWDamp[1]) + case 7: MWDComm->WriteDataBuff[0] = (unsigned char)floor(y); // prędkość
0.5); // amp WN 1 break;
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ść
}
}; };
void Console::Update() void Console::Update()
@@ -503,10 +442,11 @@ void Console::Update()
Global::iPause |= 8; // tak??? Global::iPause |= 8; // tak???
PoKeys55[0]->Connect(); // próba ponownego podłączenia PoKeys55[0]->Connect(); // próba ponownego podłączenia
} }
if (iMode == 5) // Obs?uga MWD OK if (Global::bMWDmasterEnable)
{ {
MWD->Run(); if (MWDComm->GetMWDState()) MWDComm->Run();
} else MWDComm->Close();
}
}; };
float Console::AnalogGet(int x) float Console::AnalogGet(int x)
@@ -531,25 +471,19 @@ float Console::AnalogCalibrateGet(int x)
b + b +
Global::fCalibrateIn[x][0]; Global::fCalibrateIn[x][0];
} }
if (iMode == 5 && MWD) // maciek001: obs?uga hamulc?w (wej?? analogowych) OK if (Global::bMWDmasterEnable && Global::bMWDBreakEnable)
{ {
float b = MWD->fAnalog[x]; float b = (float)MWDComm->uiAnalog[x];
// b = b = (b - Global::fMWDAnalogInCalib[x][0]) / (Global::fMWDAnalogInCalib[x][1] - Global::fMWDAnalogInCalib[x][0]);
// b*(Global::fMWDAnalogCalib[x][0]-Global::fMWDAnalogCalib[x][1])/Global::fMWDAnalogCalib[x][3]+Global::fMWDAnalogCalib[x][1]/Global::fMWDAnalogCalib[x][3]; switch (x)
b = (b - Global::fMWDAnalogCalib[x][1]) / {
(Global::fMWDAnalogCalib[x][1] - Global::fMWDAnalogCalib[x][0]); case 0: return (b * 8 - 2);
switch (x) break;
{ case 1: return (b * 10);
case 0: break;
return (b * 8 - 2); default: return 0;
break; }
case 1: }
return (b * 10);
break;
default:
return 0;
}
}
return -1.0; // odcięcie return -1.0; // odcięcie
}; };

View File

@@ -13,7 +13,7 @@ http://mozilla.org/MPL/2.0/.
class TConsoleDevice; // urządzenie podłączalne za pomocą DLL class TConsoleDevice; // urządzenie podłączalne za pomocą DLL
class TPoKeys55; class TPoKeys55;
class TLPT; class TLPT;
class MWDComm; // maciek001: dodana obsluga portu COM class TMWDComm; // maciek001: dodana obsluga portu COM
// klasy konwersji znaków wprowadzanych z klawiatury // klasy konwersji znaków wprowadzanych z klawiatury
class TKeyTrans class TKeyTrans
@@ -32,7 +32,7 @@ class Console
static int iBits; // podstawowy zestaw lampek static int iBits; // podstawowy zestaw lampek
static TPoKeys55 *PoKeys55[2]; // może ich być kilka static TPoKeys55 *PoKeys55[2]; // może ich być kilka
static TLPT *LPT; static TLPT *LPT;
static MWDComm *MWD; // maciek001: na potrzeby MWD static TMWDComm *MWDComm; // maciek001: na potrzeby MWD
static void BitsUpdate(int mask); static void BitsUpdate(int mask);
// zmienne dla trybu "jednokabinowego", potrzebne do współpracy z pulpitem (PoKeys) // 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 // używając klawiatury, każdy pojazd powinien mieć własny stan przełączników

View File

@@ -22,55 +22,62 @@ http://mozilla.org/MPL/2.0/.
#include <windows.h> #include <windows.h>
#define BYTETOWRITE 31 /* ilość bajtów przesyłanych z MaSzyny*/
#define BYTETOREAD 16 /* ilość bajtów przesyłanych do MaSzyny*/
HANDLE hComm; HANDLE hComm;
MWDComm::MWDComm() // konstruktor TMWDComm::TMWDComm() // konstruktor
{ {
MWDTime = 0; MWDTime = 0;
bSHPstate = false; bSHPstate = false;
bPrzejazdSHP = false; bPrzejazdSHP = false;
bKabina1 = true; // pasuje wyciągnąć dane na temat kabiny i ustawiać te dwa parametry! bKabina1 = true; // pasuje wyciągnąć dane na temat kabiny i ustawiać te dwa parametry!
bKabina2 = false; bKabina2 = false;
bHamowanie = false; bHamowanie = false;
bCzuwak = false; bCzuwak = false;
bRysik1H = false; bRysik1H = false;
bRysik1L = false; bRysik1L = false;
bRysik2H = false; bRysik2H = false;
bRysik2L = false; bRysik2L = false;
bocznik = 0; bocznik = 0;
nastawnik = 0; nastawnik = 0;
kierunek = 0; kierunek = 0;
bnkMask = 0; bnkMask = 0;
int i = 0; int i = 6;
while (i < BYTETOWRITE)
{ while (i)
if (i < BYTETOREAD) {
ReadDataBuff[i] = 0; i--;
WriteDataBuff[i] = 0; lastStateData[i] = 0;
i++; maskData[i] = 0;
} maskSwitch[i] = 0;
i = 0; bitSwitch[i] = 0;
while (i < 6) }
{
lastStateData[i] = 0; i = 0;
maskSwitch[i] = 0; while (i<BYTETOWRITE)
bitSwitch[i] = 0; {
i++; 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++;
}
} }
MWDComm::~MWDComm() // destruktor TMWDComm::~TMWDComm() // destruktor
{ {
Close(); Close();
} }
bool MWDComm::Open() // otwieranie portu COM bool TMWDComm::Open() // otwieranie portu COM
{ {
LPCSTR portId = Global::sMWDPortId.c_str(); LPCSTR portId = Global::sMWDPortId.c_str();
hComm = CreateFile(portId, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, hComm = CreateFile(portId, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
@@ -124,8 +131,12 @@ bool MWDComm::Open() // otwieranie portu COM
return TRUE; return TRUE;
} }
bool MWDComm::Close() // zamykanie portu COM bool TMWDComm::Close() // zamykanie portu COM
{ {
Global::bMWDmasterEnable = false; // główne włączenie portu!
Global::bMWDInputEnable = false; // włącz wejścia
Global::bMWDBreakEnable = false; // włącz wejścia analogowe
WriteLog("COM Port is closing..."); WriteLog("COM Port is closing...");
int i = 0; int i = 0;
while (i < BYTETOWRITE) // zerowanie danych... while (i < BYTETOWRITE) // zerowanie danych...
@@ -141,7 +152,7 @@ bool MWDComm::Close() // zamykanie portu COM
return TRUE; return TRUE;
} }
inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM inline bool TMWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
{ {
if (hComm > 0) if (hComm > 0)
return 1; return 1;
@@ -149,26 +160,33 @@ inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
return 0; 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; DWORD bytes_read;
ReadFile(hComm, &ReadDataBuff[0], BYTETOREAD, &bytes_read, NULL); ReadFile(hComm, &ReadDataBuff[0], BYTETOREAD, &bytes_read, NULL);
fAnalog[0] = if (Global::bMWDBreakEnable)
(float)((ReadDataBuff[9] << 8) + ReadDataBuff[8]) / {
Global::fMWDAnalogCalib[0][2]; // 4095.0f; //max wartosc wynikająca z rozdzielczości uiAnalog[0] = (ReadDataBuff[9] << 8) + ReadDataBuff[8];
fAnalog[1] = uiAnalog[1] = (ReadDataBuff[11] << 8) + ReadDataBuff[10];
(float)((ReadDataBuff[11] << 8) + ReadDataBuff[10]) / Global::fMWDAnalogCalib[1][2]; uiAnalog[2] = (ReadDataBuff[13] << 8) + ReadDataBuff[12];
fAnalog[2] = uiAnalog[3] = (ReadDataBuff[15] << 8) + ReadDataBuff[14];
(float)((ReadDataBuff[13] << 8) + ReadDataBuff[12]) / Global::fMWDAnalogCalib[2][2]; if (Global::bMWDdebugEnable && (Global::iMWDDebugMode & 1))
fAnalog[3] = {
(float)((ReadDataBuff[15] << 8) + ReadDataBuff[14]) / Global::fMWDAnalogCalib[3][2]; WriteLog("Main Break = " + to_string(uiAnalog[0]));
CheckData(); WriteLog("Locomotiv Break = " + to_string(uiAnalog[1]));
}
return TRUE; 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 bytes_write;
DWORD fdwEvtMask; DWORD fdwEvtMask;
@@ -178,29 +196,30 @@ bool MWDComm::SendData() // wysyłanie danych
return TRUE; 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 (GetMWDState())
if (!(MWDTime % 5)) {
{ MWDTime++;
if (GetMWDState()) if (!(MWDTime % Global::iMWDdivider))
{ {
SendData(); MWDTime = 0;
if (Global::bMWDInputDataEnable) SendData();
ReadData(); ReadData();
return 1; return 1;
} }
else }
{ else
WriteLog("Port COM: connection ERROR!"); {
// może spróbować się połączyć znowu? WriteLog("Port COM: connection ERROR!");
return 0; Close();
} // może spróbować się połączyć znowu?
MWDTime = 0; 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; int i = 0;
while (i < 6) while (i < 6)
@@ -257,298 +276,238 @@ void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowa
// wciskanie przycisków klawiatury // wciskanie przycisków klawiatury
/*PORT0*/ /*PORT0*/
if (maskData[0] & 0x02 && lastStateData[0] & 0x02) if (maskData[0] & 0x02) if (lastStateData[0] & 0x02) KeyBoard('M', 1); // wyłączenie wyłącznika szybkiego
KeyBoard('M', 1); // wyłączenie wyłącznika szybkiego else KeyBoard('M', 0); // monostabilny
else if (maskData[0] & 0x04) if (lastStateData[0] & 0x04) { // impuls załączający wyłącznik szybki
KeyBoard('M', 0); // monostabilny KeyBoard(0x10, 1); // monostabilny
if (maskData[0] & 0x04 && lastStateData[0] & 0x04) KeyBoard('M', 1);
{ // impuls załączający wyłącznik szybki }
KeyBoard(0x10, 1); // monostabilny else {
KeyBoard('M', 1); KeyBoard('M', 0);
} KeyBoard(0x10, 0);
else }
{ if (maskData[0] & 0x08) if (lastStateData[0] & 0x08) KeyBoard('N', 1); // odblok nadmiarowego silników trakcyjnych
KeyBoard('M', 0); else KeyBoard('N', 0); // monostabilny
KeyBoard(0x10, 0); if (maskData[0] & 0x20) if (lastStateData[0] & 0x20) { // odblok nadmiarowego przetwornicy, ogrzewania poc.
} KeyBoard(0x11, 1); // różnicowego obwodów pomocniczych
if (maskData[0] & 0x08 && lastStateData[0] & 0x08) KeyBoard('N', 1); // monostabilny
KeyBoard('N', 1); // odblok nadmiarowego silników trakcyjnych }
else else {
KeyBoard('N', 0); // monostabilny KeyBoard('N', 0);
if (maskData[0] & 0x20 && lastStateData[0] & 0x20) KeyBoard(0x11, 0);
{ // odblok nadmiarowego przetwornicy, ogrzewania poc. }
KeyBoard(0x11, 1); // różnicowego obwodów pomocniczych if (maskData[0] & 0x40) if (lastStateData[0] & 0x40) KeyBoard('L', 1); // wył. styczników liniowych
KeyBoard('N', 1); // monostabilny else KeyBoard('L', 0); // monostabilny
} if (maskData[0] & 0x80) if (lastStateData[0] & 0x80) KeyBoard(0x20, 1); // kasowanie czuwaka/SHP
else else KeyBoard(0x20, 0); // kasowanie czuwaka/SHP
{
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
/*PORT1*/ /*PORT1*/
// puszczanie przycisku bistabilnego klawiatury // puszczanie przycisku bistabilnego klawiatury
if (maskSwitch[1] & 0x02) if (maskSwitch[1] & 0x02) {
{ if (bitSwitch[1] & 0x02) {
if (bitSwitch[1] & 0x02) KeyBoard('X', 0);
{ KeyBoard(0x10, 0);
KeyBoard('X', 0); }
KeyBoard(0x10, 0); else KeyBoard('X', 0);
} maskSwitch[1] &= ~0x02;
else }
KeyBoard('X', 0); if (maskSwitch[1] & 0x04) {
maskSwitch[1] &= ~0x02; if (bitSwitch[1] & 0x04) {
} KeyBoard('C', 0);
if (maskSwitch[1] & 0x04) KeyBoard(0x10, 0);
{ }
if (bitSwitch[1] & 0x04) else KeyBoard('C', 0);
{ maskSwitch[1] &= ~0x04;
KeyBoard('C', 0); }
KeyBoard(0x10, 0); if (maskSwitch[1] & 0x10) {
} if (bitSwitch[1] & 0x10) {
else KeyBoard('H', 0);
KeyBoard('C', 0); KeyBoard(0x10, 0);
maskSwitch[1] &= ~0x04; }
} else KeyBoard('H', 0);
if (maskSwitch[1] & 0x10) maskSwitch[1] &= ~0x10;
{ }
if (bitSwitch[1] & 0x10) if (maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40) {
{ if (maskSwitch[1] & 0x20) KeyBoard(0x10, 0);
KeyBoard('H', 0); if (maskSwitch[1] & 0x40) KeyBoard(0x11, 0);
KeyBoard(0x10, 0); KeyBoard('B', 0);
} maskSwitch[1] &= ~0x60;
else }
KeyBoard('H', 0); if (maskSwitch[1] & 0x80) {
maskSwitch[1] &= ~0x10; if (bitSwitch[1] & 0x80) {
} KeyBoard('F', 0);
if (maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40) KeyBoard(0x10, 0);
{ }
if (maskSwitch[1] & 0x20) else KeyBoard('F', 0);
KeyBoard(0x10, 0); maskSwitch[1] &= ~0x80;
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) if (maskData[1] & 0x02) if (lastStateData[1] & 0x02) { // przetwornica
{ // rozruch wysoki/niski KeyBoard(0x10, 1); // bistabilny
KeyBoard(0x10, 1); // bistabilny KeyBoard('X', 1);
KeyBoard('F', 1); maskSwitch[1] |= 0x02;
maskSwitch[1] |= 0x80; bitSwitch[1] |= 0x02;
bitSwitch[1] |= 0x80; }
} else {
else maskSwitch[1] |= 0x02;
{ bitSwitch[1] &= ~0x02;
maskSwitch[1] |= 0x80; KeyBoard('X', 1);
bitSwitch[1] &= ~0x80; }
KeyBoard('F', 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) //PORT2
{ // pantograf przedni if (maskSwitch[2] & 0x01) {
KeyBoard(0x10, 1); // bistabilny if (bitSwitch[2] & 0x01) {
KeyBoard('P', 1); KeyBoard('P', 0);
maskSwitch[2] |= 0x01; KeyBoard(0x10, 0);
bitSwitch[2] |= 0x01; }
} else KeyBoard('P', 0);
else maskSwitch[2] &= ~0x01;
{ }
maskSwitch[2] |= 0x01; if (maskSwitch[2] & 0x02) {
bitSwitch[2] &= ~0x01; if (bitSwitch[2] & 0x02) {
KeyBoard('P', 1); KeyBoard('O', 0);
} KeyBoard(0x10, 0);
if (maskData[2] & 0x02 && lastStateData[2] & 0x02) }
{ // pantograf tylni else KeyBoard('O', 0);
KeyBoard(0x10, 1); // bistabilny maskSwitch[2] &= ~0x02;
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
{
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) KeyBoard(0x0D, 0);
{ KeyBoard(0x10, 0);
if (bitSwitch[3] & 0x01) }
{ /*if(maskData[2] & 0x08) if (lastStateData[2] & 0x08){ // przyciemnienie świateł
KeyBoard('J', 0); KeyBoard(' ',0); // bistabilny
KeyBoard(0x10, 0); KeyBoard(0x10,1);
} KeyBoard(' ',1);
else }else{
KeyBoard('J', 0); KeyBoard(' ',0);
maskSwitch[3] &= ~0x01; 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 //PORT3
KeyBoard(0x10, 1); // bistabilny
KeyBoard('J', 1); if (maskSwitch[3] & 0x01) {
maskSwitch[3] |= 0x01; if (bitSwitch[3] & 0x01) {
bitSwitch[3] |= 0x01; KeyBoard('J', 0);
} KeyBoard(0x10, 0);
else }
{ else KeyBoard('J', 0);
maskSwitch[3] |= 0x01; maskSwitch[3] &= ~0x01;
bitSwitch[3] &= ~0x01; }
KeyBoard('J', 1);
} 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); 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); WriteDataBuff[6] &= ~(1 << 3);
} }
void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury void TMWDComm::KeyBoard(int key, bool s) // emulacja klawiatury
{ {
INPUT ip; INPUT ip;
// Set up a generic keyboard event. // Set up a generic keyboard event.

View File

@@ -19,48 +19,53 @@ http://mozilla.org/MPL/2.0/.
#define MWDH #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 char BYTE;
typedef unsigned long DWORD; typedef unsigned long DWORD;
class MWDComm class TMWDComm
{ {
private: private:
int MWDTime; // int MWDTime; //
char lastStateData[6], maskData[6], maskSwitch[6], bitSwitch[6]; char lastStateData[6], maskData[6], maskSwitch[6], bitSwitch[6];
int bocznik, nastawnik, kierunek; int bocznik, nastawnik, kierunek;
char bnkMask; char bnkMask;
bool ReadData(); // BYTE *pReadDataBuff); bool ReadData(); //BYTE *pReadDataBuff);
bool SendData(); // BYTE *pWriteDataBuff); bool SendData(); //BYTE *pWriteDataBuff);
void CheckData(); // sprawdzanie zmian wejść i kontrola mazaków HASLERA void CheckData(); //sprawdzanie zmian wejść i kontrola mazaków HASLERA
void KeyBoard(int key, bool s); void KeyBoard(int key, bool s);
bool bRysik1H; //void CheckData2();
bool bRysik1L;
bool bRysik2H;
bool bRysik2L;
public: bool bRysik1H;
bool Open(); // Otwarcie portu bool bRysik1L;
bool Close(); // Zamknięcie portu bool bRysik2H;
bool Run(); // Obsługa portu bool bRysik2L;
bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty
// zmienne do rysików HASLERA public:
bool bSHPstate; bool Open(); // Otwarcie portu
bool bPrzejazdSHP; bool Close(); // Zamknięcie portu
bool bKabina1; bool Run(); // Obsługa portu
bool bKabina2; bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty
bool bHamowanie;
bool bCzuwak;
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 ReadDataBuff[BYTETOREAD]; //17]; // bufory danych
BYTE WriteDataBuff[31]; BYTE WriteDataBuff[BYTETOWRITE]; //31];
MWDComm(); // konstruktor TMWDComm(); // konstruktor
~MWDComm(); // destruktor ~TMWDComm(); // destruktor
}; };
#endif #endif

View File

@@ -191,17 +191,20 @@ int Global::iBpp = 32; // chyba już nie używa się kart, na których 16bpp co
//randomizacja //randomizacja
std::mt19937 Global::random_engine = std::mt19937(std::time(NULL)); std::mt19937 Global::random_engine = std::mt19937(std::time(NULL));
// maciek001: konfiguracja wstępna portu COM // maciek001: konfiguracja wstępna portu COM
bool Global::bMWDdebugEnable = false; bool Global::bMWDmasterEnable = false; // główne włączenie portu!
bool Global::bMWDInputDataEnable = false; bool Global::bMWDdebugEnable = false; // włącz dodawanie do logu
unsigned int Global::iMWDBaudrate = 500000; int Global::iMWDDebugMode = 0; // co ma wyświetlać w logu
std::string Global::sMWDPortId = "COM1"; // nazwa portu z którego korzystamy - na razie nie działa std::string Global::sMWDPortId = "COM1"; // nazwa portu z którego korzystamy
bool Global::bMWDBreakEnable = false; // zmienić na FALSE!!! jak już będzie działać wczytywanie z *.ini unsigned long int Global::iMWDBaudrate = 9600; // prędkość transmisji danych
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) bool Global::bMWDInputEnable = false; // włącz wejścia
double Global::fMWDzg[2] = {0.9, 1023}; bool Global::bMWDBreakEnable = false; // włącz wejścia analogowe
double Global::fMWDpg[2] = {0.8, 1023}; 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::fMWDph[2] = {0.6, 1023}; double Global::fMWDzg[2] = { 0.9, 1023 };
double Global::fMWDvolt[2] = {4000, 1023}; double Global::fMWDpg[2] = { 0.8, 1023 };
double Global::fMWDamp[2] = {800, 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 >> Global::Background[2]; // b
} }
// maciek001: ustawienia MWD // maciek001: ustawienia MWD
else if (token == "mwddebug") else if (token == "mwdmasterenable") { // główne włączenie maszyny!
{ // czy włączyć obslugę hamulców Parser.getTokens();
Parser.getTokens(); Parser >> token;
Parser >> token; bMWDmasterEnable = (token == "yes");
bMWDdebugEnable = (token == "yes"); if (bMWDdebugEnable) WriteLog("SerialPort Master Enable");
} }
else if (token == "comportname") else if (token == "mwddebugenable") { // logowanie pracy
{ Parser.getTokens();
Parser.getTokens(); Parser >> token;
Parser >> sMWDPortId; bMWDdebugEnable = (token == "yes");
if (bMWDdebugEnable) if (bMWDdebugEnable) WriteLog("MWD Debug Mode On");
WriteLog("PortName " + sMWDPortId); }
} else if (token == "mwddebugmode") { // co ma być debugowane?
else if (token == "mwdbaudrate") Parser.getTokens(1, false);
{ // pobierz prędkość transmisji danych Parser >> iMWDDebugMode;
Parser.getTokens(1, false); if (bMWDdebugEnable) WriteLog("Debug Mode = " + to_string(iMWDDebugMode));
Parser >> iMWDBaudrate; }
if (bMWDdebugEnable) else if (token == "mwdcomportname") { // nazwa portu COM
WriteLog("PortName " + to_string(iMWDBaudrate)); Parser.getTokens();
} Parser >> sMWDPortId;
else if (token == "mwdbreakenable") if (bMWDdebugEnable) WriteLog("PortName " + sMWDPortId);
{ // czy włączyć obsługę hamulców }
Parser.getTokens(); else if (token == "mwdbaudrate") { // prędkość transmisji danych
Parser >> token; Parser.getTokens(1, false);
bMWDBreakEnable = (token == "yes"); Parser >> iMWDBaudrate;
} if (bMWDdebugEnable) WriteLog("Baud rate = " + to_string((int)(iMWDBaudrate / 1000)) + (" kbps"));
else if (token == "mwdinputenable") }
{ else if (token == "mwdinputenable") { // włącz wejścia
Parser.getTokens(); Parser.getTokens();
Parser >> token; Parser >> token;
bMWDInputDataEnable = (token == "yes"); bMWDInputEnable = (token == "yes");
} if (bMWDdebugEnable && bMWDInputEnable) WriteLog("MWD Input Enable");
else if (token == "mwdbreak") // wartość max dla potencjometru hamulca zasadniczego }
{ else if (token == "mwdbreakenable") { // włącz obsługę hamulców
Parser.getTokens(); Parser.getTokens();
Parser >> token; Parser >> token;
int i = stol_def(token, -1); // numer wej�cia bMWDBreakEnable = (token == "yes");
if ((i >= 0) && (i <= 3)) if (bMWDdebugEnable && bMWDBreakEnable) WriteLog("MWD Break Enable");
{ }
Parser.getTokens(3, false); else if (token == "mwdmainbreakconfig") { // ustawienia hamulca zespolonego
Parser >> fMWDAnalogCalib[i][0] // max -> 2^16 -1 Parser.getTokens(2, false);
>> fMWDAnalogCalib[i][1] // min -> 0 Parser >> fMWDAnalogInCalib[0][0] >> fMWDAnalogInCalib[0][1];
>> if (bMWDdebugEnable) WriteLog("Main break settings: " + to_string(fMWDAnalogInCalib[0][0]) + (" ") + to_string(fMWDAnalogInCalib[0][1]));
fMWDAnalogCalib[i][2]; // rozdzielczość -> 255 maksymalna możliwa wartość z ADC }
if (bMWDdebugEnable) else if (token == "mwdlocbreakconfig") { // ustawienia hamulca lokomotywy
WriteLog("Break settings " + to_string(i) + ": " + Parser.getTokens(2, false);
to_string(fMWDAnalogCalib[i][0]) + " " + Parser >> fMWDAnalogInCalib[1][0] >> fMWDAnalogInCalib[1][1];
to_string(fMWDAnalogCalib[i][1]) + " " + if (bMWDdebugEnable) WriteLog("Locomotive break settings: " + to_string(fMWDAnalogInCalib[1][0]) + to_string(" ") + to_string(fMWDAnalogInCalib[1][1]));
to_string(fMWDAnalogCalib[i][2])); }
} else if (token == "mwdanalogin1config") { // ustawienia hamulca zespolonego
} Parser.getTokens(2, false);
else if (token == "mwdzbiornikglowny") 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]));
Parser.getTokens(2, false); }
Parser >> fMWDzg[0] >> fMWDzg[1]; else if (token == "mwdanalogin2config") { // ustawienia hamulca lokomotywy
if (bMWDdebugEnable) Parser.getTokens(2, false);
WriteLog("AirTank settings: " + to_string(fMWDzg[0]) + " " + to_string(fMWDzg[1])); 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 == "mwdprzewodglowny") }
{ else if (token == "mwdmaintankpress") { // max ciśnienie w zbiorniku głownym i rozdzielczość
Parser.getTokens(2, false); Parser.getTokens(2, false);
Parser >> fMWDpg[0] >> fMWDpg[1]; Parser >> fMWDzg[0] >> fMWDzg[1];
if (bMWDdebugEnable) if (bMWDdebugEnable) WriteLog("MainAirTank settings: " + to_string(fMWDzg[0]) + to_string(" ") + to_string(fMWDzg[1]));
WriteLog("MainAirPipe settings: " + to_string(fMWDpg[0]) + " " + }
to_string(fMWDpg[1])); else if (token == "mwdmainpipepress") { // max ciśnienie w przewodzie głownym i rozdzielczość
} Parser.getTokens(2, false);
else if (token == "mwdcylinderhamulcowy") Parser >> fMWDpg[0] >> fMWDpg[1];
{ if (bMWDdebugEnable) WriteLog("MainAirPipe settings: " + to_string(fMWDpg[0]) + to_string(" ") + to_string(fMWDpg[1]));
Parser.getTokens(2, false); }
Parser >> fMWDph[0] >> fMWDph[1]; else if (token == "mwdbreakpress") { // max ciśnienie w hamulcach i rozdzielczość
if (bMWDdebugEnable) Parser.getTokens(2, false);
WriteLog("AirPipe settings: " + to_string(fMWDph[0]) + " " + to_string(fMWDph[1])); Parser >> fMWDph[0] >> fMWDph[1];
} if (bMWDdebugEnable) WriteLog("AirPipe settings: " + to_string(fMWDph[0]) + to_string(" ") + to_string(fMWDph[1]));
else if (token == "mwdwoltomierzwn") }
{ else if (token == "mwdhivoltmeter") { // max napięcie na woltomierzu WN
Parser.getTokens(2, false); Parser.getTokens(2, false);
Parser >> fMWDvolt[0] >> fMWDvolt[1]; Parser >> fMWDvolt[0] >> fMWDvolt[1];
if (bMWDdebugEnable) if (bMWDdebugEnable) WriteLog("VoltMeter settings: " + to_string(fMWDvolt[0]) + to_string(" ") + to_string(fMWDvolt[1]));
WriteLog("Volt settings: " + to_string(fMWDvolt[0]) + " " + to_string(fMWDvolt[1])); }
} else if (token == "mwdhiampmeter") {
else if (token == "mwdamperomierzwn") Parser.getTokens(2, false);
{ Parser >> fMWDamp[0] >> fMWDamp[1];
Parser.getTokens(2, false); if (bMWDdebugEnable) WriteLog("Amp settings: " + to_string(fMWDamp[0]) + to_string(" ") + to_string(fMWDamp[1]));
Parser >> fMWDamp[0] >> fMWDamp[1]; }
if (bMWDdebugEnable) else if (token == "mwddivider") {
WriteLog("Amp settings: " + to_string(fMWDamp[0]) + " " + to_string(fMWDamp[1])); Parser.getTokens(1, false);
} Parser >> iMWDdivider;
}
} while ((token != "") && (token != "endconfig")); //(!Parser->EndOfFile) } while ((token != "") && (token != "endconfig")); //(!Parser->EndOfFile)
// na koniec trochę zależności // na koniec trochę zależności
if (!bLoadTraction) // wczytywanie drutów i słupów if (!bLoadTraction) // wczytywanie drutów i słupów

View File

@@ -333,16 +333,19 @@ class Global
static double CutValueToRange(double min, double value, double max); static double CutValueToRange(double min, double value, double max);
// maciek001: zmienne dla MWD // maciek001: zmienne dla MWD
static bool bMWDdebugEnable; static bool bMWDmasterEnable; // główne włączenie portu COM
static unsigned int iMWDBaudrate; static bool bMWDdebugEnable; // logowanie pracy
static std::string sMWDPortId; static int iMWDDebugMode;
static bool bMWDBreakEnable; static std::string sMWDPortId; // nazwa portu COM
static bool bMWDInputDataEnable; static unsigned long int iMWDBaudrate; // prędkość transmisji
static double fMWDAnalogCalib[4][3]; static bool bMWDInputEnable; // włącz wejścia
static double fMWDzg[2]; static bool bMWDBreakEnable; // włącz wejścia analogowe (hamulce)
static double fMWDpg[2]; static double fMWDAnalogInCalib[4][2]; // ustawienia kranów hamulca zespolonego i dodatkowego - min i max
static double fMWDph[2]; static double fMWDzg[2]; // max wartość wskazywana i max wartość generowana (rozdzielczość)
static double fMWDvolt[2]; static double fMWDpg[2];
static double fMWDamp[2]; static double fMWDph[2];
static double fMWDvolt[2];
static double fMWDamp[2];
static int iMWDdivider;
}; };
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------

View File

@@ -25,7 +25,7 @@ struct opengl_texture {
void load(); void load();
void create(); void create();
// members // 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 has_alpha{ false }; // indicates the texture has alpha channel
bool is_ready{ false }; // indicates the texture was processed and is ready for use bool is_ready{ false }; // indicates the texture was processed and is ready for use
std::string traits; // requested texture attributes: wrapping modes etc std::string traits; // requested texture attributes: wrapping modes etc

View File

@@ -3758,7 +3758,7 @@ bool TTrain::Update( double const Deltatime )
{ {
if (DynamicObject->Mechanik ? if (DynamicObject->Mechanik ?
(DynamicObject->Mechanik->AIControllFlag ? false : (DynamicObject->Mechanik->AIControllFlag ? false :
Global::iFeedbackMode == 4 ) : (Global::iFeedbackMode == 4 || (Global::bMWDmasterEnable && Global::bMWDBreakEnable))) :
false) // nie blokujemy AI false) // nie blokujemy AI
{ // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba { // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba
// Firleju: dlatego kasujemy i zastepujemy funkcją w Console // Firleju: dlatego kasujemy i zastepujemy funkcją w Console
@@ -3782,7 +3782,7 @@ bool TTrain::Update( double const Deltatime )
if (ggLocalBrake.SubModel) if (ggLocalBrake.SubModel)
{ {
if (DynamicObject->Mechanik ? if (DynamicObject->Mechanik ?
(DynamicObject->Mechanik->AIControllFlag ? false : Global::iFeedbackMode == 4) : (DynamicObject->Mechanik->AIControllFlag ? false : (Global::iFeedbackMode == 4 || Global::bMWDmasterEnable)) :
false) // nie blokujemy AI false) // nie blokujemy AI
{ // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba { // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba
// Firleju: dlatego kasujemy i zastepujemy funkcją w Console // Firleju: dlatego kasujemy i zastepujemy funkcją w Console