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

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

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

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

Сообщение ealaj » 07 май 2020, 22:49

Всем привет.
Очень нужна помощь.
Ремонтирую чужой проект.
Методом научного тыка нашёл ошибку в макросе:
Код: Выделить всё
macro_command main()
bool IDU_OK
short IDU_NUM, OFFSET, RTU_START_ADDR, LW_START_ADDR, RTU_START_IDU_OK, values[25], i, RTU_LEN
RTU_LEN = 23
OFFSET = 25
RTU_START_ADDR = 102   //Words
RTU_START_IDU_OK = 120    //Bits
LW_START_ADDR = 1
//GET IDU_NUM
GetDataEx(IDU_NUM, "Local HMI", LW, 650, 1)

//CHECK IF CONNECTION IS OK
GetDataEx(IDU_OK, "GC_gateway", 0x, RTU_START_IDU_OK + (IDU_NUM - 1), 1)
SetDataEx(IDU_OK, "Local HMI", LB, 650, 1)

if IDU_OK then
   GetDataEx(values[0], "GC_gateway", 4x, RTU_START_ADDR + (IDU_NUM - 1)*OFFSET , RTU_LEN)
else
   for i=0 to RTU_LEN
      values[i] = 0   
   next i
end if

SetDataEx(values[0], "Local HMI", LW, LW_START_ADDR, RTU_LEN)

//TO
SetDataEx(IDU_NUM, "Local HMI", LW, 680, 1)
end macro_command


Участки кода RTU_START_IDU_OK + (IDU_NUM - 1) и RTU_START_ADDR + (IDU_NUM - 1)*OFFSET не работают, при любых значениях IDU_NUM получается ноль.
Подскажите, в чём засада?
ealaj
 
Сообщения: 8
Зарегистрирован: 05 май 2020, 15:47

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

Сообщение 8bit » 08 май 2020, 11:52

ealaj писал(а):Всем привет.
Очень нужна помощь.
Ремонтирую чужой проект.
Методом научного тыка нашёл ошибку в макросе:
Код: Выделить всё
macro_command main()
bool IDU_OK
short IDU_NUM, OFFSET, RTU_START_ADDR, LW_START_ADDR, RTU_START_IDU_OK, values[25], i, RTU_LEN
RTU_LEN = 23
OFFSET = 25
RTU_START_ADDR = 102   //Words
RTU_START_IDU_OK = 120    //Bits
LW_START_ADDR = 1
//GET IDU_NUM
GetDataEx(IDU_NUM, "Local HMI", LW, 650, 1)

//CHECK IF CONNECTION IS OK
GetDataEx(IDU_OK, "GC_gateway", 0x, RTU_START_IDU_OK + (IDU_NUM - 1), 1)
SetDataEx(IDU_OK, "Local HMI", LB, 650, 1)

if IDU_OK then
   GetDataEx(values[0], "GC_gateway", 4x, RTU_START_ADDR + (IDU_NUM - 1)*OFFSET , RTU_LEN)
else
   for i=0 to RTU_LEN
      values[i] = 0   
   next i
end if

SetDataEx(values[0], "Local HMI", LW, LW_START_ADDR, RTU_LEN)

//TO
SetDataEx(IDU_NUM, "Local HMI", LW, 680, 1)
end macro_command


Участки кода RTU_START_IDU_OK + (IDU_NUM - 1) и RTU_START_ADDR + (IDU_NUM - 1)*OFFSET не работают, при любых значениях IDU_NUM получается ноль.
Подскажите, в чём засада?


IDU_NUM нигде не присваивается значение....
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1108
Зарегистрирован: 20 апр 2020, 19:07

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

Сообщение 8bit » 08 май 2020, 13:13

KIPiA писал(а):
8bit писал(а):
KIPiA писал(а):а как сравнивать строки в макросах?
macro_command main()
short recordID = 0,count
bool a = 1
char c[14],b[14]

GetData(count, "Local HMI", RECIPE, "Svetofor.Count")

//StringGet(b[0], "Local HMI", RECIPE, "Svetofor.Cvet")

RecipeGetData(c[0], "Svetofor.Cvet", recordID)
SetData(c[0], "Local HMI", LW, 60, 14)
if c[0] == "Жёлтый" then
SetData(a, "Local HMI", LB, 7, 1)
end if

end macro_command


приведенный макрос не работает или является ответом на вопрос?

