Мне нужно включение и выключение одной кнопкой, пример брал отсюда https://www.youtube.com/watch?v=TvTOI88ukDE вроде все верно сделал, но увы , не работает
Вид для печати
Мне нужно включение и выключение одной кнопкой, пример брал отсюда https://www.youtube.com/watch?v=TvTOI88ukDE вроде все верно сделал, но увы , не работает
Код:foo := xButton;
IF foo AND NOT bar THEN
OUT := NOT OUT;
END_IF;
bar := foo;
Ребят почему неработает код?
31й там само собой 0, а вот FCONST имеет значение 4
Код:IF NOT Info[31]=Testirovanie.FCONST THEN
FOR I3 := 0 TO 31 BY 1 DO
Info[I3]:=Testirovanie.FCONST;
END_FOR
END_IF
Как переключить визуализацию по переменной?
См. п. 10.3.1 и 10.4.4:
https://ftp.owen.ru/CoDeSys3/11_Docu..._Visu_v2.2.pdf
P.S. - вопросы про визуализацию лучше задавать в соответствующей теме:
https://owen.ru/forum/showthread.php?t=22038
ребят!, проблема нарисовалась, загрузил проект в плк, запускаю, пытаюсь прочитать с базы данных любую запись, не читает, записываю еще одну запись сверху и начинает открывать все, и старые и новые, все до первого перезапуска плк, не пойму где ошибка
Код:fbTrigger(CLK:=xRFile OR xWFile);
LineW:=uiArchEntry-1;
AS1:=StrLenW(ADR(c_sTitle));
// если получен сигнал записи, то взводим соответствующий флаг
IF fbTrigger.Q THEN
xOpenF:=TRUE;
END_IF
CASE eState OF
0: // шаг открытия файла
IF xWFile AND xOpenF //Запись файла
THEN
fbFileOpen(xExecute:=TRUE, sFileName:=sVisuFileName, eFileMode:=FILE.MODE.MAPPD);
// если файл, в который производится запись, не существует, то создадим его и запишем в него заголовок архива
IF fbFileOpen.eError=FILE.ERROR.NOT_EXIST
THEN
fbFileOpen(xExecute:=FALSE);
eState:=1; // шаг создания файла
xTitle := TRUE;
END_IF
// если файл существует и был успешно открыт, то переходим к шагу записи файла
IF fbFileOpen.xDone AND xWFile
THEN
hFile:=fbFileOpen.hFile;
fbFileOpen(xExecute:=FALSE);
eState:=2; // шаг записи в буфер
END_IF
ELSE IF xRFile AND xOpenF //Чтение файла
THEN
fbFileOpen(xExecute:=TRUE, sFileName:=sVisuFileName, eFileMode:=FILE.MODE.MREAD);
// если файл существует и был успешно открыт, то переходим к шагу чтения файла
IF fbFileOpen.xDone AND xRFile
THEN
hFile:=fbFileOpen.hFile;
fbFileOpen(xExecute:=FALSE);
eState:=6; // шаг установки позиции для чтения из файла
END_IF
END_IF
END_IF
1: // шаг создания файла
// в созданном файле еще нет записей
uiArchEntry:=0;
fbFileOpen(xExecute:=TRUE, sFileName:=sVisuFileName, eFileMode:=FILE.MODE.MWRITE);
IF fbFileOpen.xDone THEN
hFile := fbFileOpen.hFile;
fbFileOpen(xExecute:=FALSE);
// после создания файла можно перейти к шагу записи данных
eState:=2;
END_IF
IF fbFileOpen.xError THEN
// обработка ошибок
END_IF
2: // шаг записи в буфер
// если это первая запись в файле - то перед ней запишем заголовок
IF uiArchEntry=0
THEN
// запись строки архива в буфер
fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(c_sTitle), szSize:=StrLenW(ADR(c_sTitle))*2);
ELSE
//Записываемая строка
sArchEntry := WstWst_TO_VLWst.sVeryLongWStr;
// запись строки архива в буфер
fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(sArchEntry), szSize:=(StrLenW(ADR(sArchEntry)))*2); //1978 Байт строка включая символы переноса строки
END_IF
IF fbFileWrite.xDone THEN
fbFileWrite(xExecute:=FALSE);
// после записи число строк в архиве увеличилось на одну
uiArchEntry:=uiArchEntry+1;
// теперь можно перейти к шагу сброса буфера в файл
eState:=3; // шаг сброса буфера в файл
END_IF
IF fbFileWrite.xError THEN
// обработка ошибок
END_IF
3: // шаг сброса буфера в файл
fbFileFlush(xExecute:=TRUE, hFile:=hFile);
IF fbFileFlush.xDone THEN
fbFileFlush(xExecute:=FALSE);
// теперь можно перейти к шагу закрытия файла
eState:=4; // шаг закрытия файла
END_IF
IF fbFileFlush.xError THEN
// обработка ошибок
END_IF
4: // шаг закрытия файла
fbFileClose(xExecute:=TRUE, hFile:=hFile);
IF fbFileClose.xDone THEN
fbFileClose(xExecute:=FALSE);
xOpenF := FALSE;
// теперь можно перейти к шагу определения размера файла
eState:=5; // шаг определения размера файла
END_IF
5: // шаг определения размера файла
fbFileGetSize(xExecute:=TRUE, sFileName:=sVisuFileName);
// определяем размер файла
IF fbFileGetSize.xDone THEN
udiArchSize:=fbFileGetSize.szSize;
fbFileGetSize(xExecute:=FALSE);
// вернемся на шаг открытия файла для ожидания следующего управляющего сигнала
eState:=0; // шаг открытия файла
END_IF
// размер несуществующего файла...
IF fbFileGetSize.eError=FILE.ERROR.NOT_EXIST THEN
// очевидно, можно интерпретировать как ноль
udiArchSize:=0;
fbFileGetSize(xExecute:=FALSE);
// вернемся на шаг открытия файла для ожидания следующего управляющего сигнала
eState:=0;
ELSIF fbFileGetSize.xError THEN
fbFileGetSize(xExecute:=FALSE);
eState:=0; // шаг открытия файла
END_IF
6: // шаг установки позиции для чтения из файла
fbFileSetPos(xExecute:=TRUE, hFile:=hFile, udiPos:=((StrLenW(ADR(sArchEntry)))*2)*SN); //Выбор строки для чтения количество байт на 1 строку умножить на номер строки
IF fbFileSetPos.xDone THEN
fbFileSetPos(xExecute:=FALSE);
// позиция для чтения выбрана, теперь можно перейти к шагу чтения данных
eState :=7;
END_IF
IF fbFileSetPos.xError THEN
// обработка ошибок
END_IF
7: // шаг чтения файла
fbFileRead(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(stReadData), szBuffer:=(StrLenW(ADR(sArchEntry)))*2); //Переменная для выгрузки и количество байт без учёта символов переноса строки
IF fbFileRead.xDone THEN
fbFileRead(xExecute:=FALSE);
// теперь можно перейти к шагу закрытия файла
eState :=4;
END_IF
IF fbFileRead.xError THEN
// обработка ошибок
END_IF
END_CASE
Код:// если получен сигнал записи, то взводим соответствующий флаг
IF fbTrigger.Q THEN
xOpenF:=TRUE;
END_IF
Код:...
ELSE IF xRFile AND xOpenF //Чтение файла
THEN
fbFileOpen(xExecute:=TRUE, sFileName:=sVisuFileName, eFileMode:=FILE.MODE.MREAD);
...