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

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

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

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

Сообщение ElPaul » 23 авг 2019, 15:07

Доброго дня.
Запнулся на очередной простой задаче, связанной с макросами. Видимо - не совсем еще логику понимаю.
Суть задачи следующая - с контроллера считывается число, и при определенных его значениях в поле вывода нужно вывести соответствующий текст.
Код: Выделить всё
macro_command main()

float result
char text

GetDataEx(result, "MODBUS TCP/IP (32-Bit)", 4x, 10004, 1)
   if result<200 then
      text='R'
      SetDataEx(result, "Local HMI", LW, 10, 1)
      SetDataEx(text, "Local HMI", LW, 12, 1)
   else if result>200 then
      text='J'
      SetDataEx(result, "Local HMI", LW, 10, 1)
      SetDataEx(text, "Local HMI", LW, 12, 1)
   end if
end macro_command

Подскажите - почему при первом срабатывании макроса выводится всегда R, и затем этот символ не меняется, независимо от пришедшего result?
ElPaul
 
Сообщения: 9
Зарегистрирован: 21 июн 2019, 15:00

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

Сообщение VanMo » 23 авг 2019, 15:30

ElPaul писал(а):
Код: Выделить всё
GetDataEx(result, "MODBUS TCP/IP (32-Bit)", 4x, 10004, 1)
   if result<200 then
      text='R'
      SetDataEx(result, "Local HMI", LW, 10, 1)
      SetDataEx(text, "Local HMI", LW, 12, 1)
   else if result>200 then
      text='J'
      SetDataEx(result, "Local HMI", LW, 10, 1)
      SetDataEx(text, "Local HMI", LW, 12, 1)
   end if


Добрый день.
Не хватает "end if". Или нужно убрать "if result>200 then".
VanMo
 
Сообщения: 375
Зарегистрирован: 16 авг 2011, 09:31

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

Сообщение ElPaul » 23 авг 2019, 16:06

VanMo писал(а):Добрый день.
Не хватает "end if". Или нужно убрать "if result>200 then".

Но ведь end if присутствует... При удалении условия "if result>200 then" - аналогично, ничего не меняется. Пробовал обнулять значение поля вывода при каждом срабатывании макроса - опять же никакого результата...

При таком варианте - почему-то всегда выпадает Y:
Код: Выделить всё
macro_command main()

float result
char text

GetDataEx(result, "MODBUS TCP/IP (32-Bit)", 4x, 10004, 1)
   if result>200 then
      text='L'
      SetDataEx(result, "Local HMI", LW, 10, 1)
      SetDataEx(text, "Local HMI", LW, 12, 1)
   else
      text='Y'
      SetDataEx(result, "Local HMI", LW, 10, 1)
      SetDataEx(text, "Local HMI", LW, 12, 1)
   end if
end macro_command
ElPaul
 
Сообщения: 9
Зарегистрирован: 21 июн 2019, 15:00

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

Сообщение VanMo » 23 авг 2019, 16:25

ElPaul писал(а):Но ведь end if присутствует... При удалении условия "if result>200 then" - аналогично, ничего не меняется. Пробовал обнулять значение поля вывода при каждом срабатывании макроса - опять же никакого результата...

end if у Вас один, а if два. Каждый if должен заканчиваться на end if.
У меня работает:
Код: Выделить всё
macro_command main()
short result
char text
GetData(result, "Local HMI", LW, 10, 1)
   if result<200 then
      text='R'
   else
      text='J'
   end if
SetDataEx(text, "Local HMI", LW, 12, 1)
end macro_command
VanMo
 
Сообщения: 375
Зарегистрирован: 16 авг 2011, 09:31

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

Сообщение ElPaul » 23 авг 2019, 16:43

VanMo писал(а):end if у Вас один, а if два. Каждый if должен заканчиваться на end if.