не работает и хотелось бы узнать как строки сравниваются на Винтеке в макросах


согласно документации на EasyBuilder, глава 18 МАКРОСЫ для работы со строками существует группа функций

Изображение

строки сравниваются так
Изображение

или регистронезависимо так
Изображение

документацию прикрепил
Вложения
Chapter_18_Macro_Reference.pdf
(2.48 МБ) Скачиваний: 382
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1108
Зарегистрирован: 20 апр 2020, 19:07

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

Сообщение ealaj » 08 май 2020, 13:32

8bit писал(а):IDU_NUM нигде не присваивается значение....


А в этой строке IDU_NUM не получает значение Local HMI с адресом 650?
GetDataEx(IDU_NUM, "Local HMI", LW, 650, 1)
ealaj
 
Сообщения: 8
Зарегистрирован: 05 май 2020, 15:47

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

Сообщение ealaj » 12 май 2020, 22:49

Люди-и-и! Вы куда все пропали???

Подскажите пожалуйста, что нужно поправить в коде, чтобы считывать 23 регистра ModBus с функцией 3 начиная с регистра по формуле 102 + (IDU_NUM - 1)*25
и записывать их в Local HMI начиная с первого адреса?

Код: Выделить всё
macro_command main()
bool IDU_OK
short IDU_NUM, OFFSET, RTU_START_ADDR, LW_START_ADDR, RTU_START_IDU_OK, values[25], i, RTU_LEN
RTU_LEN = 23
OFFSET = 25
RTU_START_ADDR = 102   //Words
RTU_START_IDU_OK = 120    //Bits
LW_START_ADDR = 1
//GET IDU_NUM
GetDataEx(IDU_NUM, "Local HMI", LW, 650, 1)

//CHECK IF CONNECTION IS OK
GetDataEx(IDU_OK, "GC_gateway", 0x, RTU_START_IDU_OK + (IDU_NUM - 1), 1)
SetDataEx(IDU_OK, "Local HMI", LB, 650, 1)

if IDU_OK then
   GetDataEx(values[0], "GC_gateway", 4x, RTU_START_ADDR + (IDU_NUM - 1)*OFFSET , RTU_LEN)
else
   for i=0 to RTU_LEN
      values[i] = 0   
   next i
end if

SetDataEx(values[0], "Local HMI", LW, LW_START_ADDR, RTU_LEN)

//TO
SetDataEx(IDU_NUM, "Local HMI", LW, 680, 1)
end macro_command
ealaj
 
Сообщения: 8
Зарегистрирован: 05 май 2020, 15:47

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

Сообщение ealaj » 15 май 2020, 11:03

Заметил такую странность:
в таком виде

GetDataEx(IDU_OK, "GC_gateway", 0x, 120, 1)

код работает, а в таком уже нет

RTU_START_IDU_OK = 120
GetDataEx(IDU_OK, "GC_gateway", 0x, RTU_START_IDU_OK, 1)


кто-то может подсказать, почему?
ealaj
 
Сообщения: 8
Зарегистрирован: 05 май 2020, 15:47

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

Сообщение VanMo » 15 май 2020, 11:48

Ошибка компиляции?
Какого типа переменная RTU_START_IDU_OK ?
VanMo
 
Сообщения: 376
Зарегистрирован: 16 авг 2011, 09:31

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

Сообщение ealaj » 15 май 2020, 11:50

VanMo писал(а):Ошибка компиляции?
Какого типа переменная RTU_START_IDU_OK ?

Ошибки компиляции нет, но если вместо цифры вписываю переменную, то опрашивает не со 120-го регистра, а с нулевого.
Т.е. значение RTU_START_IDU_OK просто игнорируется программой.
Тип переменной short
ealaj
 
Сообщения: 8
Зарегистрирован: 05 май 2020, 15:47

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

Сообщение VanMo » 15 май 2020, 13:51

Какая версия EasyBuilder?
VanMo
 
Сообщения: 376
Зарегистрирован: 16 авг 2011, 09:31

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

Сообщение ealaj » 15 май 2020, 18:12

VanMo писал(а):Какая версия EasyBuilder?

Pro V6.00.01.174 Build 2018.01.12
ealaj
 
Сообщения: 8
Зарегистрирован: 05 май 2020, 15:47

Пред.След.

Вернуться в Weintek

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

cron