НТК Интерфейс
Контроллеры серии «Синком-Д». Руководство по эксплуатации
×
Меню

4.24.1. Описание программ дорасчета

В программе дорасчета обязательно наличие двух функций
void deviceInit() { }
void UserProgrammCycle() { }
Функция deviceInit() вызывается один раз при старте контроллера и предназначена для задания переменным пользователя начальных значений если это необходимо.
Функция UserProgrammCycle() вызывается постоянно через заданный в конфигурации интервал времени. Предназначена для задания пользовательской обработки данных.
ВНИМАНИЕ! Есть ряд ограничений, связанных с условиями работы программ в контроллере:
- не допускаются циклы ожидания чего-либо внутри функций.
- не используйте более 5 переменных и тем более массивов в стеке (это переменные, которые задаются внутри функции).
- глобальные переменные не должны занимать более 4 кбайт.
- запрещено обращаться к адресам за пределами программы пользователя.
- не желательно пользоваться текстовыми строками и текстовыми функциями.
 
Предопределения программы дорасчета
Специальные типы данных
VARTI – переменные для работы с аналоговыми значениями (родной тип - float)
VARTS – переменные для работы с сигнализацией (родной тип – unsigned int)
Определения специальных переменных
В программе дорасчета можно обращаться к переменным контроллера
VAR_ERROR - результат достоверности чтения значений телепараметров
TIMER_MC – Счетчик миллисекунд от старта контроллера (можно сбрасывать произвольно)
TIME_HOUR – текущее значение часа
TIME_SEC – текущее значение секунд
Определения специальных значений
- управление достоверностью записываемых значений
SET_OK – сделать достоверным
SET_ERROR – сделать недостоверным
AUTO - в зависимости от значения VAR_ERROR
AUTOCLEAR - в зависимости от значения VAR_ERROR но по завершению записи сбросить ошибку недостоверности в переменной.
- состояние переменной VAR_ERROR
OK - достоверно
ERROR – не достоверно
- состояние телесигналов
TS_OFF - откл
TS_ON - вкл
- состояние двухпозиционных телесигналов
DPTS_INTERMEDIATE – промежуточное/ неопределенное
DPTS_OFF - откл
DPTS_ON - вкл
DPTS_INDETERMINATE - неопределенное
Функции доступа к телеметрии контроллера
void TS_WRITE (int TsAddress, VARTS Value, int ErrorProcessing)
void TS_DP_WRITE (int TsAddress, VARTS Value, int ErrorProcessing)
VARTS TS_READ (int TsAddress)
VARTS TS_DP_READ (int TsAddress)
void TI_WRITE (int TiAddress, VARTI Value, int ErrorProcessing)
VARTI TI_READ (int TiAddress)
void SET_OUT (int OutputAddress, int OnOffValue)
 
Обратить внимание:
================
 
Все функции чтения параметров (TS_READ, TS_DP_READ, TI_READ ) устанавливают значение переменной VAR_ERROR = ERROR (для справки это 1) если параметр к которому обращаются недостоверный. Сбросить значение переменной в состояние OK (0) можно либо явно
VAR_ERROR = OK;
Либо в функциях записи ( TI_WRITE, TS_WRITE, TS_DP_WRITE ) указав значение переменной ErrorProcessing = AUTOCLEAR, например:
TI_WRITE (15, ValueA, AUTOCLEAR);
================
 
Функция чтения ТС TS_READ всегда возвращает только значения TS_OFF/ TS_ON, вне зависимости от типа читаемого ТС (одно/двух позиционный). Если читаемый двухпозиционный имеет значения 0 или 3 установится ошибка в переменной VAR_ERROR.
Наоборот, функция чтения TS_DP_READ возвращает состояния двухпозиционных даже при обращении к однопозиционному.
Обратите внимание что состояния вкл/откл для однопозиционных не равны двухпозиционным!
================
 
Адреса телепараметров начинаются с 1
================
 
Функция SET_OUT устанавливает значения выходов модулей ТУ430 (макс 128 выходов) в состояние вкл (1) или откл (0).
 
Пример 1. Из ТС 8 (положение откл) и ТС 9 (положение вкл) сделать двухпозиционный ТС 14
 
// задать значения на старте
void deviceInit() {
}
// цикл расчета
void UserProgrammCycle() {
TS_DP_WRITE( 14, TS_READ(8) + (TS_READ(9) * 2), AUTOCLEAR);
}
 
Пример 2. Из ТИ 1 и ТИ 2 сделать суммарный ТИ 3
 
// задать значения на старте
void deviceInit() {
}
// цикл расчета
void UserProgrammCycle() {
TI_WRITE(3, TI_READ(1) + TI_READ(2), AUTOCLEAR);
}