Преобразовать 2 канала по int16 в int32

Просмотр 8 сообщений - с 1 по 8 (из 8 всего)
  • Автор
    Сообщения
  • #20034
    ppwkh
    Участник

    Здравствуйте.
    Есть 2 канала, содержащие старший и младший регистры 16-битных значений. Нужно объединить их, чтобы получить 32 битное значение.

    Заранее спасибо.

    #20035
    manjey73
    Участник

    А сразу указать что это 32-х битное значение? Речь о Modbus вообще ?
    Читаются данные группой ?

    #20037
    ppwkh
    Участник

    Всё читается по Modbus-у. Но, как я и писал, в один канал попадают 16-битные данные старшего, а в другой — младшего разрядов. Нужно провести конкатенацию двоичных чисел и записать результат в дорасчётный канал, содержащий 32-битное значение.
    Вообще речь об опросе частотника Danfoss Microdrive. Для оптимизации трафика (через GSM) хочу запросы объединить в один пакет. Но, т.к. адресация необходимых мне параметров не смежная, приходится каждый параметр опрашивать индивидуально, а их 10 шт.
    Для решения подобной задачи в частотниках (Danfoss, ОВЕН) имеется параметр 8-43 «Конфигурирование чтения PCD порта», куда забиваются номера нужных вам опрашиваемых параметров из списка. Всё прекрасно работает для опроса 16-битных параметров. Для 32-битных приходится адресовываться к старшему и младшему словам. Вот так как-то.

    #20038
    manjey73
    Участник

    Ладно, не совсем понял, но ща придумаем 🙂

    #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) например.
    Вызов в дорасчетном канале, первая переменная младшее слово, вторая старшее слово.

    #20040
    manjey73
    Участник

    А вообще все равно не понял. Если вы в PCD накидываете нужные регистры и это позволяет сделать групповой опрос разбросанных регистров (что-то вроде буфера промежуточного как понимаю), то далее за счет группового запроса вы так же драйвером можете настроить что два соседних регистра это 32-х битная переменная.

    #20041
    ppwkh
    Участник

    — ага, как бы не так. Ошибка выходит при опросе регистров 29-10 — 29хх.
    В PCD в соседние индексы вписываю один и тот-же № параметра.
    Кстати, после обесточивания частотника данные настройки обнуляются. Дабы такого не происходило, нужно послать «1» по десятичному адресу 65 кода функции 5 (может кому-то это пригодится).

    #20108
    ppwkh
    Участник

    @manjey73, спасибо за формулы.

Просмотр 8 сообщений - с 1 по 8 (из 8 всего)
  • Вы должны авторизироваться для ответа в этой теме.