PDA

Просмотр полной версии : Выстраивание правил в настройках сессии. Косяк не детский!


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
genesis, И? Ты имеешь ввду дальше использовать что? z7 DSP Rule?
Можно и твою схему с одним триггером.
Так у меня он сейчас четный, а обратно будет ехать - уже нечётный.
И что, пусть меняют поезда тогда.

NickLon
28.08.2009, 17:16
Можно и твою схему с одним триггером.

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

genesis
29.08.2009, 20:50
Ну с одним триггером не получится. Там же нужно указать направление, что вот именно в четном направлении он едет, тогда меняем чётную переменную. А если один триггер, он и туда и сюда будет её менять.
Разные машинисты!
А по поводу замены поездов - гы, ты ещё не знаешь, мою схему перевозки угля. Машинисты даже не знают имени вагона, когда цепляются к груженному составу после маневрового, который их на шахте загрузил. И также и на разгрузке. Откуда я узнаю, какой именно лок в данный момент подошёл к грежёному составу, и наоборот. Не, это явно не взлетит!
Уж маркеры то знаешь?
А по поводу этой проблемы. Уже второй день бьюсь и прихожу к выводу, что именно + глючит. - он не трогает, а + - в обе стороны. Явный глюк движка. буду тогда придумывать что-нибудь другое. Без этих переменных.
Это не глюк движка, а глюк правила. Скорее всего переменная имеет только неотрицательные значения, потому и - работает.

NickLon
31.08.2009, 11:27
Разные машинисты!
[/QOUTE]
В правиле CheckTrackmark можно указать, для какого ПС оно будет срабатывать, а вовсе не машиниста!
[QUOTE]
Уж маркеры то знаешь?

Знаю, конечно. Но как ты себе это представляешь, может быть я чего-то
не понимаю? Давай разберём блок-схему такой ситуации. Состав груженый углем пришёл на станцию разгрузки, от дал отцеп маневровому под разгрузку, а магистральный лок встал в тупик для ожидания дальнейших команд. И вот под згарузку, на противоположной стороне маршрута триггер прошёл магистральный локомотив, только что отцепившийся от порожняка. Дальнейшие команды?
1) оба локомотива заняты. Это, правда, не очень то и большая проблема. Можно "уволить" машинистов на маневровых и сажать туда тех, кто только что был на магистральном. Но простои магистральных будут ещё те. Можно, конечно, где-нить в депо поставить локомотив-посредник;
2) и самое главное. Как я определю какой именно локомотив только что прошёл триггер? Ведь в команде Move to train нужно указать конкретный лок! Хотя, по-моему, есть правило MoveToTrainAtTrackMarkList. Хотя по-моему это уже гемор. Не стоит "не искать лёгких путей". Итак список правил перегружен настолько, что даже при 12-15 fps всё равно показывает диафильмы!

Это не глюк движка, а глюк правила. Скорее всего переменная имеет только неотрицательные значения, потому и - работает.
Ну, хрен редьки не слаще. А переменная может принимать любые значения. Эта мысль меня тоже посещала. И есть состав идёт по правилу, как задумано изначально, только вместо + ставил - переменная принимала и отрицательное значение.
Резюме: как я понял, решения этого вопроса в том виде, в котором уже всё создано не существует. Ну что ж, "будем искать, такого же, но без крыльев" (с):) Спасибо всем, кто отклинулся.
P.S. Это, конечно, не значит, что вопрос закрыт. Решения то как не было, так и нет. Просто нужно двигаться дальше, а то уже три дня, как остановилась разработка. Скорее всего, откажусь я от этих правил (пока по крайней мере) и пущу составы по тем путям на станциях, которые они себе сами соберут.