Массив на FBD

Автоматизация технологических процессов, системы управления, АСУ ТП, АСКУЭ, программирование ПЛК, человеко-машинный интерфейс, сетевое оборудование, протоколы
Ответить
Ivydy
Дилетант
Сообщения: 18
Зарегистрирован: 13 фев 2018, 16:17

Массив на FBD

Сообщение 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? Спасибо

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 994
Зарегистрирован: 09 окт 2012, 05:18

Re: Массив на FBD

Сообщение Автоматизатор »

Можно в лоб: с помощью MOVE пословно.

Ivydy
Дилетант
Сообщения: 18
Зарегистрирован: 13 фев 2018, 16:17

Re: Массив на FBD

Сообщение Ivydy »

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

Михайло
Администратор
Сообщения: 4104
Зарегистрирован: 19 сен 2012, 19:16

Re: Массив на FBD

Сообщение Михайло »

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

SMax
Любитель
Сообщения: 32
Зарегистрирован: 14 окт 2018, 09:28

Re: Массив на FBD

Сообщение SMax »

Тут дело то не в массиве, задача состоит в том чтобы на FBD организовать цикл с косвенной адресацией.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 994
Зарегистрирован: 09 окт 2012, 05:18

Re: Массив на FBD

Сообщение Автоматизатор »

FBD вроде не поддерживает косвенную адресацию. Даже в TIA портале.

Михайло
Администратор
Сообщения: 4104
Зарегистрирован: 19 сен 2012, 19:16

Re: Массив на FBD

Сообщение Михайло »

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

Юрий_М
Дилетант
Сообщения: 7
Зарегистрирован: 03 апр 2017, 16:11

Re: Массив на FBD

Сообщение Юрий_М »

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

Михайло
Администратор
Сообщения: 4104
Зарегистрирован: 19 сен 2012, 19:16

Re: Массив на FBD

Сообщение Михайло »

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

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

Ответить