есть два способа построения схемы в ТРС - перепроверочный и событийный. В первом случае мы раз в определённый промежуток времени перепроверяем нужные нам контуры схемы, и в зависимости от них включаем/выключаем реле. Событийный - это когда
-"мы включили АВ3(три), всё остальное уже собрано, значит можно включить РВ2 РВ3 маслопрокачку и вызвать ожидание 30 секунд"
-"мы замкнули контакты контроллера машиниста, всё остальное уже собрано, значит можно включить РВ2 РВ3 маслопрокачку и вызвать ожидание 30 секунд"
-"мы включили тумблер пуск-остановка, всё остальное уже собрано, значит можно включить РВ2 РВ3 маслопрокачку и вызвать ожидание 30 секунд"
и так далее, по всем параметрам. Несмотря на то, что если писать так, то код звеличивается в разы, он будет работать намного быстрее, чем "проверка каждые 5 секунд, собрана ли схема запуска ".
Пример проверок например есть в 2ТЭ116 -
Код:
if(p_control == zapusk1) нажимаем кнопку запуска
{
if(bloc.GetValue()==0 or throttle_lever2.GetValue()!=0 or loco.GetEngineSetting("reverser") == 1 or !cd.switchOn4)
return;
если у нас поднята блокировка, или контроллер не в нуле, или реверс в нуле, или АВЗ выключен, схему запуска не собирать, выполнение кода прекратить
в остальных случаях
if(p_value>0.5)
cd.zapusk1=true; если хорошо нажали кнопку - запустить дизель
else если нажали кнопку плохо - не запускать дизель
cd.zapusk1=false;
loco.SetCabinData(cd); - передать информацию о новом положении контролов из кабины в локомотив
}
Ожидалка реле в простейшем случае выглядит как, только нужно следить, чтоб её немогли одновременно вызвать из разных кусков кода. Ведь если подать напряжение из одного провода, а через некоторое время, не отключая первый, от другого, то реле должно выключиться через промежуток времени от первого подключения, а на второе не реагировать.
Код:
thread void RU5()
{
ru5_st=true;
Sleep(30);
ru5_st=false;
}