mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 17:29:18 +02:00
Poprawka dla MWD aby kompilował się na VS
This commit is contained in:
537
Console/MWD.cpp
537
Console/MWD.cpp
@@ -14,10 +14,10 @@ http://mozilla.org/MPL/2.0/.
|
||||
author: Maciej Witek 2016
|
||||
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>
|
||||
@@ -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;
|
||||
@@ -72,14 +73,18 @@ MWDComm::~MWDComm() // destruktor
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -123,7 +128,7 @@ 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++;
|
||||
@@ -138,8 +143,10 @@ bool MWDComm::Close() // zamykanie 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
|
||||
@@ -147,10 +154,15 @@ bool MWDComm::ReadData() // odbieranie danych + odczyta danych analogowych i zap
|
||||
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;
|
||||
@@ -169,14 +181,16 @@ bool MWDComm::SendData() // wysy
|
||||
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,13 +633,14 @@ bool MWDComm::CheckData() // sprawdzanie wej
|
||||
KeyBoard(0x10,0);
|
||||
}
|
||||
|
||||
/*PORT5*//*
|
||||
/*PORT5*/ /*
|
||||
if(maskData[5] & 0x02 && lastStateData[1] & 0x02) {
|
||||
KeyBoard(0x10,1);
|
||||
KeyBoard('X',1); //
|
||||
KeyBoard('X',0);
|
||||
KeyBoard(0x10,0);
|
||||
}else{ KeyBoard('X',1); //
|
||||
}else{
|
||||
KeyBoard('X',1); //
|
||||
KeyBoard('X',0);
|
||||
}
|
||||
if(maskData[5] & 0x04 && lastStateData[1] & 0x04) {
|
||||
@@ -551,115 +648,146 @@ bool MWDComm::CheckData() // sprawdzanie wej
|
||||
KeyBoard('C',1); //
|
||||
KeyBoard('C',0);
|
||||
KeyBoard(0x10,0);
|
||||
}else{ KeyBoard('C',1); //
|
||||
}else{
|
||||
KeyBoard('C',1); //
|
||||
KeyBoard('C',0);
|
||||
}
|
||||
if(maskData[5] & 0x08 && lastStateData[1] & 0x08) KeyBoard('S',1); //
|
||||
else KeyBoard('S',0);
|
||||
else
|
||||
KeyBoard('S',0);
|
||||
|
||||
|
||||
if(maskData[5] & 0x10 && lastStateData[1] & 0x10) {
|
||||
KeyBoard(0x11,1);
|
||||
KeyBoard('H',1);
|
||||
}else{ KeyBoard('H',0);
|
||||
}else{
|
||||
KeyBoard('H',0);
|
||||
KeyBoard(0x11,0);
|
||||
}
|
||||
if(maskData[5] & 0x20 && lastStateData[1] & 0x20) {
|
||||
KeyBoard(0x11,1);
|
||||
KeyBoard(' ',1);
|
||||
}else{ KeyBoard(' ',0);
|
||||
}else{
|
||||
KeyBoard(' ',0);
|
||||
KeyBoard(0x11,0);
|
||||
}
|
||||
if(maskData[5] & 0x40 && lastStateData[1] & 0x40) {
|
||||
KeyBoard(0x10,1);
|
||||
KeyBoard(' ',1);
|
||||
}else{ KeyBoard(' ',0);
|
||||
}else{
|
||||
KeyBoard(' ',0);
|
||||
KeyBoard(0x10,0);
|
||||
}
|
||||
if(maskData[5] & 0x80 && lastStateData[1] & 0x80) {
|
||||
KeyBoard(0x10,1);
|
||||
KeyBoard('F',1);
|
||||
}else{ KeyBoard('F',0);
|
||||
}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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ http://mozilla.org/MPL/2.0/.
|
||||
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:
|
||||
private:
|
||||
int MWDTime; //
|
||||
char lastStateData[6], maskData[6],maskSwitch[6], bitSwitch[6];
|
||||
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,7 +40,7 @@ private:
|
||||
bool bRysik2H;
|
||||
bool bRysik2L;
|
||||
|
||||
public:
|
||||
public:
|
||||
bool Open(); // Otwarcie portu
|
||||
bool Close(); // Zamknięcie portu
|
||||
bool Run(); // Obsługa portu
|
||||
@@ -55,19 +54,16 @@ public:
|
||||
bool bHamowanie;
|
||||
bool bCzuwak;
|
||||
|
||||
|
||||
|
||||
float fAnalog[4]; // trzymanie danych z wejść analogowych
|
||||
|
||||
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:
|
||||
|
||||
|
||||
286
Driver.cpp
286
Driver.cpp
@@ -11,21 +11,21 @@ http://mozilla.org/MPL/2.0/.
|
||||
Copyright (C) 2001-2004 Marcin Wozniak, Maciej Czapkiewicz and others
|
||||
|
||||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "Driver.h"
|
||||
|
||||
#include <direct.h>
|
||||
#include "Globals.h"
|
||||
#include "Logs.h"
|
||||
#include "mtable.h"
|
||||
|
||||
#include "DynObj.h"
|
||||
#include "Event.h"
|
||||
#include "Globals.h"
|
||||
#include "Ground.h"
|
||||
#include "Logs.h"
|
||||
#include "McZapkie/MOVER.h"
|
||||
#include "McZapkie/mctools.h"
|
||||
#include "MemCell.h"
|
||||
#include "World.h"
|
||||
#include "McZapkie/mctools.h"
|
||||
#include "McZapkie/MOVER.h"
|
||||
#include "mtable.h"
|
||||
#include <direct.h>
|
||||
|
||||
#define LOGVELOCITY 0
|
||||
#define LOGORDERS 0
|
||||
@@ -112,7 +112,7 @@ void TSpeedPos::Clear()
|
||||
{
|
||||
iFlags = 0; // brak flag to brak reakcji
|
||||
fVelNext = -1.0; // pr<70>dko<6B><6F> bez ogranicze<7A>
|
||||
fSectionVelocityDist = 0.0; //brak d<>ugo<67>ci
|
||||
fSectionVelocityDist = 0.0; // brak d<>ugo<67>ci
|
||||
fDist = 0.0;
|
||||
vPos = vector3(0, 0, 0);
|
||||
trTrack = NULL; // brak wska<6B>nika
|
||||
@@ -138,7 +138,7 @@ void TSpeedPos::CommandCheck()
|
||||
// SetVelocity 40 -1 -> PutValues: jecha<68> 40 a<> do mini<6E>cia (koniec ograniczenia(
|
||||
fVelNext = value1;
|
||||
iFlags &= ~(spShuntSemaphor | spPassengerStopPoint | spStopOnSBL);
|
||||
iFlags |= spSemaphor;// nie manewrowa, nie przystanek, nie zatrzyma<6D> na SBL, ale semafor
|
||||
iFlags |= spSemaphor; // nie manewrowa, nie przystanek, nie zatrzyma<6D> na SBL, ale semafor
|
||||
if (value1 == 0.0) // je<6A>li pierwsza zerowa
|
||||
if (value2 != 0.0) // a druga nie
|
||||
{ // S1 na SBL, mo<6D>na przejecha<68> po zatrzymaniu (tu nie mamy pr<70>dko<6B>ci ani odleg<65>o<EFBFBD>ci)
|
||||
@@ -162,7 +162,8 @@ void TSpeedPos::CommandCheck()
|
||||
// przystanek, najwy<77>ej AI zignoruje przy analizie tabelki
|
||||
if ((iFlags & spPassengerStopPoint) == 0)
|
||||
fVelNext = 0.0; // TrainParams->IsStop()?0.0:-1.0; //na razie tak
|
||||
iFlags |= spPassengerStopPoint; // niestety nie da si<73> w tym miejscu wsp<73><70>pracowa<77> z rozk<7A>adem
|
||||
iFlags |=
|
||||
spPassengerStopPoint; // niestety nie da si<73> w tym miejscu wsp<73><70>pracowa<77> z rozk<7A>adem
|
||||
break;
|
||||
case cm_SetProximityVelocity:
|
||||
// musi zosta<74> gdy<64> inaczej nie dzia<69>aj<61> manewry
|
||||
@@ -204,7 +205,8 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len)
|
||||
}
|
||||
else
|
||||
{
|
||||
iFlags ^= spElapsed; // 32-mini<6E>ty - b<>dziemy liczy<7A> odleg<65>o<EFBFBD><6F> wzgl<67>dem przeciwnego ko<6B>ca
|
||||
iFlags ^=
|
||||
spElapsed; // 32-mini<6E>ty - b<>dziemy liczy<7A> odleg<65>o<EFBFBD><6F> wzgl<67>dem przeciwnego ko<6B>ca
|
||||
// toru (nadal mo<6D>e by<62> z przodu i ogranicza<7A>)
|
||||
if ((iFlags & 0x43) == 3) // tylko je<6A>li (istotny) tor, bo eventy s<> punktowe
|
||||
if (trTrack) // mo<6D>e by<62> NULL, je<6A>li koniec toru (????)
|
||||
@@ -245,7 +247,8 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len)
|
||||
{
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("Tor " + trTrack->NameGet() + " zajety przed pojazdem. Num=" +
|
||||
std::to_string(trTrack->iNumDynamics) + "Dist= " + std::to_string(fDist));
|
||||
std::to_string(trTrack->iNumDynamics) +
|
||||
"Dist= " + std::to_string(fDist));
|
||||
fVelNext =
|
||||
0.0; // to zabroni<6E> wjazdu (chyba <20>e ten z przodu te<74> jedzie prosto)
|
||||
}
|
||||
@@ -263,14 +266,16 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len)
|
||||
// na Mydelniczce potrafi skanowa<77> na wprost mimo pojechania na bok
|
||||
}
|
||||
// poni<6E>sze nie dotyczy trybu <20><>czenia?
|
||||
if ((iFlags & spElapsed) ? false :
|
||||
if ((iFlags & spElapsed) ?
|
||||
false :
|
||||
trTrack->iNumDynamics >
|
||||
0) // je<6A>li jeszcze nie wjechano na tor, a co<63> na nim jest
|
||||
{
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("Rozjazd " + trTrack->NameGet() + " zajety przed pojazdem. Num=" +
|
||||
std::to_string(trTrack->iNumDynamics) + "Dist= "+ std::to_string(fDist));
|
||||
//fDist -= 30.0;
|
||||
std::to_string(trTrack->iNumDynamics) +
|
||||
"Dist= " + std::to_string(fDist));
|
||||
// fDist -= 30.0;
|
||||
fVelNext = 0.0; // to niech stanie w zwi<77>kszonej odleg<65>o<EFBFBD>ci
|
||||
// else if (fVelNext==0.0) //je<6A>li zosta<74>a wyzerowana
|
||||
// fVelNext=trTrack->VelocityGet(); //odczyt pr<70>dko<6B>ci
|
||||
@@ -300,11 +305,13 @@ std::string TSpeedPos::TableText()
|
||||
{ // o ile pozycja istotna
|
||||
return "Flags=#" + to_hex_str(iFlags, 8) + ", Dist=" + to_string(fDist, 1, 7) +
|
||||
", Vel=" + std::to_string(fVelNext) + ", Name=" + GetName();
|
||||
//if (iFlags & spTrack) // je<6A>li tor
|
||||
// return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) +
|
||||
// if (iFlags & spTrack) // je<6A>li tor
|
||||
// return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1)
|
||||
// +
|
||||
// ", Vel=" + AnsiString(fVelNext) + ", Track=" + trTrack->NameGet();
|
||||
//else if (iFlags & spEvent) // je<6A>li event
|
||||
// return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) +
|
||||
// else if (iFlags & spEvent) // je<6A>li event
|
||||
// return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1)
|
||||
// +
|
||||
// ", Vel=" + AnsiString(fVelNext) + ", Event=" + evEvent->asName;
|
||||
}
|
||||
return "Empty";
|
||||
@@ -312,7 +319,8 @@ std::string TSpeedPos::TableText()
|
||||
|
||||
bool TSpeedPos::IsProperSemaphor(TOrders order)
|
||||
{ // sprawdzenie czy semafor jest zgodny z trybem jazdy
|
||||
if (order < 0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt
|
||||
if (order <
|
||||
0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt
|
||||
{
|
||||
if (iFlags & (spSemaphor | spShuntSemaphor))
|
||||
return true;
|
||||
@@ -336,8 +344,10 @@ bool TSpeedPos::Set(TEvent *event, double dist, TOrders order)
|
||||
CommandCheck(); // sprawdzenie typu komendy w evencie i okre<72>lenie pr<70>dko<6B>ci
|
||||
// zale<6C>nie od trybu sprawdzenie czy jest tutaj gdzie<69> semafor lub tarcza manewrowa
|
||||
// je<6A>li wskazuje stop wtedy wystawiamy true jako koniec sprawdzania
|
||||
// WriteLog("EventSet: Vel=" + AnsiString(fVelNext) + " iFlags=" + AnsiString(iFlags) + " order="+AnsiString(order));
|
||||
if (order < 0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt
|
||||
// WriteLog("EventSet: Vel=" + AnsiString(fVelNext) + " iFlags=" + AnsiString(iFlags) + "
|
||||
// order="+AnsiString(order));
|
||||
if (order <
|
||||
0x40) // Wait_for_orders, Prepare_engine, Change_direction, Connect, Disconnect, Shunt
|
||||
{
|
||||
if (iFlags & (spSemaphor | spShuntSemaphor) && fVelNext == 0.0)
|
||||
return true;
|
||||
@@ -358,7 +368,8 @@ void TSpeedPos::Set(TTrack *track, double dist, int flag)
|
||||
trTrack = track; // TODO: (t) mo<6D>e by<62> NULL i nie odczytamy ko<6B>ca poprzedniego :/
|
||||
if (trTrack)
|
||||
{
|
||||
iFlags = flag | (trTrack->eType == tt_Normal ? 2 : 10); // zapami<6D>tanie kierunku wraz z typem
|
||||
iFlags =
|
||||
flag | (trTrack->eType == tt_Normal ? 2 : 10); // zapami<6D>tanie kierunku wraz z typem
|
||||
if (iFlags & spSwitch)
|
||||
if (trTrack->GetSwitchState() & 1)
|
||||
iFlags |= spSwitchStatus;
|
||||
@@ -390,7 +401,7 @@ void TController::TableClear()
|
||||
eSignSkip = NULL; // nic nie pomijamy
|
||||
};
|
||||
|
||||
TEvent * TController::CheckTrackEvent(double fDirection, TTrack *Track)
|
||||
TEvent *TController::CheckTrackEvent(double fDirection, TTrack *Track)
|
||||
{ // sprawdzanie event<6E>w na podanym torze do podstawowego skanowania
|
||||
TEvent *e = (fDirection > 0) ? Track->evEvent2 : Track->evEvent1;
|
||||
if (!e)
|
||||
@@ -416,12 +427,13 @@ bool TController::TableNotFound(TEvent *e)
|
||||
{ // sprawdzenie, czy nie zosta<74> ju<6A> dodany do tabelki (np. podw<64>jne W4 robi problemy)
|
||||
int j = (iLast + 1) % iSpeedTableSize; // j, aby sprawdzi<7A> te<74> ostatni<6E> pozycj<63>
|
||||
for (int i = iFirst; i != j; i = (i + 1) % iSpeedTableSize)
|
||||
if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) == (spEnabled |
|
||||
spEvent)) // o ile u<>ywana pozycja
|
||||
if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) ==
|
||||
(spEnabled | spEvent)) // o ile u<>ywana pozycja
|
||||
if (sSpeedTable[i].evEvent == e)
|
||||
{
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableNotFound: Event already in SpeedTable: " + sSpeedTable[i].evEvent->asName);
|
||||
WriteLog("TableNotFound: Event already in SpeedTable: " +
|
||||
sSpeedTable[i].evEvent->asName);
|
||||
return false; // ju<6A> jest, drugi raz dodawa<77> nie ma po co
|
||||
}
|
||||
return true; // nie ma, czyli mo<6D>na doda<64>
|
||||
@@ -499,8 +511,9 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle)
|
||||
-1.0 :
|
||||
1.0; // flaga ustawiona, gdy Point2 toru jest bli<6C>ej
|
||||
fCurrentDistance = sSpeedTable[iLast].fDist; // aktualna odleg<65>o<EFBFBD><6F> do jego Point1
|
||||
fTrackLength =
|
||||
sSpeedTable[iLast].iFlags & (spElapsed | spEnd) ? 0.0 : pTrack->Length(); // nie dolicza<7A> d<>ugo<67>ci gdy:
|
||||
fTrackLength = sSpeedTable[iLast].iFlags & (spElapsed | spEnd) ?
|
||||
0.0 :
|
||||
pTrack->Length(); // nie dolicza<7A> d<>ugo<67>ci gdy:
|
||||
// 32-mini<6E>ty pocz<63>tek,
|
||||
// 64-jazda do ko<6B>ca toru
|
||||
}
|
||||
@@ -523,8 +536,11 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle)
|
||||
if (TableAddNew())
|
||||
{
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableTraceRoute: new event found " + pEvent->asName + " by " + OwnerName());
|
||||
if (sSpeedTable[iLast].Set( pEvent, fCurrentDistance, OrderCurrentGet())) // dodanie odczytu sygna<6E>u
|
||||
WriteLog("TableTraceRoute: new event found " + pEvent->asName +
|
||||
" by " + OwnerName());
|
||||
if (sSpeedTable[iLast].Set(
|
||||
pEvent, fCurrentDistance,
|
||||
OrderCurrentGet())) // dodanie odczytu sygna<6E>u
|
||||
{
|
||||
fDistance = fCurrentDistance; // je<6A>li sygna<6E> stop, to nie ma
|
||||
// potrzeby dalej skanowa<77>
|
||||
@@ -589,8 +605,9 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle)
|
||||
sSpeedTable[iLast].iFlags &=
|
||||
~spReverse; // usuni<6E>cie flagi kierunku, bo mo<6D>e by<62> b<><62>dna
|
||||
if (sSpeedTable[iLast].iFlags < 0)
|
||||
sSpeedTable[iLast].iFlags |=
|
||||
spReverse; // ustawienie flagi kierunku na podstawie wybranego segmentu
|
||||
sSpeedTable[iLast].iFlags |= spReverse; // ustawienie flagi kierunku
|
||||
// na podstawie wybranego
|
||||
// segmentu
|
||||
if (int(fLastDir) * sSpeedTable[iLast].iFlags < 0)
|
||||
fLastDir = -fLastDir;
|
||||
if (AIControllFlag) // dla AI na razie losujemy kierunek na kolejnym
|
||||
@@ -711,9 +728,10 @@ void TController::TableCheck(double fDistance)
|
||||
if (sSpeedTable[i].Update(&pos, &dir, len))
|
||||
{
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableCheck: Switch change. Delete next entries. (" + sSpeedTable[i].trTrack->NameGet() + ")");
|
||||
WriteLog("TableCheck: Switch change. Delete next entries. (" +
|
||||
sSpeedTable[i].trTrack->NameGet() + ")");
|
||||
int k = (iLast + 1) % iSpeedTableSize; // skanujemy razem z ostatni<6E> pozycj<63>
|
||||
for (int j = (i+1) % iSpeedTableSize; j != k; j = (j + 1) % iSpeedTableSize)
|
||||
for (int j = (i + 1) % iSpeedTableSize; j != k; j = (j + 1) % iSpeedTableSize)
|
||||
{ // kasowanie wszystkich rekord<72>w za zmienion<6F> zwrotnic<69>
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableCheck: Delete from table: " + sSpeedTable[j].GetName());
|
||||
@@ -735,16 +753,20 @@ void TController::TableCheck(double fDistance)
|
||||
{
|
||||
if (sSpeedTable[i].fDist < -fLength) // a sk<73>ad wyjecha<68> ca<63><61> d<>ugo<67>ci<63> poza
|
||||
{ // degradacja pozycji
|
||||
// WriteLog( "TableCheck: Track is behind. Delete from table: " + sSpeedTable[i].trTrack->NameGet());
|
||||
// WriteLog( "TableCheck: Track is behind. Delete from table: " +
|
||||
// sSpeedTable[i].trTrack->NameGet());
|
||||
sSpeedTable[i].iFlags &= ~spEnabled; // nie liczy si<73>
|
||||
}
|
||||
else if ((sSpeedTable[i].iFlags & 0xF0000028) ==
|
||||
spElapsed) // jest z ty<74>u (najechany) i nie jest zwrotnic<69> ani skrzy<7A>owaniem
|
||||
else if ((sSpeedTable[i].iFlags & 0xF0000028) == spElapsed) // jest z ty<74>u
|
||||
// (najechany) i nie
|
||||
// jest zwrotnic<69>
|
||||
// ani skrzy<7A>owaniem
|
||||
if (sSpeedTable[i].fVelNext < 0) // a nie ma ograniczenia pr<70>dko<6B>ci
|
||||
{
|
||||
sSpeedTable[i].iFlags =
|
||||
0; // to nie ma go po co trzyma<6D> (odtykacz usunie ze <20>rodka)
|
||||
// WriteLog("TableCheck: Track without speed. Delete from table: " + sSpeedTable[i].trTrack->NameGet());
|
||||
// WriteLog("TableCheck: Track without speed. Delete from table: " +
|
||||
// sSpeedTable[i].trTrack->NameGet());
|
||||
}
|
||||
}
|
||||
else if (sSpeedTable[i].iFlags & spEvent) // je<6A>li event
|
||||
@@ -756,7 +778,8 @@ void TController::TableCheck(double fDistance)
|
||||
sSpeedTable[i].fDist < -fLength)
|
||||
{ // poci<63>g staje zawsze, a samoch<63>d tylko je<6A>li nie przejedzie ca<63><61>
|
||||
// d<>ugo<67>ci<63> (mo<6D>e by<62> zaskoczony zmian<61>)
|
||||
// WriteLog("TableCheck: Event is behind. Delete from table: " + sSpeedTable[i].evEvent->asName);
|
||||
// WriteLog("TableCheck: Event is behind. Delete from table: " +
|
||||
// sSpeedTable[i].evEvent->asName);
|
||||
sSpeedTable[i].iFlags &= ~1; // degradacja pozycji dla samochodu;
|
||||
// semafory usuwane tylko przy sprawdzaniu,
|
||||
// bo wysy<73>aj<61> komendy
|
||||
@@ -798,7 +821,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
double a; // przyspieszenie
|
||||
double v; // pr<70>dko<6B><6F>
|
||||
double d; // droga
|
||||
double d_to_next_sem = 10000.0; //ustaiwamy na pewno dalej ni<6E> widzi AI
|
||||
double d_to_next_sem = 10000.0; // ustaiwamy na pewno dalej ni<6E> widzi AI
|
||||
TCommandType go = cm_Unknown;
|
||||
eSignNext = NULL;
|
||||
int i, k = iLast - iFirst + 1;
|
||||
@@ -831,15 +854,15 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
// ju<6A> semafora)
|
||||
#if LOGSTOPS
|
||||
WriteLog(pVehicle->asName + " as " + TrainParams->TrainName + ": at " +
|
||||
std::to_string(GlobalTime->hh) + ":" + std::to_string(GlobalTime->mm) +
|
||||
" skipped " + asNextStop); // informacja
|
||||
std::to_string(GlobalTime->hh) + ":" +
|
||||
std::to_string(GlobalTime->mm) + " skipped " +
|
||||
asNextStop); // informacja
|
||||
#endif
|
||||
fLastStopExpDist = mvOccupied->DistCounter + 0.250 +
|
||||
0.001 * fLength; // przy jakim dystansie (stanie
|
||||
// licznika) ma przesun<75><6E> na
|
||||
// nast<73>pny post<73>j
|
||||
TrainParams->UpdateMTable(
|
||||
GlobalTime->hh, GlobalTime->mm,
|
||||
TrainParams->UpdateMTable(GlobalTime->hh, GlobalTime->mm,
|
||||
asNextStop.substr(19, asNextStop.length()));
|
||||
TrainParams->StationIndexInc(); // przej<65>cie do nast<73>pnej
|
||||
asNextStop =
|
||||
@@ -853,8 +876,8 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
} // koniec obs<62>ugi przelotu na W4
|
||||
else
|
||||
{ // zatrzymanie na W4
|
||||
if (!eSignNext) //je<6A>li nie widzi nast<73>pnego sygna<6E>u
|
||||
eSignNext = sSpeedTable[i].evEvent; //ustawia dotychczasow<6F>
|
||||
if (!eSignNext) // je<EFBFBD>li nie widzi nast<73>pnego sygna<6E>u
|
||||
eSignNext = sSpeedTable[i].evEvent; // ustawia dotychczasow<6F>
|
||||
if (mvOccupied->Vel > 0.3) // je<6A>li jedzie (nie trzeba czeka<6B>, a<> si<73>
|
||||
// drgania wyt<79>umi<6D> - drzwi zamykane od 1.0)
|
||||
sSpeedTable[i].fVelNext = 0; // to b<>dzie zatrzymanie
|
||||
@@ -1000,7 +1023,9 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
// ma przesun<75><6E> na nast<73>pny post<73>j
|
||||
// Controlled-> //zapisa<73> odleg<65>o<EFBFBD><6F> do przejechania
|
||||
TrainParams->StationIndexInc(); // przej<65>cie do nast<73>pnej
|
||||
asNextStop = TrainParams->NextStop(); // pobranie kolejnego miejsca zatrzymania
|
||||
asNextStop =
|
||||
TrainParams
|
||||
->NextStop(); // pobranie kolejnego miejsca zatrzymania
|
||||
// TableClear(); //aby od nowa sprawdzi<7A>o W4 z inn<6E> nazw<7A> ju<6A> - to nie jest dobry pomys<79>
|
||||
#if LOGSTOPS
|
||||
WriteLog(pVehicle->asName + " as " + TrainParams->TrainName +
|
||||
@@ -1012,7 +1037,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
iDrivigFlags |= moveStopHere; // nie podje<6A>d<EFBFBD>a<EFBFBD> do semafora,
|
||||
// je<6A>li droga nie jest wolna
|
||||
else
|
||||
iDrivigFlags &= ~moveStopHere; //po czasie jed<65> dalej
|
||||
iDrivigFlags &= ~moveStopHere; // po czasie jed<65> dalej
|
||||
iDrivigFlags |= moveStopCloser; // do nast<73>pnego W4 podjecha<68>
|
||||
// blisko (z doci<63>ganiem)
|
||||
iDrivigFlags &= ~moveStartHorn; // bez tr<74>bienia przed odjazdem
|
||||
@@ -1075,15 +1100,18 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
if (sSpeedTable[i].fDist < 0.0 && sSemNext == &sSpeedTable[i])
|
||||
{
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableUpdate: semaphor " + sSemNext->GetName() + " passed by " + OwnerName());
|
||||
WriteLog("TableUpdate: semaphor " + sSemNext->GetName() + " passed by " +
|
||||
OwnerName());
|
||||
sSemNext = NULL; // je<6A>li min<69>li<6C>my semafor od ograniczenia to go kasujemy ze
|
||||
// zmiennej sprawdzaj<61>cej dla skanowania w prz<72>d
|
||||
}
|
||||
if (sSpeedTable[i].fDist < 0.0 && sSemNextStop == &sSpeedTable[i])
|
||||
{
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableUpdate: semaphor " + sSemNextStop->GetName() + " passed by " + OwnerName());
|
||||
sSemNextStop = NULL; // je<6A>li min<69>li<6C>my semafor od ograniczenia to go kasujemy ze
|
||||
WriteLog("TableUpdate: semaphor " + sSemNextStop->GetName() +
|
||||
" passed by " + OwnerName());
|
||||
sSemNextStop =
|
||||
NULL; // je<6A>li min<69>li<6C>my semafor od ograniczenia to go kasujemy ze
|
||||
// zmiennej sprawdzaj<61>cej dla skanowania w prz<72>d
|
||||
}
|
||||
if (sSpeedTable[i].fDist > 0.0 &&
|
||||
@@ -1096,7 +1124,8 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
// byl nowy to go dorzucamy do zmiennej, <20>eby ca<63>y
|
||||
// czas widzia<69> najbli<6C>szy
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableUpdate: Next semaphor: " + sSemNext->GetName() + " by " + OwnerName());
|
||||
WriteLog("TableUpdate: Next semaphor: " + sSemNext->GetName() + " by " +
|
||||
OwnerName());
|
||||
}
|
||||
if (!sSemNextStop || (sSemNextStop && sSemNextStop->fVelNext != 0 &&
|
||||
sSpeedTable[i].fVelNext == 0))
|
||||
@@ -1108,10 +1137,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
{ // w trybie poci<63>gowym: mo<6D>na przyspieszy<7A> do wskazanej pr<70>dko<6B>ci (po
|
||||
// zjechaniu z rozjazd<7A>w)
|
||||
v = -1.0; // ignorowa<77>?
|
||||
//TODO trzeba zmieni<6E> przypisywanie VelSignal na VelSignalLast
|
||||
// TODO trzeba zmieni<6E> przypisywanie VelSignal na VelSignalLast
|
||||
if (sSpeedTable[i].fDist < 0.0) // je<6A>li wska<6B>nik zosta<74> mini<6E>ty
|
||||
{
|
||||
VelSignalLast = v; //ustawienie pr<70>dko<6B>ci na -1
|
||||
VelSignalLast = v; // ustawienie pr<70>dko<6B>ci na -1
|
||||
// iStationStart=TrainParams->StationIndex; //zaktualizowa<77>
|
||||
// wy<77>wietlanie rozk<7A>adu
|
||||
}
|
||||
@@ -1149,10 +1178,12 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
else if (sSpeedTable[i].IsProperSemaphor(OrderCurrentGet()))
|
||||
{ // to semaphor
|
||||
if (sSpeedTable[i].fDist < 0)
|
||||
VelSignalLast = sSpeedTable[i].fVelNext; //mini<6E>ty daje pr<70>dko<6B><6F> obowi<77>zuj<75>c<EFBFBD>
|
||||
VelSignalLast =
|
||||
sSpeedTable[i].fVelNext; // mini<6E>ty daje pr<70>dko<6B><6F> obowi<77>zuj<75>c<EFBFBD>
|
||||
else
|
||||
{
|
||||
iDrivigFlags |= moveSemaphorFound; //je<6A>li z przodu to dajemy falg<6C>, <20>e jest
|
||||
iDrivigFlags |= moveSemaphorFound; // je<EFBFBD>li z przodu to dajemy falg<6C>, <20>e
|
||||
// jest
|
||||
d_to_next_sem = Min0R(sSpeedTable[i].fDist, d_to_next_sem);
|
||||
}
|
||||
if (sSpeedTable[i].fDist <= d_to_next_sem)
|
||||
@@ -1172,12 +1203,15 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
if (sSpeedTable[i].fSectionVelocityDist == 0.0)
|
||||
{
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableUpdate: Event is behind. SVD = 0: " + sSpeedTable[i].evEvent->asName);
|
||||
sSpeedTable[i].iFlags = 0; // je<6A>li punktowy to kasujemy i nie dajemy ograniczenia na sta<74>e
|
||||
WriteLog("TableUpdate: Event is behind. SVD = 0: " +
|
||||
sSpeedTable[i].evEvent->asName);
|
||||
sSpeedTable[i].iFlags =
|
||||
0; // je<6A>li punktowy to kasujemy i nie dajemy ograniczenia na sta<74>e
|
||||
}
|
||||
else if (sSpeedTable[i].fSectionVelocityDist < 0.0)
|
||||
{ // ograniczenie obowi<77>zuj<75>ce do nast<73>pnego
|
||||
if (sSpeedTable[i].fVelNext == Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) &&
|
||||
if (sSpeedTable[i].fVelNext ==
|
||||
Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) &&
|
||||
sSpeedTable[i].fVelNext != VelLimitLast)
|
||||
{ // je<6A>li ograniczenie jest mniejsze ni<6E> obecne to obowi<77>zuje od zaraz
|
||||
VelLimitLast = sSpeedTable[i].fVelNext;
|
||||
@@ -1186,40 +1220,48 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
{ // je<6A>li wi<77>ksze to musi wyjecha<68> za poprzednie
|
||||
VelLimitLast = sSpeedTable[i].fVelNext;
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableUpdate: Event is behind. SVD < 0: " + sSpeedTable[i].evEvent->asName);
|
||||
sSpeedTable[i].iFlags = 0; // wyjechali<6C>my poza poprzednie, mo<6D>na skasowa<77>
|
||||
WriteLog("TableUpdate: Event is behind. SVD < 0: " +
|
||||
sSpeedTable[i].evEvent->asName);
|
||||
sSpeedTable[i].iFlags =
|
||||
0; // wyjechali<6C>my poza poprzednie, mo<6D>na skasowa<77>
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // je<6A>li wi<77>ksze to ograniczenie ma swoj<6F> d<>ugo<67><6F>
|
||||
if (sSpeedTable[i].fVelNext == Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) &&
|
||||
if (sSpeedTable[i].fVelNext ==
|
||||
Global::Min0RSpeed(sSpeedTable[i].fVelNext, VelLimitLast) &&
|
||||
sSpeedTable[i].fVelNext != VelLimitLast)
|
||||
{ // je<6A>li ograniczenie jest mniejsze ni<6E> obecne to obowi<77>zuje od zaraz
|
||||
VelLimitLast = sSpeedTable[i].fVelNext;
|
||||
}
|
||||
else if (sSpeedTable[i].fDist < -fLength && sSpeedTable[i].fVelNext != VelLimitLast)
|
||||
else if (sSpeedTable[i].fDist < -fLength &&
|
||||
sSpeedTable[i].fVelNext != VelLimitLast)
|
||||
{ // je<6A>li wi<77>ksze to musi wyjecha<68> za poprzednie
|
||||
VelLimitLast = sSpeedTable[i].fVelNext;
|
||||
}
|
||||
else if (sSpeedTable[i].fDist < -fLength - sSpeedTable[i].fSectionVelocityDist)
|
||||
else if (sSpeedTable[i].fDist <
|
||||
-fLength - sSpeedTable[i].fSectionVelocityDist)
|
||||
{ //
|
||||
VelLimitLast = -1.0;
|
||||
if (Global::iWriteLogEnabled & 8)
|
||||
WriteLog("TableUpdate: Event is behind. SVD > 0: " + sSpeedTable[i].evEvent->asName);
|
||||
sSpeedTable[i].iFlags = 0; // wyjechali<6C>my poza poprzednie, mo<6D>na skasowa<77>
|
||||
WriteLog("TableUpdate: Event is behind. SVD > 0: " +
|
||||
sSpeedTable[i].evEvent->asName);
|
||||
sSpeedTable[i].iFlags =
|
||||
0; // wyjechali<6C>my poza poprzednie, mo<6D>na skasowa<77>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//sprawdzenie event<6E>w pasywnych przed nami
|
||||
// sprawdzenie event<6E>w pasywnych przed nami
|
||||
if ((mvOccupied->CategoryFlag & 1) ?
|
||||
sSpeedTable[i].fDist > pVehicles[0]->fTrackBlock - 20.0 :
|
||||
false) // jak sygna<6E> jest dalej ni<6E> zawalidroga
|
||||
v = 0.0; // to mo<6D>e by<62> podany dla tamtego: jecha<68> tak, jakby tam stop by<62>
|
||||
else
|
||||
{ // zawalidrogi nie ma (albo pojazd jest samochodem), sprawdzi<7A> sygna<6E>
|
||||
if (sSpeedTable[i].iFlags & spShuntSemaphor) // je<6A>li Tm - w zasadzie to sprawdzi<7A>
|
||||
if (sSpeedTable[i].iFlags &
|
||||
spShuntSemaphor) // je<6A>li Tm - w zasadzie to sprawdzi<7A>
|
||||
// komend<6E>!
|
||||
{ // je<6A>li podana pr<70>dko<6B><6F> manewrowa
|
||||
if ((OrderCurrentGet() & Obey_train) ? v == 0.0 : false)
|
||||
@@ -1250,13 +1292,17 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!(sSpeedTable[i].iFlags & spSectionVel)) //je<6A>li jaki<6B> event pasywny ale nie ograniczenie
|
||||
if (go == cm_Unknown) // je<6A>li nie by<62>o komendy wcze<7A>niej - pierwsza si<73> liczy
|
||||
else if (!(sSpeedTable[i].iFlags &
|
||||
spSectionVel)) // je<6A>li jaki<6B> event pasywny ale nie ograniczenie
|
||||
if (go ==
|
||||
cm_Unknown) // je<6A>li nie by<62>o komendy wcze<7A>niej - pierwsza si<73> liczy
|
||||
// - ustawianie VelSignal
|
||||
if (v < 0.0 ? true : v >= 1.0) // bo warto<74><6F> 0.1 s<>u<EFBFBD>y do hamowania tylko
|
||||
if (v < 0.0 ? true :
|
||||
v >= 1.0) // bo warto<74><6F> 0.1 s<>u<EFBFBD>y do hamowania tylko
|
||||
{
|
||||
go = cm_SetVelocity; // mo<6D>e odjecha<68>
|
||||
// Ra 2014-06: (VelSignal) nie mo<6D>e by<62> tu ustawiane, bo semafor mo<6D>e
|
||||
// Ra 2014-06: (VelSignal) nie mo<6D>e by<62> tu ustawiane, bo semafor
|
||||
// mo<6D>e
|
||||
// by<62> daleko
|
||||
// VelSignal=v; //nie do ko<6B>ca tak, to jest druga pr<70>dko<6B><6F>; -1 nie
|
||||
// wpisywa<77>...
|
||||
@@ -1270,11 +1316,13 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
if (sSpeedTable[i].iFlags & spEvent) // je<6A>li event
|
||||
if ((sSpeedTable[i].evEvent != eSignSkip) ?
|
||||
true :
|
||||
(sSpeedTable[i].fVelNext != 0.0)) // ale inny ni<6E> ten,
|
||||
(sSpeedTable[i].fVelNext !=
|
||||
0.0)) // ale inny ni<6E> ten,
|
||||
// na kt<6B>rym mini<6E>to
|
||||
// S1, chyba <20>e si<73>
|
||||
// ju<6A> zmieni<6E>o
|
||||
iDrivigFlags &= ~moveVisibility; // sygna<6E> zezwalaj<61>cy na
|
||||
iDrivigFlags &=
|
||||
~moveVisibility; // sygna<6E> zezwalaj<61>cy na
|
||||
// jazd<7A> wy<77><79>cza jazd<7A> na
|
||||
// widoczno<6E><6F> (S1 na SBL)
|
||||
|
||||
@@ -1288,12 +1336,15 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
eSignNext = sSpeedTable[i].evEvent; // dla informacji
|
||||
if (iDrivigFlags &
|
||||
moveStopHere) // je<6A>li ma sta<74>, dostaje komend<6E> od razu
|
||||
go = cm_Command; // komenda z kom<6F>rki, do wykonania po zatrzymaniu
|
||||
else if (sSpeedTable[i].fDist <= 20.0) // je<6A>li ma doci<63>gn<67><6E>, to niech
|
||||
go = cm_Command; // komenda z kom<6F>rki, do wykonania po
|
||||
// zatrzymaniu
|
||||
else if (sSpeedTable[i].fDist <=
|
||||
20.0) // je<6A>li ma doci<63>gn<67><6E>, to niech
|
||||
// doci<63>ga (moveStopCloser
|
||||
// dotyczy doci<63>gania do W4, nie
|
||||
// semafora)
|
||||
go = cm_Command; // komenda z kom<6F>rki, do wykonania po zatrzymaniu
|
||||
go = cm_Command; // komenda z kom<6F>rki, do wykonania po
|
||||
// zatrzymaniu
|
||||
}
|
||||
} // je<6A>li nie ma zawalidrogi
|
||||
} // je<6A>li event
|
||||
@@ -1369,7 +1420,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
(OrderCurrentGet() & Obey_train))
|
||||
VelSignalLast = -1.0; // je<6A>li mieli<6C>my ograniczenie z semafora i nie ma przed nami
|
||||
|
||||
if (VelSignalLast >= 0.0) //analiza spisanych z tabelki ogranicze<7A> i nadpisanie aktualnego
|
||||
if (VelSignalLast >= 0.0) // analiza spisanych z tabelki ogranicze<7A> i nadpisanie aktualnego
|
||||
fVelDes = Min0R(fVelDes, VelSignalLast);
|
||||
if (VelLimitLast >= 0.0)
|
||||
fVelDes = Min0R(fVelDes, VelLimitLast);
|
||||
@@ -1501,7 +1552,8 @@ TController::TController(bool AI, TDynamicObject *NewControll, bool InitPsyche,
|
||||
"Coupler.Force[N] TractionForce [kN] FrictionForce [kN] "
|
||||
"BrakeForce [kN] BrakePress [MPa] PipePress [MPa] "
|
||||
"MotorCurrent [A] MCP SCP BCP LBP DmgFlag Command CVal1 CVal2")
|
||||
.c_str() << "\r\n";
|
||||
.c_str()
|
||||
<< "\r\n";
|
||||
#endif
|
||||
#if LOGPRESS == 1
|
||||
LogFile << string("t\tVel\tAcc\tPP\tVVP\tBP\tBVP\tCVP").c_str() << "\n";
|
||||
@@ -1909,7 +1961,8 @@ bool TController::CheckVehicles(TOrders user)
|
||||
}
|
||||
else if (OrderCurrentGet() & (Shunt | Connect))
|
||||
{
|
||||
Lights(16, (pVehicles[1]->MoverParameters->CabNo) ?
|
||||
Lights(16,
|
||||
(pVehicles[1]->MoverParameters->CabNo) ?
|
||||
1 :
|
||||
0); //<2F>wiat<61>a manewrowe (Tb1) na poje<6A>dzie z nap<61>dem
|
||||
if (OrderCurrentGet() & Connect) // je<6A>li <20><>czenie, skanowa<77> dalej
|
||||
@@ -2173,9 +2226,7 @@ void TController::SetDriverPsyche()
|
||||
|
||||
bool TController::PrepareEngine()
|
||||
{ // odpalanie silnika
|
||||
bool OK = false,
|
||||
voltfront = false,
|
||||
voltrear = false;
|
||||
bool OK = false, voltfront = false, voltrear = false;
|
||||
LastReactionTime = 0.0;
|
||||
ReactionTime = PrepareTime;
|
||||
iDrivigFlags |= moveActive; // mo<6D>e skanowa<77> sygna<6E>y i reagowa<77> na komendy
|
||||
@@ -2596,7 +2647,8 @@ bool TController::IncSpeed()
|
||||
break;
|
||||
case ElectricInductionMotor:
|
||||
if (!mvControlling->FuseFlag)
|
||||
if (Ready || (iDrivigFlags & movePress) || (mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)}
|
||||
if (Ready || (iDrivigFlags & movePress) ||
|
||||
(mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)}
|
||||
{
|
||||
OK = mvControlling->IncMainCtrl(1);
|
||||
}
|
||||
@@ -2953,7 +3005,8 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne
|
||||
if (ConversionError == -8)
|
||||
ErrorLog("Missed timetable: " + NewCommand);
|
||||
WriteLog("Cannot load timetable file " + NewCommand + "\r\nError " +
|
||||
std::to_string(ConversionError) + " in position " + std::to_string(TrainParams->StationCount));
|
||||
std::to_string(ConversionError) + " in position " +
|
||||
std::to_string(TrainParams->StationCount));
|
||||
NewCommand = ""; // puste, dla wymiennej tekstury
|
||||
}
|
||||
else
|
||||
@@ -2967,20 +3020,21 @@ bool TController::PutCommand(std::string NewCommand, double NewValue1, double Ne
|
||||
NewCommand = Global::asCurrentSceneryPath + NewCommand + ".wav"; // na razie jeden
|
||||
if (FileExists(NewCommand))
|
||||
{ // wczytanie d<>wi<77>ku odjazdu podawanego bezpo<70>renido
|
||||
tsGuardSignal = new TTextSound(NewCommand.c_str(), 30, pVehicle->GetPosition().x,
|
||||
pVehicle->GetPosition().y, pVehicle->GetPosition().z,
|
||||
false);
|
||||
tsGuardSignal =
|
||||
new TTextSound(NewCommand.c_str(), 30, pVehicle->GetPosition().x,
|
||||
pVehicle->GetPosition().y, pVehicle->GetPosition().z, false);
|
||||
// rsGuardSignal->Stop();
|
||||
iGuardRadio = 0; // nie przez radio
|
||||
}
|
||||
else
|
||||
{
|
||||
NewCommand = NewCommand.insert(NewCommand.find_last_of("."),"radio"); // wstawienie przed kropk<70>
|
||||
NewCommand = NewCommand.insert(NewCommand.find_last_of("."),
|
||||
"radio"); // wstawienie przed kropk<70>
|
||||
if (FileExists(NewCommand))
|
||||
{ // wczytanie d<>wi<77>ku odjazdu w wersji radiowej (s<>ycha<68> tylko w kabinie)
|
||||
tsGuardSignal = new TTextSound(NewCommand.c_str(), -1, pVehicle->GetPosition().x,
|
||||
pVehicle->GetPosition().y, pVehicle->GetPosition().z,
|
||||
false);
|
||||
tsGuardSignal = new TTextSound(
|
||||
NewCommand.c_str(), -1, pVehicle->GetPosition().x,
|
||||
pVehicle->GetPosition().y, pVehicle->GetPosition().z, false);
|
||||
iGuardRadio = iRadioChannel;
|
||||
}
|
||||
}
|
||||
@@ -3524,7 +3578,7 @@ bool TController::UpdateSituation(double dt)
|
||||
double scanmax = (mvOccupied->Vel > 5.0) ?
|
||||
400 + fBrakeDist :
|
||||
30.0 * fDriverDist; // 1500m dla stoj<6F>cych poci<63>g<EFBFBD>w; Ra 2015-01: przy
|
||||
//double scanmax = Max0R(400 + fBrakeDist, 1500);
|
||||
// double scanmax = Max0R(400 + fBrakeDist, 1500);
|
||||
// d<>u<EFBFBD>szej drodze skanowania AI je<6A>dzi spokojniej
|
||||
// 2. Sprawdzi<7A>, czy tabelka pokrywa za<7A>o<EFBFBD>ony odcinek (nie musi, je<6A>li jest STOP).
|
||||
// 3. Sprawdzi<7A>, czy trajektoria ruchu przechodzi przez zwrotnice - je<6A>li tak, to sprawdzi<7A>,
|
||||
@@ -3884,7 +3938,8 @@ bool TController::UpdateSituation(double dt)
|
||||
case Change_direction | Connect: // zmiana kierunku podczas pod<6F><64>czania
|
||||
if (OrderList[OrderPos] != Obey_train) // spokojne manewry
|
||||
{
|
||||
VelSignal = Global::Min0RSpeed(VelSignal, 40); // je<6A>li manewry, to ograniczamy pr<70>dko<6B><6F>
|
||||
VelSignal =
|
||||
Global::Min0RSpeed(VelSignal, 40); // je<6A>li manewry, to ograniczamy pr<70>dko<6B><6F>
|
||||
if (AIControllFlag)
|
||||
{ // to poni<6E>ej tylko dla AI
|
||||
if (iVehicleCount >= 0) // je<6A>li jest co odczepi<70>
|
||||
@@ -4018,7 +4073,8 @@ bool TController::UpdateSituation(double dt)
|
||||
// nast<73>pnie ograniczana
|
||||
if (TrainParams) // je<6A>li ma rozk<7A>ad
|
||||
if (TrainParams->TTVmax > 0.0) // i ograniczenie w rozk<7A>adzie
|
||||
VelDesired = Global::Min0RSpeed(VelDesired,
|
||||
VelDesired = Global::Min0RSpeed(
|
||||
VelDesired,
|
||||
TrainParams->TTVmax); // to nie przekracza<7A> rozkladowej
|
||||
SetDriverPsyche(); // ustawia AccPreferred (potrzebne tu?)
|
||||
// Ra: odczyt (ActualProximityDist), (VelNext) i (AccPreferred) z tabelki pr<70>dkosci
|
||||
@@ -4086,7 +4142,9 @@ bool TController::UpdateSituation(double dt)
|
||||
// ma taboru do pod<6F><64>czenia
|
||||
// Ra 2F1H: z tym (fTrackBlock) to nie jest najlepszy pomys<79>, bo lepiej by
|
||||
// by<62>o por<6F>wna<6E> z odleg<65>o<EFBFBD>ci<63> od sygnalizatora z przodu
|
||||
if ((OrderList[OrderPos] & Connect) ? (pVehicles[0]->fTrackBlock > 2000 || pVehicles[0]->fTrackBlock > FirstSemaphorDist) :
|
||||
if ((OrderList[OrderPos] & Connect) ?
|
||||
(pVehicles[0]->fTrackBlock > 2000 ||
|
||||
pVehicles[0]->fTrackBlock > FirstSemaphorDist) :
|
||||
true)
|
||||
if ((comm = BackwardScan()) != cm_Unknown) // je<6A>li w drug<75> mo<6D>na jecha<68>
|
||||
{ // nale<6C>y sprawdza<7A> odleg<65>o<EFBFBD><6F> od znalezionego sygnalizatora,
|
||||
@@ -4226,16 +4284,18 @@ bool TController::UpdateSituation(double dt)
|
||||
VelDesired = 0.0; // jak ma czeka<6B>, to nie ma jazdy
|
||||
// else if (VelSignal<0)
|
||||
// VelDesired=fVelMax; //ile fabryka dala (Ra: uwzgl<67>dione wagony)
|
||||
else if (VelSignal >= 0) // je<6A>li sk<73>ad by<62> zatrzymany na pocz<63>tku i teraz ju<6A> mo<6D>e jecha<68>
|
||||
else if (VelSignal >=
|
||||
0) // je<6A>li sk<73>ad by<62> zatrzymany na pocz<63>tku i teraz ju<6A> mo<6D>e jecha<68>
|
||||
VelDesired = Global::Min0RSpeed(VelDesired, VelSignal);
|
||||
|
||||
if (mvOccupied->RunningTrack.Velmax >=
|
||||
0) // ograniczenie pr<70>dko<6B>ci z trajektorii ruchu
|
||||
VelDesired =
|
||||
Global::Min0RSpeed(VelDesired,
|
||||
VelDesired = Global::Min0RSpeed(
|
||||
VelDesired,
|
||||
mvOccupied->RunningTrack.Velmax); // uwaga na ograniczenia szlakowej!
|
||||
if (VelforDriver >= 0) // tu jest zero przy zmianie kierunku jazdy
|
||||
VelDesired = Global::Min0RSpeed(VelDesired, VelforDriver); // Ra: tu mo<6D>e by<62> 40, je<6A>li
|
||||
VelDesired =
|
||||
Global::Min0RSpeed(VelDesired, VelforDriver); // Ra: tu mo<6D>e by<62> 40, je<6A>li
|
||||
// mechanik nie ma znajomo<6D>ci
|
||||
// szlaaku, albo kierowca je<6A>dzi
|
||||
// 70
|
||||
@@ -4247,7 +4307,8 @@ bool TController::UpdateSituation(double dt)
|
||||
TrainParams
|
||||
->TTVmax); // jesli nie spozniony to nie przekracza<7A> rozkladowej
|
||||
if (VelDesired > 0.0)
|
||||
if ((sSemNext && sSemNext->fVelNext != 0.0) || (iDrivigFlags & moveStopHere)==0)
|
||||
if ((sSemNext && sSemNext->fVelNext != 0.0) ||
|
||||
(iDrivigFlags & moveStopHere) == 0)
|
||||
{ // je<6A>li mo<6D>na jecha<68>, to odpali<6C> d<>wi<77>k kierownika oraz zamkn<6B><6E> drzwi w
|
||||
// sk<73>adzie, je<6A>li nie mamy czeka<6B> na sygna<6E> te<74> trzeba odpali<6C>
|
||||
|
||||
@@ -4536,8 +4597,8 @@ bool TController::UpdateSituation(double dt)
|
||||
WriteLog("Dist=" + FloatToStrF(ActualProximityDist, ffFixed, 7, 1) +
|
||||
", VelDesired=" + FloatToStrF(VelDesired, ffFixed, 7, 1) +
|
||||
", AccDesired=" + FloatToStrF(AccDesired, ffFixed, 7, 3) +
|
||||
", VelSignal=" + AnsiString(VelSignal) + ", VelNext=" +
|
||||
AnsiString(VelNext));
|
||||
", VelSignal=" + AnsiString(VelSignal) +
|
||||
", VelNext=" + AnsiString(VelNext));
|
||||
#endif
|
||||
if (AccDesired > 0.1)
|
||||
if (vel < 10.0) // Ra 2F1H: je<6A>li pr<70>dko<6B><6F> jest ma<6D>a, a mo<6D>na przyspiesza<7A>,
|
||||
@@ -4648,7 +4709,8 @@ bool TController::UpdateSituation(double dt)
|
||||
(AbsAccS >
|
||||
AccDesired + 0.05))) // u g<>ry ustawia si<73> hamowanie na fAccThreshold
|
||||
// if not MinVelFlag)
|
||||
if (fBrakeTime < 0 ? true : (AccDesired < fAccGravity - 0.3) ||
|
||||
if (fBrakeTime < 0 ? true :
|
||||
(AccDesired < fAccGravity - 0.3) ||
|
||||
(mvOccupied->BrakeCtrlPos <= 0))
|
||||
if (!IncBrake()) // je<6A>li up<75>yn<79><6E> czas reakcji hamulca, chyba <20>e
|
||||
// nag<61>e albo luzowa<77>
|
||||
@@ -4683,8 +4745,8 @@ bool TController::UpdateSituation(double dt)
|
||||
// Mietek-end1
|
||||
SpeedSet(); // ci<63>gla regulacja pr<70>dko<6B>ci
|
||||
#if LOGVELOCITY
|
||||
WriteLog("BrakePos=" + AnsiString(mvOccupied->BrakeCtrlPos) + ", MainCtrl=" +
|
||||
AnsiString(mvControlling->MainCtrlPos));
|
||||
WriteLog("BrakePos=" + AnsiString(mvOccupied->BrakeCtrlPos) +
|
||||
", MainCtrl=" + AnsiString(mvControlling->MainCtrlPos));
|
||||
#endif
|
||||
|
||||
/* //Ra: mamy teraz wska<6B>nik na cz<63>on silnikowy, gorzej jak s<> dwa w
|
||||
@@ -4937,10 +4999,10 @@ void TController::OrdersInit(double fVel)
|
||||
{
|
||||
t = TrainParams->TimeTable + i;
|
||||
if (DebugModeFlag) // normalnie nie ma po co tego wypisywa<77>
|
||||
WriteLog( t->StationName + " " + std::to_string(t->Ah) + ":" +
|
||||
WriteLog(t->StationName + " " + std::to_string(t->Ah) + ":" +
|
||||
std::to_string(t->Am) + ", " + std::to_string(t->Dh) + ":" +
|
||||
std::to_string(t->Dm) + " " + t->StationWare);
|
||||
if( t->StationWare.find('@') != std::string::npos )
|
||||
if (t->StationWare.find('@') != std::string::npos)
|
||||
{ // zmiana kierunku i dalsza jazda wg rozk<7A>adu
|
||||
if (iDrivigFlags & movePushPull) // SZT r<>wnie<69>! SN61 zale<6C>nie od wagon<6F>w...
|
||||
{ // je<6A>li sk<73>ad zespolony, wystarczy zmieni<6E> kierunek jazdy
|
||||
@@ -5026,7 +5088,7 @@ bool TController::BackwardTrackBusy(TTrack *Track)
|
||||
return false; // wolny
|
||||
};
|
||||
|
||||
TEvent * TController::CheckTrackEventBackward(double fDirection, TTrack *Track)
|
||||
TEvent *TController::CheckTrackEventBackward(double fDirection, TTrack *Track)
|
||||
{ // sprawdzanie eventu w torze, czy jest sygna<6E>owym - skanowanie do ty<74>u
|
||||
TEvent *e = (fDirection > 0) ? Track->evEvent2 : Track->evEvent1;
|
||||
if (e)
|
||||
@@ -5036,8 +5098,8 @@ TEvent * TController::CheckTrackEventBackward(double fDirection, TTrack *Track)
|
||||
return NULL;
|
||||
};
|
||||
|
||||
TTrack * TController::BackwardTraceRoute(double &fDistance, double &fDirection,
|
||||
TTrack *Track, TEvent *&Event)
|
||||
TTrack *TController::BackwardTraceRoute(double &fDistance, double &fDirection, TTrack *Track,
|
||||
TEvent *&Event)
|
||||
{ // szukanie sygnalizatora w kierunku przeciwnym jazdy (eventu odczytu kom<6F>rki pami<6D>ci)
|
||||
TTrack *pTrackChVel = Track; // tor ze zmian<61> pr<70>dko<6B>ci
|
||||
TTrack *pTrackFrom; // odcinek poprzedni, do znajdywania ko<6B>ca dr<64>g
|
||||
|
||||
28
Driver.h
28
Driver.h
@@ -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
|
||||
@@ -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
|
||||
@@ -251,7 +253,7 @@ class TController
|
||||
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
|
||||
public:
|
||||
@@ -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,8 +373,8 @@ 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 *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();
|
||||
|
||||
824
Globals.cpp
824
Globals.cpp
File diff suppressed because it is too large
Load Diff
@@ -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];
|
||||
|
||||
64
Train.h
64
Train.h
@@ -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();
|
||||
};
|
||||
|
||||
@@ -102,16 +102,15 @@ class TTrain
|
||||
bool LoadMMediaFile(std::string const &asFileName);
|
||||
PyObject *GetTrainState();
|
||||
|
||||
private:
|
||||
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 );
|
||||
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;
|
||||
@@ -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;
|
||||
@@ -396,20 +395,21 @@ 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>
|
||||
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
|
||||
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;
|
||||
@@ -424,11 +424,11 @@ private:
|
||||
{
|
||||
return iRadioChannel;
|
||||
};
|
||||
inline TDynamicObject * Dynamic()
|
||||
inline TDynamicObject *Dynamic()
|
||||
{
|
||||
return DynamicObject;
|
||||
};
|
||||
inline TMoverParameters * Controlled()
|
||||
inline TMoverParameters *Controlled()
|
||||
{
|
||||
return mvControlled;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user