Созданные ответы форума
-
АвторСообщения
-
Algomus
УчастникВышел из положения в 5 версии следующим образом:
Т.к. любой серийник это прежде всего номер, решил буквенные данные игнорировать.
Создал:
ВхК (123) ДорТИ с формулой CnlValGet(123) Купр (123)
КУпр (123) Стандартная команда с формулой CnlValSet(123)
Номера ВхК и КУпр для удобства имеют одинаковые номера.
Теперь однажды введенный номер отображается в текущих, сохраняется в таблице и отображается на мнемосхеме. Но при переустановке SCADA (после экспериментов с https://rapidscada.net/store/Module/ru/ScadaSchemeEditorPatch перестал корректно работать редактор схем) в текущих оказались 0. Номера пришлось вводить заново.Algomus
УчастникПоднимал тему уже..
https://forum.rapidscada.ru/?topic=отключение-опроса-кпAlgomus
Участникmanjey73 Т.е. это одно вибратор? В некоторых случаях полезно графически показать функционал устройства. Как на фото реле от Меандр. https://s.leroymerlin.ru/upload/catalog/img/1/e/82810997/82810997.jpg
-
Этот ответ был изменен 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 год назад от
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 год назад от
Algomus.
Algomus
УчастникAlgomus
УчастникAlgomus
Участник__—————-_____ Вх
_____-___-___-______ ВыхТак понятно?) Периодический опрос.
Кстати, под словарем что подразумевается?Algomus
УчастникА что по поводу формулы генератора?
Algomus
Участник -
Этот ответ был изменен 1 год назад от
-
АвторСообщения