Проблема нашлась - тип данных float достаточно было сменить на short. Видимо - я слишком привык к немного другому программированию :)
Теперь осталось разобраться со строковыми переменными... Здесь мне совсем непонятно, потому как такого типа данных, как я понимаю - нет в EasyBuilder? Единственный вариант - использовать вместо строки массив символов char, и потом делать конкатенацию?
ElPaul
 
Сообщения: 9
Зарегистрирован: 21 июн 2019, 15:00

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

Сообщение VanMo » 23 авг 2019, 16:45

Да, массив. Для строк там много функций, в том числе и для юникодных.
VanMo
 
Сообщения: 375
Зарегистрирован: 16 авг 2011, 09:31

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

Сообщение ElPaul » 26 авг 2019, 14:31

Теперь ведем дальнейшее обучение работе в EasyBuilder :D
Есть такой кусок макроса:
Код: Выделить всё
char OutputStringType[6]
OutputStringType[0]=''
SetDataEx(OutputStringType[0], "Local HMI", LW, 30, 6)
char unit22[5]={'о','б','ъ','е','м'}
char unit23[5]={'м','а','с','с','а'}
GetDataEx(result, "MODBUS TCP/IP (32-Bit)", 4x, 20001, 1)
   if result==0 then
      StringCat(unit22[0],OutputStringType[0])
   else
       StringCat(unit23[0],OutputStringType[0])
    end if
SetDataEx(OutputStringType[0], "Local HMI", LW, 30, 6)

Имеется проблема с отображением русских букв. Подозреваю, что дело в шрифте (Пробовал Droid Sans Fallback, и Arial). Подскажите - какие шрифты адекватно работают с русским алфавитом?
PS Заодно сразу дайте наводку - куда смотреть, чтобы макрос выполнялся автоматически при запуске панели, и в дальнейшем срабатывал, к примеру, каждые 5 секунд?
PPS Кажется, вместо макросов будет проще использовать объект "Числовой индикатор" для вывода текста - не надо лишней писанины, для каждого состояния можно указать метку... Только опять же вопрос - где и как задается периодичность обновления?
ElPaul
 
Сообщения: 9
Зарегистрирован: 21 июн 2019, 15:00

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

Сообщение VanMo » 26 авг 2019, 16:14

В самом редакторе макроса вверху можно выбрать запуск при старте и периодичность выполнения.
Конечно, если строки не меняют текст, лучше пользоваться индикатором.
С русским языком надо работать в Юникоде.
Здесь пример реализации русской клавиатуры.
VanMo
 
Сообщения: 375
Зарегистрирован: 16 авг 2011, 09:31

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

Сообщение ElPaul » 02 сен 2019, 16:01

Очередная задачка походу дела появилась.
Есть в окне несколько полей Numeric, куда выводятся данные, получаемые из контроллера.
Есть кнопка Очистить, по которой эти поля должны очиститься - например, либо забиться нулями, либо заполниться пустотой (что не получится, как я понимаю, ибо поле может иметь только числовые значения).
Подтолкните в нужном направлении - как очистить кучу этих Numeric полей по нажатию кнопки, и на время остановить получение данных от контроллера, пока не будет нажата другая кнопка, например - Запустить.
И дабы не плодить темы - есть ли возможность с помощью макроса изменить цвет шрифта в Numeric поле, или как-то придать ему вид неактивного?
ElPaul
 
Сообщения: 9
Зарегистрирован: 21 июн 2019, 15:00

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

Сообщение maks83 » 03 сен 2019, 12:26

Добрый день. Никогда не работал с вайнтек, прошу подсказать направление работ. Задача - панель считывает несколько переменных с плк и по нажатию на кнопку в панели происходит следующее. Панель шлёт email с текстом: установка 1 = "содержимое первой переменной" и сохраняет в себе в память значения. Также на панели должны быть две уставки времени, пользователь выбирает даты и нажимает кнопку формирования отчёта. Панель делает выборку из своей памяти в промежутке этих дат и выводит результат на дисплей, можно отчёт отправить по email.
maks83
 
Сообщения: 1
Зарегистрирован: 01 сен 2019, 10:55

Пред.След.

Вернуться в Weintek

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

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