![]() |
![]() |
![]() |
#1 |
Матёрый пользователь
Регистрация: 18.02.2008
Сообщений: 8,750
Вы сказали Спасибо: 1,426
Поблагодарили 2,398 раз(а) в 1,348 сообщениях
![]() |
![]()
Блог Combine'а полугодовой давности, думаю, многие знают. http://www.railunion.net/blog/AlexanderG/1_b-56.html
И то, что там дело стало, все тоже знают. Хочу также сообщить, что у меня на данный момент дело тоже встало. Но на несколько другой ноте. Итак, просматривая который раз МСТСовский раздел о новых возможностях ленты, Вовчик подумал - а у нас-то почему не получается? Ведь "ленту" (т.е. прогу-чит, получающую информацию из определённых адресов памяти, как правило для ж-д симов) для ТРС ещё некто ИА-ИА пытался делать. Но у него не удалось организовать запись информации вовнутрь трс. Следующей была попытка Combine'a, но в его алгоритме почему-то не удалось достичь высоких скоростей передачи. Обсуждение подробно описано в вышеприведённом блоге, так что при задании вопросов настоятельно советую проверить наличие ответов там. Ну Вовчик и решил написать прогу, в дальней перспективе делающую то же самое, что прога Combine'а, т.е. обеспечивающую связь клиентского/серверного приложения с ТРС через некие адреса памяти. Аналогов в сети довольно много, алгоритм обнаружения всех страниц памяти был скопирован на одном из программистских форумов (и затем немного подправлен), а затем алгоритм поиска всех имеющихся строк с заданным содержимым. Так как Вовчик на тот момент забыл ассемблер почти полностью, оставил эту часть кода на Си. Поэтому сканирование 600Мб виртуальной памяти (всего 512 Мб ОЗУ ![]() В результате 10 мая была получена прога, получающая адреса переменных, совпадающие с именами из найденных куда более совершенной прогой ArtMoney ![]() Затем Вовчик принялся за главное - сделал интерфейс между трс и прогой. Для этого в ТРС, после запуска сессии со специальным вагоном в одном из поездов, скриптом этого вагона создавались 2 строки, с тем самым содержимым ("499949...949994"). Затем по нажатию кнопки пользователем начиналось сканирование памяти на наличие этих строк. В результате получался массив из 2-36 адресов, среди которых 2 были вагона. Процесс продолжался от 40 до 90 секунд, ИМХО из-за кривизны рук Вовчика и неиспользования ассемблера. Далее нажатие по одной из ссылок "в свойствах"(в браузере view detailes), благодаря которому обе подчинённые вагону строки изменяли 5й символ. Одна из них - на "I", другая - на "O" (input-output), причём оба понятия относятся к ТРС, а не к проге. Далее нажималась кнопка в проге, обработка нажатия которой находила эти самые нужные буквы, и сохраняла адреса этих двух строк. В результате мы получили то же самое, что создатели лентописцев в МСТС - нашли нужные нам отверстия для управления игрой. А далее Вовчик подсоединил строку "output" из трс к генератору случайных чисел (внутри скрипта), а в проге - закоротил выход и вход (правда, там предварительный сдвиг фаз делается ![]() Поиск новых значений организован в ТРС на двух thread'ах, в проге - на одном таймере. Алгоритм подтверждения работает примерно так (показано начало строки, * - любые символы) для строки output 400***** - скрипту вагона разрешено писать; если прога увидела в 3 символе '0', то чтения не делает Когда вагон дописывает строку до конца, он меняет 3 символ на 'W', и получается строка 40W**** - здесь W означает не "запись", а "запись закончилась"; если прога нашла такой символ, то она считывает строку, по окончании меняя W обратно на 0. Скрипт ничего при этом не пишет. для строки input - аналогично 400***** - проге запрещено писать, скрипт строку ещё считывает (потом меняет на R) 4R0**** - прога пишет, скрипт ничего не читает В результате 14 мая почти ровно в 18-00 эта конструкция успешно заработала. Затем длина кодируемых строк была увеличена до 2001 символа, и было проведено несколько тестов на акелловской 2009, на карте tidewater, где были проложены комбайновские рельсы. Перед одним из тестов ![]() В проге перед этим сделал дополнительный таймер, чтоб считал число переданных строк в секунду. Эти числа (левое - для отданных трсом, правое - для полученных трсом данных) видно на скрине. Заметте, 7 строк по 2001 символу по 1 байту в секунду = 7 строк по 2001 символу по 8 бит в секунду ~ 110 кБит/секунду. В обе стороны. Одновременно. Для мульта хватит? Мне кажется что да. Учитывая что Conter-Strike требует около 16-32 кБит/секунду. Хотя конечно процессе игры производительность падала, но, замечу, число переданных строк в секунду никогда не было меньше 3 (40-50кБит/с) в обе стороны (несмотря на fps 3 на некоторых участках (а вообще 6-10), как-никак комп одноядерка на 2ГГц и памяти 512 Мб) Ну и оставлю я этот вариант опенсорс (под visual studio 8) + вагон со скриптом. Думаю, другим авторам паровозных примочек к компу и мультиплееров для изучения подойдёт, хотя пока это прога "г* на палочке с хвостиком". http://ifolder.ru/17712909
__________________
местный зомбяк |
![]() |
![]() |
![]() |
|
Яndex
Спонсор
Регистрация: 01.01.2007
Сообщения: 500
Реклама показывается изредка по случайному принципу |
![]() |
![]() |
#2 |
Матёрый пользователь
Регистрация: 18.02.2008
Сообщений: 8,750
Вы сказали Спасибо: 1,426
Поблагодарили 2,398 раз(а) в 1,348 сообщениях
![]() |
![]()
да, в отличии от комбайновского варианта, у меня длина сообщения фиксирована. У данной проги 2001 charом. Хотя можно любую другую зафиксировать.
__________________
местный зомбяк |
![]() |
![]() |
![]() |
#3 | ||||||
Матёрый пользователь
Регистрация: 30.08.2007
Адрес: Московская область, 36км
Сообщений: 3,620
Вы сказали Спасибо: 263
Поблагодарили 304 раз(а) в 172 сообщениях
![]() |
![]() Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
||||||
![]() |
![]() |
![]() |
#4 |
Матёрый пользователь
|
![]()
Эй, про рэйлдрайверы и расширенный ввод с клавиатуры не забываем! И возможность продвинутого физического движка вне ТРСа.
Трам, ну есть же уже готовый нормальный формат: <маркеры><флаг><количество строк>[<длина i-той строки><i-тая строка>] Зачем выдумывать ненужный двустрочный формат, в два раза более глючный? Судя по тому, что направлением интересуются, работа будет продолжена. |
![]() |
![]() |
![]() |
#5 | |||
Матёрый пользователь
Регистрация: 18.02.2008
Сообщений: 8,750
Вы сказали Спасибо: 1,426
Поблагодарили 2,398 раз(а) в 1,348 сообщениях
![]() |
![]() Цитата:
Цитата:
И не понимаю, зачем тебе 2000 байт на сообщение для пульта? Цитата:
Флаги сделать всегда можно, только возиться с ними в трсе прийдётся исключительно в виде символов. Для проги, которая создана за одну неделю знакомства с системным программированием под windows, и созданную исключительно для тестирования скорости двухсторонней передачи программой-недрайвером. Поэтому и нереализована здесь переменная длина строки (но естественно меньше некого предела, но никак не 4Гб), хотя, естественно, она необходима. Для мульта я бы предложил форму <флаги><длина строки>[<адресат>, ]
__________________
местный зомбяк Последний раз редактировалось TRam_; 15.05.2010 в 01:12. |
|||
![]() |
![]() |
![]() |
#6 | |
Матёрый пользователь
|
![]()
А то, что у тебя получается 5 МБ/с. Я не хочу ждать при смене адреса две минуты пока вновь произойдет поиск и не заработает мой внешний пульт и отомрет управление с клавиатуры, если что.
Цитата:
А я не понимаю, зачем сейчас выдумывать для сверхполезной фичи ограничения в стиле "64 КБайт хватит для каждого" © Не могут они различаться, у тебя у самого получилось 7 и 7, 7 = 7 начиная с начала исчисления. Вот еще, для мульта писать отдельный код в драйвере. Последний раз редактировалось genesis; 15.05.2010 в 01:18. |
|
![]() |
![]() |
![]() |
#7 | ||||
Матёрый пользователь
Регистрация: 18.02.2008
Сообщений: 8,750
Вы сказали Спасибо: 1,426
Поблагодарили 2,398 раз(а) в 1,348 сообщениях
![]() |
![]() Цитата:
Цитата:
Цитата:
Цитата:
__________________
местный зомбяк Последний раз редактировалось TRam_; 15.05.2010 в 01:23. |
||||
![]() |
![]() |
![]() |
#8 | ||
Матёрый пользователь
|
![]() Цитата:
![]() И то, сколько параметров окружающей среды нужно передавать тебе известно? Ветер, тип путей, номер пути, сигнал светофора, показания приборов... Нам неизвестно число, неизвестны пределы. Цитата:
![]() А где ты здесь видишь профессиональных программистов? Для того, чтобы прочитать соответствующие статьи в википедии и скачать пару книжек не требуется нотариально заверенный скриншот диплома о высшем образовании в области информационных технологий. Последний раз редактировалось genesis; 15.05.2010 в 01:34. |
||
![]() |
![]() |
![]() |
#9 | ||
Матёрый пользователь
Регистрация: 18.02.2008
Сообщений: 8,750
Вы сказали Спасибо: 1,426
Поблагодарили 2,398 раз(а) в 1,348 сообщениях
![]() |
![]() Цитата:
Цитата:
__________________
местный зомбяк Последний раз редактировалось TRam_; 15.05.2010 в 01:38. |
||
![]() |
![]() |
![]() |
#10 | |
Матёрый пользователь
|
![]() Цитата:
![]() Решение пневматических цепей по моей задумке требует решения трех матриц общего вида за цикл, размерность равна числу точек в цепи. Отдельно расчет ТМ каждый кадр, это проще, т.к. стандартный трехдиагональный вид, но, возможно, потребуется делать это несколько раз за кадр (явная схема), плюс захват ударных волн. Электрические цепи тоже не легкие, тоже матрицы, общего вида, если повезет, то симметричная, правда. А тут еще динамика, и все дела, т. е. объемы вычислений не для скриптов, как бы ![]() Последний раз редактировалось genesis; 15.05.2010 в 01:50. |
|
![]() |
![]() |
![]() |
#11 | ||||||
Матёрый пользователь
Регистрация: 30.08.2007
Адрес: Московская область, 36км
Сообщений: 3,620
Вы сказали Спасибо: 263
Поблагодарили 304 раз(а) в 172 сообщениях
![]() |
![]() Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
P.S. Интерфейс программки напомнил это: ![]() Последний раз редактировалось Combine; 15.05.2010 в 02:12. |
||||||
![]() |
![]() |
![]() |
#12 | |||
Матёрый пользователь
Регистрация: 18.02.2008
Сообщений: 8,750
Вы сказали Спасибо: 1,426
Поблагодарили 2,398 раз(а) в 1,348 сообщениях
![]() |
![]() Цитата:
И пульт Васи вряд-ли окажется подключенным у Пети, да ещё и одновременно с его собственным. Хотя бы потому что самодельные пульты - штучные изделия. Цитата:
А ТМ рассчитывать без учёта наполнения ЗР я бы не советовал. Цитата:
Остаются светофоры, пути и стрелки. Ну и препятствия на переезде.
__________________
местный зомбяк Последний раз редактировалось TRam_; 15.05.2010 в 02:26. |
|||
![]() |
![]() |
![]() |
#13 | |||
Матёрый пользователь
|
![]() Цитата:
Какие к черту мультиплееры, написание его займет в двадцать раз больше усилий, чем этого драйвера, а у нас рабочего драйвера еще нет. Через джетлог, кстати, ничего такого не подключить. Цитата:
Да ты прямо Петросян. Нет блин, надо решать каких-то пару десятков матриц за кадр и при этом ТМ с ЗР не будут связаны. Цитата:
Я тут полгода с лишним бьюсь над тем, чтобы создать универсальный конструктор, но сегодня внезапно открыли, что все очень просто напрямую. Ага, и разрушаемые мосты, как в си^W^W тренажере break'а. |
|||
![]() |
![]() |
![]() |
#14 |
Матёрый пользователь
Регистрация: 10.02.2008
Сообщений: 1,440
Вы сказали Спасибо: 0
Поблагодарили 7 раз(а) в 7 сообщениях
![]() |
![]()
Господа скриптеры, кончайте эпический срач и пожмите друг другу клавиатуры.
Ну действительно, начните вы с малого - с полнофункционального управления от клавиатуры и дуплексного обмена - это я вам как системщик советую. С меня тогда все железяки для сборки консоли ![]() ЗЫ: ищет эдакий хитрый вольтметр с углом вращения стрелки 270 градусов.... Ну, или разломать какой-нибудь еще. Идею с шаговиками следует забыть как страшный сон - жужжат и работают слишком резко, рывками, для манометров не айс. Можно использовать шаговик (и то коллекторник лучше) для мегаизвращенного вращения хомута. скоростемера СЛ2 ![]()
__________________
Это наша-то колея узкая? Да это ваша слишком широкая! |
![]() |
![]() |
![]() |
#15 | ||||
Матёрый пользователь
Регистрация: 18.02.2008
Сообщений: 8,750
Вы сказали Спасибо: 1,426
Поблагодарили 2,398 раз(а) в 1,348 сообщениях
![]() |
![]() Цитата:
в скрипте 1) мониторинг составов (какие сцепились, какие - нет, какая у кого скорость) 2) установщик скорости составов 3) установщик новых положений стрелок 4) упаковщик/распаковщик снаружи 1) прога передачи 2) клиентская прога/ сервер, отправляющие серверу(и получающие от него сообщения)/ рассылающий всем пользователям одинаковые сообщения за раз (и получающий сообщения от пользователей) Цитата:
Цитата:
![]() а пока Цитата:
__________________
местный зомбяк Последний раз редактировалось TRam_; 15.05.2010 в 13:02. |
||||
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|
|
![]() Что это? |