Страница 674 из 711 ПерваяПервая ... 174574624664672673674675676684 ... ПоследняяПоследняя
Показано с 6,731 по 6,740 из 7101

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

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

    По умолчанию

    Цитата Сообщение от Test_driver Посмотреть сообщение
    Евгений, здравствуйте!
    "Напал" на Ваш канал на известном видео хостинге. Это кладезь полезной информации.
    Вы "вещаете" в основном на языке ST.

    1. Мне интересно Ваше мнение. Всё-таки на ST, как программисту, удобнее писать задачи? Чем, скажем на "релюшках" (LD)?
    На ST писать код, вроде как, более полноценный код, Ифы, Циклы, указатели там разные..., все дела...

    2. Нубский вопрос. А совместить CFC с ST ? Это делается в CodeSys? Ткните ссылку на пример? Или в двух словах - да, нет. Спасибо.
    Добрый день.

    1. Мое мнение - каждый разработчик может выбрать для себя тот язык (или набор языков), который считает наболее подходящим для решения конкретной задачи.
    2. В проекте CODESYS можно создавать POU на разных языках (например - программа на CFC, в который вызываются экземпляры ФБ, написанных на ST).

  2. #6732

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.

    1. Мое мнение - каждый разработчик может выбрать для себя тот язык (или набор языков), который считает наболее подходящим для решения конкретной задачи.
    2. В проекте CODESYS можно создавать POU на разных языках (например - программа на CFC, в который вызываются экземпляры ФБ, написанных на ST).
    Благодарю! На курсах показали разок, это POU. "Будем посмотреть", спасибо за лаконичный ответ и пинок в нужное направление.
    CFC - классная вещь, всё наглядно и быстро, через библиотеки и т.д. Но иногда надо "хитрую" функцию "приклеить".
    Симбиоз CFC и ST - танк!
    Последний раз редактировалось Test_driver; 15.01.2024 в 11:25.

  3. #6733

    По умолчанию

    Коллеги прошу подсказки.
    Дано: СПК107 подключен по LAN к роутеру в который вставлен USB модем.
    Из-за специфики объекта роутер включается на небольшой промежуток времени для передачи архивных данных.
    Как из кода программы определить наличие доступа к интернету?

  4. #6734

    По умолчанию

    Цитата Сообщение от Николай Суриков Посмотреть сообщение
    Коллеги прошу подсказки.
    Дано: СПК107 подключен по LAN к роутеру в который вставлен USB модем.
    Из-за специфики объекта роутер включается на небольшой промежуток времени для передачи архивных данных.
    Как из кода программы определить наличие доступа к интернету?
    Ну как вариант реализовать tcp сервер, который будет постоянно слушать порт. А извне посылать JSON запрос, и когда контроллер увидит запрос, он выдаст JSON ответ. И к роутеру привязка формальна выходит. Включили роутер, контроллер увидел запрос, выдал ответ.

  5. #6735

    По умолчанию

    Цитата Сообщение от Николай Суриков Посмотреть сообщение
    Коллеги прошу подсказки.
    Дано: СПК107 подключен по LAN к роутеру в который вставлен USB модем.
    Из-за специфики объекта роутер включается на небольшой промежуток времени для передачи архивных данных.
    Как из кода программы определить наличие доступа к интернету?
    1. Пинг узла куда нужно посылать данные. Откликнулся - можно слать
    2. Если роутер позволяет, то он сам шлет что-нибудь в панель при появлении интернета. Панель получает сигнал и начинает действовать.

  6. #6736

    По умолчанию

    Цитата Сообщение от Николай Суриков Посмотреть сообщение
    Коллеги прошу подсказки.
    Дано: СПК107 подключен по LAN к роутеру в который вставлен USB модем.
    Из-за специфики объекта роутер включается на небольшой промежуток времени для передачи архивных данных.
    Как из кода программы определить наличие доступа к интернету?
    В продолжение моего способа:
    Код:
    PROGRAM POU_TCP_SERVER
    VAR
    	fbTcpServer: NBS.TCP_Server;		//ФБ TCP-сервера
    	//Массив структур для обработки подключений
    	astClients: ARRAY [1..usiMaxConnections] OF DUT_TCP_CONNECTION;
    	usiActiveClientCounter: USINT;		//Число подключенных клиентов
    	i: INT;								//Счетчик для цикла
    	R_TRIG_0: ARRAY [1..usiMaxConnections] OF R_TRIG;
    	TON_RES_Y: ARRAY [1..usiMaxConnections] OF TON;
    	TRX_ALM: TON;
    	ix: INT;
    END_VAR
    VAR CONSTANT
    	//Максимальное число подключенных клиентов
    	usiMaxConnections: USINT := 5;
    END_VAR
    VAR_INPUT
    	Com_From_JSON: BOOL;
    	Com_From_Main: BOOL;
    END_VAR
    Код:
    //создаем сервер на заданном порту
    IF usiActiveClientCounter= 5 THEN
    	//если количество активных клиентов достигло 5, перезапускаем сервер и сбрасываем все подключения
    	fbTcpServer
    	(
    		xEnable:= FALSE
    	);
    	usiActiveClientCounter:= 0;
    	TargetVars.stBuzzer.xSet:= TRUE;
    ELSE
    	fbTcpServer
    	(
    		xEnable:= TRUE,
    		ipAddr := ,
    		uiPort := 48888
    	);
    END_IF
    
    TRX_ALM(in:= TargetVars.stBuzzer.xSet, PT:=T#3S);
    IF TRX_ALM.Q THEN
    	TargetVars.stBuzzer.xSet:= FALSE;
    END_IF
    
    IF fbTcpServer.xError THEN
    	;									//обработка ошибок
    END_IF
    //создаем обработчики подключений для клиентов
    FOR i:= 1 TO usiMaxConnections DO
    	astClients[i].fbTcpConnection
    	(
    		xEnable:=fbTcpServer.xBusy AND NOT astClients[i].fbTcpConnection.xDone,
    		hServer:=fbTcpServer.hServer
    	);
    	IF astClients[i].fbTcpConnection.xError THEN
    		;								//обработка ошибок
    	END_IF
    	//отслеживаем подключение клиента
    	astClients[i].fbAddClient(CLK:=astClients[i].fbTcpConnection.xActive);
    	//регистрируем подключение нового клиента
    	IF astClients[i].fbAddClient.Q THEN
    		usiActiveClientCounter := usiActiveClientCounter + 1;
    	END_IF
    	//регистрируем отключение одного из клиентов
    	IF astClients[i].fbTcpConnection.xDone THEN
    		usiActiveClientCounter := usiActiveClientCounter - 1;
    	END_IF
    	CASE astClients[i].eState OF
    	DUT_TCP_SERVER_STATE.CREATE:		//проверяем, что подключился клиент
    		IF astClients[i].fbTcpConnection.xActive THEN
    			astClients[i].eState:=DUT_TCP_SERVER_STATE.LISTEN;
    		END_IF
    	DUT_TCP_SERVER_STATE.LISTEN:		//получаем данные от клиента
    		astClients[i].fbTcpRead
    		(
    			xEnable := astClients[i].fbTcpConnection.xActive,
    			hConnection := astClients[i].fbTcpConnection.hConnection,
    			pData := ADR(astClients[i].sClientString),
    			szSize := SIZEOF(astClients[i].sClientString)
    		);
    		//если получен запрос от клиента - подготавливаем ответ
    		IF astClients[i].fbTcpRead.xReady THEN
    			astClients[i].sClientString:= OSU.Between(astClients[i].sClientString, '{', '}');
    			IF astClients[i].sClientString = '1' THEN
    				Com_From_JSON := TRUE;
    			END_IF
    			Com_From_Main := TRUE;
    			astClients[i].eState:=DUT_TCP_SERVER_STATE.X_Start;
    		ELSIF astClients[i].fbTcpRead.xError THEN
    			;							//обработка ошибок
    		END_IF
    	DUT_TCP_SERVER_STATE.X_Start:
    		R_TRIG_0[i](CLK := Com_From_Main);
    		TON_RES_Y[i](IN := R_TRIG_0[i].CLK, PT := T#50MS);
    		IF TON_RES_Y[i].Q THEN
    
    			MEM.MemFill(ADR(astClients[i].sInverseString), SIZEOF(astClients[i].sInverseString), 16#20);
    			MEM.MemFill(ADR(astClients[i].sInverseString1000), SIZEOF(astClients[i].sInverseString1000), 16#20);
    
    			IF astClients[i].sClientString = '1' THEN
    				astClients[i].sInverseString:= POU_JSON_CMD1.JSON_STR;
    			ELSIF astClients[i].sClientString = '2' THEN
    				astClients[i].sInverseString:= POU_JSON_CMD2.JSON_STR;
    			ELSIF astClients[i].sClientString = '3' THEN
    				astClients[i].sInverseString:= POU_JSON_CMD3.JSON_STR;
    			ELSIF astClients[i].sClientString = '4' THEN
    				astClients[i].sInverseString:= POU_JSON_CMD4.JSON_STR;
    			ELSIF astClients[i].sClientString = '5' THEN
    				astClients[i].sInverseString:= POU_JSON_CMD5.JSON_STR;
    			ELSIF astClients[i].sClientString = '1000' THEN
    				astClients[i].sInverseString1000:= POU_Main.STR1000;
    			ELSE
    				astClients[i].sInverseString:= '{"Info":"Неизвестный запрос!"}';
    			END_IF
    
    			FOR ix:= 1 TO 25 DO
    				astClients[i].sInverseString := CONCAT(astClients[i].sInverseString, '          ');
    			END_FOR;
    
    			astClients[i].eState:=DUT_TCP_SERVER_STATE.SEND;		
    		END_IF
    	DUT_TCP_SERVER_STATE.SEND:			//отправляем ответ клиенту
    			Com_From_Main := FALSE;
    			R_TRIG_0[i](CLK := FALSE);
    			TON_RES_Y[i](IN := FALSE);
    			IF astClients[i].sClientString <> '1000' THEN
    				astClients[i].fbTcpWrite
    				(
    					xExecute := TRUE,
    					hConnection := astClients[i].fbTcpConnection.hConnection,
    					pData := ADR(astClients[i].sInverseString),
    					szSize := SIZEOF(astClients[i].sInverseString)
    				);
    			ELSIF astClients[i].sClientString = '1000' THEN
    				astClients[i].fbTcpWrite
    				(
    					xExecute := TRUE,
    					hConnection := astClients[i].fbTcpConnection.hConnection,
    					pData := ADR(astClients[i].sInverseString1000),
    					szSize := SIZEOF(astClients[i].sInverseString1000)
    				);
    			END_IF
    			//если ответ успешно отправлен - продолжаем слушать порт, ожидая следующего запроса
    			IF astClients[i].fbTcpWrite.xDone THEN
    				astClients[i].fbTcpWrite(xExecute:=FALSE);
    				astClients[i].eState:=DUT_TCP_SERVER_STATE.LISTEN;
    			ELSIF astClients[i].fbTcpWrite.xError THEN
    				;						//обработка ошибок
    			END_IF
    	END_CASE
    END_FOR

  7. #6737

    По умолчанию

    Добрый день.
    Подскажите правильно я реализую пересчет оборотов энкодера в плк MB210-212?
    Изображения Изображения

  8. #6738

    По умолчанию

    Добрый день.
    Много искал, но не нашёл.
    CODESYS 3 периодически выдает сообщение "Безопасности" об отсутствии некоторых сертификатов
    Сертификаты.jpg

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

    По умолчанию

    Цитата Сообщение от PetrAfonin Посмотреть сообщение
    Добрый день.
    Много искал, но не нашёл.
    CODESYS 3 периодически выдает сообщение "Безопасности" об отсутствии некоторых сертификатов
    Сертификаты.jpg
    Добрый день.
    Срок действия сертификатов TLS в ПЛК подходит к концу.
    Если вы их не используете - то можете просто удалить.

  10. #6740

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.
    Срок действия сертификатов TLS в ПЛК подходит к концу.
    Если вы их не используете - то можете просто удалить.
    Спасибо за подсказку

Страница 674 из 711 ПерваяПервая ... 174574624664672673674675676684 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 3197
    Последнее сообщение: 23.04.2024, 13:45
  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

Ваши права

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