Страница 155 из 360 ПерваяПервая ... 55105145153154155156157165205255 ... ПоследняяПоследняя
Показано с 1,541 по 1,550 из 4001

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Спасибо!-заработало. Но на скорости 9600. Поменять немогу- переходник rs-usb забыл отключить и он спалился (потеха, однако!)

  2. #2

    По умолчанию

    Доброго времени суток! Разбираюсь с макросами в СП315. Возникла загвоздка..
    Сначала я копирую регистр приходящий с ПР200 в PSW[600] ()

    WORD Bit;
    int i;
    Read(PLC, 8, MODBUS_RTU_REG_4X, 555, 0, TYPE_WORD, &Bit); //chtenie registra
    PSW[600] = Bit;

    Далее мне нужно сравнить состояния бит внутри регистра.. я конечно накидал код, но на второй итерации всё виснет.
    Основная проблема в том, какой же правильный синтаксис чтения бита.
    Вот мой набросок

    for ( i = 0; i < 12; i++ ) //cikl perebora bit
    {
    if ( PSW[600] & ( 1 << i ) != 1 ) //uslovie (собственно проблема в этом условии)
    {
    PSW[601] = i; //
    if (i = 1)
    {
    SetPSB(600); //green
    ResetPSB(601);
    ResetPSB(602);
    ResetPSB(603);
    }
    else if (i = 2)
    {
    SetPSB(601); //green flashing
    ResetPSB(600);
    ResetPSB(602);
    ResetPSB(603);
    }
    else if (i = 3)
    {
    SetPSB(602); //yellow
    ResetPSB(600);
    ResetPSB(601);
    ResetPSB(603);
    }
    else
    {
    SetPSB(603); //red
    ResetPSB(600);
    ResetPSB(601);
    ResetPSB(602);
    }
    Delay (3000);
    }

    }

    ПОМОГИТЕ ПОЖАЛУЙСТА

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

    По умолчанию

    Я для работы с битами регистров использую такие макро
    Код:
    #define GetBit(Reg,bitno)   ((Reg) & (1 << (bitno)))		// Получить статус бита "bitno" в регистре "Reg"
    #define ResetBit(Reg,bitno) ((Reg) &= ( ~ (1 << ((bitno)))))	// Сбросить бит "bitno" в регистре "Reg"
    #define SetBit(Reg,bitno)   ((Reg) |= ( 1 << ((bitno))))	// Установить бит "bitno" в регистре "Reg"
    #define ReversBit(reg, bitno) ((reg) ^= (1 << (bitno))) 	// Инвертировать бит "bitno" в регистре "Reg"
    И использую эти макро наподобие функций, например
    Код:
    //Эти строчки в начале программы
    #define GetBit(Reg,bitno)   ((Reg) & (1 << (bitno)))
    #define ResetBit(Reg,bitno) ((Reg) &= ( ~ (1 << ((bitno)))))
    #define SetBit(Reg,bitno)   ((Reg) |= ( 1 << ((bitno))))
    #define ReversBit(reg, bitno) ((reg) ^= (1 << (bitno))) 
    
    //Далее в любом месте, где нужно работать с битами
    //использую эти макро наподобие функций
    if(GetBit(PSW[600],5))	{	// Если "5" бит в регистре PSW[600] установлен, то
        ResetBit(PSW[256],12);	// Сбросить бит "12" в регистре PSW256
        SetBit(PSW[300],7);		// Установить бит "7" в регистре PSW300
        ReversBit(PSW[500],3);	// Инвертировать бит "3" в регистре PSW500
    }
    
    if(!GetBit(PSW[600],5))	{	// Если "5" бит в регистре PSW[600] НЕ установлен, то
    // сделать то-то
    // сделать это
    }
    Все справедливо и для переменных, например WORD
    Код:
    #define GetBit(Reg,bitno)   ((Reg) & (1 << (bitno)))
    #define ResetBit(Reg,bitno) ((Reg) &= ( ~ (1 << ((bitno)))))
    #define SetBit(Reg,bitno)   ((Reg) |= ( 1 << ((bitno))))
    #define ReversBit(reg, bitno) ((reg) ^= (1 << (bitno))) 
    
    WORD wBIT;
    WORD TEST;
    
    Read(PLC, 8, MODBUS_RTU_REG_4X, 555, 0, TYPE_WORD, &wBIT); //chtenie registra
    
    if(GetBit(wBIT,5)) {	// Если "5" бит в регистре wBIT установлен, то
        ResetBit(TEST,12);	// Сбросить бит "12" в регистре TEST
        SetBit(TEST,7);	// Установить бит "7" в регистре TEST
        ReversBit(TEST, 3);	// Инвертировать бит "3" в регистре TEST
    }
    
    if(!GetBit(wBIT,12)) {	//Если "5" бит в регистре wBIT НЕ установлен, то
    // сделать это
    //сделать то-то
    }
    ЗЫ
    Насколько я понимаю, в Вашем варианте нужно так писать
    if (! (PSW[600] & ( 1 << i ) )) //uslovie (собственно проблема в этом условии)
    {
    Последний раз редактировалось petera; 13.12.2019 в 17:17.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #4

    По умолчанию

    Спасибо большое! Буду тестировать проверять)

  5. #5

    По умолчанию

    Добрый день... Подскажите пожалуйста, у нас панель СП307 используется как SALVE, и при пропадании связи, естественно, переменные не обновляются... А как можно сделать, чтобы при пропадании связи с панелью, сама панель которая SLAVE писала что нет связи? Подключаемся по PLC порту.... Спасибо заранее...

  6. #6

    По умолчанию

    Цитата Сообщение от roman_1986 Посмотреть сообщение
    Добрый день... Подскажите пожалуйста, у нас панель СП307 используется как SALVE, и при пропадании связи, естественно, переменные не обновляются... А как можно сделать, чтобы при пропадании связи с панелью, сама панель которая SLAVE писала что нет связи? Подключаемся по PLC порту.... Спасибо заранее...
    Вместо того что бы решить проблему, вы пытаетесь обойти её, зачем?
    Проложите витой экранированный провод, поставьте резисторы 120 Ом на концах линии. Заземлите экран. И всего то дел))) Подойдёт обычный интернет кабель, мешками продаётся в магазинах.
    Последний раз редактировалось kondor3000; 21.12.2019 в 12:55.

  7. #7

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Вместо того что бы решить проблему, вы пытаетесь обойти её, зачем?
    Проложите витой экранированный провод, поставьте резисторы 120 Ом на концах линии. Заземлите экран. И всего то дел))) Подойдёт обычный интернет кабель, мешками продаётся в магазинах.
    Проблема не в кабеле))) А в том, что может пропасть связь))) (причин не много, но они есть.... пока делают что-то одно, навернули что-то другое)))))) и не известно, показания стабильные или нет связи... банально окислились контакты)))
    Последний раз редактировалось roman_1986; 23.12.2019 в 08:14.

  8. #8

    По умолчанию

    Цитата Сообщение от roman_1986 Посмотреть сообщение
    Добрый день... Подскажите пожалуйста, у нас панель СП307 используется как SALVE, и при пропадании связи, естественно, переменные не обновляются... А как можно сделать, чтобы при пропадании связи с панелью, сама панель которая SLAVE писала что нет связи? Подключаемся по PLC порту.... Спасибо заранее...
    Можно сделать таймер, который сбрасывается после обновления значения любого регистра. В таком случае можно вызвать окно с предупреждением, если никакие регистры не обновлялись условные десять секунд
    Последний раз редактировалось Studiedlist; 21.12.2019 в 13:56. Причина: Забыл указать цитату

  9. #9

    По умолчанию

    Цитата Сообщение от Studiedlist Посмотреть сообщение
    Можно сделать таймер, который сбрасывается после обновления значения любого регистра. В таком случае можно вызвать окно с предупреждением, если никакие регистры не обновлялись условные десять секунд
    Воттт.. именно это я и пытаюсь сделать... но что-то идет не так... я чуть позже скину макрос, на котором пытаюсь сделать... А как сделать задержку по времени на панели? delay?

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

    По умолчанию

    Цитата Сообщение от roman_1986 Посмотреть сообщение
    Добрый день... Подскажите пожалуйста, у нас панель СП307 используется как SALVE, и при пропадании связи, естественно, переменные не обновляются... А как можно сделать, чтобы при пропадании связи с панелью, сама панель которая SLAVE писала что нет связи? Подключаемся по PLC порту.... Спасибо заранее...
    Нужно завести в панели бит квитирования
    В панели каждую сек устанавливать бит и запускать таймер, например, на 3 сек.
    В плк постоянно читать бит квитирования и если он установлен - сбрасывать его
    В панели если время таймера истекло, а бит не сброшен - показать окно о потери связи.

    Это можно сделать с помощью трех ф. областей, они должны быть глобальными!
    Захват-7.png
    Скрытый текст:

    1. В панели каждую сек устанавливать бит
    Захват-1.png Захват-2.png

    2. запускать таймер, например, на 3 сек, если время таймера истекло, а бит не сброшен - показать окно о потери связи
    Захват-3.png Захват-4.png

    3. При восстановлении связи закрывать окно автоматически
    Захват-5.png Захват-6.png

    Пример окна
    Захват-8.png
    Вложения Вложения
    Последний раз редактировалось petera; 23.12.2019 в 12:40.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Страница 155 из 360 ПерваяПервая ... 55105145153154155156157165205255 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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