Вопрос по SFC59,58
Пакеты программирования STEP5/STEP7, инженерное программное обеспечение, программное обеспечение RunTime
Модераторы: gulenok_andrey, Кухаренко Сергей, pavel_puchkov
Всем привет !
Ниже часть кода из работающей программы.
1. Что такое data record «2F» (47 DEC) ?
Как узнать, какие именно данные хранятся в этом «data record» «2F» ?
2. Могут ли SFC58,59 использоваться для обмена CPU с модулями не только «своего» PLC, но и с модулями других устройств, имеющими связь с данным PLC, например :
- по "Profibus-DP" (PLCs, «частотники», инверторы и др.) ;
- по RS-232 ?
3. Почему в коде и для записи «data record» (SFC58), и для чтения «data record» (SFC59) , везде используется IOID :=B#16#54 , ведь значение 54H относится только к адресной области периферийных входов (PI)
CALL SFC59
REQ :=M1.0
IOID :=B#16#54
LADDR :=30
RECNUM :=B#16#2F
RET_VAL:=MW110
BUSY :=M1.1
RECORD :=P#DB150.DBX 14.0 BYTE 4
CALL SFC 58
REQ :=M2.0
IOID :=B#16#54
LADDR :=50
RECNUM :=B#16#2F
RECORD :=P#DB151.DBX 0.0 BYTE 24
RET_VAL:=MW110
BUSY :=M2.1
Заранее благодарен.
Ниже часть кода из работающей программы.
1. Что такое data record «2F» (47 DEC) ?
Как узнать, какие именно данные хранятся в этом «data record» «2F» ?
2. Могут ли SFC58,59 использоваться для обмена CPU с модулями не только «своего» PLC, но и с модулями других устройств, имеющими связь с данным PLC, например :
- по "Profibus-DP" (PLCs, «частотники», инверторы и др.) ;
- по RS-232 ?
3. Почему в коде и для записи «data record» (SFC58), и для чтения «data record» (SFC59) , везде используется IOID :=B#16#54 , ведь значение 54H относится только к адресной области периферийных входов (PI)
CALL SFC59
REQ :=M1.0
IOID :=B#16#54
LADDR :=30
RECNUM :=B#16#2F
RET_VAL:=MW110
BUSY :=M1.1
RECORD :=P#DB150.DBX 14.0 BYTE 4
CALL SFC 58
REQ :=M2.0
IOID :=B#16#54
LADDR :=50
RECNUM :=B#16#2F
RECORD :=P#DB151.DBX 0.0 BYTE 24
RET_VAL:=MW110
BUSY :=M2.1
Заранее благодарен.
Добрый день.
1. Некая нумерованная область данных модуля, который у вас имеет LADDR :=30. Посмотрите в HW, что у вас за модуль имеет адрес 30 и почитайте на него мануал.
2. по RS-232 - точно нет. Согласно справке, функции WR_REC и RD_REC могут обращаться к Profibus слейвам, но мне таких реализаций не попадалось.
3. Потому что функции WR_REC и RD_REC производят запись данных не в периферийные входа/выхода, а в область памяти модуля, адрес которого указан в параметре LADDR, идентификатор IOID заполняется исходя из того, как модуль отражается в HW. Если модуль целиком в PI, то B#16#54, если модуль целиком в PQ, то B#16#55. Если модуль смешанный, то ставится идентификатор младшего адреса, если адреса одинаковы, то B#16#54.
См. справочное руководство по системным и стандартным функциям для S7-300 и S7-400, п.7.7.
1. Некая нумерованная область данных модуля, который у вас имеет LADDR :=30. Посмотрите в HW, что у вас за модуль имеет адрес 30 и почитайте на него мануал.
2. по RS-232 - точно нет. Согласно справке, функции WR_REC и RD_REC могут обращаться к Profibus слейвам, но мне таких реализаций не попадалось.
3. Потому что функции WR_REC и RD_REC производят запись данных не в периферийные входа/выхода, а в область памяти модуля, адрес которого указан в параметре LADDR, идентификатор IOID заполняется исходя из того, как модуль отражается в HW. Если модуль целиком в PI, то B#16#54, если модуль целиком в PQ, то B#16#55. Если модуль смешанный, то ставится идентификатор младшего адреса, если адреса одинаковы, то B#16#54.
См. справочное руководство по системным и стандартным функциям для S7-300 и S7-400, п.7.7.