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

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

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

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

Сообщение Denis » 31 май 2013, 16:44

Один из способов сворачивания окон показан здесь
Denis
Администратор
 
Сообщения: 147
Зарегистрирован: 15 авг 2011, 18:33
Откуда: Санкт-Петербург

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

Сообщение PHoeNiX26 » 31 май 2013, 17:11

Denis писал(а):Один из способов сворачивания окон показан здесь

Спасибо! Оказывается я не добрался до объекта "прямой/косвенный вызов окна"
PHoeNiX26
 
Сообщения: 8
Зарегистрирован: 14 мар 2013, 10:38
Откуда: Белгород

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

Сообщение PHoeNiX26 » 11 июн 2013, 12:48

Еще такие вопросы возникли.. MT6070iH
1. Возможно ли по ходу работы программы воздействовать на свойства объектов, например изменять позицию, размеры, видимость и т.д. объектов через макросы, триггеры или как-нибудь еще.
2. На панели установлена Windows CE с оболочкой или же что то собственной разработки от Weintek? Если вдруг первый вариант, есть ли возможность вместо Weintek'овской оболочки запустить свое .exe, как это можно сделать, например в автомобильных навигаторах?
PHoeNiX26
 
Сообщения: 8
Зарегистрирован: 14 мар 2013, 10:38
Откуда: Белгород

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

Сообщение Denis » 13 июн 2013, 11:58

1. Вы можете программно воздействовать на свойства некоторых объектов, приводящие к изменению их отображения (числовой индикатор, движущаяся фигура, анимация, гистограмма ). См руководство на EasyBuilder8000
2. Если панель программируется с помощью EasyBuilder8000 ( серии MT6000i, MT8000i, MT8000X ), либо EasyBuilderPro ( серии eMT3000, MT8000iE ), то нет никакой возможности сделать что-либо, чего не позволяет сделать EasyBuilder. Никакие exe файлы запустить нельзя.
Если панель под Windows CE ( MT607i, MT610i, eMT607A, eMT610P, eMT612A, eMT615A ) то Вы можете написать любое приложение, которое выполняется в среде Windows CE и свободно запускать его на панели. Но в EasyBuilder для этих панелей создать проект нельзя.
Denis
Администратор
 
Сообщения: 147
Зарегистрирован: 15 авг 2011, 18:33
Откуда: Санкт-Петербург

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

Сообщение DenisShashkov » 08 июл 2013, 15:18

Здравствуйте,
В программировании Панели weintek 8070iH столкнулся со следующей проблемой. Вернее неудобством исполнения. Я со своего устройства получаю регистр 16 бит. При чем в нем зашито не просто числовое значение а состояние 4-х аварии каждое из которых занимает 4 бит. Таблица ниже.

Charge alternator failure 13/16-16/16
Fail to start 9/16-12/16
Fail to stop 5/16-8/16
Generator fail to close 1/16-4/16

Значение каждой аварии может равняться 1 = 0001, 2 = 0010, 3=0011, 4=0100, 15 = 1111
1 - нет аварии
2 - авария есть останов
3 - авария есть предупреждение
4 - авария есть разомкнуть цепь
15 - неопределено

Т.е допустим мне надо получить значение Fail to Stop которое я точно знаю будет равно 3 на всех остальных состояние 1 (аварий нету) по факту я получаю следующии значения в регистре. (сразу скажу что состояние 3 для аварии Fail to Stop не обязательно оно может быть и 2 и 4 и 15 взависимости от ситуации)

0001 0001 0011 0001

Для того что бы обработать одну аварию в одном регистре мне пришлось написать следующий макрос.

Код: Выделить всё
macro_command main()
short alarm2
short FailToStop
GetData(alarm2, "MODBUS TCP/IP (zero-based addressing)", 4x, 39428, 1)
SetData(alarm2, "Local HMI", LW, 300, 1) // просто посмотреть что приходит за значение
bool a
bool b
bool c
bool d
GETBIT(alarm2, a, 4)
SetData(a, "Local HMI", LB, 166, 1)
GETBIT(alarm2, b, 5)
GETBIT(alarm2, c, 6)
GETBIT(alarm2, d, 7)
if a == 1 then
SETBITON(FailToStop, FailToStop, 0)
else
SETBITOFF(FailToStop, FailToStop, 0)
end if
if b == 1 then
SETBITON(FailToStop, FailToStop, 1)
else
SETBITOFF(FailToStop, FailToStop, 1)
end if
if c == 1 then
SETBITON(FailToStop, FailToStop, 2)
else
SETBITOFF(FailToStop, FailToStop, 2)
end if
if d == 1 then
SETBITON(FailToStop, FailToStop, 3)
else
SETBITOFF(FailToStop, FailToStop, 3)
end if
SetData(FailToStop, "Local HMI", LW, 400, 1)

