Page 1 of 1

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

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

Image

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

Posted: Tue Jan 03, 2017 6:32 am
by CoMod
Степ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

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

Posted: Tue Jan 03, 2017 5:47 pm
by volotovskyd
У меня другая информация.
Внутризонный/межзонный указатель вида 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 нужные значения?
Есть еще идеи, как это сделать?

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

Posted: Tue Jan 03, 2017 6:16 pm
by CoMod
volotovskyd wrote:У меня другая информация...
по Ф1 выдаёт такое
Image

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

Posted: Wed Jan 04, 2017 8:00 am
by Rex2701
А что мешает вместо DWORD использовать тип POINTER, что логично?

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

Posted: Wed Jan 04, 2017 3:42 pm
by sania
Rex2701 wrote:использовать тип POINTER
DB такого не знает :(

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

Posted: Wed Jan 04, 2017 4:01 pm
by Rex2701
Странно. Я знаю, что можно. Проекты, где это используются - в наличии.

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

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

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

Posted: Thu Jan 05, 2017 9:22 pm
by volotovskyd
Народ! Что не так с вызовом функции? Почему не прокатывает вся косвенная адрессация?
Image
Вот структура DB1
Image

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

Posted: Fri Jan 06, 2017 6:07 am
by Usver
Народ! Что не так с вызовом функции? Почему не прокатывает вся косвенная адрессация?
http://samsebeplc.ru/Doc/Siemens/STEP7/ ... LSCL_r.pdf
26.3.1 Доступ к параметрам в функциях

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

Posted: Fri Jan 06, 2017 7:00 am
by volotovskyd
:) Как раз сейчас читаю именно этот раздел (стр.19-13). Получается, что использовать косвенную адресацию при задании фактических параметров вызываемому блоку нельзя. Буду использовать временные переменные. Спасибо.

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

Posted: Wed Jan 11, 2017 7:53 am
by Protiven
Хранить можно, просто обозначенный Вами тип переменной DWORD не предполагает указанной орфографии "IM.N"... Нужно писать в HEX, например.
Кстати указание "I" - это уже внутризонная, а не межзонная адресация.
Предполагаю, что "закладочку" готовите...