EasyBuilder - Скорая помощь новичкам

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Re: EasyBuilder - Скорая помощь новичкам

Сообщение uni » 29 июн 2015, 10:51

Пример работы в основном режиме расписан в "10.6 Example of Object Security Settings". Вход в систему в основном режиме происходит при изменении пароля (5.6: "Once the password is entered, the objects that the user can operate are classified.").

Спасибо, нашёл эту строчку. Мне нужен был, как выяснилось, только один пользователь - Наладчик, который мог бы менять уставки, а в остальном достаточно общего режима без ограничений. Мне примеры не понравились, т.к. для обычного режима возможна ситуация, когда при изменении имени пользователя ничего не изменяется. Это может ввести в заблуждение. Поэтому я убрал вообще ввод имени, оставил одного единственного пользователя, сам проверяю пароль и вручную делаю "пересброс" системного пароля (скрипт проверки крутится у меня в общем зацикленном скрипте).

Вам же нужны eua? Они в расширенном режиме работают.


Для моего случая это оказалось слишком сложным.

Изображение

Код: Выделить всё
// Проверка пароля пользователя.
sub CheckPassword()
   
    bool tmp = false
   unsigned short NameId = 0
   unsigned int password = 0
   
    // Считываем пароль из буфера.
   GetData( password, "Панель", "Пароль", 1 )
   
    // Если пароль равен паролю Наладчика, то входим в систему.
   if password == 222 then
   
      // Вводим номер пользователя.
        NameId = 1       
        SetData( NameId, "Панель", LW, 9219, 1 )   
       
        // Вводим пароль пользователя с принудительным изменением.
        password = 0
        SetData( password, "Панель", LW, 9220, 1 )

        password = 222
        SetData( password, "Панель", LW, 9220, 1 )

    else

      // Вводим номер пользователя.
        NameId = 0
        SetData( NameId, "Панель", LW, 9219, 1 )   
       
        // Выходим из системы (пароль сбрасывается).
        tmp = true
        SetData( tmp, "Панель", LB, 9050, 1 )

   end if   
   
end sub
Россия - навсегда!
http://git.io/vOZo0
uni
 
Сообщения: 57
Зарегистрирован: 14 май 2015, 14:39
Откуда: Екатеринбург

Re: EasyBuilder - Скорая помощь новичкам

Сообщение uni » 30 июн 2015, 09:37

Возможно ли в макросах использовать индексные регистры для работы с элементами массивов в памяти? Я хотел бы полностью избавиться от "магических чисел" у пользовательских переменных. Для полного счастья мне не хватает реализации указателей в макросах.

Почти всё перевёл на теги. Теперь могу более менее безболезненно менять карту памяти (размещение регистров) панели в Excel (экспортируя и импортируя не без проблем набор тегов).
Россия - навсегда!
http://git.io/vOZo0
uni
 
Сообщения: 57
Зарегистрирован: 14 май 2015, 14:39
Откуда: Екатеринбург

Re: EasyBuilder - Скорая помощь новичкам

Сообщение den_po » 30 июн 2015, 10:28

uni писал(а):Возможно ли в макросах использовать индексные регистры для работы с элементами массивов в памяти? Я хотел бы полностью избавиться от "магических чисел" у пользовательских переменных. Для полного счастья мне не хватает реализации указателей в макросах.

Почти всё перевёл на теги. Теперь могу более менее безболезненно менять карту памяти (размещение регистров) панели в Excel (экспортируя и импортируя не без проблем набор тегов).

А можете показать пример того, от чего вы хотите избавиться?
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EasyBuilder - Скорая помощь новичкам

Сообщение uni » 30 июн 2015, 11:33

Здесь магическими являются числа - 600 и 800. Не представляю как можно от них избавиться без указателей, которых, похоже нет.

Код: Выделить всё
// Назначение: Формирование массивов параметров единиц измерения и статусов датчиков.
// Автор: Мезенцев Вячеслав
// Дата: 30 июня 2015 г.
// Настройки: Выполнять периодически (400 мсек).


// Смещение адреса для единиц измерения.
int UNIT_LW_BEGIN = 800

// Смещение адреса для состояний датчиков.
int SENSOR_STATE_LW_BEGIN = 600
       
// Адрес ячейки начала аналоговых входов.
int AI_LW_BEGIN = 1000
   
// Количество аналоговых входов.
int AI_SIZE = 33

// Массив используемых адресов.
int AI[ 33 ]


// Инициализация.
sub Initialize()

    int n
   
    // Аналоговые входы: AI_LW_BEGIN + 2 * n.
    for n = 0 to AI_SIZE - 1
   
        AI[n] = AI_LW_BEGIN + 2 * n
       
    next
   
end sub


