Потерялась при копировании, вставке. Код пробую пока на эмуляторе.
Вид для печати
Потерялась при копировании, вставке. Код пробую пока на эмуляторе.
Да недоговаривает.
Есть куча способов облажаться на таких примитивных строках и стучатся на форум с ребусом.
Весь проект - где ?
У меня есть ПР200, нужно сделать юстировку AI (датчик 4-20мА). Вопрос: Можно ли это сделать с помощью РЗУ-420 и как?
Здравствуйте.
Подскажите пожалуйста в чем проблема: в строке 176 выход функции BLINK не хочет "выходить" на релейный выход HORN.
Спасибо.
Вложение 38778
См. строку 188.
Спасибо.
Мысль понятна. буду разбираться.
Доброй ночи!
в ST не силен, прошу посмотреть матерых, правильно ли будет так организовать запись в файл. Запись нужна лишь для хранения уставок.
Т.к. форум не знает файлов типа .EXP, залил на файлообменник, прога доступна по ссылке
Ну, или просто код:
Код:PROGRAM PLC_PRG
VAR
start1:BOOL;
start2:BOOL;
f1:DWORD;
Buffer_in: ARRAY[0..7] OF REAL;
Buffer_out: ARRAY[0..7] OF REAL;
timeout_1: TON := (PT := T#5s);
sfw:DWORD;
sfr:DWORD;
sfc:BOOL;
END_VAR
VAR_INPUT
per1_write:REAL;
per2_write:REAL;
per3_write:REAL;
per4_write:REAL;
per5_write:REAL;
per6_write:REAL;
per7_write:REAL;
per8_write:REAL;
write:BOOL;
read:BOOL;
END_VAR
VAR_OUTPUT
per1_read:REAL;
per2_read:REAL;
per3_read:REAL;
per4_read:REAL;
per5_read:REAL;
per6_read:REAL;
per7_read:REAL;
per8_read:REAL;
finish_write:BOOL; (*триггер успешной записи*)
finish_read:BOOL; (*триггер успешного чтения*)
END_VAR
Buffer_in[0] :=per1_write; (*формируем буфер из переменных для записи*)
Buffer_in[1] :=per2_write;
Buffer_in[2] :=per3_write;
Buffer_in[3] :=per4_write;
Buffer_in[4] :=per5_write;
Buffer_in[5] :=per6_write;
Buffer_in[6] :=per7_write;
Buffer_in[7] :=per8_write;
IF write=TRUE AND read=FALSE THEN (*команда на начало записи*)
f1 := SysFileOpen ('my_retain', 'w');
IF f1>0 THEN;
sfw:=SysFileWrite(f1, ADR(Buffer_in), SIZEOF(Buffer_in));
IF sfw=32 THEN;
sfc:=SysFileClose(f1);
finish_write:=TRUE; (*формирование флага успешной записи*)
timeout_1(IN := TRUE);
IF timeout_1.Q THEN
finish_write:=FALSE; (*сброс флага через время PT*)
timeout_1(IN := FALSE);
write:=FALSE;
END_IF
END_IF
END_IF
END_IF
IF read=TRUE AND write=FALSE THEN (*команда на начало чтения*)
f1:=SysFileOpen('my_retain', 'r');
IF f1>0 THEN;
sfr:=SysFileRead(f1, ADR(Buffer_out), SIZEOF(Buffer_out));
IF sfr=32 THEN;
sfc:=SysFileClose(f1);
SysMemCpy(ADR(per1_read), ADR(buffer_out[0]), SIZEOF(per1_read)); (*копируем из буфера чтения*)
SysMemCpy(ADR(per2_read), ADR(buffer_out[1]), SIZEOF(per2_read));
SysMemCpy(ADR(per3_read), ADR(buffer_out[2]), SIZEOF(per3_read));
SysMemCpy(ADR(per4_read), ADR(buffer_out[3]), SIZEOF(per4_read));
SysMemCpy(ADR(per5_read), ADR(buffer_out[4]), SIZEOF(per5_read));
SysMemCpy(ADR(per6_read), ADR(buffer_out[5]), SIZEOF(per6_read));
SysMemCpy(ADR(per7_read), ADR(buffer_out[6]), SIZEOF(per7_read));
SysMemCpy(ADR(per8_read), ADR(buffer_out[7]), SIZEOF(per8_read));
finish_read:=TRUE; (*формирование флага успешного чтения*)
timeout_1(IN := TRUE);
IF timeout_1.Q THEN
finish_read:=FALSE; (*сброс флага через время PT*)
timeout_1(IN := FALSE);
read:=FALSE;
END_IF
END_IF
END_IF
END_IF
Здравствуйте!
В общем, проблема такого характера: все задействованные дискретные входы ПЛК-110 в CoDeSys'е при подключении к ПЛК дают true, хотя кнопка не нажата и датчик не срабатывает (кнопка и датчик - входные устройства). В самом ПЛК всё отображается корректно, нажал кнопку - загорелась лампочка над соответствующим входом. Что с этим можно сделать?