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

Помогите разобраться с обращением к DB (Step7)

Добавлено: 22 июн 2013, 20:30
Ильшат
Привет всем ! Недавно ковыряясь в одном из проектов , обнаружил одну неприятную штуку ,а именно обращение блока FC к данным в DB, вместо DB1.DBX0.1 обращение идет просто DBX0.1, отсюда наклевывается вопрос- откуда блок FC знает в какой DB нужно ему обратится ?

Re: Помогите разобраться с обращением

Добавлено: 23 июн 2013, 12:17
Михайло
Есть скриншот?

Re: Помогите разобраться с обращением

Добавлено: 23 июн 2013, 14:08
ward
до этой строчки есть вызов дб, типа OPN DB1

Re: Помогите разобраться с обращением

Добавлено: 23 июн 2013, 14:35
Ильшат
в понедельник выложу скрин сейчас нет возможности.

Re: Помогите разобраться с обращением

Добавлено: 24 июн 2013, 17:31
Ильшат
Network1
L #DB_TH
T LW 30

L "DB12".Line_speed_ref
T LD 36

A #Ena_comp
JC M011
L L#0
T LD 40
JU M013

M011: A #Dir_comp
JC M012
L DB30.DBD 24
L L#10
/D
T LD 40
JU M013
M012: L DB30.DBD 24
L L#10
/D
NEGD
T LD 40
M013: NOP 0

L "DB15".OP_Diam_cable
T LW 44

OPN DB [LW 30]
Network2
L #Drive_E
SLW 3
LAR1

L PID [AR1,P#0.0]
T DBW 8
L PID [AR1,P#4.0]
T DBW 4
L PID [AR1,P#8.0]
T DBW 6

L #BK_E
SLW 3
LAR1

L PIB [AR1,P#0.0]
T DBB 0
L PIB [AR1,P#1.0]
T DBB 1
Network3
A DBX 16.2
AN "M. Start enable drives"
S DBX 38.0

AN DBX 16.2
AN "M. Start enable drives"
R DBX 38.0

X DBX 16.1
X #Dir_SZ
AN "M. Start enable drives"
S DBX 38.1
XN DBX 16.1
X #Dir_SZ
AN "M. Start enable drives"
R DBX 38.1
X DBX 38.1
X #Dir_SZ
= DBX 16.1

Re: Помогите разобраться с обращением

Добавлено: 24 июн 2013, 19:17
Михайло
Ильшат писал(а): OPN DB [LW 30]
Network2
То, о чем говорил ward. Все обращения DBX ниже этой строчки относятся к DB с номером LW 30.

Re: Помогите разобраться с обращением к DB (Step7)

Добавлено: 24 июн 2013, 20:09
CHANt
Точнее - с номером, объявленным на входе #DB_TH, причем можно было в LW30 и не копировать, достаточно было:

Код: Выделить всё

 OPN   #DB_TH

Re: Помогите разобраться с обращением к DB (Step7)

Добавлено: 24 июн 2013, 20:59
Ильшат
Значит я правильно понимаю если , #DB_TH в списке блоков DB30? Написав команду opn db[LW30] я обращаюсь к одному и тому же блоку данных? И это сделано лишь с целью сокращения писанины ?

Re: Помогите разобраться с обращением к DB (Step7)

Добавлено: 24 июн 2013, 21:17
CHANt
Ильшат писал(а):Значит я правильно понимаю если , #DB_TH в списке блоков DB30?
1) #DB_TH может быть в Вашей FC входной переменной типа "Block_DB", тогда достаточно вызова

Код: Выделить всё

OPN   #DB_TH
2) #DB_TH может быть просто числом, например типа Integer, тогда вызов будет:

Код: Выделить всё

 OPN   DB [#DB_TH]
Ильшат писал(а): Написав команду opn db[LW30] я обращаюсь к одному и тому же блоку данных?
Нет. Вы обращаетесь к блоку данных, номер которого был записан из #DB_TH в первых строках Вашей функции:

Код: Выделить всё

Network1
L #DB_TH
T LW 30
Ильшат писал(а):И это сделано лишь с целью сокращения писанины ?
По видимому хотели сделать универсальную функцию, но, "убили" всю универсальность обращениями к переменным конкретных ДБ, как пример участок:

Код: Выделить всё

L DB30.DBD 24
L L#10
/D
T LD 40
Здесь вызвана переменная 4 байта по адресу DBD24 из конкретного DB30. Что думал разработчик при этом, нам неизвестно...