Страница 6 из 6 ПерваяПервая ... 456
Показано с 51 по 60 из 60

Тема: СПК107 - зависает после нескольких часов работы

  1. #51

    По умолчанию

    Цитата Сообщение от a_gricaj Посмотреть сообщение
    Подскажите пожалуйста как эту проблему решить......
    тут надо на алгоритм восстановления связи смотреть.

  2. #52

    По умолчанию

    Цитата Сообщение от slonegd Посмотреть сообщение
    Заметил, что переменная .xAllSlavesOk не совсем правильно отображает состояние слейвов. Переменная тру, но фактически в кодесисе присутствуют восклицательные знаки. Заменил эту переменную на NOT(.xError or .xError и так далее) вместо .xAllSlavesOk и работать стало без перебоев в сети (ну то есть, если перебои появлялись, то связь восстанавливалась в соответствии с написанным алгоритмом).
    С .xError стало лучше - 90% восстановления связи, а как программно "ресетнуть" ком порт????

  3. #53

    По умолчанию

    я сделал такую конструкцию

    Код HTML:
    	CASE restart_STEP OF
    		0: 	IF a2.xError OR a3.xError OR a4.xError OR a5.xError OR A6.xError OR A7.xError OR A8.xError OR A9.xError THEN
    				a4_error_count:=a4_error_count+1;
    				IF a4_error_count>5 THEN
    					restart_STEP:=restart_STEP+1;
    				END_IF
    			ELSE
    				a4_error_count:=0;
    			END_IF
    		1: 	Modbus_Master_COM_Port.xStop:=TRUE;
    			Modbus_Master_COM_Port_1.xStop:=TRUE;
    			TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				a4.xReset:=TRUE;
    				a7.xReset:=TRUE;
    				a2.xReset:=TRUE;
    				a3.xReset:=TRUE;
    				a5.xReset:=TRUE;
    				a6.xReset:=TRUE;
    				a8.xReset:=TRUE;
    				a9.xReset:=TRUE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		2:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				a4.xReset:=FALSE;
    				a7.xReset:=FALSE;
    				a2.xReset:=FALSE;
    				a3.xReset:=FALSE;
    				a5.xReset:=FALSE;
    				a6.xReset:=FALSE;
    				a8.xReset:=FALSE;
    				a9.xReset:=FALSE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		3:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				Modbus_Master_COM_Port.xResetComPort:=TRUE;
    				Modbus_Master_COM_Port_1.xResetComPort:=TRUE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		4:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				Modbus_Master_COM_Port.xResetComPort:=FALSE;
    				Modbus_Master_COM_Port_1.xResetComPort:=FALSE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		5:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				Modbus_Master_COM_Port.xStop:=FALSE;
    				Modbus_Master_COM_Port_1.xStop:=FALSE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF	
    		6:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				TON_restart(IN:=FALSE);
    				restart_STEP:=0;
    			END_IF	
    	END_CASE
    С ней зависать перестало совсем. Если пропадает связь, то восстанавливается, бывает не с первой попытки, но восстанавливается. Тут у меня 2 ком порта задействованы сразу, можно раздельно прописать.

  4. #54
    Пользователь Аватар для Эдуард_Н
    Регистрация
    22.09.2014
    Адрес
    Курган
    Сообщений
    1,612

    По умолчанию

    Цитата Сообщение от slonegd Посмотреть сообщение
    я сделал такую конструкцию

    Код HTML:
    	CASE restart_STEP OF
    		0: 	IF a2.xError OR a3.xError OR a4.xError OR a5.xError OR A6.xError OR A7.xError OR A8.xError OR A9.xError THEN
    				a4_error_count:=a4_error_count+1;
    				IF a4_error_count>5 THEN
    					restart_STEP:=restart_STEP+1;
    				END_IF
    			ELSE
    				a4_error_count:=0;
    			END_IF
    		1: 	Modbus_Master_COM_Port.xStop:=TRUE;
    			Modbus_Master_COM_Port_1.xStop:=TRUE;
    			TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				a4.xReset:=TRUE;
    				a7.xReset:=TRUE;
    				a2.xReset:=TRUE;
    				a3.xReset:=TRUE;
    				a5.xReset:=TRUE;
    				a6.xReset:=TRUE;
    				a8.xReset:=TRUE;
    				a9.xReset:=TRUE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		2:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				a4.xReset:=FALSE;
    				a7.xReset:=FALSE;
    				a2.xReset:=FALSE;
    				a3.xReset:=FALSE;
    				a5.xReset:=FALSE;
    				a6.xReset:=FALSE;
    				a8.xReset:=FALSE;
    				a9.xReset:=FALSE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		3:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				Modbus_Master_COM_Port.xResetComPort:=TRUE;
    				Modbus_Master_COM_Port_1.xResetComPort:=TRUE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		4:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				Modbus_Master_COM_Port.xResetComPort:=FALSE;
    				Modbus_Master_COM_Port_1.xResetComPort:=FALSE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		5:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				Modbus_Master_COM_Port.xStop:=FALSE;
    				Modbus_Master_COM_Port_1.xStop:=FALSE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF	
    		6:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				TON_restart(IN:=FALSE);
    				restart_STEP:=0;
    			END_IF	
    	END_CASE
    С ней зависать перестало совсем. Если пропадает связь, то восстанавливается, бывает не с первой попытки, но восстанавливается. Тут у меня 2 ком порта задействованы сразу, можно раздельно прописать.
    А экспортный вариант можете сделать?

  5. #55

    По умолчанию

    Цитата Сообщение от Эдуард_Н Посмотреть сообщение
    А экспортный вариант можете сделать?
    Не понимаю, что значит экспортный.
    Modbus_Master_COM_Port - это название ком порта, я оставил, что выдает по умолчанию.
    Modbus_Master_COM_Port_1 - второй ком порт.
    а4,а5 и так далее - так называются у меня блоки расширения (слейвы).
    restart_STEP - просто int, больше как в этом куске кода нигде не используется.
    a4_error_count - int, считает ошибки, больше как в этом куске кода нигде не используется.
    TON_restart - функциональный блок TON, больше нигде не используется.

    Вот картинка с деревом проекта, может так будет понятнее.
    Безымянный.JPG

  6. #56

    По умолчанию

    Цитата Сообщение от slonegd Посмотреть сообщение
    я сделал такую конструкцию

    Код HTML:
    	CASE restart_STEP OF
    		0: 	IF a2.xError OR a3.xError OR a4.xError OR a5.xError OR A6.xError OR A7.xError OR A8.xError OR A9.xError THEN
    				a4_error_count:=a4_error_count+1;
    				IF a4_error_count>5 THEN
    					restart_STEP:=restart_STEP+1;
    				END_IF
    			ELSE
    				a4_error_count:=0;
    			END_IF
    		1: 	Modbus_Master_COM_Port.xStop:=TRUE;
    			Modbus_Master_COM_Port_1.xStop:=TRUE;
    			TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				a4.xReset:=TRUE;
    				a7.xReset:=TRUE;
    				a2.xReset:=TRUE;
    				a3.xReset:=TRUE;
    				a5.xReset:=TRUE;
    				a6.xReset:=TRUE;
    				a8.xReset:=TRUE;
    				a9.xReset:=TRUE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		2:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				a4.xReset:=FALSE;
    				a7.xReset:=FALSE;
    				a2.xReset:=FALSE;
    				a3.xReset:=FALSE;
    				a5.xReset:=FALSE;
    				a6.xReset:=FALSE;
    				a8.xReset:=FALSE;
    				a9.xReset:=FALSE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		3:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				Modbus_Master_COM_Port.xResetComPort:=TRUE;
    				Modbus_Master_COM_Port_1.xResetComPort:=TRUE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		4:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				Modbus_Master_COM_Port.xResetComPort:=FALSE;
    				Modbus_Master_COM_Port_1.xResetComPort:=FALSE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF
    		5:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				Modbus_Master_COM_Port.xStop:=FALSE;
    				Modbus_Master_COM_Port_1.xStop:=FALSE;
    				TON_restart(IN:=FALSE);
    				restart_STEP:=restart_STEP+1;
    			END_IF	
    		6:	TON_restart(IN:=TRUE,PT:=T#200MS);
    			IF TON_restart.Q THEN
    				TON_restart(IN:=FALSE);
    				restart_STEP:=0;
    			END_IF	
    	END_CASE
    С ней зависать перестало совсем. Если пропадает связь, то восстанавливается, бывает не с первой попытки, но восстанавливается. Тут у меня 2 ком порта задействованы сразу, можно раздельно прописать.
    Спс за пример, я уже сделал, правда чуть не так, но смысл тот же (правда без остановки СОМ-порта) - заметил, что если отвалились все модуля - достаточно отключить их опрос, "ресетнуть" их и возобновить опрос.

  7. #57

    По умолчанию

    В СПК1хх в случае проблем с обменом рекомендуется производить закрытие порта. Это недокументированная фича. В случае закрытия порта весь внутренний буфер приема очищается. Таким образом это положительным образом в некоторых ситуациях влияет на обмен.

  8. #58
    Пользователь Аватар для Эдуард_Н
    Регистрация
    22.09.2014
    Адрес
    Курган
    Сообщений
    1,612

    По умолчанию

    Цитата Сообщение от Александр Приходько Посмотреть сообщение
    В СПК1хх в случае проблем с обменом рекомендуется производить закрытие порта. Это недокументированная фича. В случае закрытия порта весь внутренний буфер приема очищается. Таким образом это положительным образом в некоторых ситуациях влияет на обмен.
    Когда решите проблему со связью по 485 в СПК1хх эти действия не нужны будут?

  9. #59
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Цитата Сообщение от slonegd Посмотреть сообщение
    я сделал такую конструкцию

    Код HTML:
    	Мастер.xStop:=TRUE;
            Пауза200ms;
    
            Слейв.xReset:=TRUE;
            Пауза200ms;
    	Слейв.xReset:=FALSE;
            Пауза200ms;
            
            Мастер.xResetComPort:=TRUE;
            Пауза200ms;
            Мастер.xResetComPort:=FALSE;
            Пауза200ms;
    
    	Мастер.xStop:=FALSE;
            Пауза200ms;
    А после останова Мастера сброс на Слейвы разве проходит? Или xReset только для инициализации соответствующих ФБ?
    И почему везде такие большие паузы?
    Последний раз редактировалось ufaman; 29.06.2016 в 15:04.

  10. #60

    По умолчанию

    Весь порядок действий слизал где-то с форума. Паузы наобум, насколько можно меньше не экспериментировал. Я вообще по этому алгоритму аварийное отключение определял. Если блоки не отвечают, значит на них нет питания. Как только питание появлялось обратно, связь восстанавливалась, иногда раза с пятого, иногда сразу.

Страница 6 из 6 ПерваяПервая ... 456

Похожие темы

  1. Эмуляция работы спк107
    от Beard в разделе СПК1хх
    Ответов: 12
    Последнее сообщение: 25.03.2022, 09:51
  2. СПК107 - зависает при нажатии на кнопку
    от a_gricaj в разделе СПК1хх
    Ответов: 2
    Последнее сообщение: 02.02.2016, 19:17
  3. Зависает визуализация СПК107
    от Denis_ в разделе СПК1хх
    Ответов: 9
    Последнее сообщение: 30.12.2015, 12:24
  4. Зависает СПК107
    от Deoxes в разделе СПК1хх
    Ответов: 3
    Последнее сообщение: 27.02.2014, 16:31
  5. Ответов: 5
    Последнее сообщение: 20.12.2013, 11:10

Ваши права

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