Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 29 из 29

Тема: Использование PFW регистров в скриптах для СП310

  1. #21

    По умолчанию

    Панели пока нет под рукой. Попробую вечером.
    Пока хотел бы разобраться.
    Кто то же уже использовал FLOAT переменные в макросах.

    Хотелось бы взглянуть на чтение и запись в PFW... А то как то все методом проб и ошибок.

    И я надеюсь это многим будет полезно!

  2. #22

    По умолчанию

    В руководстве пользователя:

    Reads(PLC, 2, MODBUS_RTU_REG_4X, 4, 2, &ArrValue);

    По этому по аналогии и предположил:
    Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 2, fValue);

    А почему здесь 4
    Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 4, fValue);

    Четыре байта?

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

    По умолчанию

    Цитата Сообщение от GSK Посмотреть сообщение
    В руководстве пользователя:

    Reads(PLC, 2, MODBUS_RTU_REG_4X, 4, 2, &ArrValue);

    По этому по аналогии и предположил:
    Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 2, fValue);

    А почему здесь 4
    Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 4, fValue);

    Четыре байта?
    Предопределенные типы
    TYPE_BIT = 1
    TYPE_BYTE = 2
    TYPE_WORD = 3
    TYPE_DWORD = 4

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

  4. #24

    По умолчанию

    Понял. Спасибо.
    Плохо что нет эмуляции макросов...(((

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

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    А разве так не работает?
    float Value = 123.4;
    int Adr =701;
    Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_DWORD, Value);
    Так не работает

    А так работает
    Код:
    float Value = 123.4;
    int Adr =700;
    Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_DWORD, Float_2_DWord(Value));
    Еще пример, рабочий
    Код:
    float a, b, result[4];
    Reads(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 2, &a);	//Читать из PFW300 значение "a" (Float)
    Reads(HMI_LOCAL_MCH, 0, TYPE_PFW, 302, 2, &b);	//Читать из PFW302 значение "b" (Float)
    /* Или вариант с функцией READ()
    Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 0, TYPE_DWORD, &a);
    Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 302, 0, TYPE_DWORD, &b);
    */
    result[0]=a+b;
    result[1]=a-b;
    result[2]=a*b;
    
    if(b!=0)
    result[3]=a/b;
    
    Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, 304, 8, result);	//Записать в PFW304, PFW306, PFW308, PFW310 результаты вычислений в формате Float
    По этому такая конструкция тоже работает
    Код:
    float Value[1] = {567.8};
    int Adr =700;
    Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 2, Value);
    Последний раз редактировалось petera; 13.04.2017 в 21:07.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  6. #26

    По умолчанию

    GSK, если усложнение себе жизни не самоцель (как у некоторых), то просто перед вызовом макроса забирайте данные из PFW в PSW, а после вызова копируйте их из PSW в PFW. В таком стиле:

    Безымянный.png

  7. #27

    По умолчанию

    Rake Runner спасибо.
    Такой вариант я тоже использую...

  8. #28

    По умолчанию

    Подскажите пожалуйста что не так?

    ;
    float fValue;
    int Adr=0;
    int OFFSET=0;

    Вот такое не работаетю Панель виснет:
    *(float*)(PSW+379) = 11.5;
    fValue = *(float*)(PSW+379);
    Adr = 701 + OFFSET;
    Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_DWORD, Float_2_DWord(fValue));

    Вот такое работает:
    fValue = 123.2;
    Adr = 701 + OFFSET;
    Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_DWORD, Float_2_DWord(fValue));

    Вот такое не работаетю Панель виснет:
    *(float*)(PSW+379) = 11.5;

    Мозги уже кипят(((

  9. #29
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    *(float*) должны находиться по четным адресам.

    Код:
    *(float*)(PSW+380) = 11.5;
    fValue = *(float*)(PSW+380);
    - и все будет нормально.

Страница 3 из 3 ПерваяПервая 123

Похожие темы

  1. Плк 110 + 2 сп310
    от Kostennikov в разделе Помощь Разработчикам
    Ответов: 4
    Последнее сообщение: 12.07.2016, 12:59
  2. Прозрачность. СП310
    от _Алексей_ в разделе Панели оператора (HMI)
    Ответов: 2
    Последнее сообщение: 14.06.2016, 12:11
  3. СП310+ПЛК110-60[M02]
    от AlekseyK в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 27.04.2016, 01:34
  4. использование регистров 3х и 4х
    от feniks13 в разделе Панели оператора (HMI)
    Ответов: 3
    Последнее сообщение: 17.09.2014, 23:35
  5. Ответов: 5
    Последнее сообщение: 15.12.2011, 15:56

Ваши права

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