16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 22: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
(oraz innych wykorzystujących komunikację przez port COM)
(oraz innych wykorzystujących komunikację przez port COM)
dla Symulatora Pojazdów Szynowych MaSzyna
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 "Logs.h"
#include "Globals.h"
#include "Logs.h"
#include "World.h"
#include <windows.h>
#define BYTETOWRITE 31 /* ilość bajtów przesyłanych z MaSzyny*/
#define BYTETOREAD 16 /* ilość bajtów przesyłanych do MaSzyny*/
#define BYTETOWRITE 31 /* ilość bajtów przesyłanych z MaSzyny*/
#define BYTETOREAD 16 /* ilość bajtów przesyłanych do MaSzyny*/
HANDLE hComm;
MWDComm::MWDComm() // konstruktor
MWDComm::MWDComm() // konstruktor
{
MWDTime = 0;
bSHPstate = 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;
bHamowanie = false;
bCzuwak = false;
@@ -47,15 +47,16 @@ MWDComm::MWDComm() // konstruktor
kierunek = 0;
bnkMask = 0;
int i=0;
while(i<BYTETOWRITE)
int i = 0;
while (i < BYTETOWRITE)
{
if(i<BYTETOREAD)ReadDataBuff[i] = 0;
if (i < BYTETOREAD)
ReadDataBuff[i] = 0;
WriteDataBuff[i] = 0;
i++;
}
i=0;
while(i<6)
i = 0;
while (i < 6)
{
lastStateData[i] = 0;
maskSwitch[i] = 0;
@@ -64,22 +65,26 @@ MWDComm::MWDComm() // konstruktor
}
}
MWDComm::~MWDComm() // destruktor
MWDComm::~MWDComm() // destruktor
{
Close();
}
bool MWDComm::Open() // otwieranie portu COM
bool MWDComm::Open() // otwieranie portu COM
{
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(GetLastError()==ERROR_FILE_NOT_FOUND){
WriteLog("PortCOM ERROR: serial port does not exist"); //serial port does not exist. Inform user.
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.
}
WriteLog("PortCOM ERROR! not open!");
//some other error occurred. Inform user.
// some other error occurred. Inform user.
return FALSE;
}
@@ -90,16 +95,16 @@ bool MWDComm::Open() // otwieranie portu COM
CommDCB.BaudRate = Global::iMWDBaudrate;
CommDCB.fBinary = TRUE;
CommDCB.fParity = FALSE;
CommDCB.fOutxCtsFlow = FALSE; // No CTS output flow control
CommDCB.fOutxDsrFlow = FALSE; // No DSR output flow control
CommDCB.fDtrControl = FALSE; // DTR flow control type
CommDCB.fOutxCtsFlow = FALSE; // No CTS output flow control
CommDCB.fOutxDsrFlow = FALSE; // No DSR output flow control
CommDCB.fDtrControl = FALSE; // DTR flow control type
CommDCB.fDsrSensitivity = FALSE; // DSR sensitivity
CommDCB.fTXContinueOnXoff = FALSE; // XOFF continues Tx
CommDCB.fOutX = FALSE; // No XON/XOFF out flow control
CommDCB.fInX = FALSE; // No XON/XOFF in flow control
CommDCB.fErrorChar = FALSE; // Disable error replacement
CommDCB.fNull = FALSE; // Disable null stripping
CommDCB.fDsrSensitivity = FALSE; // DSR sensitivity
CommDCB.fTXContinueOnXoff = FALSE; // XOFF continues Tx
CommDCB.fOutX = FALSE; // No XON/XOFF out flow control
CommDCB.fInX = FALSE; // No XON/XOFF in flow control
CommDCB.fErrorChar = FALSE; // Disable error replacement
CommDCB.fNull = FALSE; // Disable null stripping
CommDCB.fRtsControl = RTS_CONTROL_DISABLE;
CommDCB.fAbortOnError = FALSE;
@@ -108,10 +113,10 @@ bool MWDComm::Open() // otwieranie portu COM
CommDCB.Parity = NOPARITY;
CommDCB.StopBits = ONESTOPBIT;
//konfiguracja portu
if (!SetCommState (hComm, &CommDCB))
// konfiguracja portu
if (!SetCommState(hComm, &CommDCB))
{
//dwError = GetLastError ();
// dwError = GetLastError ();
WriteLog("Unable to configure the serial port!");
return FALSE;
}
@@ -119,44 +124,51 @@ bool MWDComm::Open() // otwieranie portu COM
return TRUE;
}
bool MWDComm::Close() // zamykanie portu COM
bool MWDComm::Close() // zamykanie portu COM
{
WriteLog("COM Port is closing...");
int i = 0;
while(i<BYTETOWRITE) // zerowanie danych...
while (i < BYTETOWRITE) // zerowanie danych...
{
WriteDataBuff[i] = 0;
i++;
}
Sleep(100);
SendData(); // wysyłanie do pulpitu: zatrzymanie haslera i zgaszenie lampek
SendData(); // wysyłanie do pulpitu: zatrzymanie haslera i zgaszenie lampek
Sleep(700);
CloseHandle(hComm);
WriteLog("COM is close!");
return TRUE;
}
inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
inline bool MWDComm::GetMWDState() // sprawdzanie otwarcia portu COM
{
if(hComm > 0) return 1;
else return 0;
if (hComm > 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;
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[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];
fAnalog[0] =
(float)((ReadDataBuff[9] << 8) + ReadDataBuff[8]) /
Global::fMWDAnalogCalib[0][3]; // 4095.0f; //max wartosc wynikająca z rozdzielczości
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();
return TRUE;
}
bool MWDComm::SendData() // wysyłanie danych
bool MWDComm::SendData() // wysyłanie danych
{
DWORD bytes_write;
DWORD fdwEvtMask;
@@ -166,17 +178,19 @@ bool MWDComm::SendData() // wysy
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++;
if(!(MWDTime%5))
if (!(MWDTime % 5))
{
if(GetMWDState())
if (GetMWDState())
{
SendData();
if (Global::bMWDInputDataEnable) ReadData();
if (Global::bMWDInputDataEnable)
ReadData();
return 1;
}else
}
else
{
WriteLog("Port COM: connection ERROR!");
// 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;
while(i<6)
int i = 0;
while (i < 6)
{
maskData[i] = ReadDataBuff[i]^lastStateData[i];
maskData[i] = ReadDataBuff[i] ^ lastStateData[i];
lastStateData[i] = ReadDataBuff[i];
i++;
}
@@ -200,9 +214,11 @@ bool MWDComm::CheckData() // sprawdzanie wej
Port0: 0 NC odblok. przek. sprężarki i wentyl. oporów
1 M wyłącznik wył. szybkiego
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
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
7 SPACE kasowanie czuwaka
@@ -211,7 +227,8 @@ bool MWDComm::CheckData() // sprawdzanie wej
2 (Shift) C sprężarka
3 S piasecznice
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
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
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
/*PORT0*/
if(maskData[0] & 0x02 && lastStateData[0] & 0x02) KeyBoard('M',1); // wyłączenie wyłącznika szybkiego
else KeyBoard('M',0); // monostabilny
if(maskData[0] & 0x04 && lastStateData[0] & 0x04) { // impuls załączający wyłącznik szybki
KeyBoard(0x10,1); // monostabilny
KeyBoard('M',1);
}else{
KeyBoard('M',0);
KeyBoard(0x10,0);
if (maskData[0] & 0x02 && lastStateData[0] & 0x02)
KeyBoard('M', 1); // wyłączenie wyłącznika szybkiego
else
KeyBoard('M', 0); // monostabilny
if (maskData[0] & 0x04 && lastStateData[0] & 0x04)
{ // impuls załączający wyłącznik szybki
KeyBoard(0x10, 1); // monostabilny
KeyBoard('M', 1);
}
if(maskData[0] & 0x08 && lastStateData[0] & 0x08) KeyBoard('N',1); // odblok nadmiarowego silników trakcyjnych
else KeyBoard('N',0); // monostabilny
if(maskData[0] & 0x20 && lastStateData[0] & 0x20) { // odblok nadmiarowego przetwornicy, ogrzewania poc.
KeyBoard(0x11,1); // różnicowego obwodów pomocniczych
KeyBoard('N',1); // monostabilny
}else{
KeyBoard('N',0);
KeyBoard(0x11,0);
else
{
KeyBoard('M', 0);
KeyBoard(0x10, 0);
}
if(maskData[0] & 0x40 && lastStateData[0] & 0x40) KeyBoard('L',1); // wył. styczników liniowych
else KeyBoard('L',0); // monostabilny
if(maskData[0] & 0x80 && lastStateData[0] & 0x80) KeyBoard(0x20,1); // kasowanie czuwaka/SHP
else KeyBoard(0x20,0); // kasowanie czuwaka/SHP
if (maskData[0] & 0x08 && lastStateData[0] & 0x08)
KeyBoard('N', 1); // odblok nadmiarowego silników trakcyjnych
else
KeyBoard('N', 0); // monostabilny
if (maskData[0] & 0x20 && lastStateData[0] & 0x20)
{ // odblok nadmiarowego przetwornicy, ogrzewania poc.
KeyBoard(0x11, 1); // różnicowego obwodów pomocniczych
KeyBoard('N', 1); // monostabilny
}
else
{
KeyBoard('N', 0);
KeyBoard(0x11, 0);
}
if (maskData[0] & 0x40 && lastStateData[0] & 0x40)
KeyBoard('L', 1); // wył. styczników liniowych
else
KeyBoard('L', 0); // monostabilny
if (maskData[0] & 0x80 && lastStateData[0] & 0x80)
KeyBoard(0x20, 1); // kasowanie czuwaka/SHP
else
KeyBoard(0x20, 0); // kasowanie czuwaka/SHP
/*PORT1*/
// puszczanie przycisku bistabilnego klawiatury
if(maskSwitch[1]&0x02){
if(bitSwitch[1] &0x02){
KeyBoard('X',0);
KeyBoard(0x10,0);
}else KeyBoard('X',0);
if (maskSwitch[1] & 0x02)
{
if (bitSwitch[1] & 0x02)
{
KeyBoard('X', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('X', 0);
maskSwitch[1] &= ~0x02;
}
if(maskSwitch[1]&0x04){
if(bitSwitch[1] &0x04){
KeyBoard('C',0);
KeyBoard(0x10,0);
}else KeyBoard('C',0);
if (maskSwitch[1] & 0x04)
{
if (bitSwitch[1] & 0x04)
{
KeyBoard('C', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('C', 0);
maskSwitch[1] &= ~0x04;
}
if(maskSwitch[1]&0x10){
if(bitSwitch[1] &0x10){
KeyBoard('H',0);
KeyBoard(0x10,0);
}else KeyBoard('H',0);
if (maskSwitch[1] & 0x10)
{
if (bitSwitch[1] & 0x10)
{
KeyBoard('H', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('H', 0);
maskSwitch[1] &= ~0x10;
}
if(maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40){
if(maskSwitch[1] & 0x20) KeyBoard(0x10,0);
if(maskSwitch[1] & 0x40) KeyBoard(0x11,0);
KeyBoard('B',0);
if (maskSwitch[1] & 0x20 || maskSwitch[1] & 0x40)
{
if (maskSwitch[1] & 0x20)
KeyBoard(0x10, 0);
if (maskSwitch[1] & 0x40)
KeyBoard(0x11, 0);
KeyBoard('B', 0);
maskSwitch[1] &= ~0x60;
}
if(maskSwitch[1]&0x80){
if(bitSwitch[1] &0x80){
KeyBoard('F',0);
KeyBoard(0x10,0);
}else KeyBoard('F',0);
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);
if (maskData[1] & 0x02 && lastStateData[1] & 0x02)
{ // przetwornica
KeyBoard(0x10, 1); // bistabilny
KeyBoard('X', 1);
maskSwitch[1] |= 0x02;
bitSwitch[1] |= 0x02;
}else{
}
else
{
maskSwitch[1] |= 0x02;
bitSwitch[1] &= ~0x02;
KeyBoard('X',1);
KeyBoard('X', 1);
}
if(maskData[1] & 0x04 && lastStateData[1] & 0x04) { // sprężarka
KeyBoard(0x10,1); // bistabilny
KeyBoard('C',1);
if (maskData[1] & 0x04 && lastStateData[1] & 0x04)
{ // sprężarka
KeyBoard(0x10, 1); // bistabilny
KeyBoard('C', 1);
maskSwitch[1] |= 0x04;
bitSwitch[1] |= 0x04;
}else{
}
else
{
maskSwitch[1] |= 0x04;
bitSwitch[1] &= ~0x04;
KeyBoard('C',1);
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);
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{
}
else
{
maskSwitch[1] |= 0x10;
bitSwitch[1] &= ~0x10;
KeyBoard('H',1);
KeyBoard('H', 1);
}
if(maskData[1] & 0x20 || maskData[1] & 0x40){ // przełącznik hamowania
if(lastStateData[1] & 0x20){ // Shift+B
KeyBoard(0x10,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);
}
else if (lastStateData[1] & 0x40)
{ // Ctrl+B
KeyBoard(0x11, 1);
maskSwitch[1] |= 0x40;
}
KeyBoard('B',1);
KeyBoard('B', 1);
}
if(maskData[1] & 0x80 && lastStateData[1] & 0x80) { // rozruch wysoki/niski
KeyBoard(0x10,1); // bistabilny
KeyBoard('F',1);
if (maskData[1] & 0x80 && lastStateData[1] & 0x80)
{ // rozruch wysoki/niski
KeyBoard(0x10, 1); // bistabilny
KeyBoard('F', 1);
maskSwitch[1] |= 0x80;
bitSwitch[1] |= 0x80;
}else{
}
else
{
maskSwitch[1] |= 0x80;
bitSwitch[1] &= ~0x80;
KeyBoard('F',1);
KeyBoard('F', 1);
}
/*PORT2*/
if(maskSwitch[2]&0x01){
if(bitSwitch[2] &0x01){
KeyBoard('P',0);
KeyBoard(0x10,0);
}else KeyBoard('P',0);
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);
if (maskSwitch[2] & 0x02)
{
if (bitSwitch[2] & 0x02)
{
KeyBoard('O', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('O', 0);
maskSwitch[2] &= ~0x02;
}
if(maskData[2] & 0x01 && lastStateData[2] & 0x01) { // pantograf przedni
KeyBoard(0x10,1); // bistabilny
KeyBoard('P',1);
if (maskData[2] & 0x01 && lastStateData[2] & 0x01)
{ // pantograf przedni
KeyBoard(0x10, 1); // bistabilny
KeyBoard('P', 1);
maskSwitch[2] |= 0x01;
bitSwitch[2] |= 0x01;
}else{
}
else
{
maskSwitch[2] |= 0x01;
bitSwitch[2] &= ~0x01;
KeyBoard('P',1);
KeyBoard('P', 1);
}
if(maskData[2] & 0x02 && lastStateData[2] & 0x02) { // pantograf tylni
KeyBoard(0x10,1); // bistabilny
KeyBoard('O',1);
if (maskData[2] & 0x02 && lastStateData[2] & 0x02)
{ // pantograf tylni
KeyBoard(0x10, 1); // bistabilny
KeyBoard('O', 1);
maskSwitch[2] |= 0x02;
bitSwitch[2] |= 0x02;
}else{
}
else
{
maskSwitch[2] |= 0x02;
bitSwitch[2] &= ~0x02;
KeyBoard('O',1);
KeyBoard('O', 1);
}
if(maskData[2] & 0x04 && lastStateData[2] & 0x04) { // przyhamowanie przy poślizgu
KeyBoard(0x10,1); // monostabilny
KeyBoard(0x0D,1);
}else{
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);
KeyBoard(0x0D, 0);
KeyBoard(0x10, 0);
}
/*if(maskData[2] & 0x08 && lastStateData[2] & 0x08){ // przyciemnienie świateł
KeyBoard(' ',0); // bistabilny
@@ -420,38 +503,51 @@ bool MWDComm::CheckData() // sprawdzanie wej
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] & 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);
}
if(maskData[2] & 0x80 && lastStateData[2] & 0x80) KeyBoard('A',1); // syrena niska
else KeyBoard('A',0); // monostabilny
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(maskSwitch[3]&0x01){
if(bitSwitch[3] &0x01){
KeyBoard('J',0);
KeyBoard(0x10,0);
}else KeyBoard('J',0);
if (maskSwitch[3] & 0x01)
{
if (bitSwitch[3] & 0x01)
{
KeyBoard('J', 0);
KeyBoard(0x10, 0);
}
else
KeyBoard('J', 0);
maskSwitch[3] &= ~0x01;
}
if(maskData[3] & 0x01 && lastStateData[3] & 0x01) { // bateria
KeyBoard(0x10,1); // bistabilny
KeyBoard('J',1);
if (maskData[3] & 0x01 && lastStateData[3] & 0x01)
{ // bateria
KeyBoard(0x10, 1); // bistabilny
KeyBoard('J', 1);
maskSwitch[3] |= 0x01;
bitSwitch[3] |= 0x01;
}else{
}
else
{
maskSwitch[3] |= 0x01;
bitSwitch[3] &= ~0x01;
KeyBoard('J',1);
KeyBoard('J', 1);
}
/*
@@ -491,7 +587,7 @@ bool MWDComm::CheckData() // sprawdzanie wej
KeyBoard(0x10,0);
}
/*PORT4*//*
/*PORT4*/ /*
if(maskData[4] & 0x02 && lastStateData[1] & 0x02) {
KeyBoard(0x10,1);
KeyBoard('X',1); //
@@ -537,132 +633,164 @@ bool MWDComm::CheckData() // sprawdzanie wej
KeyBoard(0x10,0);
}
/*PORT5*//*
if(maskData[5] & 0x02 && lastStateData[1] & 0x02) {
KeyBoard(0x10,1);
KeyBoard('X',1); //
KeyBoard('X',0);
KeyBoard(0x10,0);
}else{ KeyBoard('X',1); //
KeyBoard('X',0);
}
if(maskData[5] & 0x04 && lastStateData[1] & 0x04) {
KeyBoard(0x10,1);
KeyBoard('C',1); //
KeyBoard('C',0);
KeyBoard(0x10,0);
}else{ KeyBoard('C',1); //
KeyBoard('C',0);
}
if(maskData[5] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); //
else KeyBoard('S',0);
/*PORT5*/ /*
if(maskData[5] & 0x02 && lastStateData[1] & 0x02) {
KeyBoard(0x10,1);
KeyBoard('X',1); //
KeyBoard('X',0);
KeyBoard(0x10,0);
}else{
KeyBoard('X',1); //
KeyBoard('X',0);
}
if(maskData[5] & 0x04 && lastStateData[1] & 0x04) {
KeyBoard(0x10,1);
KeyBoard('C',1); //
KeyBoard('C',0);
KeyBoard(0x10,0);
}else{
KeyBoard('C',1); //
KeyBoard('C',0);
}
if(maskData[5] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); //
else
KeyBoard('S',0);
if(maskData[5] & 0x10 && lastStateData[1] & 0x10) {
KeyBoard(0x11,1);
KeyBoard('H',1);
}else{ KeyBoard('H',0);
KeyBoard(0x11,0);
}
if(maskData[5] & 0x20 && lastStateData[1] & 0x20) {
KeyBoard(0x11,1);
KeyBoard(' ',1);
}else{ KeyBoard(' ',0);
KeyBoard(0x11,0);
}
if(maskData[5] & 0x40 && lastStateData[1] & 0x40) {
KeyBoard(0x10,1);
KeyBoard(' ',1);
}else{ KeyBoard(' ',0);
KeyBoard(0x10,0);
}
if(maskData[5] & 0x80 && lastStateData[1] & 0x80) {
KeyBoard(0x10,1);
KeyBoard('F',1);
}else{ KeyBoard('F',0);
KeyBoard(0x10,0);
}//*/
if(maskData[5] & 0x10 && lastStateData[1] & 0x10) {
KeyBoard(0x11,1);
KeyBoard('H',1);
}else{
KeyBoard('H',0);
KeyBoard(0x11,0);
}
if(maskData[5] & 0x20 && lastStateData[1] & 0x20) {
KeyBoard(0x11,1);
KeyBoard(' ',1);
}else{
KeyBoard(' ',0);
KeyBoard(0x11,0);
}
if(maskData[5] & 0x40 && lastStateData[1] & 0x40) {
KeyBoard(0x10,1);
KeyBoard(' ',1);
}else{
KeyBoard(' ',0);
KeyBoard(0x10,0);
}
if(maskData[5] & 0x80 && lastStateData[1] & 0x80) {
KeyBoard(0x10,1);
KeyBoard('F',1);
}else{
KeyBoard('F',0);
KeyBoard(0x10,0);
}//*/
/* NASTAWNIK, BOCZNIK i KIERUNEK */
if(bnkMask & 1){ //puszczanie klawiszy
KeyBoard(0x6B,0);
if (bnkMask & 1)
{ // puszczanie klawiszy
KeyBoard(0x6B, 0);
bnkMask &= ~1;
}
if(bnkMask & 2){
KeyBoard(0x6D,0);
if (bnkMask & 2)
{
KeyBoard(0x6D, 0);
bnkMask &= ~2;
}
if(bnkMask & 4){
KeyBoard(0x6F,0);
if (bnkMask & 4)
{
KeyBoard(0x6F, 0);
bnkMask &= ~4;
}
if(bnkMask & 8){
KeyBoard(0x6A,0);
if (bnkMask & 8)
{
KeyBoard(0x6A, 0);
bnkMask &= ~8;
}
if(nastawnik < ReadDataBuff[6])
if (nastawnik < ReadDataBuff[6])
{
bnkMask |= 1;
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;
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;
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;
bocznik--;
KeyBoard(0x6A,1); //wciśnij * i odejmij 1 do bocznika
KeyBoard(0x6A, 1); // wciśnij * i odejmij 1 do bocznika
}
/* 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;
bRysik1L = false;
if(bPrzejazdSHP) bRysik1H = false;
}else if(bKabina2){
if (bPrzejazdSHP)
bRysik1H = false;
}
else if (bKabina2)
{
bRysik1L = true;
bRysik1H = false;
if(bPrzejazdSHP) bRysik1L = false;
}else{
if (bPrzejazdSHP)
bRysik1L = false;
}
else
{
bRysik1H = false;
bRysik1L = false;
}
if(bHamowanie){ // logika rysika 2
if (bHamowanie)
{ // logika rysika 2
bRysik2H = false;
bRysik2L = true;
}else{
if(bCzuwak) bRysik2H = true;
else bRysik2H = false;
}
else
{
if (bCzuwak)
bRysik2H = true;
else
bRysik2H = false;
bRysik2L = false;
}
bCzuwak = false;
if(bRysik1H)WriteDataBuff[6] |= 1<<0;
else WriteDataBuff[6] &= ~(1<<0);
if(bRysik1L)WriteDataBuff[6] |= 1<<1;
else 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);
if (bRysik1H)
WriteDataBuff[6] |= 1 << 0;
else
WriteDataBuff[6] &= ~(1 << 0);
if (bRysik1L)
WriteDataBuff[6] |= 1 << 1;
else
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;
// 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
if(s){// Press the "A" key
if (s)
{ // Press the "A" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
}else{
}
else
{
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
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
(oraz innych wykorzystujących komunikację przez port COM)
(oraz innych wykorzystujących komunikację przez port COM)
dla Symulatora Pojazdów Szynowych MaSzyna
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
#define MWDH
//---------------------------------------------------------------------------
@@ -25,15 +24,15 @@ typedef unsigned long DWORD;
class MWDComm
{
private:
int MWDTime; //
char lastStateData[6], maskData[6],maskSwitch[6], bitSwitch[6];
private:
int MWDTime; //
char lastStateData[6], maskData[6], maskSwitch[6], bitSwitch[6];
int bocznik, nastawnik, kierunek;
char bnkMask;
bool ReadData(); //BYTE *pReadDataBuff);
bool SendData(); //BYTE *pWriteDataBuff);
bool CheckData(); //sprawdzanie zmian wejść i kontrola mazaków HASLERA
bool ReadData(); // BYTE *pReadDataBuff);
bool SendData(); // BYTE *pWriteDataBuff);
void CheckData(); // sprawdzanie zmian wejść i kontrola mazaków HASLERA
void KeyBoard(int key, bool s);
bool bRysik1H;
@@ -41,10 +40,10 @@ private:
bool bRysik2H;
bool bRysik2L;
public:
bool Open(); // Otwarcie portu
bool Close(); // Zamknięcie portu
bool Run(); // Obsługa portu
public:
bool Open(); // Otwarcie portu
bool Close(); // Zamknięcie portu
bool Run(); // Obsługa portu
bool GetMWDState(); // sprawdź czy port jest otwarty, 0 zamknięty, 1 otwarty
// zmienne do rysików HASLERA
@@ -55,19 +54,16 @@ public:
bool bHamowanie;
bool bCzuwak;
float fAnalog[4]; // trzymanie danych z wejść analogowych
float fAnalog[4]; // trzymanie danych z wejść analogowych
BYTE ReadDataBuff[17]; // bufory danych
BYTE ReadDataBuff[17]; // bufory danych
BYTE WriteDataBuff[31];
MWDComm(); //konstruktor
~MWDComm(); //destruktor
MWDComm(); // konstruktor
~MWDComm(); // destruktor
};
#endif
/*
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
//#include <fstream>
#include <string>
#include "Classes.h"
#include "dumb3d.h"
#include "mczapkie/mover.h"
#include <string>
using namespace Math3D;
using namespace Mtable;
@@ -52,10 +52,12 @@ enum TMovementStatus
moveGuardSignal = 0x8000, // sygnał od kierownika (minął czas postoju)
moveVisibility = 0x10000, // jazda na widoczność po przejechaniu S1 na SBL
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
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ą
};
@@ -126,9 +128,9 @@ class TSpeedPos
public:
double fDist; // aktualna odległość (ujemna gdy minięte)
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;
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
// zwrotnicy,32-minięty,64=koniec,128=łuk
// 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);
void Set(TTrack *t, double d, int f);
std::string TableText();
std::string GetName();
bool IsProperSemaphor(TOrders order = Wait_for_orders);
std::string GetName();
bool IsProperSemaphor(TOrders order = Wait_for_orders);
};
//----------------------------------------------------------------------------
@@ -172,8 +174,8 @@ class TController
double fLastVel; // prędkość na poprzednio sprawdzonym torze
TTrack *tLast; // ostatni analizowany tor
TEvent *eSignSkip; // można pominąć ten SBL po zatrzymaniu
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 *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
private: // parametry aktualnego składu
double fLength; // długość składu (do wyciągania z ograniczeń)
double fMass; // całkowita masa do liczenia stycznej składowej grawitacji
@@ -219,8 +221,8 @@ class TController
// migacz lub czeka na stan zwrotnicy
private:
TDynamicObject *pVehicle; // pojazd w którym siedzi sterujący
TDynamicObject *
pVehicles[2]; // skrajne pojazdy w składzie (niekoniecznie bezpośrednio sterowane)
TDynamicObject
*pVehicles[2]; // skrajne pojazdy w składzie (niekoniecznie bezpośrednio sterowane)
TMoverParameters *mvControlling; // jakim pojazdem steruje (może silnikowym w EZT)
TMoverParameters *mvOccupied; // jakim pojazdem hamuje
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
public:
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 VelRoad; // aktualna prędkość drogowa (ze znaku W27)
// (PutValues albo komendą)
public:
double VelNext; // prędkość, jaka ma być po przejechaniu długości ProximityDist
private:
double fProximityDist; //odleglosc podawana w SetProximityVelocity(); >0:przeliczać do
double fProximityDist; // odleglosc podawana w SetProximityVelocity(); >0:przeliczać do
// punktu, <0:podana wartość
double FirstSemaphorDist; // odległość do pierwszego znalezionego semafora
double FirstSemaphorDist; // odległość do pierwszego znalezionego semafora
public:
double
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 AutoRewident(); // ustawia hamulce w składzie
public:
Mtable::TTrainParameters * Timetable()
Mtable::TTrainParameters *Timetable()
{
return TrainParams;
};
@@ -358,12 +360,12 @@ class TController
double Distance(vector3 &p1, vector3 &n, vector3 &p2);
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 TableAddNew();
bool TableNotFound(TEvent *e);
void TableClear();
TEvent * TableCheckTrackEvent(double fDirection, TTrack *Track);
TEvent *TableCheckTrackEvent(double fDirection, TTrack *Track);
void TableTraceRoute(double fDistance, TDynamicObject *pVehicle = NULL);
void TableCheck(double fDistance);
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
bool BackwardTrackBusy(TTrack *Track);
TEvent * CheckTrackEventBackward(double fDirection, TTrack *Track);
TTrack * BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track,
TEvent *&Event);
TEvent *CheckTrackEventBackward(double fDirection, TTrack *Track);
TTrack *BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track,
TEvent *&Event);
void SetProximityVelocity(double dist, double vel, const vector3 *pos);
TCommandType BackwardScan();
@@ -383,8 +385,8 @@ class TController
~TController();
std::string NextStop();
void TakeControl(bool yes);
std::string Relation();
std::string TrainName();
std::string Relation();
std::string TrainName();
int StationCount();
int StationIndex();
bool IsStop();

File diff suppressed because it is too large Load Diff

View File

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