Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   TrainZ - Маршруты и сценарии (http://www.trainsim.ru/forum/forumdisplay.php?f=24)
-   -   Выстраивание правил в настройках сессии. Косяк не детский! (http://www.trainsim.ru/forum/showthread.php?t=8249)

NickLon 28.08.2009 13:08

Выстраивание правил в настройках сессии. Косяк не детский!
 
Всем привет!.. Долго думал, как объяснить мою ситуацию и подумал, что лучшим способом будет нарисовать блок схему здесь. Итак, это в настройках сессии, правила. Используется правило ChekTrackside. Страбатыват по триггерам. (для наглядности в одну ступень ставлю две точки; в ТРС - одна ступень). Четное направление.
CheckTrackside Trigger1;
..CheckTrackside Trigger2;
....Var1 = Var1+1;
// до сей поры фиксируется факт для возможного встречного, что перегон занят
CheckTrackside Trigger3;
..CheckTrackside Trigger4;
....Var1 = Var1-1;
//здесь, перед тем, как поезду зайти на станцию прибытия, освобождается перегон
....If Var2 > 0 Then
......сборка прибытия на один из боковых;
....If Var2 = 0 Then
......сборка прибытия на любой, включая главный первым;
//Var2 - это переменная встречной, нечетной схемы.
Так вот, поезд выходит со станции1 на станцию2 в четном направлении, Четный поезд. Проходит Trigger1 и Trigger2, срабатывает правило и переменная Var1 принимает значение 1. Потом он проходит перед станцией2 Trigger3 и Trigger4, срабатывает правило и переменная Var1 принимает значение 0.
В то время, когда он вышел со станции1, со станции3 на станцию2 в нечетном направлении тоже вышел поезд, Нечетный. Нечетный позже прибывает на станцию, следовательно Четный заходит на боковой и ждёт проследования по главному Нечетного.
Нечетный проходит станцию, дальше начинает в обратном порядке проходить четные триггеры. Правила не должны срабатывать и переменная Var1 не должна меняться. В первом случае, когда Нечетный проходит сначала Trigger4 потом Trigger3 переменная Var1 не меняется. А вот во втором случае, когда он проходит сначала Trigger2, а потом Trigger3 переменная Var1... увеличивается на 1.:(
Более того, уже как и на что я эту схему не тестировал и выяснил, что увеличение переменной Var1, когда это делать не надо, происходит в момент, когда поезд проезжает Trigger2!:eek: И ещё более того, в процессе теста, я сделал такую конструкцию:
CheckTrackside Trigger1;
..Тест = Тест + 1;
..CheckTrackside Trigger2;
....Var1 = Var1+1;
....Тест1 = Тест1 + 1;
Все переменные увеличиваются на 1 после проследования Нечетным поездом Trigger2! Во кино!!! Повторяю, Нечетный сначала наезжает на Trigger2? а потом на Trigger1!
Всё бы ничего, если бы и на уменьшение была бы такая же картина, я бы плюнул и подумал бы, что такая конструкция в TRS2006 не работает в принципе, или я сам накосячил. Так нет же! Там работает как надо, а тут горбатого лепит к стенке.
Мож кто-нить чё подскажет, а?:o

genesis 28.08.2009 14:05

Я бы предложил не городить схемы с последовательным проследованием триггеров, а дал бы четным поездам одних машинистов, а нечетным - других.

Damien Zhar 28.08.2009 14:24

Отрапортовать баг в Ауран!

NickLon 28.08.2009 14:24

genesis, И? Ты имеешь ввду дальше использовать что? z7 DSP Rule?
(это был первый вариант вопроса). А вот второй:
Так у меня он сейчас четный, а обратно будет ехать - уже нечётный.
Damien Zhar, да погодь пока. Я ещё на 100% не уверен, что это не баг пользователя...:confused:

genesis 28.08.2009 16:26

[QUOTE=NickLon;109301]genesis, И? Ты имеешь ввду дальше использовать что? z7 DSP Rule?[/QUOTE]
Можно и твою схему с одним триггером.
[QUOTE=NickLon;109301]Так у меня он сейчас четный, а обратно будет ехать - уже нечётный.[/QUOTE]
И что, пусть меняют поезда тогда.

NickLon 28.08.2009 17:16

[QUOTE=genesis;109319]Можно и твою схему с одним триггером.

И что, пусть меняют поезда тогда.[/QUOTE]
Ну с одним триггером не получится. Там же нужно указать направление, что вот именно в четном направлении он едет, тогда меняем чётную переменную. А если один триггер, он и туда и сюда будет её менять.
А по поводу замены поездов - гы, ты ещё не знаешь, мою схему перевозки угля. Машинисты даже не знают имени вагона, когда цепляются к груженному составу после маневрового, который их на шахте загрузил. И также и на разгрузке. Откуда я узнаю, какой именно лок в данный момент подошёл к грежёному составу, и наоборот. Не, это явно не взлетит!
А по поводу этой проблемы. Уже второй день бьюсь и прихожу к выводу, что именно + глючит. - он не трогает, а + - в обе стороны. Явный глюк движка. буду тогда придумывать что-нибудь другое. Без этих переменных.

genesis 29.08.2009 20:50

[QUOTE=NickLon;109327]Ну с одним триггером не получится. Там же нужно указать направление, что вот именно в четном направлении он едет, тогда меняем чётную переменную. А если один триггер, он и туда и сюда будет её менять.[/QUOTE]
Разные машинисты!
[QUOTE=NickLon;109327]А по поводу замены поездов - гы, ты ещё не знаешь, мою схему перевозки угля. Машинисты даже не знают имени вагона, когда цепляются к груженному составу после маневрового, который их на шахте загрузил. И также и на разгрузке. Откуда я узнаю, какой именно лок в данный момент подошёл к грежёному составу, и наоборот. Не, это явно не взлетит![/QUOTE]
Уж маркеры то знаешь?
[QUOTE=NickLon;109327]А по поводу этой проблемы. Уже второй день бьюсь и прихожу к выводу, что именно + глючит. - он не трогает, а + - в обе стороны. Явный глюк движка. буду тогда придумывать что-нибудь другое. Без этих переменных.[/QUOTE]
Это не глюк движка, а глюк правила. Скорее всего переменная имеет только неотрицательные значения, потому и - работает.

NickLon 31.08.2009 11:27

[QUOTE=genesis;109636]Разные машинисты!
[/QOUTE]
В правиле CheckTrackmark можно указать, для какого ПС оно будет срабатывать, а вовсе не машиниста!
[QUOTE]
Уж маркеры то знаешь?
[/QUOTE]
Знаю, конечно. Но как ты себе это представляешь, может быть я чего-то
не понимаю? Давай разберём блок-схему такой ситуации. Состав груженый углем пришёл на станцию разгрузки, от дал отцеп маневровому под разгрузку, а магистральный лок встал в тупик для ожидания дальнейших команд. И вот под згарузку, на противоположной стороне маршрута триггер прошёл магистральный локомотив, только что отцепившийся от порожняка. Дальнейшие команды?
1) оба локомотива заняты. Это, правда, не очень то и большая проблема. Можно "уволить" машинистов на маневровых и сажать туда тех, кто только что был на магистральном. Но простои магистральных будут ещё те. Можно, конечно, где-нить в депо поставить локомотив-посредник;
2) и самое главное. Как я определю какой именно локомотив только что прошёл триггер? Ведь в команде Move to train нужно указать конкретный лок! Хотя, по-моему, есть правило MoveToTrainAtTrackMarkList. Хотя по-моему это уже гемор. Не стоит "не искать лёгких путей". Итак список правил перегружен настолько, что даже при 12-15 fps всё равно показывает диафильмы!
[QUOTE]
Это не глюк движка, а глюк правила. Скорее всего переменная имеет только неотрицательные значения, потому и - работает.[/QUOTE]
Ну, хрен редьки не слаще. А переменная может принимать любые значения. Эта мысль меня тоже посещала. И есть состав идёт по правилу, как задумано изначально, только вместо + ставил - переменная принимала и отрицательное значение.
Резюме: как я понял, решения этого вопроса в том виде, в котором уже всё создано не существует. Ну что ж, "будем искать, такого же, но без крыльев" (с):) Спасибо всем, кто отклинулся.
P.S. Это, конечно, не значит, что вопрос закрыт. Решения то как не было, так и нет. Просто нужно двигаться дальше, а то уже три дня, как остановилась разработка. Скорее всего, откажусь я от этих правил (пока по крайней мере) и пущу составы по тем путям на станциях, которые они себе сами соберут.


Текущее время: 21:46. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim