Просмотр полной версии : плк110 + пм01. проблема с передачей данных
Здравствуйте. Возникла следующая проблема: Есть объект, на котором установлен ПЛК110 и модем ПМ01. На диспетчерском компьютере - ПМ01 и Lectus OPC. Плк настроен мастером, а Lectus слейвом. ПЛК звонит и передает данные, с этим порядок - все приходит нормально. Но есть необходимость, чтобы ПЛК считал одну переменную из Lectus OPC. Происходит какой-то бред, читать то он ее читает, но пишет не понятно куда, такое впечатление - идет какое-то замещение адреса переменной (например пишем по 0000НЕХ, а в ПЛК она приходит иногда в 0003НЕХ, а иногда 0005НЕХ, а иногда вообще плясать начинает по адресам:confused: ). В тоже время, напрямую подключаем кабелем ПЛК к Lectus все работает отлично. Как только ставим модемы, получается вот такой бред. Соединение CSD.
Ельцов Андрей
01.06.2010, 09:19
Попробуйте создайте ПЛК-конфигурацию заново. Чтобы ничего кроме вашего modbus не было.
Опрос необходимо делать по modobus ascii.
Убедитесь, что на все запросы ПЛК получает безошибочные ответы, а то у Вас может получаться так, что ПЛК решил что на запрос у него таймаут и послал следующий запрос. А в этот момент получил ответ на предыдущий запрос, в итоге получается "чехарда".
плк конфигурацию пробовали. опрос Ascii тоже стоит.
а как убедится, что плк получает безошибочные ответы?
Вот кусочек лога из Lectus OPS:
Вот это по адресу 0000НЕХ приходит число 3123(0С33НЕХ) в Lectus из ПЛК
11:00:33.515 [980] (COM3)Rx: [17] ":01 06 00 00 0C 33 BA CR LF "
11:00:33.515 [980] (COM3)Tx: [17] ":01 06 00 00 0C 33 BA CR LF "
А вот тот запрос с которым проблема. У меня вопрос, почему с ПЛК приходит нормальный запрос, а Lectus отвечает на байт меньше - адрес вообще левый какой-то шлет: вместо 001АНЕХ вставляет просто 02НЕХ.
А число нормально 2305НЕХ (8965DEC)
11:00:33.828 [980] (COM3)Rx: [17] ":01 03 00 1A 00 01 E1 CR LF "
11:00:33.828 [980] (COM3)Tx: [15] ":01 03 02 23 05 D2 CR LF "
Ельцов Андрей
01.06.2010, 10:40
это не левый байт, это количество байт данных в посылке.
если есть возможность посмотрите, что на стороне плк,
простите)) сначало написал, а потом глянул спецификацию модбаса))
я просто не представляю каким образом посмотреть, что на плк творится. если не сложно, подскажите, как вклинится, между модемом и плк?
P.S. Пробовали сделать наоборот, ПЛК - мастер, а Lectus - слейв. все работает отлично.
Но нам необходимо, что бы именно ПЛК был мастером.
Александр Приходько
01.06.2010, 20:06
простите)) сначало написал, а потом глянул спецификацию модбаса))
я просто не представляю каким образом посмотреть, что на плк творится. если не сложно, подскажите, как вклинится, между модемом и плк?
P.S. Пробовали сделать наоборот, ПЛК - мастер, а Lectus - слейв. все работает отлично.
Но нам необходимо, что бы именно ПЛК был мастером.
От модема к ПЛК у вас идет RS-485. Берете любой преобразователь интерфейса АС4, АС3М или если есть, то свой. Запускаете снифер - программа которая умеет читать содержимое порта и вот вам содержимое.
я просто не представляю каким образом посмотреть, что на плк творится. если не сложно, подскажите, как вклинится, между модемом и плк?
если по 232му то-
http://www.airborn.com.au/serial/rs232.html
последня часть статьи
Jeck, спасибо за ссылку. Спаяли кабель и подключили к терминалу. В самом деле была "чехарда". После установки в ПЛК параметра Polling Time равным 1200 - данные пошли по порядку. Но ПЛК всеже тупит. Сделали, новые проекты в ПЛК и в Lectus. Завели 4 переменных которые ПЛК должен считать(адреса 0000НЕХ-0003НЕХ) и две переменных отправить(адреса 0004НЕХ и 0005НЕХ). В Lectus записали значения от 1 до 4, по соответствующим адресам. Посмотрели лог общения ПЛК с модемом - данные идут по порядку. Вот он:
CONNECT 9600
:010300030001F8
:0103020004F6
:010300020001F9
:0103020003F7
:010300010001FA
:0103020002F8
:010300000001FB
:0103020001F9
:010600050036BE
:010600050036BE
:0106000400DB1A
:0106000400DB1A
Но ПЛК занес эти данные со смещением -1. То есть то что в Lectus находилось по адресу 0001НЕХ, занес в 0000НЕХ, а 0002НЕХ в 0001НЕХ и так далее. Вот скриншот.
Повторюсь, когда делаем Lectus - мастером, а ПЛК - слейвом, то все отлично. Все данные идут куда надо, более того - мы даже не заморачивались на счет таймаутов. Все было нормально.
А вот когда ПЛК - мастер...беда...:(
всеже почему плк заносит данные со смещением? есть у кого-нибудь мысли на сей счет? что я делаю не так?
и как уменьшить время опроса? 1.2 секунды многовато(
Ельцов Андрей
03.06.2010, 08:06
проект тестовый выложите пожалуйста.
правильно ли я понял, что вы подключились между плк и модемом или как-то по другому?
да, и еще, увеличьте таймаут до 1000 мс.
Да, между ПЛК и модемом. При установке Polling Time = 1200 (подобрали методом тыка) изчезла чехарда. Этот таймаут вы имеете в виду?
Ельцов Андрей
03.06.2010, 08:33
изменили таймаут?
попробовали?
у вас он стоит 150 мс.
Да, пробовали-результата ноль. Этот таймаут, я так понимаю, на получение ответа от устройства. модем отвечает исправно. Проблема в том, что при значении Polling Time меньше 1200 ms, возникает чехарда какая-то,(как вы и говорили) вот пример:
:010600000000F9
:01060001007B7D
:0103001B0001E0
:010600000000F9
:0103001A0001E1
:0103020002F8
:010600190000E0
:0103020001F9
:01060018800061
:010600190000E0
При установке Polling Time = 1200. чехарды нет, но ПЛК записывает данные со смещением, писал в 001BНЕХ, а он записал в 001AНЕХ.
Да и вообще - 1200ms на переменную, это очень долго.
подскажите, пожалуйста, хоть в каком направлении копать, чтобы уменьшить время опроса переменных.
Тоже был сдвиг через модемы, сейчас выставил:
Max timeout 2000 ms
Polling time 1000 ms
все заработало!
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot