mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-03-22 15:05:03 +01:00
Poprawki do MWD - SerialPort
This commit is contained in:
314
Console.cpp
314
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
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user