Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Отправка набора байт через Модуль упр.
- В этой теме 23 ответа, 2 участника, последнее обновление 2 года, 9 месяцев назад сделано
Mikhail.
-
АвторСообщения
-
10.09.2023 в 12:10 #29713
manjey73Участникесть набор 8-ми байт HEX
11 22 33 44 55 66 77 88 — если задать фиксировано в модуле автоуправления проблем нет.Как отправить набор байт, где 44 это изменяемый байт в настройках Scada ?
Собственно как сделать канал с фиксированным набором байт, среди которых один надо менять — Уставка параметра ?
10.09.2023 в 12:11 #29714
manjey73УчастникСобственно отправка должна происходить так же через Модуль но не за счет изменения уставки а просто.
11.09.2023 в 09:38 #29715
manjey73УчастникСобственно не увидел, как в Модуле автоуправления в качестве значения команды отправить данные расчетного канала ?
Как это реализовать ?
11.09.2023 в 11:42 #29716
manjey73УчастникБанальный вопрос, при вводе в строке HEX будет работать {n} ?
То есть будет преобразовываться значение канала n в byte ?
-
Ответ изменён 2 года, 9 месяцев назад пользователем
manjey73.
11.09.2023 в 12:27 #29718
MikhailМодераторВ свойствах команды нужно указать канал, через который будет отправляться команда. Затем в формуле канала заменить байт.
Формулы типа {n} и т.п. для HEX не будут работать.11.09.2023 в 12:37 #29719
manjey73Участникв свойствах команды применяется канал, который связан драйвером, а данные надо отправить из расчетного канала, а не связанного с драйвером.
11.09.2023 в 12:39 #29720
manjey73УчастникНу представьте, что это Modbus драйвер — значение получаем из регистра, а при отправке должны подменить значение из другого расчетного канала массивом байт в нужной последовательности. Как он будет сформирован уже дело десятое.
з.ы. плохо, что в МАУ в строке HEX не действует {n} с соответствующим преобразованиями до байта, было бы куда проще и быстрее.
12.09.2023 в 13:25 #29721
MikhailМодераторв свойствах команды применяется канал, который связан драйвером, а данные надо отправить из расчетного канала, а не связанного с драйвером
В выходной формуле канала можно взять данные из другого канала, чтобы рассчитать отправляемое значение.
12.09.2023 в 15:23 #29724
manjey73Участникимеем массив байт, который преобразуем в double и возвращаем в канал
public double MassByte()
{
byte[] kmass = new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x88 };
return BitConverter.ToDouble(kmass, 0);
}это очень маленькое число
-4,051953737621203E-270Но, почему я не могу его отобразить как HEX 16, добавил в форматы HEX c X16
выставил данный формат для отображения и получаю в таблице0000000000000000h
И в чем подвох ?
-
Ответ изменён 2 года, 9 месяцев назад пользователем
manjey73.
12.09.2023 в 22:32 #29738
manjey73Участникнемного для понимания. Я хочу переменную видеть в HEX исполнении.
и если в канале double, представленный массивом 00 00 00 00 00 20 01 88
или обратная последовательность 88 01 20 00 00 00 00 00то в канале хотелось бы видеть 8801200000000000h или 0000000000200188h
а не сплошные нули.
При этом в команде требуется вводить нормальное число, а не 16-чное.Такое возможно ?
13.09.2023 в 11:59 #29752
MikhailМодераторПотому что HEX отображает целую часть числа. Попробуйте в данном случае использовать тип данных канала Integer (Int64 на самом деле).
13.09.2023 в 17:13 #29755
manjey73Участникочень странно, почему это HEX отображает только целую часть числа, а не набор байт канала, будь то double или integer, да хоть что там будет в 8-мь байт записано.
Тут еще немного другая проблема, выставляя HEX, и команда становится как ввод HEX числа, а мне надо чтобы команда продолжала записывать обычное число, так как не предусмотрено ввода 1A, 1B, 2C и так далее.
-
Ответ изменён 2 года, 9 месяцев назад пользователем
manjey73.
13.09.2023 в 17:23 #29757
manjey73УчастникКаким образом происходит отображение HEX? в обратную сторону?
попробовал поставить Integer и формат HEX
входная формула для примера
public long SetMass()
{
byte[] m = new byte[] {0x88, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 };
long ml = BitConverter.ToInt64(m, 0);
return ml;
}Показывает 200188h — если я этот канал отправлю в устройство, передастся так, как я задал массив байт?
Ну, команда при этом опять 16-чное число. Есть возможность изменить поведение на ввод простого числа?13.09.2023 в 17:29 #29758
manjey73Участникз.ы. с командой разобрался.
Если не задавать формат команды, то берется из Формата.
Если задать формат команды, будет применен он.с Integer вариант подойдет, надо будет только формулу правильно сделать.
Спасибо.последовательность отправки понять только, если я это значение возьму другим каналом…
В канале все равно ведь хранится double или при параметре Integer уже хранится long ?13.09.2023 в 19:50 #29759
manjey73УчастникНе могу понять что не так с формулами.
Например Val() при выставленном типе канала Integer ?
Аналогично SetVal -
Ответ изменён 2 года, 9 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.