Страница 342 из 699 ПерваяПервая ... 242292332340341342343344352392442 ... ПоследняяПоследняя
Показано с 3,411 по 3,420 из 6988

Тема: CODESYS V3.5. Вопросы и ответы

  1. #3411

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    безграмотную схему в квадратиках перевести в грамотный код на ST это сильно. Тут два пути, лучше рассказать что требуется, тогда можно даже не заморачиваться с реализацией, а найти готовые блоки в библиотеках. Либо сначала привести в соответствие схему CFC может текстовый аналог и не понадобиться
    Мне нужно включение и выключение одной кнопкой, пример брал отсюда https://www.youtube.com/watch?v=TvTOI88ukDE вроде все верно сделал, но увы , не работает

  2. #3412
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,225

    По умолчанию

    Код:
    foo := xButton;
    IF foo AND NOT bar THEN
        OUT := NOT OUT;
    END_IF;
    bar := foo;
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  3. #3413

    По умолчанию

    Ребят почему неработает код?


    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

  4. #3414

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    еще бы знать что получилось и что ожидалось, тогда можно было что то и ответить
    записать значение 4 во весь массив, 1 раз отработало, меняю Testirovanie.FCONST на 10 и код повторно невыполняется

  5. #3415

    По умолчанию

    Как переключить визуализацию по переменной?

  6. #3416

  7. #3417

    По умолчанию

    ребят!, проблема нарисовалась, загрузил проект в плк, запускаю, пытаюсь прочитать с базы данных любую запись, не читает, записываю еще одну запись сверху и начинает открывать все, и старые и новые, все до первого перезапуска плк, не пойму где ошибка

    Код:
    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

  8. #3418
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,068

    По умолчанию

    Код:
    // если получен сигнал записи, то взводим соответствующий флаг
    IF fbTrigger.Q THEN
    	xOpenF:=TRUE;
    END_IF
    Код:
    ...
    ELSE IF xRFile AND xOpenF	//Чтение файла
    			THEN
    			fbFileOpen(xExecute:=TRUE, sFileName:=sVisuFileName, eFileMode:=FILE.MODE.MREAD);
    ...

  9. #3419

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Код:
    // если получен сигнал записи, то взводим соответствующий флаг
    IF fbTrigger.Q THEN
    	xOpenF:=TRUE;
    END_IF
    Код:
    ...
    ELSE IF xRFile AND xOpenF	//Чтение файла
    			THEN
    			fbFileOpen(xExecute:=TRUE, sFileName:=sVisuFileName, eFileMode:=FILE.MODE.MREAD);
    ...
    можно коментарий?

  10. #3420

    По умолчанию

    Цитата Сообщение от Игорь Владимирович Посмотреть сообщение
    можно коментарий?
    Вы читать начнете только когда xRFile, xWFile и xOpenF одновременно имеют значение TRUE. Внимательнее смотрите CASE при eState = 0.

Страница 342 из 699 ПерваяПервая ... 242292332340341342343344352392442 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 3176
    Последнее сообщение: 27.03.2024, 12:47
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 822
    Последнее сообщение: 20.11.2023, 17:48
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 245
    Последнее сообщение: 02.10.2022, 11:34
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •