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

Poprawka dla MWD aby kompilował się na VS

This commit is contained in:
firleju
2017-01-18 06:10:08 +01:00
parent 6440d64b2c
commit 51fff210e1
8 changed files with 4664 additions and 4069 deletions

View File

@@ -9,30 +9,30 @@ http://mozilla.org/MPL/2.0/.
/* /*
Program obsługi portu COM i innych na potrzeby sterownika MWDevice Program obsługi portu COM i innych na potrzeby sterownika MWDevice
(oraz innych wykorzystujących komunikację przez port COM) (oraz innych wykorzystujących komunikację przez port COM)
dla Symulatora Pojazdów Szynowych MaSzyna dla Symulatora Pojazdów Szynowych MaSzyna
author: Maciej Witek 2016 author: Maciej Witek 2016
Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu! Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu!
*/ */
#include "stdafx.h"
#include "MWD.h" #include "MWD.h"
#include "Logs.h"
#include "Globals.h" #include "Globals.h"
#include "Logs.h"
#include "World.h" #include "World.h"
#include <windows.h> #include <windows.h>
#define BYTETOWRITE 31 /* ilość bajtów przesyłanych z MaSzyny*/ #define BYTETOWRITE 31 /* ilość bajtów przesyłanych z MaSzyny*/
#define BYTETOREAD 16 /* ilość bajtów przesyłanych do MaSzyny*/ #define BYTETOREAD 16 /* ilość bajtów przesyłanych do MaSzyny*/
HANDLE hComm; HANDLE hComm;
MWDComm::MWDComm() // konstruktor MWDComm::MWDComm() // 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;
@@ -47,15 +47,16 @@ MWDComm::MWDComm() // konstruktor
kierunek = 0; kierunek = 0;
bnkMask = 0; bnkMask = 0;
int i=0; int i = 0;
while(i<BYTETOWRITE) while (i < BYTETOWRITE)
{ {
if(i<BYTETOREAD)ReadDataBuff[i] = 0; if (i < BYTETOREAD)
ReadDataBuff[i] = 0;
WriteDataBuff[i] = 0; WriteDataBuff[i] = 0;
i++; i++;
} }
i=0; i = 0;
while(i<6) while (i < 6)
{ {
lastStateData[i] = 0; lastStateData[i] = 0;
maskSwitch[i] = 0; maskSwitch[i] = 0;
@@ -64,22 +65,26 @@ MWDComm::MWDComm() // konstruktor
} }
} }
MWDComm::~MWDComm() // destruktor MWDComm::~MWDComm() // destruktor
{ {
Close(); Close();
} }
bool MWDComm::Open() // otwieranie portu COM bool MWDComm::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, FILE_ATTRIBUTE_NORMAL, NULL); hComm = CreateFile(portId, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if (hComm == INVALID_HANDLE_VALUE){ if (hComm == INVALID_HANDLE_VALUE)
if(GetLastError()==ERROR_FILE_NOT_FOUND){ {
WriteLog("PortCOM ERROR: serial port does not exist"); //serial port does not exist. Inform user. if (GetLastError() == ERROR_FILE_NOT_FOUND)
{
WriteLog("PortCOM ERROR: serial port does not exist"); // serial port does not exist.
// Inform user.
} }
WriteLog("PortCOM ERROR! not open!"); WriteLog("PortCOM ERROR! not open!");
//some other error occurred. Inform user. // some other error occurred. Inform user.
return FALSE; return FALSE;
} }
@@ -90,16 +95,16 @@ bool MWDComm::Open() // otwieranie portu COM
CommDCB.BaudRate = Global::iMWDBaudrate; CommDCB.BaudRate = Global::iMWDBaudrate;
CommDCB.fBinary = TRUE; CommDCB.fBinary = TRUE;
CommDCB.fParity = FALSE; CommDCB.fParity = FALSE;
CommDCB.fOutxCtsFlow = FALSE; // No CTS output flow control CommDCB.fOutxCtsFlow = FALSE; // No CTS output flow control
CommDCB.fOutxDsrFlow = FALSE; // No DSR output flow control CommDCB.fOutxDsrFlow = FALSE; // No DSR output flow control
CommDCB.fDtrControl = FALSE; // DTR flow control type CommDCB.fDtrControl = FALSE; // DTR flow control type
CommDCB.fDsrSensitivity = FALSE; // DSR sensitivity CommDCB.fDsrSensitivity = FALSE; // DSR sensitivity
CommDCB.fTXContinueOnXoff = FALSE; // XOFF continues Tx CommDCB.fTXContinueOnXoff = FALSE; // XOFF continues Tx
CommDCB.fOutX = FALSE; // No XON/XOFF out flow control CommDCB.fOutX = FALSE; // No XON/XOFF out flow control
CommDCB.fInX = FALSE; // No XON/XOFF in flow control CommDCB.fInX = FALSE; // No XON/XOFF in flow control
CommDCB.fErrorChar = FALSE; // Disable error replacement CommDCB.fErrorChar = FALSE; // Disable error replacement
CommDCB.fNull = FALSE; // Disable null stripping CommDCB.fNull = FALSE; // Disable null stripping
CommDCB.fRtsControl = RTS_CONTROL_DISABLE; CommDCB.fRtsControl = RTS_CONTROL_DISABLE;
CommDCB.fAbortOnError = FALSE; CommDCB.fAbortOnError = FALSE;
@@ -108,10 +113,10 @@ bool MWDComm::Open() // otwieranie portu COM
CommDCB.Parity = NOPARITY; CommDCB.Parity = NOPARITY;
CommDCB.StopBits = ONESTOPBIT; CommDCB.StopBits = ONESTOPBIT;
//konfiguracja portu // konfiguracja portu
if (!SetCommState (hComm, &CommDCB)) if (!SetCommState(hComm, &CommDCB))
{ {
//dwError = GetLastError (); // dwError = GetLastError ();
WriteLog("Unable to configure the serial port!"); WriteLog("Unable to configure the serial port!");
return FALSE; return FALSE;
} }
@@ -119,44 +124,51 @@ bool MWDComm::Open() // otwieranie portu COM
return TRUE; return TRUE;
} }
bool MWDComm::Close() // zamykanie portu COM bool MWDComm::Close() // zamykanie portu COM
{ {
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...
{ {
WriteDataBuff[i] = 0; WriteDataBuff[i] = 0;
i++; i++;
} }
Sleep(100); Sleep(100);
SendData(); // wysyłanie do pulpitu: zatrzymanie haslera i zgaszenie lampek SendData(); // wysyłanie do pulpitu: zatrzymanie haslera i zgaszenie lampek
Sleep(700); Sleep(700);
CloseHandle(hComm); CloseHandle(hComm);
WriteLog("COM is close!"); WriteLog("COM is close!");
return TRUE; return TRUE;
} }
inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
{ {
if(hComm > 0) return 1; if (hComm > 0)
else return 0; return 1;
else
return 0;
} }
bool MWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zapis do zmiennych bool MWDComm::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] = (float)((ReadDataBuff[9]<<8)+ReadDataBuff[8]) / Global::fMWDAnalogCalib[0][3]; //4095.0f; //max wartosc wynikająca z rozdzielczości fAnalog[0] =
fAnalog[1] = (float)((ReadDataBuff[11]<<8)+ReadDataBuff[10]) / Global::fMWDAnalogCalib[1][3]; (float)((ReadDataBuff[9] << 8) + ReadDataBuff[8]) /
fAnalog[2] = (float)((ReadDataBuff[13]<<8)+ReadDataBuff[12]) / Global::fMWDAnalogCalib[2][3]; Global::fMWDAnalogCalib[0][3]; // 4095.0f; //max wartosc wynikająca z rozdzielczości
fAnalog[3] = (float)((ReadDataBuff[15]<<8)+ReadDataBuff[14]) / Global::fMWDAnalogCalib[3][3]; fAnalog[1] =
(float)((ReadDataBuff[11] << 8) + ReadDataBuff[10]) / Global::fMWDAnalogCalib[1][3];
fAnalog[2] =
(float)((ReadDataBuff[13] << 8) + ReadDataBuff[12]) / Global::fMWDAnalogCalib[2][3];
fAnalog[3] =
(float)((ReadDataBuff[15] << 8) + ReadDataBuff[14]) / Global::fMWDAnalogCalib[3][3];
CheckData(); CheckData();
return TRUE; return TRUE;
} }
bool MWDComm::SendData() // wysyłanie danych bool MWDComm::SendData() // wysyłanie danych
{ {
DWORD bytes_write; DWORD bytes_write;
DWORD fdwEvtMask; DWORD fdwEvtMask;
@@ -166,17 +178,19 @@ bool MWDComm::SendData() // wysy
return TRUE; return TRUE;
} }
bool MWDComm::Run() // wywoływanie obsługi MWD + generacja większego opóźnienia bool MWDComm::Run() // wywoływanie obsługi MWD + generacja większego opóźnienia
{ {
MWDTime++; MWDTime++;
if(!(MWDTime%5)) if (!(MWDTime % 5))
{ {
if(GetMWDState()) if (GetMWDState())
{ {
SendData(); SendData();
if (Global::bMWDInputDataEnable) ReadData(); if (Global::bMWDInputDataEnable)
ReadData();
return 1; return 1;
}else }
else
{ {
WriteLog("Port COM: connection ERROR!"); WriteLog("Port COM: connection ERROR!");
// może spróbować się połączyć znowu? // może spróbować się połączyć znowu?
@@ -186,12 +200,12 @@ bool MWDComm::Run() // wywo
} }
} }
bool MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną void MWDComm::CheckData() // sprawdzanie wejść cyfrowych i odpowiednie sterowanie maszyną
{ {
int i=0; int i = 0;
while(i<6) while (i < 6)
{ {
maskData[i] = ReadDataBuff[i]^lastStateData[i]; maskData[i] = ReadDataBuff[i] ^ lastStateData[i];
lastStateData[i] = ReadDataBuff[i]; lastStateData[i] = ReadDataBuff[i];
i++; i++;
} }
@@ -200,9 +214,11 @@ bool MWDComm::CheckData() // sprawdzanie wej
Port0: 0 NC odblok. przek. sprężarki i wentyl. oporów Port0: 0 NC odblok. przek. sprężarki i wentyl. oporów
1 M wyłącznik wył. szybkiego 1 M wyłącznik wył. szybkiego
2 Shift+M impuls załączający wył. szybki 2 Shift+M impuls załączający wył. szybki
3 N odblok. przekaźników nadmiarowych i różnicowego obwodu głównego 3 N odblok. przekaźników nadmiarowych
i różnicowego obwodu głównego
4 NC rezerwa 4 NC rezerwa
5 Ctrl+N odblok. przek. nadmiarowych przetwornicy, ogrzewania pociągu i różnicowych obw. pomocniczych 5 Ctrl+N odblok. przek. nadmiarowych
przetwornicy, ogrzewania pociągu i różnicowych obw. pomocniczych
6 L wył. styczników liniowych 6 L wył. styczników liniowych
7 SPACE kasowanie czuwaka 7 SPACE kasowanie czuwaka
@@ -211,7 +227,8 @@ bool MWDComm::CheckData() // sprawdzanie wej
2 (Shift) C sprężarka 2 (Shift) C sprężarka
3 S piasecznice 3 S piasecznice
4 (Shift) H ogrzewanie składu 4 (Shift) H ogrzewanie składu
5 przel. hamowania Shift+B pspbpwy Ctrl+B pospieszny B towarowy 5 przel. hamowania Shift+B
pspbpwy Ctrl+B pospieszny B towarowy
6 przel. hamowania 6 przel. hamowania
7 (Shift) F rozruch w/n 7 (Shift) F rozruch w/n
@@ -235,172 +252,238 @@ bool MWDComm::CheckData() // sprawdzanie wej
*/ */
/* po przełączeniu bistabilnego najpierw wciskamy klawisz i przy następnym /* po przełączeniu bistabilnego najpierw wciskamy klawisz i przy następnym
wejściu w pętlę MWD puszczamy bo inaczej nie działa */ wejściu w pętlę MWD puszczamy bo inaczej nie działa
*/
// wciskanie przycisków klawiatury // wciskanie przycisków klawiatury
/*PORT0*/ /*PORT0*/
if(maskData[0] & 0x02 && lastStateData[0] & 0x02) KeyBoard('M',1); // wyłączenie wyłącznika szybkiego if (maskData[0] & 0x02 && lastStateData[0] & 0x02)
else KeyBoard('M',0); // monostabilny KeyBoard('M', 1); // wyłączenie wyłącznika szybkiego
if(maskData[0] & 0x04 && lastStateData[0] & 0x04) { // impuls załączający wyłącznik szybki else
KeyBoard(0x10,1); // monostabilny KeyBoard('M', 0); // monostabilny
KeyBoard('M',1); if (maskData[0] & 0x04 && lastStateData[0] & 0x04)
}else{ { // impuls załączający wyłącznik szybki
KeyBoard('M',0); KeyBoard(0x10, 1); // monostabilny
KeyBoard(0x10,0); KeyBoard('M', 1);
} }
if(maskData[0] & 0x08 && lastStateData[0] & 0x08) KeyBoard('N',1); // odblok nadmiarowego silników trakcyjnych else
else KeyBoard('N',0); // monostabilny {
if(maskData[0] & 0x20 && lastStateData[0] & 0x20) { // odblok nadmiarowego przetwornicy, ogrzewania poc. KeyBoard('M', 0);
KeyBoard(0x11,1); // różnicowego obwodów pomocniczych KeyBoard(0x10, 0);
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 if (maskData[0] & 0x08 && lastStateData[0] & 0x08)
else KeyBoard('L',0); // monostabilny KeyBoard('N', 1); // odblok nadmiarowego silników trakcyjnych
if(maskData[0] & 0x80 && lastStateData[0] & 0x80) KeyBoard(0x20,1); // kasowanie czuwaka/SHP else
else KeyBoard(0x20,0); // kasowanie czuwaka/SHP 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
/*PORT1*/ /*PORT1*/
// puszczanie przycisku bistabilnego klawiatury // puszczanie przycisku bistabilnego klawiatury
if(maskSwitch[1]&0x02){ if (maskSwitch[1] & 0x02)
if(bitSwitch[1] &0x02){ {
KeyBoard('X',0); if (bitSwitch[1] & 0x02)
KeyBoard(0x10,0); {
}else KeyBoard('X',0); KeyBoard('X', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('X', 0);
maskSwitch[1] &= ~0x02; maskSwitch[1] &= ~0x02;
} }
if(maskSwitch[1]&0x04){ if (maskSwitch[1] & 0x04)
if(bitSwitch[1] &0x04){ {
KeyBoard('C',0); if (bitSwitch[1] & 0x04)
KeyBoard(0x10,0); {
}else KeyBoard('C',0); KeyBoard('C', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('C', 0);
maskSwitch[1] &= ~0x04; maskSwitch[1] &= ~0x04;
} }
if(maskSwitch[1]&0x10){ if (maskSwitch[1] & 0x10)
if(bitSwitch[1] &0x10){ {
KeyBoard('H',0); if (bitSwitch[1] & 0x10)
KeyBoard(0x10,0); {
}else KeyBoard('H',0); KeyBoard('H', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('H', 0);
maskSwitch[1] &= ~0x10; maskSwitch[1] &= ~0x10;
} }
if(maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40){ if (maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40)
if(maskSwitch[1] & 0x20) KeyBoard(0x10,0); {
if(maskSwitch[1] & 0x40) KeyBoard(0x11,0); if (maskSwitch[1] & 0x20)
KeyBoard('B',0); KeyBoard(0x10, 0);
if (maskSwitch[1] & 0x40)
KeyBoard(0x11, 0);
KeyBoard('B', 0);
maskSwitch[1] &= ~0x60; maskSwitch[1] &= ~0x60;
} }
if(maskSwitch[1]&0x80){ if (maskSwitch[1] & 0x80)
if(bitSwitch[1] &0x80){ {
KeyBoard('F',0); if (bitSwitch[1] & 0x80)
KeyBoard(0x10,0); {
}else KeyBoard('F',0); KeyBoard('F', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('F', 0);
maskSwitch[1] &= ~0x80; maskSwitch[1] &= ~0x80;
} }
if (maskData[1] & 0x02 && lastStateData[1] & 0x02)
if(maskData[1] & 0x02 && lastStateData[1] & 0x02) { // przetwornica { // przetwornica
KeyBoard(0x10,1); // bistabilny KeyBoard(0x10, 1); // bistabilny
KeyBoard('X',1); KeyBoard('X', 1);
maskSwitch[1] |= 0x02; maskSwitch[1] |= 0x02;
bitSwitch[1] |= 0x02; bitSwitch[1] |= 0x02;
}else{ }
else
{
maskSwitch[1] |= 0x02; maskSwitch[1] |= 0x02;
bitSwitch[1] &= ~0x02; bitSwitch[1] &= ~0x02;
KeyBoard('X',1); KeyBoard('X', 1);
} }
if(maskData[1] & 0x04 && lastStateData[1] & 0x04) { // sprężarka if (maskData[1] & 0x04 && lastStateData[1] & 0x04)
KeyBoard(0x10,1); // bistabilny { // sprężarka
KeyBoard('C',1); KeyBoard(0x10, 1); // bistabilny
KeyBoard('C', 1);
maskSwitch[1] |= 0x04; maskSwitch[1] |= 0x04;
bitSwitch[1] |= 0x04; bitSwitch[1] |= 0x04;
}else{ }
else
{
maskSwitch[1] |= 0x04; maskSwitch[1] |= 0x04;
bitSwitch[1] &= ~0x04; bitSwitch[1] &= ~0x04;
KeyBoard('C',1); KeyBoard('C', 1);
} }
if(maskData[1] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); // piasecznica if (maskData[1] & 0x08 && lastStateData[1] & 0x08)
else KeyBoard('S',0); // monostabilny KeyBoard('S', 1); // piasecznica
if(maskData[1] & 0x10 && lastStateData[1] & 0x10) { // ogrzewanie składu else
KeyBoard(0x11,1); // bistabilny KeyBoard('S', 0); // monostabilny
KeyBoard('H',1); if (maskData[1] & 0x10 && lastStateData[1] & 0x10)
{ // ogrzewanie składu
KeyBoard(0x11, 1); // bistabilny
KeyBoard('H', 1);
maskSwitch[1] |= 0x10; maskSwitch[1] |= 0x10;
bitSwitch[1] |= 0x10; bitSwitch[1] |= 0x10;
}else{ }
else
{
maskSwitch[1] |= 0x10; maskSwitch[1] |= 0x10;
bitSwitch[1] &= ~0x10; bitSwitch[1] &= ~0x10;
KeyBoard('H',1); KeyBoard('H', 1);
} }
if(maskData[1] & 0x20 || maskData[1] & 0x40){ // przełącznik hamowania if (maskData[1] & 0x20 || maskData[1] & 0x40)
if(lastStateData[1] & 0x20){ // Shift+B { // przełącznik hamowania
KeyBoard(0x10,1); if (lastStateData[1] & 0x20)
{ // Shift+B
KeyBoard(0x10, 1);
maskSwitch[1] |= 0x20; maskSwitch[1] |= 0x20;
}else if(lastStateData[1] & 0x40){ // Ctrl+B }
KeyBoard(0x11,1); else if (lastStateData[1] & 0x40)
{ // Ctrl+B
KeyBoard(0x11, 1);
maskSwitch[1] |= 0x40; maskSwitch[1] |= 0x40;
} }
KeyBoard('B',1); KeyBoard('B', 1);
} }
if(maskData[1] & 0x80 && lastStateData[1] & 0x80) { // rozruch wysoki/niski if (maskData[1] & 0x80 && lastStateData[1] & 0x80)
KeyBoard(0x10,1); // bistabilny { // rozruch wysoki/niski
KeyBoard('F',1); KeyBoard(0x10, 1); // bistabilny
KeyBoard('F', 1);
maskSwitch[1] |= 0x80; maskSwitch[1] |= 0x80;
bitSwitch[1] |= 0x80; bitSwitch[1] |= 0x80;
}else{ }
else
{
maskSwitch[1] |= 0x80; maskSwitch[1] |= 0x80;
bitSwitch[1] &= ~0x80; bitSwitch[1] &= ~0x80;
KeyBoard('F',1); KeyBoard('F', 1);
} }
/*PORT2*/ /*PORT2*/
if(maskSwitch[2]&0x01){ if (maskSwitch[2] & 0x01)
if(bitSwitch[2] &0x01){ {
KeyBoard('P',0); if (bitSwitch[2] & 0x01)
KeyBoard(0x10,0); {
}else KeyBoard('P',0); KeyBoard('P', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('P', 0);
maskSwitch[2] &= ~0x01; maskSwitch[2] &= ~0x01;
} }
if(maskSwitch[2]&0x02){ if (maskSwitch[2] & 0x02)
if(bitSwitch[2] &0x02){ {
KeyBoard('O',0); if (bitSwitch[2] & 0x02)
KeyBoard(0x10,0); {
}else KeyBoard('O',0); KeyBoard('O', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('O', 0);
maskSwitch[2] &= ~0x02; maskSwitch[2] &= ~0x02;
} }
if (maskData[2] & 0x01 && lastStateData[2] & 0x01)
if(maskData[2] & 0x01 && lastStateData[2] & 0x01) { // pantograf przedni { // pantograf przedni
KeyBoard(0x10,1); // bistabilny KeyBoard(0x10, 1); // bistabilny
KeyBoard('P',1); KeyBoard('P', 1);
maskSwitch[2] |= 0x01; maskSwitch[2] |= 0x01;
bitSwitch[2] |= 0x01; bitSwitch[2] |= 0x01;
}else{ }
else
{
maskSwitch[2] |= 0x01; maskSwitch[2] |= 0x01;
bitSwitch[2] &= ~0x01; bitSwitch[2] &= ~0x01;
KeyBoard('P',1); KeyBoard('P', 1);
} }
if(maskData[2] & 0x02 && lastStateData[2] & 0x02) { // pantograf tylni if (maskData[2] & 0x02 && lastStateData[2] & 0x02)
KeyBoard(0x10,1); // bistabilny { // pantograf tylni
KeyBoard('O',1); KeyBoard(0x10, 1); // bistabilny
KeyBoard('O', 1);
maskSwitch[2] |= 0x02; maskSwitch[2] |= 0x02;
bitSwitch[2] |= 0x02; bitSwitch[2] |= 0x02;
}else{ }
else
{
maskSwitch[2] |= 0x02; maskSwitch[2] |= 0x02;
bitSwitch[2] &= ~0x02; bitSwitch[2] &= ~0x02;
KeyBoard('O',1); KeyBoard('O', 1);
} }
if(maskData[2] & 0x04 && lastStateData[2] & 0x04) { // przyhamowanie przy poślizgu if (maskData[2] & 0x04 && lastStateData[2] & 0x04)
KeyBoard(0x10,1); // monostabilny { // przyhamowanie przy poślizgu
KeyBoard(0x0D,1); KeyBoard(0x10, 1); // monostabilny
}else{ KeyBoard(0x0D, 1);
}
else
{
KeyBoard(0x0D,0); KeyBoard(0x0D, 0);
KeyBoard(0x10,0); KeyBoard(0x10, 0);
} }
/*if(maskData[2] & 0x08 && lastStateData[2] & 0x08){ // przyciemnienie świateł /*if(maskData[2] & 0x08 && lastStateData[2] & 0x08){ // przyciemnienie świateł
KeyBoard(' ',0); // bistabilny KeyBoard(' ',0); // bistabilny
@@ -420,38 +503,51 @@ bool MWDComm::CheckData() // sprawdzanie wej
KeyBoard(0x11,0); KeyBoard(0x11,0);
KeyBoard(' ',1); KeyBoard(' ',1);
}*/ }*/
if(maskData[2] & 0x20 && lastStateData[2] & 0x20) KeyBoard(0x66,1); // odluźniacz if (maskData[2] & 0x20 && lastStateData[2] & 0x20)
else KeyBoard(0x66,0); // monostabilny KeyBoard(0x66, 1); // odluźniacz
if(maskData[2] & 0x40 && lastStateData[2] & 0x40) { // syrena wysoka else
KeyBoard(0x10,1); // monostabilny KeyBoard(0x66, 0); // monostabilny
KeyBoard('A',1); if (maskData[2] & 0x40 && lastStateData[2] & 0x40)
}else{ { // syrena wysoka
KeyBoard('A',0); KeyBoard(0x10, 1); // monostabilny
KeyBoard(0x10,0); KeyBoard('A', 1);
} }
if(maskData[2] & 0x80 && lastStateData[2] & 0x80) KeyBoard('A',1); // syrena niska else
else KeyBoard('A',0); // monostabilny {
KeyBoard('A', 0);
KeyBoard(0x10, 0);
}
if (maskData[2] & 0x80 && lastStateData[2] & 0x80)
KeyBoard('A', 1); // syrena niska
else
KeyBoard('A', 0); // monostabilny
/*PORT3*/ /*PORT3*/
if(maskSwitch[3]&0x01){ if (maskSwitch[3] & 0x01)
if(bitSwitch[3] &0x01){ {
KeyBoard('J',0); if (bitSwitch[3] & 0x01)
KeyBoard(0x10,0); {
}else KeyBoard('J',0); KeyBoard('J', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('J', 0);
maskSwitch[3] &= ~0x01; maskSwitch[3] &= ~0x01;
} }
if(maskData[3] & 0x01 && lastStateData[3] & 0x01) { // bateria if (maskData[3] & 0x01 && lastStateData[3] & 0x01)
KeyBoard(0x10,1); // bistabilny { // bateria
KeyBoard('J',1); KeyBoard(0x10, 1); // bistabilny
KeyBoard('J', 1);
maskSwitch[3] |= 0x01; maskSwitch[3] |= 0x01;
bitSwitch[3] |= 0x01; bitSwitch[3] |= 0x01;
}else{ }
else
{
maskSwitch[3] |= 0x01; maskSwitch[3] |= 0x01;
bitSwitch[3] &= ~0x01; bitSwitch[3] &= ~0x01;
KeyBoard('J',1); KeyBoard('J', 1);
} }
/* /*
@@ -491,7 +587,7 @@ bool MWDComm::CheckData() // sprawdzanie wej
KeyBoard(0x10,0); KeyBoard(0x10,0);
} }
/*PORT4*//* /*PORT4*/ /*
if(maskData[4] & 0x02 && lastStateData[1] & 0x02) { if(maskData[4] & 0x02 && lastStateData[1] & 0x02) {
KeyBoard(0x10,1); KeyBoard(0x10,1);
KeyBoard('X',1); // KeyBoard('X',1); //
@@ -537,132 +633,164 @@ bool MWDComm::CheckData() // sprawdzanie wej
KeyBoard(0x10,0); KeyBoard(0x10,0);
} }
/*PORT5*//* /*PORT5*/ /*
if(maskData[5] & 0x02 && lastStateData[1] & 0x02) { if(maskData[5] & 0x02 && lastStateData[1] & 0x02) {
KeyBoard(0x10,1); KeyBoard(0x10,1);
KeyBoard('X',1); // KeyBoard('X',1); //
KeyBoard('X',0); KeyBoard('X',0);
KeyBoard(0x10,0); KeyBoard(0x10,0);
}else{ KeyBoard('X',1); // }else{
KeyBoard('X',0); KeyBoard('X',1); //
} KeyBoard('X',0);
if(maskData[5] & 0x04 && lastStateData[1] & 0x04) { }
KeyBoard(0x10,1); if(maskData[5] & 0x04 && lastStateData[1] & 0x04) {
KeyBoard('C',1); // KeyBoard(0x10,1);
KeyBoard('C',0); KeyBoard('C',1); //
KeyBoard(0x10,0); KeyBoard('C',0);
}else{ KeyBoard('C',1); // KeyBoard(0x10,0);
KeyBoard('C',0); }else{
} KeyBoard('C',1); //
if(maskData[5] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); // KeyBoard('C',0);
else KeyBoard('S',0); }
if(maskData[5] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); //
else
KeyBoard('S',0);
if(maskData[5] & 0x10 && lastStateData[1] & 0x10) { if(maskData[5] & 0x10 && lastStateData[1] & 0x10) {
KeyBoard(0x11,1); KeyBoard(0x11,1);
KeyBoard('H',1); KeyBoard('H',1);
}else{ KeyBoard('H',0); }else{
KeyBoard(0x11,0); KeyBoard('H',0);
} KeyBoard(0x11,0);
if(maskData[5] & 0x20 && lastStateData[1] & 0x20) { }
KeyBoard(0x11,1); if(maskData[5] & 0x20 && lastStateData[1] & 0x20) {
KeyBoard(' ',1); KeyBoard(0x11,1);
}else{ KeyBoard(' ',0); KeyBoard(' ',1);
KeyBoard(0x11,0); }else{
} KeyBoard(' ',0);
if(maskData[5] & 0x40 && lastStateData[1] & 0x40) { KeyBoard(0x11,0);
KeyBoard(0x10,1); }
KeyBoard(' ',1); if(maskData[5] & 0x40 && lastStateData[1] & 0x40) {
}else{ KeyBoard(' ',0); KeyBoard(0x10,1);
KeyBoard(0x10,0); KeyBoard(' ',1);
} }else{
if(maskData[5] & 0x80 && lastStateData[1] & 0x80) { KeyBoard(' ',0);
KeyBoard(0x10,1); KeyBoard(0x10,0);
KeyBoard('F',1); }
}else{ KeyBoard('F',0); if(maskData[5] & 0x80 && lastStateData[1] & 0x80) {
KeyBoard(0x10,0); KeyBoard(0x10,1);
}//*/ KeyBoard('F',1);
}else{
KeyBoard('F',0);
KeyBoard(0x10,0);
}//*/
/* NASTAWNIK, BOCZNIK i KIERUNEK */ /* NASTAWNIK, BOCZNIK i KIERUNEK */
if(bnkMask & 1){ //puszczanie klawiszy if (bnkMask & 1)
KeyBoard(0x6B,0); { // puszczanie klawiszy
KeyBoard(0x6B, 0);
bnkMask &= ~1; bnkMask &= ~1;
} }
if(bnkMask & 2){ if (bnkMask & 2)
KeyBoard(0x6D,0); {
KeyBoard(0x6D, 0);
bnkMask &= ~2; bnkMask &= ~2;
} }
if(bnkMask & 4){ if (bnkMask & 4)
KeyBoard(0x6F,0); {
KeyBoard(0x6F, 0);
bnkMask &= ~4; bnkMask &= ~4;
} }
if(bnkMask & 8){ if (bnkMask & 8)
KeyBoard(0x6A,0); {
KeyBoard(0x6A, 0);
bnkMask &= ~8; bnkMask &= ~8;
} }
if(nastawnik < ReadDataBuff[6]) if (nastawnik < ReadDataBuff[6])
{ {
bnkMask |= 1; bnkMask |= 1;
nastawnik++; nastawnik++;
KeyBoard(0x6B,1); //wciśnij + i dodaj 1 do nastawnika KeyBoard(0x6B, 1); // wciśnij + i dodaj 1 do nastawnika
} }
if(nastawnik > ReadDataBuff[6]) if (nastawnik > ReadDataBuff[6])
{ {
bnkMask |= 2; bnkMask |= 2;
nastawnik--; nastawnik--;
KeyBoard(0x6D,1); //wciśnij - i odejmij 1 do nastawnika KeyBoard(0x6D, 1); // wciśnij - i odejmij 1 do nastawnika
} }
if(bocznik < ReadDataBuff[7]) if (bocznik < ReadDataBuff[7])
{ {
bnkMask |= 4; bnkMask |= 4;
bocznik++; bocznik++;
KeyBoard(0x6F,1); //wciśnij / i dodaj 1 do bocznika KeyBoard(0x6F, 1); // wciśnij / i dodaj 1 do bocznika
} }
if(bocznik > ReadDataBuff[7]) if (bocznik > ReadDataBuff[7])
{ {
bnkMask |= 8; bnkMask |= 8;
bocznik--; bocznik--;
KeyBoard(0x6A,1); //wciśnij * i odejmij 1 do bocznika KeyBoard(0x6A, 1); // wciśnij * i odejmij 1 do bocznika
} }
/* Obsługa HASLERA */ /* Obsługa HASLERA */
if(ReadDataBuff[0] & 0x80) bCzuwak = true; if (ReadDataBuff[0] & 0x80)
bCzuwak = true;
if(bKabina1){ // logika rysika 1 if (bKabina1)
{ // logika rysika 1
bRysik1H = true; bRysik1H = true;
bRysik1L = false; bRysik1L = false;
if(bPrzejazdSHP) bRysik1H = false; if (bPrzejazdSHP)
}else if(bKabina2){ bRysik1H = false;
}
else if (bKabina2)
{
bRysik1L = true; bRysik1L = true;
bRysik1H = false; bRysik1H = false;
if(bPrzejazdSHP) bRysik1L = false; if (bPrzejazdSHP)
}else{ bRysik1L = false;
}
else
{
bRysik1H = false; bRysik1H = false;
bRysik1L = false; bRysik1L = false;
} }
if(bHamowanie){ // logika rysika 2 if (bHamowanie)
{ // logika rysika 2
bRysik2H = false; bRysik2H = false;
bRysik2L = true; bRysik2L = true;
}else{ }
if(bCzuwak) bRysik2H = true; else
else bRysik2H = false; {
if (bCzuwak)
bRysik2H = true;
else
bRysik2H = false;
bRysik2L = false; bRysik2L = false;
} }
bCzuwak = false; bCzuwak = false;
if(bRysik1H)WriteDataBuff[6] |= 1<<0; if (bRysik1H)
else WriteDataBuff[6] &= ~(1<<0); WriteDataBuff[6] |= 1 << 0;
if(bRysik1L)WriteDataBuff[6] |= 1<<1; else
else WriteDataBuff[6] &= ~(1<<1); WriteDataBuff[6] &= ~(1 << 0);
if(bRysik2H)WriteDataBuff[6] |= 1<<2; if (bRysik1L)
else WriteDataBuff[6] &= ~(1<<2); WriteDataBuff[6] |= 1 << 1;
if(bRysik2L)WriteDataBuff[6] |= 1<<3; else
else WriteDataBuff[6] &= ~(1<<3); WriteDataBuff[6] &= ~(1 << 1);
if (bRysik2H)
WriteDataBuff[6] |= 1 << 2;
else
WriteDataBuff[6] &= ~(1 << 2);
if (bRysik2L)
WriteDataBuff[6] |= 1 << 3;
else
WriteDataBuff[6] &= ~(1 << 3);
} }
void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury
{ {
INPUT ip; INPUT ip;
// Set up a generic keyboard event. // Set up a generic keyboard event.
@@ -673,15 +801,16 @@ void MWDComm::KeyBoard(int key, bool s) // emulacja klawiatury
ip.ki.wVk = key; // virtual-key code for the "a" key ip.ki.wVk = key; // virtual-key code for the "a" key
if(s){// Press the "A" key if (s)
{ // Press the "A" key
ip.ki.dwFlags = 0; // 0 for key press ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT)); SendInput(1, &ip, sizeof(INPUT));
}else{ }
else
{
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT)); SendInput(1, &ip, sizeof(INPUT));
} }
//return 1; // return 1;
} }

View File

@@ -9,13 +9,12 @@ http://mozilla.org/MPL/2.0/.
/* /*
Program obsługi portu COM i innych na potrzeby sterownika MWDevice Program obsługi portu COM i innych na potrzeby sterownika MWDevice
(oraz innych wykorzystujących komunikację przez port COM) (oraz innych wykorzystujących komunikację przez port COM)
dla Symulatora Pojazdów Szynowych MaSzyna dla Symulatora Pojazdów Szynowych MaSzyna
author: Maciej Witek 2016 author: Maciej Witek 2016
Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu! Autor nie ponosi odpowiedzialności za niewłaciwe używanie lub działanie programu!
*/ */
#ifndef MWDH #ifndef MWDH
#define MWDH #define MWDH
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@@ -25,15 +24,15 @@ typedef unsigned long DWORD;
class MWDComm class MWDComm
{ {
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);
bool 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; bool bRysik1H;
@@ -41,10 +40,10 @@ private:
bool bRysik2H; bool bRysik2H;
bool bRysik2L; bool bRysik2L;
public: public:
bool Open(); // Otwarcie portu bool Open(); // Otwarcie portu
bool Close(); // Zamknięcie portu bool Close(); // Zamknięcie portu
bool Run(); // Obsługa portu bool Run(); // Obsługa portu
bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty
// zmienne do rysików HASLERA // zmienne do rysików HASLERA
@@ -55,19 +54,16 @@ public:
bool bHamowanie; bool bHamowanie;
bool bCzuwak; bool bCzuwak;
float fAnalog[4]; // trzymanie danych z wejść analogowych
BYTE ReadDataBuff[17]; // bufory danych
float fAnalog[4]; // trzymanie danych z wejść analogowych
BYTE ReadDataBuff[17]; // bufory danych
BYTE WriteDataBuff[31]; BYTE WriteDataBuff[31];
MWDComm(); //konstruktor MWDComm(); // konstruktor
~MWDComm(); //destruktor ~MWDComm(); // destruktor
}; };
#endif #endif
/* /*
INFO - zmiany dokonane w innych plikach niezbędne do prawidłowego działania: INFO - zmiany dokonane w innych plikach niezbędne do prawidłowego działania:

File diff suppressed because it is too large Load Diff

View File

@@ -10,10 +10,10 @@ http://mozilla.org/MPL/2.0/.
#pragma once #pragma once
//#include <fstream> //#include <fstream>
#include <string>
#include "Classes.h" #include "Classes.h"
#include "dumb3d.h" #include "dumb3d.h"
#include "mczapkie/mover.h" #include "mczapkie/mover.h"
#include <string>
using namespace Math3D; using namespace Math3D;
using namespace Mtable; using namespace Mtable;
@@ -52,10 +52,12 @@ enum TMovementStatus
moveGuardSignal = 0x8000, // sygnał od kierownika (minął czas postoju) moveGuardSignal = 0x8000, // sygnał od kierownika (minął czas postoju)
moveVisibility = 0x10000, // jazda na widoczność po przejechaniu S1 na SBL moveVisibility = 0x10000, // jazda na widoczność po przejechaniu S1 na SBL
moveDoorOpened = 0x20000, // drzwi zostały otwarte - doliczyć czas na zamknięcie moveDoorOpened = 0x20000, // drzwi zostały otwarte - doliczyć czas na zamknięcie
movePushPull = 0x40000, // zmiana czoła przez zmianę kabiny - nie odczepiać przy zmianie kierunku movePushPull =
0x40000, // zmiana czoła przez zmianę kabiny - nie odczepiać przy zmianie kierunku
moveSemaphorFound = 0x80000, // na drodze skanowania został znaleziony semafor moveSemaphorFound = 0x80000, // na drodze skanowania został znaleziony semafor
moveSemaphorWasElapsed = 0x100000, // minięty został semafor moveSemaphorWasElapsed = 0x100000, // minięty został semafor
moveTrainInsideStation = 0x200000, // pociąg między semaforem a rozjazdami lub następnym semaforem moveTrainInsideStation =
0x200000, // pociąg między semaforem a rozjazdami lub następnym semaforem
moveSpeedLimitFound = 0x400000 // pociąg w ograniczeniu z podaną jego długością moveSpeedLimitFound = 0x400000 // pociąg w ograniczeniu z podaną jego długością
}; };
@@ -126,9 +128,9 @@ class TSpeedPos
public: public:
double fDist; // aktualna odległość (ujemna gdy minięte) double fDist; // aktualna odległość (ujemna gdy minięte)
double fVelNext; // prędkość obowiązująca od tego miejsca double fVelNext; // prędkość obowiązująca od tego miejsca
double fSectionVelocityDist; //długość ograniczenia prędkości double fSectionVelocityDist; // długość ograniczenia prędkości
// double fAcc; // double fAcc;
int iFlags; //flagi typu wpisu do tabelki int iFlags; // flagi typu wpisu do tabelki
// 1=istotny,2=tor,4=odwrotnie,8-zwrotnica (może się zmienić),16-stan // 1=istotny,2=tor,4=odwrotnie,8-zwrotnica (może się zmienić),16-stan
// zwrotnicy,32-minięty,64=koniec,128=łuk // zwrotnicy,32-minięty,64=koniec,128=łuk
// 0x100=event,0x200=manewrowa,0x400=przystanek,0x800=SBL,0x1000=wysłana komenda,0x2000=W5 // 0x100=event,0x200=manewrowa,0x400=przystanek,0x800=SBL,0x1000=wysłana komenda,0x2000=W5
@@ -147,8 +149,8 @@ class TSpeedPos
bool Set(TEvent *e, double d, TOrders order = Wait_for_orders); bool Set(TEvent *e, double d, TOrders order = Wait_for_orders);
void Set(TTrack *t, double d, int f); void Set(TTrack *t, double d, int f);
std::string TableText(); std::string TableText();
std::string GetName(); std::string GetName();
bool IsProperSemaphor(TOrders order = Wait_for_orders); bool IsProperSemaphor(TOrders order = Wait_for_orders);
}; };
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@@ -172,8 +174,8 @@ class TController
double fLastVel; // prędkość na poprzednio sprawdzonym torze double fLastVel; // prędkość na poprzednio sprawdzonym torze
TTrack *tLast; // ostatni analizowany tor TTrack *tLast; // ostatni analizowany tor
TEvent *eSignSkip; // można pominąć ten SBL po zatrzymaniu TEvent *eSignSkip; // można pominąć ten SBL po zatrzymaniu
TSpeedPos *sSemNext; // następny semafor na drodze zależny od trybu jazdy TSpeedPos *sSemNext; // następny semafor na drodze zależny od trybu jazdy
TSpeedPos *sSemNextStop; // następny semafor na drodze zależny od trybu jazdy i na stój TSpeedPos *sSemNextStop; // następny semafor na drodze zależny od trybu jazdy i na stój
private: // parametry aktualnego składu private: // parametry aktualnego składu
double fLength; // długość składu (do wyciągania z ograniczeń) double fLength; // długość składu (do wyciągania z ograniczeń)
double fMass; // całkowita masa do liczenia stycznej składowej grawitacji double fMass; // całkowita masa do liczenia stycznej składowej grawitacji
@@ -219,8 +221,8 @@ class TController
// migacz lub czeka na stan zwrotnicy // migacz lub czeka na stan zwrotnicy
private: private:
TDynamicObject *pVehicle; // pojazd w którym siedzi sterujący TDynamicObject *pVehicle; // pojazd w którym siedzi sterujący
TDynamicObject * TDynamicObject
pVehicles[2]; // skrajne pojazdy w składzie (niekoniecznie bezpośrednio sterowane) *pVehicles[2]; // skrajne pojazdy w składzie (niekoniecznie bezpośrednio sterowane)
TMoverParameters *mvControlling; // jakim pojazdem steruje (może silnikowym w EZT) TMoverParameters *mvControlling; // jakim pojazdem steruje (może silnikowym w EZT)
TMoverParameters *mvOccupied; // jakim pojazdem hamuje TMoverParameters *mvOccupied; // jakim pojazdem hamuje
TTrainParameters *TrainParams; // rozkład jazdy zawsze jest, nawet jeśli pusty TTrainParameters *TrainParams; // rozkład jazdy zawsze jest, nawet jeśli pusty
@@ -244,16 +246,16 @@ class TController
double VelLimit; // predkość zadawana przez event jednokierunkowego ograniczenia prędkości double VelLimit; // predkość zadawana przez event jednokierunkowego ograniczenia prędkości
public: public:
double VelSignalLast; // prędkość zadana na ostatnim semaforze double VelSignalLast; // prędkość zadana na ostatnim semaforze
double VelSignalNext; // prędkość zadana na następnym semaforze double VelSignalNext; // prędkość zadana na następnym semaforze
double VelLimitLast; // prędkość zadana przez ograniczenie double VelLimitLast; // prędkość zadana przez ograniczenie
double VelRoad; // aktualna prędkość drogowa (ze znaku W27) double VelRoad; // aktualna prędkość drogowa (ze znaku W27)
// (PutValues albo komendą) // (PutValues albo komendą)
public: public:
double VelNext; // prędkość, jaka ma być po przejechaniu długości ProximityDist double VelNext; // prędkość, jaka ma być po przejechaniu długości ProximityDist
private: private:
double fProximityDist; //odleglosc podawana w SetProximityVelocity(); >0:przeliczać do double fProximityDist; // odleglosc podawana w SetProximityVelocity(); >0:przeliczać do
// punktu, <0:podana wartość // punktu, <0:podana wartość
double FirstSemaphorDist; // odległość do pierwszego znalezionego semafora double FirstSemaphorDist; // odległość do pierwszego znalezionego semafora
public: public:
double double
ActualProximityDist; // odległość brana pod uwagę przy wyliczaniu prędkości i przyspieszenia ActualProximityDist; // odległość brana pod uwagę przy wyliczaniu prędkości i przyspieszenia
@@ -312,7 +314,7 @@ class TController
void ControllingSet(); // znajduje człon do sterowania void ControllingSet(); // znajduje człon do sterowania
void AutoRewident(); // ustawia hamulce w składzie void AutoRewident(); // ustawia hamulce w składzie
public: public:
Mtable::TTrainParameters * Timetable() Mtable::TTrainParameters *Timetable()
{ {
return TrainParams; return TrainParams;
}; };
@@ -358,12 +360,12 @@ class TController
double Distance(vector3 &p1, vector3 &n, vector3 &p2); double Distance(vector3 &p1, vector3 &n, vector3 &p2);
private: // Ra: metody obsługujące skanowanie toru private: // Ra: metody obsługujące skanowanie toru
TEvent * CheckTrackEvent(double fDirection, TTrack *Track); TEvent *CheckTrackEvent(double fDirection, TTrack *Track);
bool TableCheckEvent(TEvent *e); bool TableCheckEvent(TEvent *e);
bool TableAddNew(); bool TableAddNew();
bool TableNotFound(TEvent *e); bool TableNotFound(TEvent *e);
void TableClear(); void TableClear();
TEvent * TableCheckTrackEvent(double fDirection, TTrack *Track); TEvent *TableCheckTrackEvent(double fDirection, TTrack *Track);
void TableTraceRoute(double fDistance, TDynamicObject *pVehicle = NULL); void TableTraceRoute(double fDistance, TDynamicObject *pVehicle = NULL);
void TableCheck(double fDistance); void TableCheck(double fDistance);
TCommandType TableUpdate(double &fVelDes, double &fDist, double &fNext, double &fAcc); TCommandType TableUpdate(double &fVelDes, double &fDist, double &fNext, double &fAcc);
@@ -371,9 +373,9 @@ class TController
private: // Ra: stare funkcje skanujące, używane do szukania sygnalizatora z tyłu private: // Ra: stare funkcje skanujące, używane do szukania sygnalizatora z tyłu
bool BackwardTrackBusy(TTrack *Track); bool BackwardTrackBusy(TTrack *Track);
TEvent * CheckTrackEventBackward(double fDirection, TTrack *Track); TEvent *CheckTrackEventBackward(double fDirection, TTrack *Track);
TTrack * BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track, TTrack *BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track,
TEvent *&Event); TEvent *&Event);
void SetProximityVelocity(double dist, double vel, const vector3 *pos); void SetProximityVelocity(double dist, double vel, const vector3 *pos);
TCommandType BackwardScan(); TCommandType BackwardScan();
@@ -383,8 +385,8 @@ class TController
~TController(); ~TController();
std::string NextStop(); std::string NextStop();
void TakeControl(bool yes); void TakeControl(bool yes);
std::string Relation(); std::string Relation();
std::string TrainName(); std::string TrainName();
int StationCount(); int StationCount();
int StationIndex(); int StationIndex();
bool IsStop(); bool IsStop();

File diff suppressed because it is too large Load Diff

View File

@@ -317,8 +317,8 @@ class Global
// maciek001: zmienne dla MWD // maciek001: zmienne dla MWD
static bool bMWDdebugEnable; static bool bMWDdebugEnable;
static unsigned long int iMWDBaudrate; static unsigned int iMWDBaudrate;
static AnsiString sMWDPortId; static std::string sMWDPortId;
static bool bMWDBreakEnable; static bool bMWDBreakEnable;
static bool bMWDInputDataEnable; static bool bMWDInputDataEnable;
static double fMWDAnalogCalib[4][3]; static double fMWDAnalogCalib[4][3];

4810
Train.cpp

File diff suppressed because it is too large Load Diff

86
Train.h
View File

@@ -12,18 +12,18 @@ http://mozilla.org/MPL/2.0/.
//#include "Track.h" //#include "Track.h"
//#include "TrkFoll.h" //#include "TrkFoll.h"
#include "Model3d.h"
#include "Spring.h"
#include "Gauge.h"
#include "Button.h" #include "Button.h"
#include "DynObj.h" #include "DynObj.h"
#include "Gauge.h"
#include "Model3d.h"
#include "Spring.h"
#include "mtable.h" #include "mtable.h"
#include "Sound.h"
#include "AdvSound.h" #include "AdvSound.h"
#include "RealSound.h"
#include "FadeSound.h" #include "FadeSound.h"
#include "PyInt.h" #include "PyInt.h"
#include "RealSound.h"
#include "Sound.h"
#include <string> #include <string>
// typedef enum {st_Off, st_Starting, st_On, st_ShuttingDown} T4State; // typedef enum {st_Off, st_Starting, st_On, st_ShuttingDown} T4State;
@@ -63,8 +63,8 @@ class TCab
TButton *btList; // Ra 2014-08: lista animacji dwustanowych (lampek) w kabinie TButton *btList; // Ra 2014-08: lista animacji dwustanowych (lampek) w kabinie
int iButtonsMax, iButtons; // ile miejsca w tablicy i ile jest w u篡ciu int iButtonsMax, iButtons; // ile miejsca w tablicy i ile jest w u篡ciu
public: public:
TGauge * Gauge(int n = -1); // pobranie adresu obiektu TGauge *Gauge(int n = -1); // pobranie adresu obiektu
TButton * Button(int n = -1); // pobranie adresu obiektu TButton *Button(int n = -1); // pobranie adresu obiektu
void Update(); void Update();
}; };
@@ -96,22 +96,21 @@ class TTrain
void UpdateMechPosition(double dt); void UpdateMechPosition(double dt);
bool Update(); bool Update();
void MechStop(); void MechStop();
void SetLights(); void SetLights();
// virtual bool RenderAlpha(); // virtual bool RenderAlpha();
// McZapkie-310302: ladowanie parametrow z pliku // McZapkie-310302: ladowanie parametrow z pliku
bool LoadMMediaFile(std::string const &asFileName); bool LoadMMediaFile(std::string const &asFileName);
PyObject *GetTrainState(); PyObject *GetTrainState();
private: private:
// clears state of all cabin controls // clears state of all cabin controls
void void clear_cab_controls();
clear_cab_controls(); // initializes a gauge matching provided label. returns: true if the label was found, false
// initializes a gauge matching provided label. returns: true if the label was found, false otherwise // otherwise
bool bool initialize_gauge(cParser &Parser, std::string const &Label, int const Cabindex);
initialize_gauge( cParser &Parser, std::string const &Label, int const Cabindex ); // initializes a button matching provided label. returns: true if the label was found, false
// initializes a button matching provided label. returns: true if the label was found, false otherwise // otherwise
bool bool initialize_button(cParser &Parser, std::string const &Label, int const Cabindex);
initialize_button( cParser &Parser, std::string const &Label, int const Cabindex );
private: //瞠by go nic z zewn靖rz nie przestawia這 private: //瞠by go nic z zewn靖rz nie przestawia這
TDynamicObject *DynamicObject; // przestawia zmiana pojazdu [F5] TDynamicObject *DynamicObject; // przestawia zmiana pojazdu [F5]
@@ -163,7 +162,7 @@ private:
TGauge ggMainButton; // EZT TGauge ggMainButton; // EZT
TGauge ggSecurityResetButton; TGauge ggSecurityResetButton;
TGauge ggReleaserButton; TGauge ggReleaserButton;
TGauge ggSandButton; //guzik piasecznicy TGauge ggSandButton; // guzik piasecznicy
TGauge ggAntiSlipButton; TGauge ggAntiSlipButton;
TGauge ggFuseButton; TGauge ggFuseButton;
TGauge ggConverterFuseButton; // hunter-261211: przycisk odblokowania TGauge ggConverterFuseButton; // hunter-261211: przycisk odblokowania
@@ -175,7 +174,7 @@ private:
TGauge ggRightLightButton; TGauge ggRightLightButton;
TGauge ggLeftEndLightButton; TGauge ggLeftEndLightButton;
TGauge ggRightEndLightButton; TGauge ggRightEndLightButton;
TGauge ggLightsButton; //przelacznik reflektorow (wszystkich) TGauge ggLightsButton; // przelacznik reflektorow (wszystkich)
// hunter-230112: przelacznik swiatel tylnich // hunter-230112: przelacznik swiatel tylnich
TGauge ggRearUpperLightButton; TGauge ggRearUpperLightButton;
@@ -201,7 +200,7 @@ private:
TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny
TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia
TGauge ggBatteryButton; // Stele 161228 hebelek baterii TGauge ggBatteryButton; // Stele 161228 hebelek baterii
// oswietlenia kabiny // oswietlenia kabiny
// NBMX wrzesien 2003 - obsluga drzwi // NBMX wrzesien 2003 - obsluga drzwi
@@ -268,7 +267,7 @@ private:
TButton btLampkaBocznik4; TButton btLampkaBocznik4;
TButton btLampkaRadiotelefon; TButton btLampkaRadiotelefon;
TButton btLampkaHamienie; TButton btLampkaHamienie;
TButton btLampkaED; //Stele 161228 hamowanie elektrodynamiczne TButton btLampkaED; // Stele 161228 hamowanie elektrodynamiczne
TButton btLampkaJazda; // Ra: nie u篡wane TButton btLampkaJazda; // Ra: nie u篡wane
// KURS90 // KURS90
TButton btLampkaBoczniki; TButton btLampkaBoczniki;
@@ -376,7 +375,7 @@ private:
float fConverterTimer; // hunter-261211: dla przekaznika float fConverterTimer; // hunter-261211: dla przekaznika
float fMainRelayTimer; // hunter-141211: zalaczanie WSa z opoznieniem float fMainRelayTimer; // hunter-141211: zalaczanie WSa z opoznieniem
float fCzuwakTestTimer; // hunter-091012: do testu czuwaka float fCzuwakTestTimer; // hunter-091012: do testu czuwaka
float fLightsTimer; // yB 150617: timer do swiatel float fLightsTimer; // yB 150617: timer do swiatel
int CAflag; // hunter-131211: dla osobnego zbijania CA i SHP int CAflag; // hunter-131211: dla osobnego zbijania CA i SHP
@@ -396,21 +395,22 @@ private:
float fHVoltage; // napi?cie dla dynamicznych ga?ek float fHVoltage; // napi?cie dla dynamicznych ga?ek
float fHCurrent[4]; // pr?dy: suma i amperomierze 1,2,3 float fHCurrent[4]; // pr?dy: suma i amperomierze 1,2,3
float fEngine[4]; // obroty te? trzeba pobra? float fEngine[4]; // obroty te? trzeba pobra?
int iCarNo, iPowerNo, iUnitNo; //liczba pojazdow, czlonow napednych i jednostek spi皻ych ze sob<6F> int iCarNo, iPowerNo, iUnitNo; // liczba pojazdow, czlonow napednych i jednostek spi皻ych ze
bool bDoors[20][3]; // drzwi dla wszystkich czlonow // sob<6F>
int iUnits[20]; // numer jednostki bool bDoors[20][3]; // drzwi dla wszystkich czlonow
int iDoorNo[20]; // liczba drzwi int iUnits[20]; // numer jednostki
char cCode[20]; //kod pojazdu int iDoorNo[20]; // liczba drzwi
std::string asCarName[20]; //nazwa czlonu char cCode[20]; // kod pojazdu
bool bMains[8]; //WSy std::string asCarName[20]; // nazwa czlonu
float fCntVol[8]; //napiecie NN bool bMains[8]; // WSy
bool bPants[8][2]; //podniesienie pantografow float fCntVol[8]; // napiecie NN
bool bFuse[8]; //nadmiarowe bool bPants[8][2]; // podniesienie pantografow
bool bBatt[8]; //baterie bool bFuse[8]; // nadmiarowe
bool bConv[8]; //przetwornice bool bBatt[8]; // baterie
bool bComp[8][2]; //sprezarki bool bConv[8]; // przetwornice
bool bHeat[8]; //grzanie bool bComp[8][2]; // sprezarki
// McZapkie: do syczenia bool bHeat[8]; // grzanie
// McZapkie: do syczenia
float fPPress, fNPress; float fPPress, fNPress;
float fSPPress, fSNPress; float fSPPress, fSNPress;
int iSekunda; // Ra: sekunda aktualizacji pr?dko?ci int iSekunda; // Ra: sekunda aktualizacji pr?dko?ci
@@ -418,17 +418,17 @@ private:
TPythonScreens pyScreens; TPythonScreens pyScreens;
public: public:
float fPress[20][3]; // cisnienia dla wszystkich czlonow float fPress[20][3]; // cisnienia dla wszystkich czlonow
float fEIMParams[9][10]; // parametry dla silnikow asynchronicznych float fEIMParams[9][10]; // parametry dla silnikow asynchronicznych
int RadioChannel() int RadioChannel()
{ {
return iRadioChannel; return iRadioChannel;
}; };
inline TDynamicObject * Dynamic() inline TDynamicObject *Dynamic()
{ {
return DynamicObject; return DynamicObject;
}; };
inline TMoverParameters * Controlled() inline TMoverParameters *Controlled()
{ {
return mvControlled; return mvControlled;
}; };