Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Преобразовать 2 канала по int16 в int32
- В этой теме 7 ответов, 2 участника, последнее обновление 4 года, 12 месяцев назад сделано
ppwkh.
-
АвторСообщения
-
08.06.2021 в 11:38 #20034
ppwkh
УчастникЗдравствуйте.
Есть 2 канала, содержащие старший и младший регистры 16-битных значений. Нужно объединить их, чтобы получить 32 битное значение.Заранее спасибо.
08.06.2021 в 12:07 #20035
manjey73УчастникА сразу указать что это 32-х битное значение? Речь о Modbus вообще ?
Читаются данные группой ?08.06.2021 в 13:39 #20037ppwkh
УчастникВсё читается по Modbus-у. Но, как я и писал, в один канал попадают 16-битные данные старшего, а в другой — младшего разрядов. Нужно провести конкатенацию двоичных чисел и записать результат в дорасчётный канал, содержащий 32-битное значение.
Вообще речь об опросе частотника Danfoss Microdrive. Для оптимизации трафика (через GSM) хочу запросы объединить в один пакет. Но, т.к. адресация необходимых мне параметров не смежная, приходится каждый параметр опрашивать индивидуально, а их 10 шт.
Для решения подобной задачи в частотниках (Danfoss, ОВЕН) имеется параметр 8-43 «Конфигурирование чтения PCD порта», куда забиваются номера нужных вам опрашиваемых параметров из списка. Всё прекрасно работает для опроса 16-битных параметров. Для 32-битных приходится адресовываться к старшему и младшему словам. Вот так как-то.08.06.2021 в 13:47 #20038
manjey73УчастникЛадно, не совсем понял, но ща придумаем 🙂
08.06.2021 в 14:07 #20039
manjey73Участникpublic double JoinDword (double lowword, double hiword) { uint wrd1 = Convert.ToUInt32(lowword); uint wrd2 = Convert.ToUInt32(hiword); uint wrdout = wrd1 | (wrd2 << 16); return Convert.ToDouble(wrdout); }Добавляете в справочник формулы, функцию можете по своему назвать, не JoinDword а например просто Dword — public double Dword (double lowword, double hiword) например.
Вызов в дорасчетном канале, первая переменная младшее слово, вторая старшее слово.08.06.2021 в 14:15 #20040
manjey73УчастникА вообще все равно не понял. Если вы в PCD накидываете нужные регистры и это позволяет сделать групповой опрос разбросанных регистров (что-то вроде буфера промежуточного как понимаю), то далее за счет группового запроса вы так же драйвером можете настроить что два соседних регистра это 32-х битная переменная.
08.06.2021 в 15:08 #20041ppwkh
Участник— ага, как бы не так. Ошибка выходит при опросе регистров 29-10 — 29хх.
В PCD в соседние индексы вписываю один и тот-же № параметра.
Кстати, после обесточивания частотника данные настройки обнуляются. Дабы такого не происходило, нужно послать «1» по десятичному адресу 65 кода функции 5 (может кому-то это пригодится).15.06.2021 в 13:53 #20108 -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.