Стартовая страница › Форумы › Понять, как работает ПО › Формулы › сохранение значений по команде
- В этой теме 51 ответ, 6 участников, последнее обновление 6 лет, 6 месяцев назад сделано
Romiros.
-
АвторСообщения
-
20.11.2019 в 11:30 #14138
ViktorDV
УчастникСоздал формулу
public double TokNom(InomCod)
{
int InomCodes[18] = {32, 63, 80, 100, 125, 150, 160, 200, 250, 315, 400, 500, 630, 750, 800, 1000, 1250, 1500};
InomAut = InomCodes[InomCod];
return;
}
Значение InomCod может быть от 0 до 17
Из массива InomCodes под идексом InomCod переменной InomAut присвоить значение массива и передать в канал для передачи на вебсервер.Сервер ругается. Что не так? Подскажите пожалуйста
20.11.2019 в 12:30 #1413920.11.2019 в 13:10 #14141ViktorDV
Участникpublic double TokNom(InomCod)
{
int InomCodes[18] = {32, 63, 80, 100, 125, 150, 160, 200, 250, 315, 400, 500, 630, 750, 800, 1000, 1250, 1500};
InomAut = InomCodes[InomCod];
return InomAut;
}
При передаче в вебсервер формула не компилируется и естественно не работает. Ругается. Канал создан до расчетным.Если галочки в колонке использовать формулу нет, при «исправной» формуле компиляция то должна все равно быть. Ан нет.20.11.2019 в 14:07 #14142ViktorDV
УчастникЗапустить формулу так и не смог. Скада ее не воспринимает
20.11.2019 в 14:48 #14143
manjey73УчастникНу наверное правильно обозвать и писать
public double TokNom(int InomCod) Но лучше сразу double так как вы суда будете пихать Val(XXX)
int[] InomCodes = new int[] { бла, бла, бла };
Короче синтаксис C# надо смотреть. У вас это откуда ?
return InomCodes[InomCod];
ну в общем так как-то
Если галочки нет и формула в самом канале то там можно собаку со свиньей скрещивать, текст игнорируется.
20.11.2019 в 18:06 #14156
MikhailМодераторПросьба указывать, какую ошибку пишет компилятор.
25.11.2019 в 16:14 #14188ViktorDV
УчастникВсе работает. Скрипт создан шарпой. Текст привожу. Переменная в оглавлении должна быть double!!! Это важно!!!
public double TokNom(double InomCod)
{
int[] InomCodes = new int[]
32,63,80,100,125,150,160,200,250,315,400,500,630,750,800,1000,1250,1500};
int x;
x = (int)InomCod;
return InomCodes[x];
}Вдруг кому то пригодится работать с индексами массивов. Пользуйтесь на здоровье!!!!
Вместо
return InomCodes[x];
написал
return InomCodes[(int)InomCod];
увы, скада не работает.25.11.2019 в 16:15 #14189ViktorDV
УчастникВсем спасибо!!!!
25.11.2019 в 16:22 #14190ViktorDV
УчастникПоместить необходимо в справочники/формулы, во входнойм до расчетном канале написать — TokNom (Val(125)) — где 125 номер канала и поставить галочку использовать формулу. Удачи всем!!!
25.11.2019 в 19:36 #14192
MikhailМодераторСпасибо!
26.11.2019 в 15:55 #14198ViktorDV
УчастникВсем доброе время суток!
Делюсь очередной формулой — Определение старшего байта из целого числаpublic double HighByte(double NumbeReg)
{
int x;
x = (int)NumbeReg;
byte HighByte = (byte)(x >> 8); ///старший байт
return HighByte;
}Определение младшего байта из целого числа
public double LowByte(double NumbeReg)
{
int x;
x = (int)NumbeReg;
byte LowByte = (byte)(x & 0xFF); ///младший байт
return LowByte;
}Удачи всем!
Михаил, а Вам за скаду спасибо! С нетерпением жду клонирование в схематике. Много скрипта подключается на шарпе! Делать можно что только пожелаешь!!!!26.11.2019 в 18:16 #14199
MikhailМодераторНебольшое уточнение, в данных формулах старший — 1-й байт и младший — нулевой. Применительно к стандартным регистрам Модбас, байты действительно будут старшим и младшим.
26.11.2019 в 20:02 #14200
manjey73Участникприменительно к Modbus может быть как угодно, зависит от производителей железок.
27.11.2019 в 11:47 #14203ViktorDV
УчастникДоброе время суток!!!!
В железках по протоколу Modbus действительно может быть все что завгодно. 6 блоков управления и защит и все разное до резкой противоположности. Доходит дело даже до абсурда. Да разве только это…На одном из блоков читаю содержание регистров, а параметров и близко то нет. В документации одно, а на самом деле другое…
Но дело как раз и в том что не которые блоки по протоколу Modbus не хотят включатся…. Бьюсь битый час а запустить от кнопки ни в какую. Может чего то неправильно сделал в скаде…. Может в формуле…. В чем может быть причина и на что необходимо обратить внимание? Если нетрудно прошу алгоритм действия. То есть опишите всю последовательность формирование этой команды. За ранее благодарю! Самое интересное на первом этапе проектирования кнопка включение работала даже без передачи значения канала 0xFF00. После завершения проекта та же кнопка перестала работать. Блок ее явно не видит…27.11.2019 в 11:54 #14204ViktorDV
УчастникВ Скаде работаю от имени Админа
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.