Страница 284 из 404 ПерваяПервая ... 184234274282283284285286294334384 ... ПоследняяПоследняя
Показано с 2,831 по 2,840 из 4801

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

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

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

    По умолчанию

    Цитата Сообщение от grenz Посмотреть сообщение
    Красиво, но, все-таки, немного некорректно. В режиме эмуляции, до старта, даем 1 на несколько входов (I1,I2,I5). Запускаем эмуляцию, и на выходах (Q1,Q2,Q5) имеем 1. А задача несколько иная: выдать один и только один сигнал.
    При возникновении нескольких фронтов (спадов) одновременно придется вводить приоритет:
    Код:
    function_block Tapki //имя функционального блока.
    
        var_input //объявление входных переменных
            I1,I2,I3,I4,I5,I6,I7,I8:bool;
        end_var
    
        var_output //объявление выходных переменных
            Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8: bool;
        end_var
    
        if (I1 or I2 or I3 or I4 or I5 or I6 or I7 or I8) xor
            (Q1 or Q2 or Q3 or Q4 or Q5 or Q6 or Q7 or Q8) then
            Q1 := I1; if I1 then return; end_if
            Q2 := I2; if I2 then return; end_if
            Q3 := I3; if I3 then return; end_if
            Q4 := I4; if I4 then return; end_if
            Q5 := I5; if I5 then return; end_if
            Q6 := I6; if I6 then return; end_if
            Q7 := I7; if I7 then return; end_if
            Q8 := I8; if I8 then return; end_if
        end_if
    
    end_function_block

  2. #2

    По умолчанию

    Это аналогично следующему:
    Код:
      if b=1 or b=2 or b=4 or b=8 .... then
        a := b;
      end_if
    Т.е. любое значение имеющее один единственный бит равный 1-е, будет защелкнуто в a-переменной.
    Отсюда, два и более бит, равные 1-е защелкнуты не будут (игнорирование).

  3. #3

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Это аналогично следующему:
    Код:
      if b=1 or b=2 or b=4 or b=8 .... then
        a := b;
      end_if
    Т.е. любое значение имеющее один единственный бит равный 1-е, будет защелкнуто в a-переменной.
    Отсюда, два и более бит, равные 1-е защелкнуты не будут (игнорирование).
    Неправильно перевели, тут надо через els if, иначе на всё числа будет реагировать.

    Блин, это не биты, отзываю замечание...)

  4. #4
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,663

    По умолчанию

    Могу добавить, что если понадобится обратная логика, в смысле, "кто последний встал, того и тапки", вот здесь обсуждали:
    https://owen.ru/forum/showthread.php?t=12691&page=62
    Там ещё много чего есть:
    https://owen.ru/forum/showthread.php?t=12691&page=63
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  5. #5

    По умолчанию

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

  6. #6

    По умолчанию

    Цитата Сообщение от 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.

  7. #7

    По умолчанию

    Цитата Сообщение от 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

  8. #8

    По умолчанию

    Цитата Сообщение от 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.

  9. #9

    По умолчанию

    Цитата Сообщение от 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

  10. #10

    По умолчанию

    Цитата Сообщение от 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.

Страница 284 из 404 ПерваяПервая ... 184234274282283284285286294334384 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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