PDA

Просмотр полной версии : АЛСН


MATRIXXX
20.02.2009, 22:13
Парни такая тема уже была но что то её не видно! Хочу вывести сигналы АЛСН с MSTS на реальный АЛСН с локомотива через USB, кто может пробовал что подскажите!какая схема нужна и вообще что и как!

Aleks
21.02.2009, 14:00
Для этого нужно решить три задачи:
1. Получить информацию о показании АЛСН из памяти игры программным путем.
2. Передать эту информацию на какое-либо внешнее устройство (пины LPT порта или спец. интерфейсная плата).
3. Преобразовать полученный сигнал в зажигание огня на индикаторе АЛСН.

По первому пункту: программно вытащить из памяти игры значение SIGASP впередистоящего светофора - не проблема. Используем функцию ReadProcessMemory(), адерс для SIGAPS 0x84af46, значение типа int.

Передать информацию тоже не сложно. Можно использовать простую запись на пины порта LPT. Можно девайсы посложнее:
LPT: http://www.chip-dip.ru/product0/2362.aspx
USB: http://www.chip-dip.ru/product0/937406537.aspx
Все это дело программируется достаточно просто. Еще советую сайтик http://www.pcports.ru, тут много полезного про вывод информации из компьютера на внешние устройства.

Третий пункт. Тут все совсем просто и зависит от умения держать паяльник и от конкретных дейталей, имеющихся в наличии.


P.S. По подобной схеме у меня прекрасно работает, подключенная к МСТС, кабина от вагона типа Е: http://www.trainsim.ru/forum/showthread.php?t=4783&page=4

MATRIXXX
22.02.2009, 11:41
По первому пункту: программно вытащить из памяти игры значение SIGASP впередистоящего светофора - не проблема. Используем функцию ReadProcessMemory(), адерс для SIGAPS 0x84af46, значение типа int.

Опиши подробней пожалуйста!

К сожелению не умею но придётся научиться!

Aleks
22.02.2009, 12:44
Программировать на C++ умеешь? Тогда вечером или завтра напишу код для этого дела.

Aleks
24.02.2009, 20:33
Опиши подробней пожалуйста!
Читаем из памяти с помощью функции:
ReadProcessMemory(hProcess, (LPCVOID)pSigAsp, &SigAsp, 4, NULL);
где
DWORD pSigAsp = 0x84af46;
SigAsp - переменная типа int, в которую записывается прочитанное значение.

hProcess получаем следующим образом:
hProcess = OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, dwProcessID);


Для получения ProcessID по имени exe-файла используем следующие функции:

bool GetProcessByExeName(void)
{
HANDLE hProcessSnap;
PROCESSENTRY32 pe32 = {0};

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
return false;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap, &pe32))
{
do {
if(CompName(pe32.szExeFile, ExeName)) // Сравнение имени процесса с ExeName
{
dwProcessID = pe32.th32ProcessID; // Возврат ID найденного процесса
CloseHandle(hProcessSnap);
return true;
}
} while(Process32Next(hProcessSnap, &pe32));
}
CloseHandle(hProcessSnap);
return false;
}

// Сравнение именен процессов
bool CompName(char *Name, char *exeName)
{
while (*Name && *exeName)
{
if ( toupper(*Name) != toupper(*exeName) )
{
return false;
}
Name++;
exeName++;
}
return !(*Name || *exeName);
}

Вроде разобраться можно.

MATRIXXX
24.02.2009, 21:22
Слушай а поповоду вывода с компа своими руками что можно смострячить?

Aleks
24.02.2009, 21:47
Сайт http://www.pcports.ru/ тебе в помощь. Глянь статьи про LPT-порт. Там все очень просто.

MATRIXXX
24.02.2009, 22:08
Слушай покупать не хочу хочу сам спаять где достать схему и какие там чипы стоят и тд!?

Aleks
24.02.2009, 22:20
Нафига чипы? Вот способ управления светодиодами. Осталось только развязку транзисторную сделать и можно лампами управлять.
http://www.pcports.ru/articles/6.php

MATRIXXX
24.02.2009, 22:30
Сё кажись просёк фишку! Спасибо Aleks

DeBUG
24.02.2009, 23:51
Купите готовое устройство обмена данных с внешним УД по средством УСБ порта и адаптируйте под свои нужды.
Искать можно по инету или на ближайшем развале радио деталей.с Как правило в комплект входит программа(интерфейс) командного управления.

RUSHPIL
28.02.2009, 02:46
Зачем покупать,если можно самому изготовить и с меньшими затратами;)
Тоже штука заинтересовала.Самому изготовить печатную плату,все спаять-не проблема,а вот софт-это тяжко для меня.Matrixхx,если сварганишь софт,дай знать,плиз.Буду очень благодарен.

Сибиряк
28.02.2009, 05:35
А возможно ли сделаьть так, чтоб ПБ светился огням?
http://s43.radikal.ru/i102/0902/b5/dd8f16e79610.jpg

Ace Hard
28.02.2009, 10:37
Купите готовое устройство обмена данных с внешним УД по средством УСБ порта и адаптируйте под свои нужды.
Искать можно по инету или на ближайшем развале радио деталей.с Как правило в комплект входит программа(интерфейс) командного управления.
По-подробнее, пожалуйста!

DeBUG
28.02.2009, 20:40
По-подробнее, пожалуйста!

Есть микропроцессорные блоки для управления оборудованием путем командного ввода с компьютера. Комп - микропроцессор - с - устройства действия. Модуль имеет шину управления. К шине подключаются съёмники команд. На шину подключаеться от 250 - 394 съёмников, а к ним УД. Я такое видел, когда готовили линию станков по обработке металла. Только это все импортное.

Apofis
06.03.2009, 12:03
меня интерисует одно почему нет свистка эпк при смене огней алсн ктонибудь может скрипт написать а то както не реально

Colonel_Abel
06.03.2009, 12:20
меня интерисует одно почему нет свистка эпк при смене огней алсн ктонибудь может скрипт написать а то както не реально

Вот возьмите и напишите. :cool:

Apofis
06.03.2009, 12:22
если`б умел то написал бы