Время выполнение скриптов на C
Доброго времени суток. Есть 28 дискретных входов на модулях МВ110-16Д "ОВЕН", OPC-сервер LectusOPC и SimpLight. Нужно организовать систему, которая при срабатывании любого из входов, выводила сообщение на экран и включала сирену со светосигнальной колоной. Сирена включается посредством модуля вывода МУ110-16Р. Решил собрать тестовый стенда с двумя дискретными входами и обкатать все это дело, так сказать. Все сделал на скриптах с++ и выяснился один неприятный момент - сообщения на экран выводятся сразу же после срабатывания входа, а вот включение сирены и светового сигнала происходит с задержкой около 10 сек, что не очень хорошо для данного проекта, поскольку если только при двух переменных задержка 10с, то что будет в реальной системе, которая с учетом этих дискретных входов имеет 64 канала. Скорость опроса переменных менял - не помогло. Что можете посоветовать по увеличении быстродействия данного проекта? Как распределяется время выполнения и скриптов, и каналов в программе, и как можно этим временем управлять?
/*Скрипт вывода сообщений */
{
Double L1=ReadValue("In"),Virt1=ReadValue("Virt1"), X=1, L2=ReadValue("In2"),Virt2=ReadValue("Virt2");
/*In,In2 - дискретны входы 1,2; Virt1,2 - флаги(виртуальные переменные) для того,
что бы сообщение не выскакивало постоянно при включенном входе, а выводилось только один раз. */
if ((L1==1)&&(Virt1==0)) {ShowMessageBox("Уход сукна","Сушка 1 привод 2 этаж",1); WriteValue("Virt1",X);};
/*Сработал первый вход - вывести сообщение срабатывания и записать флаг */
if ((L2==1)&&(Virt2==0)) {ShowMessageBox("Уход сукна","Сушка 2 привод 2 этаж",1); WriteValue("Virt2",X);};
/*Аналогично */
}
/*Скрипт обнуления флага */
{
Double X=0,In=ReadValue("In"),In2=ReadValue("In2");
/* In,In2 - дискретные входа */
if (In==0) WriteValue("Virt1",X);
/* Если вход выключился, обнулить флаг, что бы в скрипте вывода сообщений все работало при следующем срабатывании датчика */
if (In2==0) WriteValue("Virt2",X);
/* Аналогично, только для второго канала */
}
/* Скрипт включения сирены */
{
Double X1=ReadValue("Virt1"),X2=ReadValue("Virt2"),X=1,X0=0;
/* Virt1, Virt2 - флаги срабатывания входов */
if ((X1==1)||(X2==1)) WriteValue("MU110_16P.Out",X);
/* MU110_16P.Out - выходная булевая переменная для включения сирены.
Если хотя бы один концевик сработал - включить сигнализацию */
if ((X1==0)&&(X2==0)) WriteValue("MU110_16P.Out",X0);
/*Если все концевики выключились - выключить сигнализацию */
}
/*Скрипт вывода сообщений */
{
Double L1=ReadValue("In"),Virt1=ReadValue("Virt1"), X=1, L2=ReadValue("In2"),Virt2=ReadValue("Virt2");
/*In,In2 - дискретны входы 1,2; Virt1,2 - флаги(виртуальные переменные) для того,
что бы сообщение не выскакивало постоянно при включенном входе, а выводилось только один раз. */
if ((L1==1)&&(Virt1==0)) {ShowMessageBox("Уход сукна","Сушка 1 привод 2 этаж",1); WriteValue("Virt1",X);};
/*Сработал первый вход - вывести сообщение срабатывания и записать флаг */
if ((L2==1)&&(Virt2==0)) {ShowMessageBox("Уход сукна","Сушка 2 привод 2 этаж",1); WriteValue("Virt2",X);};
/*Аналогично */
}
/*Скрипт обнуления флага */
{
Double X=0,In=ReadValue("In"),In2=ReadValue("In2");
/* In,In2 - дискретные входа */
if (In==0) WriteValue("Virt1",X);
/* Если вход выключился, обнулить флаг, что бы в скрипте вывода сообщений все работало при следующем срабатывании датчика */
if (In2==0) WriteValue("Virt2",X);
/* Аналогично, только для второго канала */
}
/* Скрипт включения сирены */
{
Double X1=ReadValue("Virt1"),X2=ReadValue("Virt2"),X=1,X0=0;
/* Virt1, Virt2 - флаги срабатывания входов */
if ((X1==1)||(X2==1)) WriteValue("MU110_16P.Out",X);
/* MU110_16P.Out - выходная булевая переменная для включения сирены.
Если хотя бы один концевик сработал - включить сигнализацию */
if ((X1==0)&&(X2==0)) WriteValue("MU110_16P.Out",X0);
/*Если все концевики выключились - выключить сигнализацию */
}
Проблема от части решилась. В коде скрипта вывода сообщений поставил на первое место запись флага, а потом вывод сообщения:
"if ((L1==1)&&(Virt1==0)) {WriteValue("Virt1",X); ShowMessageBox("Уход сукна","Сушка 1 привод 2 этаж",1); };".
Теперь сигнал включается с задержкой около 2 сек, что аналогично кнопке включения выхода на мнемосхеме без скрипта.