Изменение времени в Деконте через блок Си

Общие вопросы по оборудованию и программному обеспечению Компании ДЭП
Tankist
Сообщения: 7
Зарегистрирован: 19 окт 2006, 11:13

Сообщение Tankist » 08 фев 2011, 19:47

Здравствуйте!

Возникла потребность менять время в контроллере Деконт-А9. Стандартные блоки Разработчика такую возможность не дают.
Ваши специалисты посоветовали воспользоваться блоком Си, но все попытки написать данный блок были неудачными, т.к. опыта написания программ на Си не имеем. Просьба: не могли бы Вы помочь нам написать данный блок? Подскажите пожалуйста синтакис обращения к функции изменения времени.
Задача ставилась такая: изменить текущее время контроллера, взяв время (часы, минуты, секунды) и дату (день, месяц, год) из базы аналоговых сигналов. В базу эти сигналы попадают от Модбас Мастера раз в час. В общем этакая синхронизация времени по Модбасу.

Заранее огромное спасибо!

galina
Сообщения: 79
Зарегистрирован: 03 дек 2007, 09:56
Откуда: Компания "ДЭП"

Сообщение galina » 09 фев 2011, 14:05

Вот примерный код:

DWORD Sec;
TTime Time;
TBinTime BinTime;
ANALOG Analog[6];
int i;
BYTEBOOL NotValid;

NotValid = FALSE;
for(i=0;i<6;i++){
AnalogRead(i+1,&Analog[i]);
NotValid |= IFSET(Analog[i].state,flagU);
}
if (!NotValid) {
BinTime.msec = 0;
BinTime.sec = Analog[0].value;
BinTime.min = Analog[1].value;
BinTime.hour = Analog[2].value;
BinTime.day = Analog[3].value;
BinTime.month = Analog[4].value;
BinTime.year = Analog[5].value;
BinToZTime(&BinTime,&Time);

Sec = Time.Second;
smSetValue(SMP_DEF_DATETIME_WINTER,&Sec,0);
}

Раскладка в базе параметров:
номер 1 - секунды
номер 2 - минуты
номер 3 - часы
номер 4 - день
номер 5 - месяц
номер 6 - год

Tankist
Сообщения: 7
Зарегистрирован: 19 окт 2006, 11:13

Сообщение Tankist » 09 фев 2011, 16:59

Огромное спасибо!!!

Светлана
Сообщения: 329
Зарегистрирован: 06 июн 2005, 15:27
Откуда: Компания ДЭП

Сообщение Светлана » 11 фев 2011, 13:00

В такой синхронизации есть алгоритмические проблемы((

Надо устанавливать время только когда все аналоги изменились (стали новыми) и дата и время. Представьте на переходе суток время уже новое, а дата ещё старая, или на переходе часа минуты новые, час старый ... Кратковременно в контроллере будет установлено неправильное время. На следующем такте оно исправится.

Вам надо продумать какой-то дополнительный алгоритм проверки корректности нового времени. Если новое время несущественно отличается от текущего, то не устанавливать (учет задержки передачи параметров по MODBUS и такта Вашего компонента). И если новое время, сильно отличается от полученного в прошлом такте, тоже видимо его не устанавливать.