Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
07 май 2020, 22:49
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 получается ноль.
Подскажите, в чём засада?
Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
08 май 2020, 11:52
8bit
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 нигде не присваивается значение....
Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
08 май 2020, 13:13
8bit
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 МАКРОСЫ для работы со строками существует группа функций
строки сравниваются так
или регистронезависимо так
документацию прикрепил
Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
08 май 2020, 13:32
ealaj
8bit писал(а):IDU_NUM нигде не присваивается значение....
А в этой строке IDU_NUM не получает значение Local HMI с адресом 650?
GetDataEx(IDU_NUM, "Local HMI", LW, 650, 1)
Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
12 май 2020, 22:49
ealaj
Люди-и-и! Вы куда все пропали???
Подскажите пожалуйста, что нужно поправить в коде, чтобы считывать 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
Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
15 май 2020, 11:03
ealaj
Заметил такую странность:
в таком виде
GetDataEx(IDU_OK, "GC_gateway", 0x, 120, 1)
код работает, а в таком уже нет
RTU_START_IDU_OK = 120
GetDataEx(IDU_OK, "GC_gateway", 0x, RTU_START_IDU_OK, 1)
кто-то может подсказать, почему?
Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
15 май 2020, 11:48
VanMo
Ошибка компиляции?
Какого типа переменная RTU_START_IDU_OK ?
Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
15 май 2020, 11:50
ealaj
VanMo писал(а):Ошибка компиляции?
Какого типа переменная RTU_START_IDU_OK ?
Ошибки компиляции нет, но если вместо цифры вписываю переменную, то опрашивает не со 120-го регистра, а с нулевого.
Т.е. значение RTU_START_IDU_OK просто игнорируется программой.
Тип переменной short
Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
15 май 2020, 13:51
VanMo
Какая версия EasyBuilder?
Re: EasyBuilder - Скорая помощь новичкам
Добавлено:
15 май 2020, 18:12
ealaj
VanMo писал(а):Какая версия EasyBuilder?
Pro V6.00.01.174 Build 2018.01.12