PDA

Просмотр полной версии : ModBus



Makc
05.12.2014, 12:06
Помогите разрешить проблему. приобрели частотник Erman, решили управлять им через панель Овен плк270, при опросе инпут регистров на панели вылазиет окно "потеря связи", подключаемся модбас ОРС сервером к частотнику и без пробелм опрашиваем инпуты, так же делаем ОРС сервер слэйвом и без проблем опрашиваем его панелью овен. подключаем панель к частотнику, паралельно включаем монитор ком порта и смотрим байты, видим:
77889 0.00000593 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 01
77890 0.00000165 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 04
77891 0.00000162 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 00
77892 0.00000160 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 05
77893 0.00000165 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 00
77894 0.00000156 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 01
77895 0.00000162 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 21
77896 0.00000158 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: CB
77897 0.00000090 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 0:
77898 0.00000230 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 0:
77899 0.00000501 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 01
77900 0.00000104 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 04
77901 0.00000096 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 02
77902 0.00000094 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 02
77903 0.00000094 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 0D
77904 0.00000093 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 79
77905 0.00000098 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 95
77906 0.00000094 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 00
77907 0.00000095 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 00
77908 0.00000093 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 00
77909 0.00000094 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 00
77910 0.00000099 modbusopcserver IRP_MJ_READ VCP0 SUCCESS Length 1: 00

написали свое приложение открывающее ком порт, монитор ком порта показывает:
57940 0.00000376 VB6.EXE IRP_MJ_READ VCP0 SUCCESS Length 20: 01 04 00 05 00 01 21 CB 01 04 02 02 10 B9 9C 00 00 00 00 00
57950 0.00000282 VB6.EXE IRP_MJ_READ VCP0 SUCCESS Length 12: 01 04 00 05 00 01 21 CB 01 04 02 02
57957 0.00000282 VB6.EXE IRP_MJ_READ VCP0 SUCCESS Length 8: 10 B9 9C 00 00 00 00 00

обратились к заводу изготовителю частотника, попросили помочь разобраться, в ответ пришло: "Проверил чтение Input регистров. Не вижу таких байт после контрольной суммы. Попробуйте запустить программу ModbusPoll для проверки, что покажет она.
Прилагаю программу с настройками и скриншот. Возможно дело в панели ОВЕН."

пробуем опросить частотник с помощью modbuspoll, портмонитором видим:
245583 0.00349634 mbpoll.exe IRP_MJ_WRITE VCP0 SUCCESS Length 8: 01 03 00 05 00 01 94 0B
245584 0.03300959 mbpoll.exe IRP_MJ_READ VCP0 SUCCESS Length 7: 01 03 02 00 64 B9 AF

никаких 5ти байт после контрольной суммы почему то нет.
подскажите если кто знает где истину искать...

Гарчев Евгений
05.12.2014, 12:18
Функции чтения разные в посылках из панели (0х04) и из программы ModBusPoll (0x03). В панели СП270, скорее всего, перепутаны функции местами (при указании 0х03, чтение производиться функцией 0х04, и наоборот).

petera
05.12.2014, 12:59
Насколько я понял это продолжение "апупеи" http://www.owen.ru/forum/showthread.php?t=8604&p=153518&viewfull=1#post153518
Действительно
пробуем опросить частотник с помощью modbuspoll, портмонитором видим:
245583 0.00349634 mbpoll.exe IRP_MJ_WRITE VCP0 SUCCESS Length 8: 01 03 00 05 00 01 94 0B
245584 0.03300959 mbpoll.exe IRP_MJ_READ VCP0 SUCCESS Length 7: 01 03 02 00 64 B9 AF с помощью modbuspoll, запрос сделан командой 0х03, а это ссылка 4х. А я ведь Вам предлагал
Что будет, если и для дисплея сделать ссылку 4х?

petera
05.12.2014, 13:27
В панели СП270, скорее всего, перепутаны функции местами (при указании 0х03, чтение производиться функцией 0х04, и наоборот).
В панели СП270 ничего не перепутано. Все команды соответствуют стандарту Modbus
http://www.owen.ru/forum/attachment.php?attachmentid=12621&d=1397777586
В протоколе Modbus для чтения регистров 4х используется команда 03, а для регистров 3х -команда 04. https://sites.google.com/site/fieldbusbook/seti/modbus/modbuseducation

Или документация по протоколу от MODICON https://drive.google.com/open?id=0B1ENDtxOet_iXzdYQzhLZ1VyZjA&authuser=0

Гарчев Евгений
05.12.2014, 13:42
В панели СП270 ничего не перепутано. Все команды соответствуют стандарту Modbus
http://www.owen.ru/forum/attachment.php?attachmentid=12621&d=1397777586
В протоколе Modbus для чтения регистров 4х используется команда 03, а для регистров 3х -команда 04. https://sites.google.com/site/fieldbusbook/seti/modbus/modbuseducation

Или документация по протоколу от MODICON https://drive.google.com/open?id=0B1ENDtxOet_iXzdYQzhLZ1VyZjA&authuser=0

Ну может и не перепутано ничего, но суть в том, что из логов видно, что функция чтения в СП270 не та используется.

