Хранение межзонного указателя адреса в глобальном DB

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
Post Reply
volotovskyd
Posts: 41
Joined: Mon Aug 13, 2012 2:23 pm

Хранение межзонного указателя адреса в глобальном DB

Post by volotovskyd » Mon Jan 02, 2017 6:41 pm

Народ! Почему не получается в глобальном DB в колонке Initial value ячейке с типом DWORD присвоить значение например P#I32.4?
Т.е. мне нужно, чтобы в данных 4-х байтах стартовое значение было
1000 0001 0000 0000 0000 0001 0000 0100.

Image

CoMod
Site Admin
Posts: 3407
Joined: Thu Feb 16, 2006 3:25 pm
Location: Russia
Contact:

Re: Хранение межзонного указателя адреса в глобальном DB

Post by CoMod » Tue Jan 03, 2017 6:32 am

Степ7 пишет - тип данных указатель p#123.4 имеет длину 48 бит и его нельзя воткнуть в этом месте для переменной типа dword
https://support.industry.siemens.com/cs ... c&lc=ru-RU

1)
можно хранить 32х8+4
и в проге:

Code: Select all

A I[ch_av1.in]
2)
можно поменять тип на поинтер в функции
и в проге:

Code: Select all

      L     P##ch_av1.in
      LAR1
а в вызове функции
на in :

Code: Select all

P#I 32.4

volotovskyd
Posts: 41
Joined: Mon Aug 13, 2012 2:23 pm

Re: Хранение межзонного указателя адреса в глобальном DB

Post by volotovskyd » Tue Jan 03, 2017 5:47 pm

У меня другая информация.
Внутризонный/межзонный указатель вида P#x.y/P#Zx.y имеют именно 32-битный формат.
48-бит только для указателя на DB (6 байт, дополнительно 2 байта для номера блока данных).
Например такой P#DB 10.DBX 20.5 . Иначе как бы работали команды в STL типа LAR1 P#M10.1 c 32-битным адресным регистром?
Может быть этот трюк с Initial valur не проходит, т.к. данный указатель можно использовать только в коде STL?
Мне нужно в ячейках DB хранить в т.ч. адреса, с которыми в последствии будет работать циклически вызываемая функция.
Не вызывать же отдельный ОВ, который при старте запишет в DB нужные значения?
Есть еще идеи, как это сделать?

CoMod
Site Admin
Posts: 3407
Joined: Thu Feb 16, 2006 3:25 pm
Location: Russia
Contact:

Re: Хранение межзонного указателя адреса в глобальном DB

Post by CoMod » Tue Jan 03, 2017 6:16 pm

volotovskyd wrote:У меня другая информация...
по Ф1 выдаёт такое
Image

Rex2701
Posts: 249
Joined: Wed Oct 13, 2010 8:44 am
Location: Russian Federation

Re: Хранение межзонного указателя адреса в глобальном DB

Post by Rex2701 » Wed Jan 04, 2017 8:00 am

А что мешает вместо DWORD использовать тип POINTER, что логично?

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

Re: Хранение межзонного указателя адреса в глобальном DB

Post by sania » Wed Jan 04, 2017 3:42 pm

Rex2701 wrote:использовать тип POINTER
DB такого не знает :(

Rex2701
Posts: 249
Joined: Wed Oct 13, 2010 8:44 am
Location: Russian Federation

Re: Хранение межзонного указателя адреса в глобальном DB

Post by Rex2701 » Wed Jan 04, 2017 4:01 pm

Странно. Я знаю, что можно. Проекты, где это используются - в наличии.

volotovskyd
Posts: 41
Joined: Mon Aug 13, 2012 2:23 pm

Re: Хранение межзонного указателя адреса в глобальном DB

Post by volotovskyd » Thu Jan 05, 2017 6:26 pm

Rex2701 wrote:Странно. Я знаю, что можно. Проекты, где это используются - в наличии.
Тип POINTER для блоков FC и FB. Пока выкрутился следующим образом: в DB храню отдельно адрес байта и бита в INT. В основном коде в STL в адресный регистр пишу байт, потом "шифт" влево на три разряда, плюсую биты - получаю 32-битный адрес ("внутризонный" формат). Не совсем красиво. Видимо так и останется. Другого решения не вижу для сохранения возможности в DB легко править адреса входов/выходов.

volotovskyd
Posts: 41
Joined: Mon Aug 13, 2012 2:23 pm

Re: Хранение межзонного указателя адреса в глобальном DB

Post by volotovskyd » Thu Jan 05, 2017 9:22 pm

Народ! Что не так с вызовом функции? Почему не прокатывает вся косвенная адрессация?
Image
Вот структура DB1
Image

Usver
Posts: 141
Joined: Fri Feb 24, 2012 8:28 am

Re: Хранение межзонного указателя адреса в глобальном DB

Post by Usver » Fri Jan 06, 2017 6:07 am

Народ! Что не так с вызовом функции? Почему не прокатывает вся косвенная адрессация?
http://samsebeplc.ru/Doc/Siemens/STEP7/ ... LSCL_r.pdf
26.3.1 Доступ к параметрам в функциях

volotovskyd
Posts: 41
Joined: Mon Aug 13, 2012 2:23 pm

Re: Хранение межзонного указателя адреса в глобальном DB

Post by volotovskyd » Fri Jan 06, 2017 7:00 am

:) Как раз сейчас читаю именно этот раздел (стр.19-13). Получается, что использовать косвенную адресацию при задании фактических параметров вызываемому блоку нельзя. Буду использовать временные переменные. Спасибо.

Protiven
Posts: 8
Joined: Sat Sep 04, 2010 7:06 pm

Re: Хранение межзонного указателя адреса в глобальном DB

Post by Protiven » Wed Jan 11, 2017 7:53 am

Хранить можно, просто обозначенный Вами тип переменной DWORD не предполагает указанной орфографии "IM.N"... Нужно писать в HEX, например.
Кстати указание "I" - это уже внутризонная, а не межзонная адресация.
Предполагаю, что "закладочку" готовите...

Post Reply