Ответы в темах
-
АвторЗаписи
-
Algomus
Участникmanjey73, спасибо за внимание к моей проблеме. Это для пробы. Будет работать можно и причесать как надо. Но не работает.
Algomus
Участникint[] GenNum = new int[1];
long[] GenST = new long[1];
bool[] GenFlag = new bool[1];
public bool Gen(double GenIn, long GenPT)
{
long ET = 0L;
bool q = Val(CnlNum) > 0;
bool gen_in = GenIn > 0;int res = Array.IndexOf(GenNum, CnlNum);
if (res == -1)
{
res = GenNum.Length;
Array.Resize(ref GenNum, res+1);
Array.Resize(ref GenST, res+1);
Array.Resize(ref GenFlag, res+1);
GenNum[res] = CnlNum;
}if (!gen_in && q == false)
{
q = false;
GenFlag[res] = false;
GenST[res] = 0L;
}
else
{
if (!GenFlag[res])
{
GenFlag[res] = true;
GenST[res] = Ticks();
}
else
{
if (!q) ET = Ticks() — GenST[res];
}
if (ET >= GenPT) q = true;
}
return q;
}Нечто подобное в качестве генератора импульсов в 1 цикл через заданное время.
Algomus
УчастникЯ инверсию по другому делал abs(Val-1) прямо в администраторе. Это естественно, если гарантированно double только 1 и 0 принимает.
Я почему и привел за основу Ton. Там просто надо И на входе поставить.-
Ответ изменён 2 года, 5 месяцев назад пользователем
Algomus.
Algomus
УчастникAlgomus
Участникmanjey73, то что Вы нарисовали в FBD, но на входе не XOR, а & с инвертированным нижним входом и без Rtrig. Он уже будет не нужен, т.к. Ton перезапуститься после отсчёта выдержки.
Algomus
Участник__—————-_____ Вх
_____-___-___-______ ВыхТак понятно?) Периодический опрос.
Кстати, под словарем что подразумевается?Algomus
УчастникА что по поводу формулы генератора?
Algomus
УчастникAlgomus
УчастникОднако, люто дорого..
Algomus
Участник«SOFTPLC CODESYS SP RTE
CoDeSys SP RTE представляет собой специальную систему исполнения для ОС семейства Windows со встроенным ядром жесткого реального времени.
Она позволяет превратить обычный компьютер в быстродействующий ПЛК. Ввод/вывод подключается через полевые сети. SP RTE обеспечивает стабильность рабочего цикла МЭК программ в диапазоне микросекунд и работу контроллера при зависании ОС.»
Нашел вот..-
Ответ изменён 2 года, 5 месяцев назад пользователем
Algomus.
Algomus
УчастникУпоминался SoftPLC. Есть опыт?
-
Ответ изменён 2 года, 5 месяцев назад пользователем
Algomus.
Algomus
УчастникРаботаю в 5 версии. Мигрировать на 6 пока нет времени.
Что сделал:
Сохраняем температуру перед включением реле отопителя на ДТ, через 20 мин сравниваем текущую с сохраненной и если она выросла на 2 градуса считаем устройство запущенным, начинаем считать м/ч.
Что нужно:
Отопитель может перестать работать в любой момент. Как это определить. Раз в 20 мин сравниваем текущее и предыдущее значение. Если оно отличается на 4 градуса транслируем аварию, останавливаем счёт м/ч.Algomus
УчастникТемпература может плавать. В мороз мощности не хватает.
Algomus
УчастникНеобходимо отслеживать работу отопителя. Включение реализовал через Ton. Но есть необходимость контроля работы уже на режиме. Т.е. периодически раз в 20 мин отслеживать отклонение вниз на 4 градуса.
Algomus
УчастникПрошу помощи. Моих навыков не хватает. Как эту формулу превратить в генератор импульсов в один цикл.
Таймер задержки на включение Tonint[] TonNum = new int[1];
long[] TonST = new long[1];
bool[] TonFlag = new bool[1];
public bool Ton(double TonIn, long TonPT)
{
long ET = 0L;
bool q = Val(CnlNum) > 0;
bool ton_in = TonIn > 0;int res = Array.IndexOf(TonNum, CnlNum);
if (res == -1)
{
res = TonNum.Length;
Array.Resize(ref TonNum, res+1);
Array.Resize(ref TonST, res+1);
Array.Resize(ref TonFlag, res+1);
TonNum[res] = CnlNum;
}if (!ton_in)
{
q = false;
TonFlag[res] = false;
TonST[res] = 0L;
}
else
{
if (!TonFlag[res])
{
TonFlag[res] = true;
TonST[res] = Ticks();
}
else
{
if (!q) ET = Ticks() — TonST[res];
}
if (ET >= TonPT) q = true;
}
return q;
}-
Ответ изменён 2 года, 5 месяцев назад пользователем
Algomus.
-
Ответ изменён 2 года, 5 месяцев назад пользователем
-
АвторЗаписи