Показано с 1 по 5 из 5

Тема: Панель СП310Р. Переменная Float, сравнение

  1. #1

    По умолчанию Панель СП310Р. Переменная Float, сравнение

    Имеется данная панель, с контроллера получаю данные в формате float через макрос и пишу во внутреннюю переменную.
    WORD ArrValue[2];
    DWORD dwVar=0;
    BYTE byVar1=0;
    BYTE byVar2=0;
    BYTE byVar3=0;
    BYTE byVar4=0;
    float fValue;
    Reads(DOWNLOAD, 205, MODBUS_RTU_REG_4X, 20, 2, &ArrValue);
    fValue = *(float*)(ArrValue);
    *(float*)(PSW+300) = fValue;
    byVar1 = LOBYTE(PSW[300]);
    byVar2 = HIBYTE(PSW[300]);
    byVar3 = LOBYTE(PSW[301]);
    byVar4 = HIBYTE(PSW[301]);
    PSW[500] = MAKEWORD(byVar2,byVar1);
    PSW[600] = MAKEWORD(byVar4,byVar3);
    dwVar=MAKEDWORD(PSW[500],PSW[600]);
    *(DWORD*)(PSW+350)= dwVar;

    Вопрос вот в чем, мне надо сравнить полученное значение ( с больше 0, меньше 0 и равно 0) и соответственно к примеру зажигать один из трех соответствующих внутренних битов . Но у меня никак не получается получить отрицательное значение, кто сможет подсказать , в чем моя проблема (Пробовал уже и местами менять, и то и се) ?
    P.S. прошу сильно не ругаться, первый раз работаю с овеном и этой панелью.

  2. #2

    По умолчанию

    А если предположить, что сравнить можно не в панели, а в контроллере. Завести еще одно статусное слово в формате WORD и отправлять в панель.
    Там используя эти три бита уже показывать эти "лампочки"

    Пример:
    Float_sts:=0;
    IF Float_tmp=0 THEN Float_sts:= Float_sts OR 1; END_IF;
    +79104444236
    С уважением,
    Лапшин Вячеслав

  3. #3

    По умолчанию

    Да вот с радостью бы так сделал, да софтом на контроллере не я занимаюсь, у меня есть только таблица сигналов с которых надо сделать проект на панели

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

    По умолчанию

    Цитата Сообщение от bonzay74 Посмотреть сообщение
    Имеется данная панель, с контроллера получаю данные в формате float через макрос и пишу во внутреннюю переменную.
    WORD ArrValue[2];
    DWORD dwVar=0;
    BYTE byVar1=0;
    BYTE byVar2=0;
    BYTE byVar3=0;
    BYTE byVar4=0;
    float fValue;
    Reads(DOWNLOAD, 205, MODBUS_RTU_REG_4X, 20, 2, &ArrValue);
    fValue = *(float*)(ArrValue);
    *(float*)(PSW+300) = fValue;
    byVar1 = LOBYTE(PSW[300]);
    byVar2 = HIBYTE(PSW[300]);
    byVar3 = LOBYTE(PSW[301]);
    byVar4 = HIBYTE(PSW[301]);
    PSW[500] = MAKEWORD(byVar2,byVar1);
    PSW[600] = MAKEWORD(byVar4,byVar3);
    dwVar=MAKEDWORD(PSW[500],PSW[600]);
    *(DWORD*)(PSW+350)= dwVar;

    Вопрос вот в чем, мне надо сравнить полученное значение ( с больше 0, меньше 0 и равно 0) и соответственно к примеру зажигать один из трех соответствующих внутренних битов . Но у меня никак не получается получить отрицательное значение, кто сможет подсказать , в чем моя проблема (Пробовал уже и местами менять, и то и се) ?
    P.S. прошу сильно не ругаться, первый раз работаю с овеном и этой панелью.
    Ну и зачем весь этот огород
    Код:
    ........
    byVar1 = LOBYTE(PSW[300]);         
    byVar2 = HIBYTE(PSW[300]);                     
    byVar3 = LOBYTE(PSW[301]);         
    byVar4 = HIBYTE(PSW[301]);
    PSW[500] = MAKEWORD(byVar2,byVar1);                     
    PSW[600] = MAKEWORD(byVar4,byVar3);
    dwVar=MAKEDWORD(PSW[500],PSW[600]); 
    *(DWORD*)(PSW+350)= dwVar;
    читаем из контроллера сразу в переменную float, ее копируем во внутреннюю переменную PSW300 и ее же сравниваем на < = > и зажигаем PSB300 или PSB301 или PSB302
    Код:
    float fValue;
    Read(DOWNLOAD, 205, MODBUS_RTU_REG_4X, 20, 0, TYPE_DWORD, &fValue);
    *(float*)(PSW+300) = fValue;
    if (fValue < 0) SetPSB(300);
    else ResetPSB(300);
    if (fValue == 0) SetPSB(301);
    else ResetPSB(301);
    if (fValue > 0) SetPSB(302);
    else ResetPSB(302);
    ЗЫ.
    Если в PSW300 вместо, например, 5.00 вдруг увидите 2.31830817937898E-41 или 0.00, то включите в настройках порта панели эту галку
    Захват-1.png
    Последний раз редактировалось petera; 04.06.2019 в 23:06.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #5

    По умолчанию

    Спасибо большое за решение.!

Похожие темы

  1. СП310Р
    от nick2015 в разделе Панели оператора (HMI)
    Ответов: 7
    Последнее сообщение: 21.12.2017, 09:47
  2. Панель СП310Б (Переменная String)
    от bdm2010 в разделе Панели оператора (HMI)
    Ответов: 3
    Последнее сообщение: 16.02.2017, 18:08
  3. Архивация на СП310Р
    от ETS в разделе Панели оператора (HMI)
    Ответов: 5
    Последнее сообщение: 31.01.2017, 11:30
  4. пр200 и OPС сервер не читается переменная типа Float
    от Владимир1967 в разделе OPC Серверы
    Ответов: 1
    Последнее сообщение: 28.01.2017, 17:10
  5. Переход от float (Nullable) к просто float
    от ASo в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 12.11.2014, 14:21

Ваши права

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