Страница 784 из 1042 ПерваяПервая ... 284684734774782783784785786794834884 ... ПоследняяПоследняя
Показано с 7,831 по 7,840 из 10414

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #7831

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    foo := 16#59;
    bar := STRING_TO_WORD(CONCAT(WORD_TO_STRING(SHR(foo, 4)), WORD_TO_STRING(foo AND 16#F)));
    Спасибо, всё работает))) Вложение 49535

  2. #7832
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,838

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Всем привет! У меня с панели читается реальное время тремя WORD ( час, мин, сек) в системе HEX (шестнадцатиричная), а в PLC времени работы считается тремя WORD ( час, мин, сек), в DEC (десятичной системе).
    Мне надо сравнивать время из панели со временем из PLC, секунды с секундами, минуты с минутами и т. д.

    Вложение 49528

    Как просто, желательно в 1-2 строки на языке ST перевести отдельно секунды, минуты и часы из системы HEX в систему DEC ?
    Вообще-то HEX тут не причем, в панели время представлено в BCD формате, т.е в двоично-десятичном формате https://ru.wikipedia.org/wiki/%D0%94...BA%D0%BE%D0%B4

    Байт, представленный в формате BCD, содержит числа от 0 до 99. Каждый десятичный знак занимает 4 бита. Биты 4-7 содержат первую цифру - число десятков, биты 0-3 содержат вторую цифру - число единиц. Формат BCD подобен шестнадцатеричному представлению с ограничением диапазона чисел 0..99 вместо 0.. FF.

    Например: Преобразуем число 51 в BCD формат. 5 - это двоичное 0101, 1 - это 0001. В результате получается байт 0101_0001.

    Для дисплея в панели используется формат HEX потому, что цифры от 0 до 9 для каждой тетрады BCD совпадают с HEX
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #7833
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,838

    По умолчанию

    В одну строчку перевести отдельно секунды, минуты и часы из системы "HEX" (BCD) в систему DEC
    Используем ф-цию BCD_TO_INT из библиотеки Util

    Код:
    PROGRAM PLC_PRG
    VAR
    	hasHEX: INT:=18;
    	minHEX: INT:= 86;
    	sekHEX:INT:=89;
    
    	hasDEC: INT;
    	minDEC: INT;
    	sekDEC: INT;
    END_VAR
    
    hasDEC:= BCD_TO_INT(INT_TO_BYTE(hasHEX));
    minDEC:= BCD_TO_INT(INT_TO_BYTE(minHEX));
    sekDEC:= BCD_TO_INT(INT_TO_BYTE(sekHEX));
    Вложение 49545
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    В одну строчку перевести отдельно секунды, минуты и часы из системы "HEX" (BCD) в систему DEC
    Используем ф-цию BCD_TO_INT из библиотеки Util

    Код:
    PROGRAM PLC_PRG
    VAR
    	hasHEX: INT:=18;
    	minHEX: INT:= 86;
    	sekHEX:INT:=89;
    
    	hasDEC: INT;
    	minDEC: INT;
    	sekDEC: INT;
    END_VAR
    
    hasDEC:= BCD_TO_INT(INT_TO_BYTE(hasHEX));
    minDEC:= BCD_TO_INT(INT_TO_BYTE(minHEX));
    sekDEC:= BCD_TO_INT(INT_TO_BYTE(sekHEX));
    Вложение 49545
    В Util сам исходный код довольно громоздкий, лучше оскатовский вариант BCDC_TO_INT := (in AND 16#0F) + (SHR(in,4) * 10); без моих преобразований в стринг
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  5. #7835

    По умолчанию

    Доброго дня. Пытаюсь настроить обмен данными между ПК-клиентом и ПЛК-сервером через модем ПМ01. В инструкциях и примерах в модуль "Modem" модуля "Modbus(slave)" добавляется PPP_Driver. А для ПЛК 110-30-P-M такой опции нет. Пробовал другую платформу (например, ПЛК 100) - там есть.

  6. #7836

    По умолчанию

    Здравствуйте!
    Разрешите уточнить момент. Необходимо сравнить значения которые могут быть тип WORD, IN, REAL.

    Пример: сравниваем данные типа WORD? как правильно сделать первым или вторым способом.

    VAR
    in1:WORD;
    in2:WORD:=0;
    ---------------
    (* 1 *)
    IF in1 = in2 THEN
    (* 2 *)
    IF (in1 = 0) THEN

    Просто меня волнует как правильно! Склоняюсь что 2 вариант правильный, хотя компилятор кушает оба варианта.

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

    По умолчанию

    Цитата Сообщение от ZETs Посмотреть сообщение
    Просто меня волнует как правильно! Склоняюсь что 2 вариант правильный, хотя компилятор кушает оба варианта.
    Круглые (операторные) скобки нужны для обозначения приоритета во множестве. У Вас всего одно сравнение, поэтому оно и так имеет наивысший приоритет, в связи с этим оба варианта правильно, а второй избыточен
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  8. #7838

    По умолчанию

    Цитата Сообщение от ОлегВ Посмотреть сообщение
    Доброго дня. Пытаюсь настроить обмен данными между ПК-клиентом и ПЛК-сервером через модем ПМ01. В инструкциях и примерах в модуль "Modem" модуля "Modbus(slave)" добавляется PPP_Driver. А для ПЛК 110-30-P-M такой опции нет. Пробовал другую платформу (например, ПЛК 100) - там есть.
    https://owen.ru/product/pm01/example посмотрите примеры. Для ПЛК110 М02 выход в интернет осуществляется по-другому.

  9. #7839

    По умолчанию

    Добрый вечер.
    Для компилятора не критично сравнивать различные числовые типы данных, например число в WORD и INT.
    Он их вроде сравнивает, но не является ли это косячком?

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

    По умолчанию

    Цитата Сообщение от Shade876 Посмотреть сообщение
    Добрый вечер.
    Для компилятора не критично сравнивать различные числовые типы данных, например число в WORD и INT.
    Он их вроде сравнивает, но не является ли это косячком?
    Вас же вроде ни кто не заставляет, приводите к нужному типу данных самостоятельно. Компилятору все равно, он спасибо не скажет, зато Ваш код будет более надежным
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

Страница 784 из 1042 ПерваяПервая ... 284684734774782783784785786794834884 ... ПоследняяПоследняя

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

Ваши права

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