Страница 340 из 893 ПерваяПервая ... 240290330338339340341342350390440840 ... ПоследняяПоследняя
Показано с 3,391 по 3,400 из 8921

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

  1. #3391

    По умолчанию

    Всем привет!
    В общем вот код:
    Код:
    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:=1978);
    				ELSE
    				//Записываемая строка
    				sArchEntry	:=	WstWstVLWst.sVeryLongWStr;
    				// запись строки архива в буфер
    				fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(sArchEntry), szSize:=1978); //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:=SIZEOF((1976)*2));	//Выбор строки для чтения количество байт на 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:=SIZEOF(1976)); //Переменная для выгрузки и количество байт
    	
    			IF fbFileRead.xDone THEN
    				fbFileRead(xExecute:=FALSE);
    				
    				// теперь можно перейти к шагу закрытия файла
    				eState	:=4;
    			END_IF
    
    			IF fbFileRead.xError THEN
    				// обработка ошибок
    			END_IF
    				
    END_CASE
    Запись и прочие все работает отлично!! не могу прочитать фаил, где у меня ошибка?

  2. #3392

    По умолчанию

    не могу прочитать фаил, где у меня ошибка?
    Код:
    szBuffer:=SIZEOF((1976)*2)

    Оператор SIZEOF возвращает размер своего аргумента в байтах.
    Размер литерала "1976*2" - это, вероятно, 2 байта (на некоторых платформах может быть 4).

    Вероятно, вы хотели в данном фрагменте кода выразить какую-то другую мысль.

  3. #3393

    По умолчанию

    Добрый день.
    codesys 3.5 modbus rtu.
    Настраивал опрос по команде, в том числе явно добавил iodrvmodbus 3.5.12.0.
    iodrvmodbus 3.5.5.0. вызывал конфликт, и был удален, но после автоматически был неявно добавлен плагином.
    Конфликт устранил выбором версии iodrvmodbus в меню свойств.
    Подскажите, пожалуйста, где почитать о неявной установке библиотек плагином?

  4. #3394

    По умолчанию

    Цитата Сообщение от enyuzer Посмотреть сообщение
    Добрый день.
    codesys 3.5 modbus rtu.
    Настраивал опрос по команде, в том числе явно добавил iodrvmodbus 3.5.12.0.
    iodrvmodbus 3.5.5.0. вызывал конфликт, и был удален, но после автоматически был неявно добавлен плагином.
    Конфликт устранил выбором версии iodrvmodbus в меню свойств.
    Подскажите, пожалуйста, где почитать о неявной установке библиотек плагином?
    Добрый день.
    Выложите проект, в котором наблюдается конфликт версий - я посмотрю, в чем может быть дело.

  5. #3395

    По умолчанию

    Да, конечно.
    Вложения Вложения
    Последний раз редактировалось enyuzer; 18.08.2021 в 15:09.

  6. #3396

    По умолчанию

    Цитата Сообщение от enyuzer Посмотреть сообщение
    Да, конечно.
    У меня с вашим проектом не возникает ни одной ошибки.
    Обеспечьте завтра удаленный доступ по TeamViewer или AnyDesk - посмотрим, в чем проблема на вашем ПК.

    Или я неправильно понял ваш пост? В чем конкретно у вас сейчас проблема?

  7. #3397

    По умолчанию

    Сейчас с проектом проблем нет.
    Я не смог разобраться что за плагин автоматически добавляет iodrvmodbus 3.5.5.0., как автоматически добавляются библиотеки вообще и какими настройками это вызвано.
    Где об этом можно почитать?

  8. #3398

    По умолчанию

    Цитата Сообщение от enyuzer Посмотреть сообщение
    Сейчас с проектом проблем нет.
    Я не смог разобраться что за плагин автоматически добавляет iodrvmodbus 3.5.5.0., как автоматически добавляются библиотеки вообще и какими настройками это вызвано.
    Где об этом можно почитать?
    Эта библиотека добавляется компонентом Modbus_Master_COM_Port из дерева проекта.

  9. #3399

    По умолчанию

    Спасибо. Это я запутался в версиях Modbus_Master_COM_Port и полез "в дебри".

  10. #3400

    По умолчанию

    Всем привет, вылезла проблемка одна

    неработает код.
    Код:
    		I10:=0;
    		FOR I10 := 0 TO 30 BY 1 DO
    		Trend1[I10]:=WSTRING_TO_BYTE(StructuraTestGS[1].Temperatura[I10]);
    		Trend2[I10]:=WSTRING_TO_BYTE(StructuraTestGS[1].Vibraciy1[I10]);
    		Trend3[I10]:=WSTRING_TO_BYTE(StructuraTestGS[1].Vibraciy2[I10]);
    		Trend4[I10]:=WSTRING_TO_BYTE(StructuraTestGS[1].Vibraciy3[I10]);
    		Trend5[I10]:=WSTRING_TO_BYTE(StructuraTestGS[1].Vibraciy4[I10]);
    		END_FOR
    причину в принципе понимаю, то что в правой стороне цыфры у меня с пробелами, как убрать пробелы или как сделать чтобы работало? те строка 3 символа, "11П" 11цифра и П пробел или "1ПП"

Страница 340 из 893 ПерваяПервая ... 240290330338339340341342350390440840 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе СП3хх, СП270
    Ответов: 4209
    Последнее сообщение: 26.08.2026, 16:07
  2. Ответов: 863
    Последнее сообщение: 02.03.2026, 17:13
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 273
    Последнее сообщение: 08.09.2025, 13:21
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе СП3хх, СП270
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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