Страница 258 из 320 ПерваяПервая ... 158208248256257258259260268308 ... ПоследняяПоследняя
Показано с 2,571 по 2,580 из 3198

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

  1. #2571

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Что значит чаще? Достаточно выходить после каждой операции (при условии отсутствия дичи типа таймаутов более 20..50мс)
    Полностью согласен.

  2. #2572
    Пользователь Аватар для Mike__
    Регистрация
    05.08.2010
    Адрес
    Екатеринбург
    Сообщений
    11

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    Функциональная область? Данные принять через ФО, а обработать в макросе?
    Чаще отдавать ОС панели управление.
    Да, спасибо, из Функц.области работает адекватней. Ещё уменьшил таймаут (PFW28). Теперь нет таких тормозов даже при отпавшем устройстве.

  3. #2573

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Ну что за чушь :

    Тупо логическая ошибка в проекте. Каким нулем ? Каким боком к этому макрос ?
    Cиняя изолента в виде :

    нивелировала симптомы, а не "проблема исчезла".
    Действительно дело было не в макросе. Нашёл причину. Спасибо за мотивацию!

  4. #2574

    По умолчанию

    Здравствуйте, вопрос по рецептам в СП3хх. В рецепте имеются значения которые должны передаваться в ПРку с типом "DWORD". Нужно ли в рецепте выделять по 2 регистра на значение? И воспринимает ли ПРка "DWORD"? Пробовал через копирование регистров из PSW в 4x, однако вылезают пятизначные числа. С отдельным регистром все работает, а вот с последовательностью получается подобная ахинея. Подскажите пожалуйста как это можно реализовать. Панель - мастер, ПР - слейв, это вроде важно.

    Снимок.PNG

  5. #2575

    По умолчанию

    Доброго дня.

    Извиняюсь, если подобное уже спрашивали ранее.

    Мне надо реализовать возможность "дельты" для параметра (сумма или разность с текущим измеренным значением) в макросе.

    Измеренное значение отображается в дисплее с типом DWord и форматом Float.

    Код:
    float tmp_val = 0;
    int delta = 0;
    DWORD temp_value;
    
    tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta * -1));        
    *(float*)(PSW+300) = tmp_val;
    , где:
    delta - переменная типа int, которая хранит собственно дельту;
    tmp_val - переменная типа float, которая хранит промежуточное значение для вычислений;
    temp_value - переменная типа DWord, которая хранит считанный с преобразователя параметр;

    С положительной дельтой всё в порядке, а если дельта отрицательная - происходит переполнение что ли: на дисплее отображается 6.86+??. Типа того.

    Проверял код в эмуляторе Си - всё впорядке:
    Код:
    #include <stdio.h> 
    
    int main (void)
    {    
       float float_var = 10.1;
       int delta = -3;
       
       float temp = delta >= 0 ? float_var + delta : float_var - (delta * -1);
       
       printf("temp: %f\n", temp);
    
       return 0;
    }
    Последний раз редактировалось stdenits; 02.11.2022 в 12:02.

  6. #2576

    По умолчанию

    Цитата Сообщение от Flying Labrador Посмотреть сообщение
    Здравствуйте, вопрос по рецептам в СП3хх. В рецепте имеются значения которые должны передаваться в ПРку с типом "DWORD". Нужно ли в рецепте выделять по 2 регистра на значение? И воспринимает ли ПРка "DWORD"? Пробовал через копирование регистров из PSW в 4x, однако вылезают пятизначные числа. С отдельным регистром все работает, а вот с последовательностью получается подобная ахинея. Подскажите пожалуйста как это можно реализовать. Панель - мастер, ПР - слейв, это вроде важно.

    Снимок.PNG
    DWORD это 2 регистра, их и надо передавать. Если панель мастер, то для правильной передачи надо в конфигураторе панели в Настройках проекта/Устройство поставить галку поменять местами регистры.

  7. #2577

    По умолчанию

    stdenits , для отображения переменной типа INT, в дисплее надо поставить формат DEC.
    INT это 1 регистр, поэтому WORD а не DWORD.
    Не совсем понятно, как разница переменных флоат, у вас получила тип INT ?
    Последний раз редактировалось kondor3000; 02.11.2022 в 11:41.

  8. #2578

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    stdenits , для отображения переменной типа INT, в дисплее надо поставить формат DEC.
    INT это 1 регистр, поэтому WORD а не DWORD.
    Возможно я не так выразился или вы меня не поняли.

    Код:
    // в промежуточную переменную типа Float (tmp_val) заносим сумму или разность считанного значения типа DWord (temp_value) и дельты delta типа Int (в зависимости от знака дельты)
    // Здесь же преобразуем DWord (temp_value) в Float          
    tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta * -1)); 
    // заносим значение промежуточной переменной tmp_val в регистр, например, PSW300 (и 301) - который и отображается в дисплее с типом DWord и форматом Float
    *(float*)(PSW+300) = tmp_val;
    Всё вычисляется и отображается как надо, если delta положительная (допустим, 0, 10 или 30).
    Если delta отрицательная (например, -3) и надо вычислить разность - выводится фигня, типа 6.86+??.
    Последний раз редактировалось stdenits; 02.11.2022 в 12:22.

  9. #2579

    По умолчанию

    Цитата Сообщение от stdenits Посмотреть сообщение
    Возможно я не так выразился или вы меня не поняли.

    Код:
    // в промежуточную переменную типа Float (tmp_val) заносим сумму или разность считанного значения типа DWord (temp_value) и дельты delta типа Int (в зависимости от знака дельты)
    // Здесь же преобразуем DWord (temp_value) в Float          
    tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta * -1)); 
    // заносим значение промежуточной переменной tmp_val в регистр, например, PSW300 (и 301) - который и отображается в дисплее с типом DWord и форматом Float
    *(float*)(PSW+300) = tmp_val;
    Всё вычисляется и отображается как надо, если delta положительная (допустим, 0, 10 или 30).
    Если delta отрицательная (например, -3) и надо вычислить разность - выводится фигня, типа 6.86+??.
    Начинаем сначала.
    Откуда дельта берётся? Почему она INT ?
    Как вы из переменной Float вычитаете INT, этот кусок (DWord_2_Float(temp_value) - (delta * -1)); и что у вас получится ?

  10. #2580

    По умолчанию

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

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Как вы из переменной Float вычитаете INT, этот кусок (DWord_2_Float(temp_value) - (delta * -1)); и что у вас получится?
    А в чём заключается проблема для компилятора?

    1) преобразовали DWord в Float;
    2) если дельта отрицательная - умножаем дельту на -1, чтобы избавиться от знака - у дельты;
    3) вычитаем из п.1 дельту.

    Пробный код из Си компилятора.

    Если я ошибаюсь - поправьте, пожалуйста.

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

Похожие темы

  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

Ваши права

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