Стартовая страница › Форумы › Взаимодействие с устройствами › Команда записи младшего или старшего байта.
- В этой теме 43 ответа, 3 участника, последнее обновление 1 год, 7 месяцев назад сделано Yakov_4e.
-
АвторСообщения
-
15.08.2022 в 13:02 #24437manjey73Участник
В принципе если сделать Бинарную команду и как строку то формула может быть одна на все ваши варианты.
15.08.2022 в 13:52 #24442Yakov_4eУчастникОдна формула это было бы отлично. И запись младшего и старшего байтов в dec, через разделитель. Например 01.01, или 23.44.
15.08.2022 в 14:33 #24443manjey73Участниквы формулой можете проверять наличие . или ; и вырезать
То есть если вы команду будете отправлять строкой то
yurstring.Split(«.») превратить вашу строку в массив строк из 2-х ячеек
Далее парсите эти числа в массиве и как надо формируйте число.16.08.2022 в 17:19 #24450MikhailМодераторДля записи Holding Register бинарная команда не требуется, достаточно стандартной.
В канале управления будет формула MyFunc(Val(101), Val(102))
где MyFunc — это функция, которую нужно разработать, а 101 и 102 — номера каналов, в которых хранятся значения. Либо для фиксированных значений MyFunc(1, 2), например.В таблице Формулы:
public double MyFunc(double x, double y) { // здесь Ваш код... }
16.08.2022 в 17:21 #24451MikhailМодераторHolding Register записывается как единое целое. Чтобы записать только один байт, Вам нужно знать текущее значение регистра и на его основе формировать новое.
25.08.2022 в 09:22 #24584Yakov_4eУчастникMikhail, manjey73, возможно Вы меня не так поняли. Значения для записи не должны вычисляться скадой. Оператор решает что, когда и в какой регистр записать. Мне нужна лишь правильная формула для записи значения только младшего или старшего байта одного регистра, либо значений двух байтов одного регистра сразу. Но, к сожалению, я не программист и не знаю как составить правильную формулу. Поэтому я задал здесь этот вопрос.
25.08.2022 в 09:54 #24585manjey73УчастникYakov_4e еще раз, параметры времени и параметры уставок числовых значений это разные вещи.
Например у вас время 23:44 — для этого нужна одна формула чтобы превратить в 0х172С
Или например вам надо ввести просто в один байт 34 а в другой 45 и чтобы это для регистра уже было в HEХ 0x3445 или 0х4534 записалось в регистр. Это будет другая формула…Формула нужна не для вычисления Скадой, а для правильного приведения перед записью в прибор.
То есть Оператор просто знает что ему нужно ввести время 14:00 он так и вводит
Или знает что надо ввести в старший байт 0х34 а в младший 0х45 он так и вводит 3445
Далее уже приведение с учетом как располагаются регистры.Чтобы понять как делать формулу, надо точно понимать, что требуется.
Это можно сделать двумя формулами, а можно одной. Например строка ввода всегда будет выглядеть почти одинаково, например 34:45b — это ввод байт
а 23:44t это ввод времени.
А дальше просто работа со строками, получения чисел в массив, соответствующее приведение и отправка в прибор одним регистром.
Можно в плоть до того, что вводить 45b или 45B — для младшего и старшего байтов.з.ы. Вот говорил Михаилу, подумайте как в окно ввода команды добавить Комментарии ДО ввода команды 🙂 Полезная штука очень, а то так инструкцию на монитор клеить придется 🙂
25.08.2022 в 09:55 #24586manjey73УчастникТут смысл в том, чтобы оператор не сидел с запущенным калькулятором в режиме Программист и не переводил числа времени в hex вид перед посылкой команды
25.08.2022 в 14:23 #24590MikhailМодераторИдея формулы такова, что Вы должны взять текущее значение регистра и сложить его со значением байта, который отправил оператор. Примерно так (не проверял):
public double MergeBytes() { UInt16 x = (UInt16)Val(101); UInt16 y = (UInt16)CmdVal & 0x00FF; return x | y; }
Затем используйте эту формулу в канале управления.
01.09.2022 в 10:28 #24718Yakov_4eУчастникДобрый день. Михаил, добавил Вашу формулу в раздел «Формулы». Веб сервер не запускается.
01.09.2022 в 10:49 #24719MikhailМодераторДобрый день!
Смотрите ошибки в журнале Сервера и исправляйте.
Как я написал выше, формула не проверялась — в бесплатную поддержку это не входит.01.09.2022 в 10:52 #24721Yakov_4eУчастникОриентировочная стоимость формулы?
01.09.2022 в 11:42 #24727MikhailМодераторПо стоимости напишите вопрос на емаил. Но мы можем и здесь вместе посмотреть ошибки из журнала Сервера.
06.09.2022 в 10:18 #24818 -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.