// Состояние датчика.
sub GetSensorState( int addr )

    unsigned short value

    // Считываем значение регистра состояния датчика.
    GetData( value, "Панель", LW, addr + 1, 1 )
   
    // Вычисляем признак обрыва: ---- DDDD ---- ----
   
    // D - состояние сигнала:
    // 0 – датчик работает в штатном режиме
    // 1 – тип датчика не определен
    // 2 – выход за пределы в меньшую сторону (обрыв цепи датчика и т.п.)
    // 3 – выход за пределы в большую сторону (перегрузка датчика и т.п.)

    value = ( value >> 8 ) & 0x0F
   
    addr = ( ( addr - AI_LW_BEGIN ) >> 1 ) + SENSOR_STATE_LW_BEGIN
   
    // Сохраняем по новому адресу.
    SetData( value, "Панель", LW, addr, 1 )
   
end sub


// Единица измерения.
sub GetUnit( int addr )

    unsigned short value

    // Считываем значение регистра состояния датчика.
    GetData( value, "Панель", LW, addr + 1, 1 )
   
    // Вычисляем единицу измерения: ---- ---- BBBB ----
   
    // B - единицы измерения значения сигнала датчика:
    // 0 – °С
    // 1 – мм.в.ст.
    // 2 – кгс/см2
    // 3 – кгс/м2
    // 4 – Па
    // 5 – кПа
    // 6 - %
    // 7 – м3/ч
    // 8 – тн/ч
    // 9 – кг/ч
    // 10 – норм.м3/ч
    // 11 – ppm
    // 12 – литр/ч

    value = ( value & 0xF0 ) >> 4
   
    addr = ( ( addr - AI_LW_BEGIN ) >> 1 ) + UNIT_LW_BEGIN
   
    // Сохраняем по новому адресу.
    SetData( value, "Панель", LW, addr, 1 )
   
end sub


// Основной цикл.
macro_command main()
   
    int n   
   
    Initialize()
   
    for n = 0 to AI_SIZE - 1
   
        GetSensorState( AI[n] )
        GetUnit( AI[n] )
       
    next
   
end macro_command
Россия - навсегда!
http://git.io/vOZo0
uni
 
Сообщения: 57
Зарегистрирован: 14 май 2015, 14:39
Откуда: Екатеринбург

Re: EasyBuilder - Скорая помощь новичкам

Сообщение den_po » 30 июн 2015, 13:22

Если использовать локальные регистры панели, можно просто читать и писать массив целиком, а не по одному элементу.
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EasyBuilder - Скорая помощь новичкам

Сообщение uni » 30 июн 2015, 13:36

Да, кстати, я про это забыл совсем. Спасибо за наводку.
Россия - навсегда!
http://git.io/vOZo0
uni
 
Сообщения: 57
Зарегистрирован: 14 май 2015, 14:39
Откуда: Екатеринбург

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Ivydy » 01 июл 2015, 17:39

Добрый день. Не подскажите, как можно сделать так , чтобы при пропаже связи между панелью и плк, включался определенный бит, а при появлении связи, он снова сбрасывался в 0. Пытался сделать через системную метку LB-9016, не получилось.
Ivydy
 
Сообщения: 45
Зарегистрирован: 17 апр 2015, 13:26

Re: EasyBuilder - Скорая помощь новичкам

Сообщение den_po » 01 июл 2015, 18:04

Ivydy писал(а):Добрый день. Не подскажите, как можно сделать так , чтобы при пропаже связи между панелью и плк, включался определенный бит, а при появлении связи, он снова сбрасывался в 0. Пытался сделать через системную метку LB-9016, не получилось.

Начиная с LB-9200 и дальше.
Например Modbus на COM2 с номером станции 1 -- LB-9501.
Только там наоборот, при наличии связи единица, при потере ноль.
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Ivydy » 01 июл 2015, 18:48

den_po писал(а):
Ivydy писал(а):Добрый день. Не подскажите, как можно сделать так , чтобы при пропаже связи между панелью и плк, включался определенный бит, а при появлении связи, он снова сбрасывался в 0. Пытался сделать через системную метку LB-9016, не получилось.

Начиная с LB-9200 и дальше.
Например Modbus на COM2 с номером станции 1 -- LB-9501.
Только там наоборот, при наличии связи единица, при потере ноль.

спасибо, кажется помогло. А может знаете, возможно ли сразу на всех окнах поменять цвет фона, или надо на каждом отдельно менять ?
Ivydy
 
Сообщения: 45
Зарегистрирован: 17 апр 2015, 13:26

Re: EasyBuilder - Скорая помощь новичкам

Сообщение den_po » 01 июл 2015, 18:58

Если для окон не установлено окно заднего плана, придётся для каждого окна менять отдельно.
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

Пред.След.

Вернуться в Weintek

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 5