[?]: Символьная индексация в массиве на LAD

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
Post Reply
Letiso
Posts: 13
Joined: Sat Mar 22, 2008 10:45 am
Location: Russia

[?]: Символьная индексация в массиве на LAD

Post by Letiso » Wed Dec 16, 2009 7:00 am

Доброго дня, уважаемые форумчане!
Подскажите, пожалуйста!
Есть ли возможность и если есть, то как организовать обращение к переменной в массиве не через явное (численное) указание индекса переменной, а, например, через указание этого индекса через другую, глобальную переменную?

engineer_em
Posts: 50
Joined: Sat Oct 24, 2009 3:38 am

Re: Символьная индексация в массиве!

Post by engineer_em » Wed Dec 16, 2009 7:13 am

В каком языке? в SCL помойму встречал почитай в Бергере

Letiso
Posts: 13
Joined: Sat Mar 22, 2008 10:45 am
Location: Russia

Re: Символьная индексация в массиве!

Post by Letiso » Wed Dec 16, 2009 7:21 am

На LAD! В Бергере по LAD и FBD ни малейшего намека на это я не встретил. Щас посмотрю в SCL!

Ничего похожего не встретил! Может это невозможно?

sania
Site Admin
Posts: 1193
Joined: Sat Aug 13, 2005 6:15 am

Re: [?]: Символьная индексация в массиве на LAD

Post by sania » Thu Dec 17, 2009 6:24 am

наскока мне известно LAD не поддерживает косвенную адресацию
а что подразумевается под словом массив?он же где-то находится...

Code: Select all

OPN DB[MW0] // первый DB
A DBX[MD2]
OPN DB[MW6] // второй DB
= DBX[MD8]

OPN DB 10
OPN DB[DBW0] // третий DB
L DBW[MD12]
OPN DB[MW16] // четвёртый DB
T DBW[MD18]
а чё за проблемы?эту часть блока пиши на STL,остальное в LAD

dmitry_79
Posts: 143
Joined: Sun Dec 20, 2009 1:30 pm
Location: Russia

Re: [?]: Символьная индексация в массиве на LAD

Post by dmitry_79 » Sat Jan 02, 2010 6:49 am

Присоединяюсь к вопросу. обьясню задачу: есть функция, в качестве параметров передаются 2 булевы переменные и 2 целых числа.

Функцию нужно вызвать 200 раз с разными переменными. Переменные заданы в массивах. Как програмно организовать цикл с перебором индекса массива? Точнее, как организовать цикл это я знаю, а вот в каком виде передавать переменные в функцию? Синтаксис каков?

Должно быть что-то вроде: DB10.DBX[<индекс>] ; DB10.DBW[<индекс>]

[<индекс>] - целое число, хранящееся в, предположим, DB100.DBW2

Каков синтаксис такого обращения к переменной?

Yury
Posts: 65
Joined: Thu Nov 01, 2007 9:41 pm
Location: Belarus

Re: [?]: Символьная индексация в массиве на LAD

Post by Yury » Tue Jan 05, 2010 10:24 pm

dmitry_79 wrote:Присоединяюсь к вопросу. обьясню задачу:...
примерно такой пример http://depositfiles.com/files/uy86kse9n

dmitry_79
Posts: 143
Joined: Sun Dec 20, 2009 1:30 pm
Location: Russia

Re: [?]: Символьная индексация в массиве на LAD

Post by dmitry_79 » Sat Jan 09, 2010 7:43 pm

Уважаемый YURY! Огромное спасибо за толчок :) в правильном направлении: мысль что без адресных регистров не обойтись подтвердилась Вашим примером. Буду разбираться...

dmitry_79
Posts: 143
Joined: Sun Dec 20, 2009 1:30 pm
Location: Russia

Re: Символьная индексация в массиве!

Post by dmitry_79 » Mon Feb 08, 2010 10:50 pm

Letiso wrote:На LAD! В Бергере по LAD и FBD ни малейшего намека на это я не встретил. Щас посмотрю в SCL!

Ничего похожего не встретил! Может это невозможно?
Как раз на SCL это сделать очень просто.
Бергер, глава 27.2.3 wrote:...Косвенное использование глобальных адресов основывается на абсолютной адресации. При этом для указания расположения данных в памяти в квадратных скобках указывается переменная INT (две переменные INT в случаеа дресации бита):
• I[byteindex.bitindex];
• MB[byteindex],
где byteindex и bitindex являются константами или переменными, которые
могут быть изменены в процессе обработки программы, или выражениями
типа INT...
Только прошу обратить внимание: в примере у Бергера (или в переводе) между byteindex и bitindex стоит точка. Такой синтаксис записи выдает ошибку компиляции. В данном выражении необходимо ставить запятую! 3 часа потратил времени на то что-бы это понять! :shock:
dmitry_79 wrote:...мысль что без адресных регистров не обойтись подтвердилась Вашим примером. Буду разбираться...
Так что отзываю свою мысль обратно - без адресных регистров обойтись можно используя язык SCL!

Post Reply