Показано с 1 по 10 из 4042

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,619

    По умолчанию

    Абстрактный пример: если чтение удалось, то пишем в выбранный нами регистр статуса 10. Если не удалось - то 20.

    Код:
    BOOL IsSuccessReading;
    WORD Value;
    
    IsSuccessReading = Read(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, &Value);
    
    PSW[256] = Value;
    
    if (IsSuccessReading)
    {
    	Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 0, TYPE_WORD, 10);
    }    
    else
    {
     	Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 0, TYPE_WORD, 20);   
    }
    Однако, в справке, вызываемой по F1 и в файле руководства пользователя это никак не описано.
    Актуальная версия в pdf (доступно на сайте и диске из комплекта поставки).

  2. #2
    Пользователь
    Регистрация
    18.05.2017
    Адрес
    Чебоксары
    Сообщений
    119

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Абстрактный пример: если чтение удалось, то пишем в выбранный нами регистр статуса 10. Если не удалось - то 20.

    Код:
    BOOL IsSuccessReading;
    WORD Value;
    
    IsSuccessReading = Read(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, &Value);
    
    PSW[256] = Value;
    
    if (IsSuccessReading)
    {
    	Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 0, TYPE_WORD, 10);
    }    
    else
    {
     	Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 0, TYPE_WORD, 20);   
    }


    Актуальная версия в pdf (доступно на сайте и диске из комплекта поставки).
    Спасибо, вопросов больше нет.

  3. #3

    По умолчанию

    Тоже нужен контроль с устройствами.
    1. в выше приведенном примере , что означает PSW[256] = Value; ? что делает?
    2. мне нужен опрос 35 приборов, на каждый писать такой макрос? или как то можно в одном?
    3. еще заметил при потере связи с прибором на панели жутко начинают тормозить кнопки - переключения окон, экранов и тд (10-15 сек длится срабатывание) никак не устраняется?

  4. #4
    Пользователь
    Регистрация
    18.05.2017
    Адрес
    Чебоксары
    Сообщений
    119

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Абстрактный пример: если чтение удалось, то пишем в выбранный нами регистр статуса 10. Если не удалось - то 20.
    Актуальная версия в pdf (доступно на сайте и диске из комплекта поставки).
    Вот и появились сомнения в поддержке старых проектов - это так, к слову.

    Итак, весь обмен перевел в макросы, кроме экранных кнопок, подающих команды

    Евгений, нужно уточнение по тайм-ауту обмена.
    Тайм-аут я понимаю как время, за которое должно ответить устройство. Если устройство не ответило, то
    СП307-Р в функциях чтения-записи возвращает 0, если ответило - 1.
    Теперь о сомнениях.
    После дня упорных экспериментов с макросами, вызов которых выполняется через функциональную область, в проекте указзаную как глобальная,
    мне не удалось установить достоверное время тайм-аута.
    Попробовал, скачав последнее РП, разобраться.
    Указано, что PFW35 содержит тайм-аут в миллисекундах. Читаю его, вывожу на экран - и вижу не тайм-аут, в конфигураторе недоступный для настройки, а параметр "Задержка отправки" в настройках порта PLС. Меняю параметр, загружаю проект - вижу, что не ошибся, PFW35 содержит измененное мной значение.
    Как настроить тайм аут, доступна ли эта настройка, или надо рассчитывать на какой-то фиксированный тайм-аут?
    Может быть Вы под тайм-аутом имеете нечто иное, чем я описал выше?
    Последний раз редактировалось konst_smn; 21.11.2018 в 15:56.

  5. #5
    Пользователь
    Регистрация
    18.05.2017
    Адрес
    Чебоксары
    Сообщений
    119

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    PFW28 -тайм-аут для порта Download
    PFW38 -тайм-аут для порта PLC
    По умолчанию там записано значение 1000(мс)
    Спасибо за пояснения!
    Но у меня опять вопрос .
    Могу ли я в моем макросе инициализации, вызываемом при загрузке проекта однократно, изменить это значение (естественно,
    понимая что могу и увеличить динамику обмена, и, если есть медленно отвечающие устройства, не дождаться ответа от ведомых устройств).
    Ведомые устройства в данном проекте - это ПЧ ESQ600 и ПР200, по 2 штуки, отвечают довольно шустро, думаю что 100 мс для них будет достаточно.

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

    По умолчанию

    Цитата Сообщение от konst_smn Посмотреть сообщение
    Спасибо за пояснения!
    Но у меня опять вопрос .
    Могу ли я в моем макросе инициализации, вызываемом при загрузке проекта однократно, изменить это значение (естественно,
    понимая что могу и увеличить динамику обмена, и, если есть медленно отвечающие устройства, не дождаться ответа от ведомых устройств).
    Ведомые устройства в данном проекте - это ПЧ ESQ600 и ПР200, по 2 штуки, отвечают довольно шустро, думаю что 100 мс для них будет достаточно.
    Ну так попробуйте свой макрос инициализации на пустом проекте. Дисплей с регистромPFW38 Вам в помощь.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  7. #7
    Пользователь
    Регистрация
    18.05.2017
    Адрес
    Чебоксары
    Сообщений
    119

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Ну так попробуйте свой макрос инициализации на пустом проекте. Дисплей с регистромPFW38 Вам в помощь.
    Извините за назойливость и не подумайте, что я пытаюсь учить разработчика - просто пытаюсь понять, правильно ли работаю.
    Перенес часть кода в глобальный макрос, чтобы вызывать из других макросов. Читаю информацию из области регистров с "разрывами", поэтому два чтения
    Код:
    void Read_AC_DR(WORD AddrDev, WORD AddrBufPSW) 
    {
        WORD value;
        WORD arrvalue[4];
        BOOL rez;
        
        // Info from AC Drive 	
        rez = Reads(PLC, AddrDev, MODBUS_RTU_REGS_4X, 41473, 5, &arrvalue);
        if(rez)
        {
    		PSW[AddrBufPSW] = arrvalue[0];
    		PSW[AddrBufPSW + 1] = arrvalue[3];
    		PSW[AddrBufPSW + 2] = arrvalue[4];
        }    
        
    	rez = Read(PLC, AddrDev, MODBUS_RTU_REG_4X, 41496, 0, TYPE_WORD, &value);
        if(rez)
    	{
    		PSW[AddrBufPSW + 3] = value;
        }    
    }
    Вопросs
    1) Надо ли перестраховываться с контролем результата обмена в Reads? У меня проект работает в реальной панели, ведомых устройств физически нет, и сложилось впечатление, ч то в регистры попадает какой-то мусор. Ну тоесть, если чтение прошло с ошибкой, или стработал тайм-аут (у меня он срабатывает), то в arrvalue ничего не записывается? Режим исполнения макроса, где вызывается данная подпрограмма - циклический, 1 секунда, "параллельно".
    2) Правильно ли использование value? Так дается в примерах по всему руководству, но, опять же не пытаясь учить, и понимая, что у вас Си-подобный синтаксис языка, пытаюсь снять свои сомнения. Ну мало ли, опечатка какая вкралась... Люди же используют в тысячах проектов, а я тут умный такой выискался .
    WORD arrvalue[5];
    если бы я пытался взять адрес первого элемента этого массива в Си - я использовал бы не &arrvalue, а просто arrvalue без амперсенда. У Вас адрес берется не так, как в Си?
    Не воспримите как упрек, я понимаю, что могу ошибаться, и что у Вас свой собственный язык, ну просто когда на разных языках, подобных, пишешь, надо избежать ошибок (это я про себя ).
    PS Возможно, "мусор" в arrvalue - это результат использования локального массива без инициализации, и даже скорее всего именно из-за этого. Как я понял, глобальные переменные в глобальном макросе инициализируются нулем, если нет явной их инициализации, а локальные никак не инициализируются по умолчанию?
    Последний раз редактировалось konst_smn; 22.11.2018 в 11:21.

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

    По умолчанию

    Цитата Сообщение от konst_smn Посмотреть сообщение
    Извините за назойливость и не подумайте, что я пытаюсь учить разработчика - просто пытаюсь понять, правильно ли работаю.
    Перенес часть кода в глобальный макрос, чтобы вызывать из других макросов. Читаю информацию из области регистров с "разрывами", поэтому два чтения
    Код:
    void Read_AC_DR(WORD AddrDev, WORD AddrBufPSW) 
    {
        WORD value;
        WORD arrvalue[4];
        BOOL rez;
        
        // Info from AC Drive 	
        rez = Reads(PLC, AddrDev, MODBUS_RTU_REGS_4X, 41473, 5, &arrvalue);
        if(rez)
        {
    		PSW[AddrBufPSW] = arrvalue[0];
    		PSW[AddrBufPSW + 1] = arrvalue[3];
    		PSW[AddrBufPSW + 2] = arrvalue[4];
        }    
        
    	rez = Read(PLC, AddrDev, MODBUS_RTU_REG_4X, 41496, 0, TYPE_WORD, &value);
        if(rez)
    	{
    		PSW[AddrBufPSW + 3] = value;
        }    
    }
    Вопросs
    1) Надо ли перестраховываться с контролем результата обмена в Reads? У меня проект работает в реальной панели, ведомых устройств физически нет, и сложилось впечатление, ч то в регистры попадает какой-то мусор. Ну тоесть, если чтение прошло с ошибкой, или стработал тайм-аут (у меня он срабатывает), то в arrvalue ничего не записывается? Режим исполнения макроса, где вызывается данная подпрограмма - циклический, 1 секунда, "параллельно".
    2) Правильно ли использование value? Так дается в примерах по всему руководству, но, опять же не пытаясь учить, и понимая, что у вас Си-подобный синтаксис языка, пытаюсь снять свои сомнения. Ну мало ли, опечатка какая вкралась... Люди же используют в тысячах проектов, а я тут умный такой выискался .
    WORD arrvalue[5];
    если бы я пытался взять адрес первого элемента этого массива в Си - я использовал бы не &arrvalue, а просто arrvalue без амперсенда. У Вас адрес берется не так, как в Си?
    Не воспримите как упрек, я понимаю, что могу ошибаться, и что у Вас свой собственный язык, ну просто когда на разных языках, подобных, пишешь, надо избежать ошибок (это я про себя ).
    PS Возможно, "мусор" в arrvalue - это результат использования локального массива без инициализации, и даже скорее всего именно из-за этого. Как я понял, глобальные переменные в глобальном макросе инициализируются нулем, если нет явной их инициализации, а локальные никак не инициализируются по умолчанию?
    Я простой смертный
    И в макросах Си не шибко силен. Нужно подождать, что на это ответит Евгений Кислов.
    если бы я пытался взять адрес первого элемента этого массива в Си - я использовал бы не &arrvalue, а просто arrvalue без амперсенда
    Все верно, можете так и делать. Но кашу маслом не испортить?
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Похожие темы

  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 в качестве панели оператора
    от Леонид в разделе СПК1xx (архив)
    Ответов: 15
    Последнее сообщение: 20.11.2015, 08:17

Ваши права

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