Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 4836

Тема: разные вопросы новичка

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Здравствуйте. Возник вопрос касательно чтения значения мощности с счетчика WB-MAP3e на ПР205. Видел на форуме, что возникала такая проблема, но она была решалась в Codesys, а не в owen logic. Связь ПР с счетчиком есть, значения напряжения считываются исправно, а вот значения суммарной активной мощности нет. Если кто-нибудь сталкивался, то не могли бы подсказать, как справиться с данной проблемой?код.pngрегистр мощности.pngрегистр напряжения.pngрегистры.png

  2. #2

    По умолчанию

    Цитата Сообщение от Nsft Посмотреть сообщение
    Здравствуйте. Возник вопрос касательно чтения значения мощности с счетчика WB-MAP3e на ПР205. Видел на форуме, что возникала такая проблема, но она была решалась в Codesys, а не в owen logic. Связь ПР с счетчиком есть, значения напряжения считываются исправно, а вот значения суммарной активной мощности нет. Если кто-нибудь сталкивался, то не могли бы подсказать, как справиться с данной проблемой?код.pngрегистр мощности.pngрегистр напряжения.pngрегистры.png
    На ПР у вас ничего не выйдет, он не умеет работать с 64 битными переменными, всё что вы можете прочитать 4 регистра, 1 Счётчик WB-MAP3E.png
    и их передать куда то, где можно пересчитать.
    Вот тема https://owen.ru/forum/showthread.php...light=WB-MAP3e
    Последний раз редактировалось kondor3000; 12.03.2024 в 14:15.

  3. #3

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    На ПР у вас ничего не выйдет, он не умеет работать с 64 битными переменными, всё что вы можете прочитать 4 регистра, и их передать куда то, где можно пересчитать.
    Вот тема https://owen.ru/forum/showthread.php...light=WB-MAP3e
    Откуда там 64 бита? Все регистры у WirenBoard в 16 или 32 бита, обычные (кроме накопленных). Он же напряжения читает 32-юитными регистрами нормально. И на его картинке написано u32 или s32 - 32 бита.
    Вот карта: https://wirenboard.com/wiki/WB-MAP3E_Data_Registers_v.2
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  4. #4

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Откуда там 64 бита? Все регистры у WirenBoard в 16 или 32 бита, обычные (кроме накопленных). Он же напряжения читает 32-юитными регистрами нормально. И на его картинке написано u32 или s32 - 32 бита.
    Вот карта: https://wirenboard.com/wiki/WB-MAP3E_Data_Registers_v.2
    Умножать 3 регистр на 2^32 степени и 4 регистр на 2^48 степени вы чем будете? Посмотрите мой скрин или свою ссылку до конца.
    Кроме того, читать надо все 4 регистра разом, а ПР даже этого не может.

    0x2200
    младшая часть — значение оставляем «как есть» : 0хb4df hex = 46303 dec
    0x2201
    значение умножаем на 2^16 : 0x0dff hex = 3583 dec, 3583 * 65536 = 234815488
    0x2202
    значение умножаем на 2^32 : 0 * 4294967296 = 0
    0x2203
    значение умножаем на 2^48 : 0 * 281474976710656 = 0
    Суммируем результаты : 46303 + 234815488 + 0 + 0 = 234861791. Сумму умножаем на 0.00001 (переносим запятую на 5 знаков влево).
    В итоге получаем 2348.61791 КВт /час
    Последний раз редактировалось kondor3000; 12.03.2024 в 15:41.

  5. #5

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Умножать 3 регистр на 2^32 степени и 4 регистр на 2^48 степени вы чем будете?
    Ааа!! Точно же! Но у него читается из регистра 0, поэтому я занимался только этой задачей.
    А вот WirenBoard я обожаю пламенной любовью как раз в этом ужасном стиле отображения данных. Там вон для модуля измерения 2 каналов 4..20 мА даже масштабирования нет, и чтобы получить миллиамперы, надо умножать значение из регистра на 3.125*10^-2. Это ЖЕСТЬ. Я иногда хочу убить их за такие скрытые сюрпризы, как и здесь.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  6. #6

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    На ПР у вас ничего не выйдет, он не умеет работать с 64 битными переменными, всё что вы можете прочитать 4 регистра
    Я бы решал задачу вывода 64 разрядного числа на экран методами длинной арифметики. На ST это совсем не составит труда.
    Пусть имеется 4 регистра по 16 разрядов. Их можно для упрощения перенести в 4 32 разрядных - повысив ёмкость.
    Далее, алгоритм вывода числа на экран на псевдокоде
    Код:
    uint x=123456;
    char digits[30]; //или сколько разрядов будет занимать число
    uint count=0;
    do
    {
      digits[count++] = (x % 10); //остаток от деления на 10
      x = x / 10;  //целочисленное деление на 10;
    }while(x>0);
    
    //теперь в массиве digits цифры выводимого числа в обратном порядке
    //вывод массива
    for(int i=count; i>0; i--)
      putchar(digits[i-1]);
    Для длинной арифметики делить можно вычитанием или имитацией деления в столбик - как раз и пригодится свойство превышения разрядности переменных над разрядностью реального содержимого.
    Можно и деление на 10 заменить делением на 10^5, что ускорит получение групп цифр для вывода, а последний остаток - выводить отдельно вместе с элементом текст, содержащим символ "точка". Выводить со значащими нулями.
    Т.е. вместо одного числа будет выведено 5 при помощи 6 элементов (5 вывод int, 1 вывод text).

    Может я чуть сумбурно описал, но алгоритмы длинной арифметики часто используются.

    2 в 64 степени = 18 446 744 073 709 551 616, т.е. всего 20 цифр.
    Последний раз редактировалось FPavel; 12.03.2024 в 18:19.

  7. #7
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,138

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    На ПР у вас ничего не выйдет, он не умеет работать с 64 битными переменными, всё что вы можете прочитать 4 регистра, 1 Счётчик WB-MAP3E.png
    и их передать куда то, где можно пересчитать.
    Вот тема https://owen.ru/forum/showthread.php...light=WB-MAP3e
    Так человек читает регистр 0х1300, а он 32 бит со знаком. У вас регистр 0х2200 (64 бит без знака). Или он не то что нужно читает?
    Последний раз редактировалось Dimensy; 12.03.2024 в 20:39.

  8. #8

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Так человек читает регистр 0х1300, а он 32 бит со знаком. У вас регистр 0х2200 (64 бит без знака). Или он не то что нужно читает?
    Весь и вопрос в том, что часть работает и читается (16 и 32 разрядные), а часть проблема с чтением (64 разрядные) с 0х2200 по 0х2203,
    не считая остального, умножение, сложение 20 разрядных чисел и деление 20 разрядного на 10^5, а потом и вывод на экран,
    которое возможно решить, как оказалось.
    Последний раз редактировалось kondor3000; 12.03.2024 в 21:35.

  9. #9

    По умолчанию

    Цитата Сообщение от Nsft Посмотреть сообщение
    Здравствуйте. Возник вопрос касательно чтения значения мощности с счетчика WB-MAP3e на ПР205. Видел на форуме, что возникала такая проблема, но она была решалась в Codesys, а не в owen logic. Связь ПР с счетчиком есть, значения напряжения считываются исправно, а вот значения суммарной активной мощности нет. Если кто-нибудь сталкивался, то не могли бы подсказать, как справиться с данной проблемой?код.pngрегистр мощности.pngрегистр напряжения.pngрегистры.png
    Попробуйте считывать как два 32-битных регистра, потом пропустить через макрос rDIV (деление 64-битных чисел представленных как 2 32-битных)
    Он, кстати, покажет остаток от деления, который можно отображать как десятичную часть.
    Owen.jpg
    Код:
    function_block rDIV
    
        var_input
           x1h : udint;
           x1l : udint;
           x2h : udint;
           x2l : udint;
        end_var
    
        var_output
           QH : udint;
           QL : udint;
           
           MH : udint;
           ML : udint;
        end_var
    
        var
           cnt : udint; 
        end_var
    
        if x2h + x2l = 0 then return; end_if
    
        cnt := 1; QH := 0; QL := 0;
        
        while x2h < 2147483648 do
            x2h := shl(x2h, 1);
            if x2l > 2147483647 then x2h := x2h + 1; end_if
            x2l := shl(x2l, 1); cnt := cnt + 1;
        end_while
        
        while cnt > 0 do
            QH := shl(QH, 1);
            if QL > 2147483647 then QH := QH + 1; end_if
            QL := shl(QL, 1);
    
            if x1h > x2h then
                x1h := x1h - x2h; QL := QL + 1;
                if x1l >= x2L then
                    x1l := x1l - x2l;
                else
                    x1l := x2l - x1l; x1l := 4294967295 - x1l; x1l := x1l + 1;
                    x1h := x1h - 1;
                end_if
            elsif x1h = x2h then 
                if x1l >= x2l then
                    x1h := 0; x1l := x1l - x2l; QL := QL + 1;
                end_if
            end_if
    
            x2l := shr(x2l, 1);
            if x2h > shl(shr(x2h, 1), 1) then x2l := x2l + 2147483648; end_if
            x2h := shr(x2h, 1);
    
            cnt := cnt - 1;
        end_while
        MH := x1h; ML := x1l;
    
    end_function_block

  10. #10

    По умолчанию

    Цитата Сообщение от Nsft Посмотреть сообщение
    Здравствуйте. Возник вопрос касательно чтения значения мощности с счетчика WB-MAP3e на ПР205. Видел на форуме, что возникала такая проблема, но она была решалась в Codesys, а не в owen logic. Связь ПР с счетчиком есть, значения напряжения считываются исправно, а вот значения суммарной активной мощности нет. Если кто-нибудь сталкивался, то не могли бы подсказать, как справиться с данной проблемой?код.pngрегистр мощности.pngрегистр напряжения.pngрегистры.png
    На основе макроса rDIV можно сделать макрос dig64, который разложит 64-битное число на десятичные цифры до любого разряда:
    Код:
    function_block dig64
    
        var_input
            xH : udint;
            xL : udint;
        end_var
    
        var_output
           d0 : udint;
           d1 : udint;
           d2 : udint;
           d3 : udint;
           d4 : udint;
           d5 : udint;
           d6 : udint;
           d7 : udint;
           d8 : udint;
           d9 : udint;
           d10 : udint;
           d11 : udint;
           d12 : udint;
           d13 : udint;
           d14 : udint;
           d15 : udint;
           d16 : udint;
           d17 : udint;
           d18 : udint;
           d19 : udint;
           d20 : udint;
           d21 : udint;
           d22 : udint;
           d23 : udint;
           d24 : udint;
           d25 : udint;
           d26 : udint;
           d27 : udint;
           d28 : udint;
           d29 : udint;
           d30 : udint;
        end_var
    
        var
           div : rDIV;
           qH : udint;
           qL : udint;
        end_var
    
        div(x1h:=xH, x1l:=xL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d0);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d1);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d2);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d3);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d4);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d5);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d6);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d7);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d8);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d9);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d10);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d11);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d12);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d13);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d14);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d15);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d16);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d17);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d18);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d19);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d20);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d21);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d22);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d23);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d24);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d25);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d26);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d27);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d28);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d29);
        div(x1h:=qH, x1l:=qL, x2h:=0, x2l:=10, QH=>qh, QL=>ql, ML=>d30);
    end_function_block
    Owen.jpg

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. ПЛК 110 - Вопросы новичка?
    от di-s в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 15.04.2025, 16:38
  2. Вопросы новичка!!!
    от sau в разделе ПЛК1хх
    Ответов: 42
    Последнее сообщение: 02.05.2022, 19:57
  3. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 14:39
  4. Вопросы полного новичка
    от Korion в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.02.2010, 10:08
  5. Вопросы новичка по ПЛК
    от Ollegator в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.07.2009, 09:29

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •