Просмотр полной версии : Зависание ПЛК63 при выполнении программы
Здравствуйте, помогите решить проблему.
ПЛК63м соединен по RS485 по Modbus RTU с амперметром. Программа начинает выполняться, при считывании данных из амперметра ПЛК63м виснет и перезагружается. Происходит это в разный момент выполнения программы, никакой системности нет, может происходить через 3сек., может через 10сек.
Филоненко Владислав
08.10.2018, 10:18
Здравствуйте, помогите решить проблему.
ПЛК63м соединен по RS485 по Modbus RTU с амперметром. Программа начинает выполняться, при считывании данных из амперметра ПЛК63м виснет и перезагружается. Происходит это в разный момент выполнения программы, никакой системности нет, может происходить через 3сек., может через 10сек.
Угадай болезнь по описанию.
Проект где?
Угадай болезнь по описанию.
Проект где?
Проект здесь.
PROGRAM InitComPort
VAR
COM_SERVICE1: COM_SERVICE;
END_VAR
IF ComPortState = 0 THEN
Settings.Port:= 0; (*RS-485*)
Settings.dwBaudRate:=9600; (*speed*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=2;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF
COM_SERVICE1(Enable:=(ComPortState=0) , Settings:=Settings , Task:=OPEN_TSK );
IF COM_SERVICE1.ready THEN
ComPortState:= 2;
END_IF
----------------------------------------------------------------------------------------
PROGRAM GetMDVV
VAR
GetModbus: MB_RD_HOLD_REGS;
TimeOut: TIME:= T#50ms;
Buffer: ARRAY[0..255] OF BYTE;
EndGetStored: BOOL;
ErrorStored: BYTE;
DataSize: WORD;
GetReq: BOOL:= TRUE;
HavePause:TON;
END_VAR
F ComPortState = 2 THEN
GetModbus(
Enable:= GetReq,
Mode:= MB_RTU,
DevAddr:= 8, (*Адрес*)
FirstAddr:= 15,(*Регистр*)
Quantity:= 1,(*Количество регистров*)
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
GetReq:= FALSE;
IF GetModbus.Complete THEN
EndGetStored:= TRUE;
(* EndSendStored:= TRUE; *)
ErrorStored:= GetModbus.Exception;
END_IF(*END_IF*)
HavePause(IN:= EndGetStored,PT:=T#50ms);
(* HavePause(IN:= EndSendStored,PT:=T#50ms);*)
IF HavePause.Q THEN
(* IF HavePause.Q THEN *)
GetReq:= TRUE;
EndGetStored:= FALSE;
(* EndSendStored:= FALSE;*)
END_IF
END_IF
Проект состоит из двух блоков. Один для открытия и настройки порта RS-485. Другой для запроса данных из регистра 15 амперметра с адресом 8. Пример рабочий, но у нас никак не хочет работать. Пробовали разные варианты. Даже объединяли в один блок. Результат один : зависание и перезагрузка. Запросы и ответы все идут как бы нормально. Мониторинг пакетов проводили программой MODSIM32 в режиме Show traffic.
[008][003][000][015][000][001][180][144] - это запрос
[008] - адрес амперметра
[003] - код функции чтения регистра
[000][015] - первый регистр для чтения (0FH)
[000][001] - количество регистров
[180][144] - контрольная сумма
[008][003][002][000][000][100][069] - это ответ
[008] - адрес амперметра
[003] - код функции чтения регистра
[002] - количество байт
[000][000] - данные
[100][069] - контрольная сумма
Опять писк и перезагрузка. Последний пакет [008][003][002][000][000][100][069].
Пишет код ошибки в ПЛК - 3,
Произошла перезагрузка сторожевым таймером, обусловленная зависанием.
Проверить программу CoDeSys на наличие ошибок.
В чём тут проблема ?
A.Simonov
11.10.2018, 14:55
Проект здесь.
PROGRAM InitComPort
VAR
COM_SERVICE1: COM_SERVICE;
END_VAR
IF ComPortState = 0 THEN
Settings.Port:= 0; (*RS-485*)
Settings.dwBaudRate:=9600; (*speed*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=2;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF
COM_SERVICE1(Enable:=(ComPortState=0) , Settings:=Settings , Task:=OPEN_TSK );
IF COM_SERVICE1.ready THEN
ComPortState:= 2;
END_IF
----------------------------------------------------------------------------------------
PROGRAM GetMDVV
VAR
GetModbus: MB_RD_HOLD_REGS;
TimeOut: TIME:= T#50ms;
Buffer: ARRAY[0..255] OF BYTE;
EndGetStored: BOOL;
ErrorStored: BYTE;
DataSize: WORD;
GetReq: BOOL:= TRUE;
HavePause:TON;
END_VAR
F ComPortState = 2 THEN
GetModbus(
Enable:= GetReq,
Mode:= MB_RTU,
DevAddr:= 8, (*Адрес*)
FirstAddr:= 15,(*Регистр*)
Quantity:= 1,(*Количество регистров*)
ComHandle:= Settings.Port,
TimeOut:= Timeout,
Buffer:= Buffer);
GetReq:= FALSE;
IF GetModbus.Complete THEN
EndGetStored:= TRUE;
(* EndSendStored:= TRUE; *)
ErrorStored:= GetModbus.Exception;
END_IF(*END_IF*)
HavePause(IN:= EndGetStored,PT:=T#50ms);
(* HavePause(IN:= EndSendStored,PT:=T#50ms);*)
IF HavePause.Q THEN
(* IF HavePause.Q THEN *)
GetReq:= TRUE;
EndGetStored:= FALSE;
(* EndSendStored:= FALSE;*)
END_IF
END_IF
Проект состоит из двух блоков. Один для открытия и настройки порта RS-485. Другой для запроса данных из регистра 15 амперметра с адресом 8. Пример рабочий, но у нас никак не хочет работать. Пробовали разные варианты. Даже объединяли в один блок. Результат один : зависание и перезагрузка. Запросы и ответы все идут как бы нормально. Мониторинг пакетов проводили программой MODSIM32 в режиме Show traffic.
[008][003][000][015][000][001][180][144] - это запрос
[008] - адрес амперметра
[003] - код функции чтения регистра
[000][015] - первый регистр для чтения (0FH)
[000][001] - количество регистров
[180][144] - контрольная сумма
[008][003][002][000][000][100][069] - это ответ
[008] - адрес амперметра
[003] - код функции чтения регистра
[002] - количество байт
[000][000] - данные
[100][069] - контрольная сумма
Опять писк и перезагрузка. Последний пакет [008][003][002][000][000][100][069].
Пишет код ошибки в ПЛК - 3,
Произошла перезагрузка сторожевым таймером, обусловленная зависанием.
Проверить программу CoDeSys на наличие ошибок.
В чём тут проблема ?
Какая прошивка?
Если залить максимально простой проект, почти пустой.
Будет ли зависать ПЛК?
Желательно целиком выложить файл проекта .pro
Какая прошивка?
Если залить максимально простой проект, почти пустой.
Будет ли зависать ПЛК?
Желательно целиком выложить файл проекта .pro
Какая прошивка была в ПЛК при покупке прибора не смотрели, а в процессе выявления причин зависания и перезагрузки, поменяли прошивку на Ver 2.12. Особых изменений в работе контролёра не увидели.
ПЛК перестаёт виснуть когда отключаешь амперметр от питания 220 V. Запросы через порт RS-485 по протоколу ModBus RTU летят без задержек. Зависания начинаются когда вступает в работу амперметр, т. е. когда приходят ответы от амперметра. Судя по ответам, пакеты приходят корректные. Мониторинг пакетов проводили программой MODSIM32 в режиме Show traffic.
Мы уже обращались на этот форум с этой же проблемой, но с примером взятым с пластинки, пришедшей с ПЛК. В процессе общения прошла информация, что в данном примере пользователями была выявлена ошибка, которая приводила к сбою работы ПЛК. Было принято решение в дальнейшей работе данный пример не использовать.
Собственно весь проект выложен в листинге выше. Больше там ничего нет. Это рабочий пример, которым любезно поделился один из пользователей этого форума, пытаясь помочь нам в решении поставленной задачи. В нём только поменяли на свои значения настройки порта и функцию запроса с номером регистра.
Но если нужен сам файлик, куда кинуть ?
Может лучше описать всю историю наших действий, начиная с поставленной задачи ? Тогда наверное будет более понятно из чего исходить и как решить эту проблему с зависанием.
A.Simonov
15.10.2018, 16:29
Какая прошивка была в ПЛК при покупке прибора не смотрели, а в процессе выявления причин зависания и перезагрузки, поменяли прошивку на Ver 2.12. Особых изменений в работе контролёра не увидели.
ПЛК перестаёт виснуть когда отключаешь амперметр от питания 220 V. Запросы через порт RS-485 по протоколу ModBus RTU летят без задержек. Зависания начинаются когда вступает в работу амперметр, т. е. когда приходят ответы от амперметра. Судя по ответам, пакеты приходят корректные. Мониторинг пакетов проводили программой MODSIM32 в режиме Show traffic.
Мы уже обращались на этот форум с этой же проблемой, но с примером взятым с пластинки, пришедшей с ПЛК. В процессе общения прошла информация, что в данном примере пользователями была выявлена ошибка, которая приводила к сбою работы ПЛК. Было принято решение в дальнейшей работе данный пример не использовать.
Собственно весь проект выложен в листинге выше. Больше там ничего нет. Это рабочий пример, которым любезно поделился один из пользователей этого форума, пытаясь помочь нам в решении поставленной задачи. В нём только поменяли на свои значения настройки порта и функцию запроса с номером регистра.
Но если нужен сам файлик, куда кинуть ?
Может лучше описать всю историю наших действий, начиная с поставленной задачи ? Тогда наверное будет более понятно из чего исходить и как решить эту проблему с зависанием.
Отправьте целиком проект (.pro) на support@owen.ru
С указанием ссылки на эту тему.
P.S.
Я, визуально, не вижу ошибок. Хочу залить исходник проекта на наш ПЛК и протестировать.
Есть только одна опечатка, вместо "IF" у Вас "F", но думаю она возникла при копировании кода.
Отправьте целиком проект (.pro) на support@owen.ru
С указанием ссылки на эту тему.
P.S.
Я, визуально, не вижу ошибок. Хочу залить исходник проекта на наш ПЛК и протестировать.
Есть только одна опечатка, вместо "IF" у Вас "F", но думаю она возникла при копировании кода.
Хорошо отправим.
P.S.
Да. Вы правы. Эта опечатка. Вместо "IF" в листинге "F". Она возникла при копировании кода.
A.Simonov
24.10.2018, 14:33
Хорошо отправим.
P.S.
Да. Вы правы. Эта опечатка. Вместо "IF" в листинге "F". Она возникла при копировании кода.
Получил от вас очень много писем подозрительного содержания.
Прошу собрать все в один архив, выложить на любой облачный сервис:
https://disk.yandex.ru/
https://files.mail.ru/
И отправить ссылку на архив.
А так же прошу сформировать файл README.txt, в котором будет пояснено назначение файлов.
Получил от вас очень много писем подозрительного содержания.
Прошу собрать все в один архив, выложить на любой облачный сервис:
https://disk.yandex.ru/
https://files.mail.ru/
И отправить ссылку на архив.
А так же прошу сформировать файл README.txt, в котором будет пояснено назначение файлов.
Хорошо. Сделаем.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot