nTestOK[i]++;
else
// иначе уменьшаем
if ( nTestOK[i] > 0 )
nTestOK[i]--;
// Если число совпадений равно нулю
if ( !nTestOK[i] )
// сохраняем полученную информацию
// в структуре.
CopyAllSensorsInfo(pCurSensorsInfo[i], &init_sens[i]);
// сохранение текущей структуры сенсоров
// во флэш-памяти
WriteFlashSensorsInfo(icFlashStartSegment, i, &init_sens[i]);
// удаляем полученную информацию
delete pCurSensorsInfo[i];
pCurSensorsInfo[i] = 0L;
}
}
while((TestFlashSensorsInfo(&sensors) & 0x0007) != 0x0007);
}
// на выходных линиях устанавливаем сигнал 0(закрыто)
SetOutput(0x0000,2);
// разрешаем сторожевой таймер
WDT_enable();
// инициализируем основные структуры данных
ClearScheme();
ClearSkipBuffer();
//инициализация последовательного порта rs-485
com_485_install();
com_485_set_format(16, 0, 1);
com_485_set_speed((unsigned long)9600);
// число активных датчиков
int nActive = 0;
// состояние переезда
int nOutput = 0x0000;
boolean faza;
boolean faza1=true;
// Основной цикл работы
for(;;)
{
nActive = 0;
nOutput = uicActive;
// функция чтения информации всех датчиков
register int nSensor = 0;
// проходим все модули
// текущий модуль - модуль ввода информации с путевых реле
nModule == 0;
// проходим все его биты
unsigned char cValue;
for(register int nPin = 0; nPin < 2; nPin++)
{
// получаем значение очередной ножки
Get5052(nModule, nPin, ABit, &cValue);
// если значение на ножке = 0
if ( cValue == 0 )
nSensor++;
}
//определение количество включенных светофоров
int work=0;
// текущий модуль - модуль ввода информации контроля
nModule == 1;
// проходим все его биты
for(register int nPin = 0; nPin < 8; nPin+2)
{ // получаем значение очередной ножки
Get5052(nModule, nPin, ABit, &cValue);
char f_pin=cValue;
int s_pin=nPin+1;
Get5052(nModule, s_pin, ABit, &cValue);
if (f_pin==1 || cValue==1) work++;
}
//чтение информации с последовательного порта от дежурного
com_rx_string(word);
//проверка занятости переезда или прихода команды закрытия
if (nSensor>0 || word==0x0000)
{
//переключение сигналов светофоров
if (work>1)
{
ChangeSignal();
if (faza) SetOutput(0x0005,2);
else SetOutput(0x000A,2);
faza=!faza;
}
//первоначальное включение светофоров и опускание шлагбаумов
else
{
faza=true;
SetOutput(0x000A,2)
for (int paus=0; paus<20; paus++)
{
ChangeSignal();
if (faza) SetOutput(0x0035,2);
else SetOutput(0x003A,2);
faza=!faza;
}
if (faza) SetOutput(0x0005,2);
else SetOutput(0x000A,2);
faza=!faza;
}
}
//выключение светофоров и открытие шлагбаумов
else
{
if (work!=0)
SetOutput(0x003F,2);
}
//формирование последовательностей для ссвк
if (faza1) SetOutput(0x0005,3);
else SetOutput(0x000A,3);
faza1=!faza1;
//снятие информации с портов ввода и передача ее по rs-485
// текущий модуль - модуль ввода информации контроля
nModule == 1;
Get5052(nModule, 0, AWord, &in_word);
com_tx_string(in_word);
}
}
void SetOutput(unsigned int uiOutput, int n)
{
// текущий модуль - модуль вывода
nModule = n;
out_word = uiOutput;
Set5050(nModule, 0, AWord, &out_word);
break;
}
//процедура задержки на 2 секунды
void ChangeSignal();
{
int old_t;
struct dostime_t t;
wdt_enable();
_dos_gettime(&t);
old_t=t.second;
while (1==1)
{
if (t.second-old_t>=2) break;
if (old_t==58 && t.second>=0) break;
if (old_t==59 && t.second>=1) break;
}
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.