Созданные ответы форума
-
АвторСообщения
-
AlgomusУчастник
manjey73 Т.е. это одно вибратор? В некоторых случаях полезно графически показать функционал устройства. Как на фото реле от Меандр. https://s.leroymerlin.ru/upload/catalog/img/1/e/82810997/82810997.jpg
- Этот ответ был изменен 1 месяц, 1 неделя назад от Algomus.
AlgomusУчастникА какая циклограмма у последней формулы? По сути это генератор. Тогда должны быть длительность импульса и паузы, а так же фазы.
AlgomusУчастникГенераратор импульсов длительностью 1 цикл программы DelGen.
Может быть полезен для периодического опроса.
Циклограмма:
__—————-_____ Вх
_____-___-___-______ Выхint[] DelGenNum = new int[1];
long[] DelGenST = new long[1];
bool[] DelGenFlag = new bool[1];
public bool DelGen(double DelGenIn, long DelGenPT)
{
long ET = 0L;
bool q = Val(CnlNum) > 0;
bool delgen_in = DelGenIn > 0;int res = Array.IndexOf(DelGenNum, CnlNum);
if (res == -1)
{
res = DelGenNum.Length;
Array.Resize(ref DelGenNum, res+1);
Array.Resize(ref DelGenST, res+1);
Array.Resize(ref DelGenFlag, res+1);
DelGenNum[res] = CnlNum;
}if (!delgen_in || q)
{
q = false;
DelGenFlag[res] = false;
DelGenST[res] = 0L;
}
else
{
if (!DelGenFlag[res])
{
DelGenFlag[res] = true;
DelGenST[res] = Ticks();
}
else
{
if (!q) ET = Ticks() — DelGenST[res];
}if (ET >= DelGenPT) q = true;
}
return q;
}DelGen(значение канала в double, время в миллисекундах)
Пример: в канале 152 используем формулу DelGen(Val(150), 5000) — при появлении 1 на входном канале 150 на канале 152 через 5000 мсек будут появляться импульсы длительностью 1 цикл программы.- Этот ответ был изменен 1 месяц, 1 неделя назад от Algomus.
AlgomusУчастникПонял свою ошибку.
AlgomusУчастник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. Там просто надо И на входе поставить.- Этот ответ был изменен 1 месяц, 1 неделя назад от Algomus.
AlgomusУчастникAlgomusУчастникAlgomusУчастник__—————-_____ Вх
_____-___-___-______ ВыхТак понятно?) Периодический опрос.
Кстати, под словарем что подразумевается?AlgomusУчастникА что по поводу формулы генератора?
AlgomusУчастникAlgomusУчастникОднако, люто дорого..
AlgomusУчастник«SOFTPLC CODESYS SP RTE
CoDeSys SP RTE представляет собой специальную систему исполнения для ОС семейства Windows со встроенным ядром жесткого реального времени.
Она позволяет превратить обычный компьютер в быстродействующий ПЛК. Ввод/вывод подключается через полевые сети. SP RTE обеспечивает стабильность рабочего цикла МЭК программ в диапазоне микросекунд и работу контроллера при зависании ОС.»
Нашел вот..- Этот ответ был изменен 1 месяц, 2 недели назад от Algomus.
-
АвторСообщения