Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 28

Тема: дополнительный код в ST

  1. #1

    По умолчанию дополнительный код в ST

    Добрый день!
    Помогите пож передать по MODBUS отрицательное число от мастера (ПР103) слейву.
    В техподдержке сказали, что при отправке целочисленного числа оно из десятичного кода конвертируется в 16 ричный и отправляется. Тут у меня проблем нет, со слейвом работаем штатно.
    Но как передать отрицательное число? В ST целочисленное больше нуля, соответственно я не могу его сразу в регистр отправить.
    Прочитал что работа с отрицательными целыми числами представляется в двоичном формате и потом конвертируется в 10-ричный (дополнительный код).
    Вопрос!
    Как работать c двоичном коде в ST?
    Может у кого уже есть наработки с дополнительным кодом?

  2. #2
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,054

    По умолчанию

    Помогите пож передать по MODBUS отрицательное число от мастера (ПР103) слейву.
    слейву := 0 - 7; //отправить -7

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

    По умолчанию

    Мне кажется там всё не просто, а очень просто, в смысле что код числа представляет отрицательное число - указывает старший бит кода числа, алгоритм вычисления модуля тоже очень простой, мне понравился как это делает Пётр из Минска, в смысле, он инвертирует все биты кода числа + 1, всё!
    Вы заметили, что я ничего не пишу про тип данных, в смысле, это INT16 или INT32, короче, это и не требуется, механизм(способ) универсальный!
    Последний раз редактировалось Сергей0308; 13.03.2025 в 08:48.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  4. #4

    По умолчанию

    Да, поддержу Сергей0308 - число для отправки перед помещением в переменную подвергнуть преобразованию.
    Как понимаю, в ПР работа идёт с вещественным числом и лишь для передачи по Modbus производится сжимание до одного целочисленного регистра (16 разрядное целое со знаком).

    Язык ST в OL на данный момент не поддерживает побитовые операции с целыми числами, поэтому преобразование сделаете на FBD.
    Если число положительное, то просто преобразуете F -> I.
    Если число отрицательное, то по порядку ABS, F -> I, NOT поразрядное, +1.
    При помощи SEL поместите результат ветвления в переменную.

    Преобразования для получения дополнительного кода описаны в статье Wikipedia - это как раз NOT и +1.

  5. #5

    По умолчанию

    Цитата Сообщение от kovalich Посмотреть сообщение
    Добрый день!
    Помогите пож передать по MODBUS отрицательное число от мастера (ПР103) слейву.
    В техподдержке сказали, что при отправке целочисленного числа оно из десятичного кода конвертируется в 16 ричный и отправляется. Тут у меня проблем нет, со слейвом работаем штатно.
    Но как передать отрицательное число? В ST целочисленное больше нуля, соответственно я не могу его сразу в регистр отправить.
    Прочитал что работа с отрицательными целыми числами представляется в двоичном формате и потом конвертируется в 10-ричный (дополнительный код).
    Вопрос!
    Как работать c двоичном коде в ST?
    Может у кого уже есть наработки с дополнительным кодом?
    Вот макросы и функц. блоки (ФБ) на ST.
    Функции FLOAT_TO_INT и INT_TO_FLOAT на ST____ https://owen.ru/forum/showthread.php...821#post429821
    Последний раз редактировалось kondor3000; 13.03.2025 в 08:52.

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,575

    По умолчанию

    возможно на ST это не так сложно выглядит = ( (65536 - abs_negativ_num) % (65536) )
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  7. #7
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,054

    По умолчанию

    Ужос. Этож надо так мозг засрать каким то дополнительным кодом.
    ДОПОЛНИТЕЛЬНЫЙ до чего? До нуля!
    Если к хреновине прибавить (дополнить) фиговину и получится 0, то фиговина и есть дополнительный код.
    А задача:
    "Хреновина + фиговина = 0
    Чему равна фиговина?"
    безусловно требует симпозиума ведущих умов планеты.

  8. #8
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,575

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Ужос. Этож надо так мозг засрать каким то дополнительным кодом.
    ДОПОЛНИТЕЛЬНЫЙ до чего? До нуля!
    Если к хреновине прибавить (дополнить) фиговину и получится 0, то фиговина и есть дополнительный код.
    А задача:
    "Хреновина + фиговина = 0
    Чему равна фиговина?"
    безусловно требует симпозиума ведущих умов планеты.
    Вы перепутали раздел, в ОЛ нет отрицательных чисел и они все 32х разрядные
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  9. #9
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,054

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Вы перепутали раздел, в ОЛ нет отрицательных чисел и они все 32х разрядные
    Вы перепутали планету))
    Целых отрицательных чисел в замкнутом как циферблат* круге не существует не только в ОЛ, но и вообще в текущей цифровой технике этой планеты.
    И ввиду этого всё высказанное мной выше остается действительным не только в ОЛ, но и на любой цифровой технике этой планеты на текущий момент.

    *Что-то не наблюдаю часов с отрицательными числами. Но так же не наблюдаю ни у кого затруднений для выяснения, во сколько нужно выехать, если матч/кино/.. начинается в 00:30, а дорога занимает 4 часа. Выехать же нужно в -3.5 часа.


    Хреновина + фиговина = 0
    Чему равна фиговина?
    Последний раз редактировалось Валенок; 13.03.2025 в 10:01.

  10. #10
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,575

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    слейву := 0 - 7; //отправить -7
    если Вы про этот циферблат, то в ОЛ такая запись будет 32#UDINT#0 - 32#UDINT#7 и это далеко не то что нужно слейву с его 16разрядным словом
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

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

Похожие темы

  1. дополнительный вход EN
    от Keldish в разделе Среда программирования OWEN Logic
    Ответов: 0
    Последнее сообщение: 01.03.2016, 11:37
  2. Ответов: 2
    Последнее сообщение: 26.04.2012, 08:29

Метки этой темы

Ваши права

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