Страница 1 из 1

Массив на FBD

Добавлено: 16 ноя 2020, 12:28
Ivydy
Здравствуйте. Стоит задача:

Фрагмент программы на SCL переведите на FBD
Пусть, необходимо считать слова с PIW 128 по PIW 142 из области
периферии в область меркеров в слова с MW 128 по MW 142.

FOR i := 128 TO 142 BY 2 DO
MW(i):= PIW(i);
END_FOR;


Подскажите как её можно осуществить или хотя бы как работать с массивами на языке FBD? Спасибо

Re: Массив на FBD

Добавлено: 17 ноя 2020, 06:43
Автоматизатор
Можно в лоб: с помощью MOVE пословно.

Re: Массив на FBD

Добавлено: 17 ноя 2020, 09:56
Ivydy
Автоматизатор писал(а):
17 ноя 2020, 06:43
Можно в лоб: с помощью MOVE пословно.
можно через Move. Но хотелось бы чтобы как то более изысканно, ибо если будет 1000 элементов, то делать через Move довольно геморройно

Re: Массив на FBD

Добавлено: 18 ноя 2020, 22:20
Михайло
Сильно зависит от среды разработки: в ТИА Портале это запросто сделать! Тот же MOVE оказывается может перекинуть много байт за один раз, если не может, то использовать MOVE_BLK, а на крайний случай - MOVE_BLK_VARIANT.

Re: Массив на FBD

Добавлено: 19 ноя 2020, 06:28
SMax
Тут дело то не в массиве, задача состоит в том чтобы на FBD организовать цикл с косвенной адресацией.

Re: Массив на FBD

Добавлено: 19 ноя 2020, 12:33
Автоматизатор
FBD вроде не поддерживает косвенную адресацию. Даже в TIA портале.

Re: Массив на FBD

Добавлено: 20 ноя 2020, 07:24
Михайло
FBD - классика функционального программирования, а в функциональном программировании вместо циклов применяют универсальные функции Map/Reduce. И функция MOVE как раз из серии Map.
Вот рабочий код:
Цикл FBD1.png
Так как область памяти IW/MW не является структурой или массивом, к которому можно обращаться по индексу, то приходится использовать MOVE_BLK_VARIANT. По этой же причине никак не сделать цикл на инструкциях LABEL/JMPN. У меня не получилось.

Re: Массив на FBD

Добавлено: 20 ноя 2020, 10:23
Юрий_М
Михайло писал(а):
20 ноя 2020, 07:24
Вот рабочий код:
А Вы уверены, что так делать можно?
Посмотрите какое значение имеет #Ret_Val когда значение COUNT больше 1?
У меня в симуляторе выдает ошибку 8281

Re: Массив на FBD

Добавлено: 20 ноя 2020, 17:43
Михайло
Я не пробовал :[
И правда в документации написано: если не массив (наш случай), то COUNT должен быть 1.

P.S. Serialize/Deserialize тоже с массивами работает.