Makc
05.12.2014, 14:10
Насколько я понял это продолжение "апупеи" http://www.owen.ru/forum/showthread.php?t=8604&p=153518&viewfull=1#post153518
Действительно с помощью modbuspoll, запрос сделан командой 0х03, а это ссылка 4х. А я ведь Вам предлагал

прошу прощения. в общем при опросе частотника с помощью программы modbuspoll порт монитор не показывает в ответе частотника никаких байт после контрольной суммы т.е. это выглядет вот так:
245583 0.00349634 mbpoll.exe IRP_MJ_WRITE VCP0 SUCCESS Length 8: 01 04 00 05 00 01 94 0B
245584 0.03300959 mbpoll.exe IRP_MJ_READ VCP0 SUCCESS Length 7: 01 04 02 00 64 B9 AF
поторопился в конце рабочего дня, не обратил внимание что поставил опрос холднга и из ком монитора не глядя скопировал. приношу извинения.

Makc
05.12.2014, 14:16
Ну может и не перепутано ничего, но суть в том, что из логов видно, что функция чтения в СП270 не та используется.

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

petera
05.12.2014, 14:18
Ну может и не перепутано ничего, но суть в том, что из логов видно, что функция чтения в СП270 не та используется.
Приведенные в начале темы логи не панели СП270 - частотник, а ОРС сервера modbusopcserver -частотник.
Скорей всего и на запрос панели частотник так же отвечает. Наверно у ТС нет технических средств это проверить.
Все таки это какой-то глюк ПО частотника, зря производитель частотника переводит стрелки на ОВЕН.

ЗЫ.
Максу. Попробуйте проект не загружать в панель, а запустить в конфигураторе онлайн симуляцию с подключенным к компу частотником.

Makc
05.12.2014, 14:23
Приведенные в начале темы логи не панели СП270 - частотник, а ОРС сервера modbusopcserver -частотник.
Скорей всего и на запрос панели частотник так же отвечает. Наверно у ТС нет технических средств это проверить.
Все таки это какой-то глюк ПО частотника, зря производитель частотника переводит стрелки на ОВЕН.

да, частотник так же с нолями отвечает и панеле. мы просто сделали слейв на опс сервере (заведомо с отличным адресом от частотника) , паралельно подключили его между панелью и частотником, включили ком монитор, открыли ком порт и посмотрели что там у них происходит: в ответе на запрос спк частотник шлет ответ а в нем после контрольной суммы 5ть байт 00 00 00 00 00

petera
05.12.2014, 14:37
Непонятно как эти лишние байты после контрольной суммы могут повлиять на правильность принятого ответа от частотника, ведь количество байт в ответе(включая и КС) известны и все, что после КС должно игнорироваться.
Может попробовать используя скрипт на Си реализовать свою ф-цию чтения регистра частотника? По аналогии с этим http://www.owen.ru/forum/showthread.php?t=8604&p=149572&viewfull=1#post149572

ЗЫ. Даже можно учесть наличие лишних 5 байт:rolleyes:

petera
05.12.2014, 15:50
Макс, попробуйте
15574
Скрипт без изысков. Читает Input регистр 0х5, результат отображается в регистре PSW300.
Пять лишних байт учел.

//В примере адрес устройства равен 1
//Данные Input 0x05 будут регистре PSW300
//*************************************************
BYTE snd[8]={0x01,0x04,0x00,0x05,0x00,0x01};//буфер для посылки команды slave
//[0]-адрес устройства(0x01)
//[1]-Код функции ModbusRTU 0x04 -чтение Input registers
//[2]-ст.байт адреса начального регистра(0x00)
//[3]-мл.байт адреса начального регистра(0x05)
//[4]-ст.байт количества регистров(0x00)
//[5]-мл.байт количества регистров(0x01)
//[6]-ст.байт CRC(Определим ниже)
//[7]-мл.байт CRC(Определим ниже)

BYTE rcv[12];//буфер для приема ответа от slave+лишние 5 байт
//[0]-адрес устройства
//[1]-Код функции ModbusRTU-чтение Input registers 0x04
//[2]-счетчик байт(0x02)
//[3]-мзначение регистра Hi
//[4]-значение регистра Lo
//[5]-ст.байт CRC
//[6]-мл.байт CRC
//лишние 5 байт
//[7]
//[8]
//[9]
//[10]
//[11]
snd[6]=HIBYTE(Crc(snd,6));//дополнить команду CRC, сначала Hi
snd[7]=LOBYTE(Crc(snd,6));//затем Lo
Enter(PLC);//Захватить порт PLC
Send(PLC,snd,8);//Отправить команду
Receive(PLC,rcv,12,1000,6);//Получить ответ (тайм-аут 1000мс)
PSW[300]=MAKEWORD(rcv[4],rcv[3]);
Leave(PLC);//Освободить порт

petera
05.12.2014, 16:53
Еще один вариант.
15576
Здесь глобальная функция чтения одного инпут регистра
15577

Можно было бы сделать чтение сразу нескольких регистров, но не ясно сколько лишних байт будет от частотника

Makc
09.12.2014, 09:48
Спасибо при использовании функций проблема решилась :)

Makc
31.12.2014, 05:18
не стал паять новую тему.
зачем заземляя что либо (например какой нибудь прибор) между землей и этим самым прибором ставят конденсатор?
ар