Страница 259 из 320 ПерваяПервая ... 159209249257258259260261269309 ... ПоследняяПоследняя
Показано с 2,581 по 2,590 из 3198

Тема: Панели оператора СП3xx. Вопросы и ответы

  1. #2581

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    умножить на минус чтоб получить положительное и потом вычесть?
    просто конструкция температура + дельта не работает?
    Так тоже пробовал.
    Выводится фигня, типа 6.86+05.
    Последний раз редактировалось stdenits; 02.11.2022 в 13:47.

  2. #2582

    По умолчанию

    Цитата Сообщение от stdenits Посмотреть сообщение
    Дельта вносится пользователем через элемент Ввод данных с типом Word и форматом Dec.
    Применили Int потому что для дельты, в нашем случае, достаточно только целых чисел.

    Если я ошибаюсь - поправьте, пожалуйста.
    Вам надо либо дельту сделать Float, либо конвертировать INT во Float и только потом совершать математические действия.

  3. #2583

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    либо конвертировать INT во Float и только потом совершать математические действия.
    Каким способом можно выполнить приведение типов для случая конфигуратора панели?

    (float)delta; ?
    float tmp_delta = delta; ?

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

    По умолчанию

    Цитата Сообщение от stdenits Посмотреть сообщение
    А в чём заключается проблема для компилятора?.
    Видимо kondor3000 и capzap имели ввиду что в
    Код:
    tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta * -1));
    можно вынести знак за скобку.
    Код:
    tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - ( - (delta * 1)));
    После вспомнить таблицу умножения на 1:
    Код:
    tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - ( - delta));
    После вспомнить Великое Правило про пару минусов дающих плюс:
    Код:
    tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) + delta);
    А дальше сказку как стоял витязь перед камнем, а нём:
    "Налево пойдешь - коня потеряешь.
    Направо пойдешь - коня потеряешь.
    Прямо пойдешь - коня потеряешь.
    Назад пойдешь - коня потеряешь"
    Т.е. не пофиг ли что на камне написано, всё равно пешком идти.
    Код:
    tmp_val = DWord_2_Float(temp_value) + delta;
    --
    Код:
    Каким способом можно выполнить приведение типов для случая конфигуратора панели?
    (float)delta; ?
    float tmp_delta = delta; ?
    Видимо оба - и явный и неявный.
    Последний раз редактировалось Валенок; 02.11.2022 в 15:10.

  5. #2585

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Видимо оба - и явный и неявный.
    И оба не сработали.

    Даже так попробовал:
    Код:
    tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta * -1.0));
    И так:
    Код:
    tmp_val = DWord_2_Float(temp_value) + (delta * 1.0);
    Почему тогда с положительной дельтой всё хорошо?

    Цитата Сообщение от Валенок Посмотреть сообщение
    Код:
    tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta * -1));
    можно вынести знак за скобку.
    Я как бы умножал на -1, чтобы сделать из отрицательной дельты - положительную.
    10 - 3 = 7;
    10 + (-3) = 7;
    10 - (-3 * -1) = 7;
    Поэтому у меня всё правильно.

    Пока не понимаю, что за фигня происходит. Попробую проэмулировать поэтапно в свободное время.
    Может быть разработчикам покажется что-то сверх-очевидным и они подскажут, что не так.
    Последний раз редактировалось stdenits; 02.11.2022 в 15:47.

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

    По умолчанию

    Предлагаю прям в панели вывести в hex'e все 8 символов для PSW[300..301] и сюда их. Со всеми исходными.

    --
    И оба не сработали.
    Ну тогда явное-преявное:
    tmp_val=(float)temp_value + (float)delta;
    Последний раз редактировалось Валенок; 02.11.2022 в 15:57.

  7. #2587

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    DWORD это 2 регистра, их и надо передавать. Если панель мастер, то для правильной передачи надо в конфигураторе панели в Настройках проекта/Устройство поставить галку поменять местами регистры.
    Галочка стоит. Хорошо, я правильно понимаю, что один PFW регистр мне нужно передать в два регистра ПРки? А потом их соединить в один?

  8. #2588

    По умолчанию

    Цитата Сообщение от Flying Labrador Посмотреть сообщение
    Галочка стоит. Хорошо, я правильно понимаю, что один PFW регистр мне нужно передать в два регистра ПРки? А потом их соединить в один?
    Не написали самого главного, ваша переменная целочисленная или FLOAT?
    Для целочисленной:
    Одну переменную DWORD (2 регистра) с помощью функц. области скопировать из PFW в регистр 4х512, а в ПР слейве собрать переменную из двух регистров, на скрине 1 Пиём 32 бит переменной.jpg
    Для FLOAT, всё тоже самое, только в ПР вы ставите переменную FLOAT и уже собирать не надо, она и так 2 регистра.
    При неправильном отображении или снять (поставить) галку в панели или в ПР поменять местами старший и младший регистр.
    Последний раз редактировалось kondor3000; 03.11.2022 в 11:01.

  9. #2589

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Не написали самого главного, ваша переменная целочисленная или FLOAT?
    Для целочисленной:
    Одну переменную DWORD (2 регистра) с помощью функц. области скопировать из PFW в регистр 4х512, а в ПР слейве собрать переменную из двух регистров, на скрине 1 Пиём 32 бит переменной.jpg
    Для FLOAT, всё тоже самое, только в ПР вы ставите переменную FLOAT и уже собирать не надо, она и так 2 регистра.
    При неправильном отображении или снять (поставить) галку в панели или в ПР поменять местами старший и младший регистр.
    Спасибо большое, попробую. Переменная — целочисленная

  10. #2590

    По умолчанию

    Касательно моей проблемы.

    Дело было в приведении типов: элемент Ввод данных для переменной дельты имеет тип Word и формат Dec. Переменная, хранящая дельту, имеет тип Int. Решилось всё с помощью преобразования Word_2_Int16(x). Далее тип Float и Int можно нормально складывать и вычитать.
    Последний раз редактировалось stdenits; 06.11.2022 в 10:16.

Страница 259 из 320 ПерваяПервая ... 159209249257258259260261269309 ... ПоследняяПоследняя

Похожие темы

  1. Экспорт CSV в панели СП3xx и порядок квитирования событий
    от theoretician в разделе Панели оператора (HMI)
    Ответов: 30
    Последнее сообщение: 24.08.2021, 16:17
  2. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  3. Сенсорные панели оператора ОВЕН СП3ХХ
    от Боднар Олег Миколайович в разделе Подбор Оборудования
    Ответов: 7
    Последнее сообщение: 17.12.2015, 09:09
  4. СПК 107 в качестве панели оператора
    от Леонид в разделе СПК1хх
    Ответов: 15
    Последнее сообщение: 20.11.2015, 08:17

Ваши права

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