bool noalarm
bool warning
bool shutdown
bool trip 
bool test
if failToStop == 1 then
SETBITON(noalarm, noalarm, 0)
else
SETBITOFF(noalarm, noalarm, 0)
end if
if failToStop == 2 then
SETBITON(warning, warning, 0)
else
SETBITOFF(warning, warning, 0)
end if
if failToStop == 3 then
SETBITON(shutdown, shutdown, 0)
else
SETBITOFF(shutdown, shutdown, 0)
end if
if failToStop == 4 then
SETBITON(trip, trip , 0)
else
SETBITOFF(trip, trip , 0)
end if
SetData(noalarm, "Local HMI", LB, 500, 1)
SetData(warning, "Local HMI", LB, 501, 1)
SetData(shutdown, "Local HMI", LB, 502, 1)
SetData(trip, "Local HMI", LB, 503, 1)
if failToStop == 0 then
SETBITON(test, test , 0)
else
SETBITOFF(test, test , 0)
end if
SetData(test, "Local HMI", LB, 504, 1)
bool jopa
if failToStop == 15 then
SETBITON(jopa, jopa , 0)
else
SETBITOFF(jopa, jopa , 0)
end if
SetData(jopa, "Local HMI", LB, 505, 1)
end macro_command


Как видно макрос для обработки одной аварии получился довольно громоздкий, а таких аварий у меня в регистре 4, а всего регистров с авариями штук 20.

Когда я работаю с ПЛК у меня эта операция занимает максимум 2 строчки. Я использую команду Numeric to BIT 16bit и после чего 4 раз Bit to Numeric 4bit и получаю 4 числа из одного регистра. Но в редакторе макросов я не нашел ничего подобного. Прошу подсказать есть ли аналогичные команды для weintek или как можно упростить мою задачу.

Спасибо
DenisShashkov
 
Сообщения: 2
Зарегистрирован: 01 июл 2013, 19:54

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

Сообщение den_po » 08 июл 2013, 15:40

int data
data=0x1131

int x1,x2,x3,x4
x1 = data & 15
x2 = (data/0x10) & 15
x3 = (data/0x100)& 15
x4 = (data/0x1000)&15
den_po
 
Сообщения: 436
Зарегистрирован: 04 фев 2013, 12:25

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

Сообщение VanMo » 08 июл 2013, 15:46

Добрый день, Денис.
Ваша задача решается средствами самого языка макросов. Ссылку на его описание можно найти в справке по макросам в EasyBuilder.
Код: Выделить всё
macro_command main()
short source
short alarm[4]
GetData(source, "Local HMI", LW, 0, 1)
int i

for i=0 to 3
alarm[i]=source&0xf
source=source>>4
SetData(alarm[i], "Local HMI", LW, 1+i, 1)
next i

end macro_command

Приложил проект, демонстрирующий работу этого макроса
Вложения
Uint2tetrads.mtp
(226.45 КБ) Скачиваний: 1033
VanMo
 
Сообщения: 377
Зарегистрирован: 16 авг 2011, 09:31

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

Сообщение DenisShashkov » 08 июл 2013, 17:05

Спасибо за быстрый ответ, завтра обязательно попробую на объекте.

Прошу поясните вот эти строчки

alarm[i]=source&0xf
source=source>>4

Я понял что в массив аларм мы присваиваем значения source но мне не понятен амперсанд 0xF (что эта надпись означает). И вторую строчку

Спасибо.
DenisShashkov
 
Сообщения: 2
Зарегистрирован: 01 июл 2013, 19:54

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

Сообщение VanMo » 08 июл 2013, 18:05

DenisShashkov писал(а):Спасибо за быстрый ответ, завтра обязательно попробую на объекте.

Прошу поясните вот эти строчки

alarm[i]=source&0xf
source=source>>4

Я понял что в массив аларм мы присваиваем значения source но мне не понятен амперсанд 0xF (что эта надпись означает). И вторую строчку

Спасибо.

alarm[i]=source&0xf - в alarm[i] присваивается младшие 4 бита source (& -побитовая функция И)
source=source>>4 - Сдвиг на 4 бита вправо
VanMo
 
Сообщения: 377
Зарегистрирован: 16 авг 2011, 09:31

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

Сообщение LunoXod-3 » 31 окт 2013, 09:50

Здравствуйте!
Подскажите, возможно ли делать выборки данных в двоичном или HEX формате?
LunoXod-3
 
Сообщения: 12
Зарегистрирован: 12 дек 2012, 08:44

Пред.След.

Вернуться в Weintek

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

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