PDA

Просмотр полной версии : Проблема передачи данных ПЛК <=> ПК



DrKillJoy
01.12.2012, 18:48
Выручайте братцы! Вспомнил я как работать с ПЛК, нашел прошивку старую, прошил! Все работает нормально кроме, передачи переменных по TCP. В ПЛК записать с ПК получается без проблем, а вот считать никак... Иногда считывает, но с чем это связанно... Может переменные как-то отметить нужно... Может я чего-то упускаю? Очень надеюсь на любые советы! Может хоть направление укажите!

capzap
01.12.2012, 19:33
Вы бы хоть по подробнее делились своей проблемой, просто через ТСР Вы передаете или по какому то протоколу

DrKillJoy
01.12.2012, 19:40
Протокол ModBus.

capzap
01.12.2012, 20:50
ну тогда вопрос сколько регистров в слейве (в плк) и по каким адресам пытаетесь считать инфу

DrKillJoy
01.12.2012, 21:43
Я неплохой программист, но с протоколом ModBus, я так и не разобрался. Делал все по примерам в итоге, получился "зверь", который работал по мне не известным принципам. (Представляю сколько критики будет в мой адрес).
Я просто в проекте CoDeSys, в ModBus (slave) добавлял переменные по два байта в кол-ве пяти штук (Может сними нужно что-то сделать... В этот раз, я просто загрузил готовую прошивку). А во внешней программе с первой (переменной) считывал показания, а в остальные записывал.

С внешней программой работал по принципу черного ящика... Нашел рабочий пример по обмену через ModBus, взял оттуда модуль протокола обмена и использовал его в своем проекте. (Повторюсь об отсутствии знаний, протокола обмена) Знаю, что проект 100% рабочий (ранее работал с другим ПЛК и все считывал\записывал нормально). А сейчас записывает нормально, а считывает очень редко (или вообще не считывает). Возможно ошибка где-то в настройке ПЛК (внутренней программы), так как сейчас взял другой ПЛК и проделал с ним все тоже, что делал и с предыдущим. Результат идентичен. Просто даже не знаю, в какую сторону капать. Буду рад любой помощи!

P.S. По себе знаю, что пытаться помочь человеку совсем не разбирающемуся в теме, крайне сложно и неблагодарно. Но очень прошу помочь!

capzap
01.12.2012, 22:04
нумерация в модбас начинается с нуля, т.е. у Вас есть регистры с 0 по 4, чтение осуществляется 03 функцией модбас

capzap
01.12.2012, 22:08
ru.m.wikipedia.org/wiki/Modbus
Здесь должны немножко разобраться о чем я написал. Ищите в своей проге для ПК либо номер либо текстовое название функции
PS пишу с телефона, так что ссылка какая есть уж :)

DrKillJoy
02.12.2012, 10:06
Спасибо за ссылку, уже понемногу начинаю понимать ModBus, уже разобрался, что можно писать не только с первого регистра, а с любого выбранного и можно записывать любое кол-во регистров. Но это так...

Увы с моей проблемой это не помогло. Ведь и раньше я мог записывать нормально, просто сейчас получается лучше. )
При считывании же вообще ничего не возвращает, как будто не видит мои переменные(регистры). Может их надо еще как-то объявить\расшарить?

* * *

Пробовал подключиться к ПЛК с помощью "EasyWorkPLC", но она выдает ошибку, и не подключается... Может, это как-то связанно?

* * *
Смог подключить... (Это CoDeSys не давал). Но насколько я помню, в ней (EasyWorkPLC) можно было посмотреть значения переменных. А тут у меня пусто окно. ( Программа видит ПЛК, но не видит его "внутренностей". Что я сделал не так?

capzap
02.12.2012, 11:23
для начала попробуйте воспользоваться такой прогой PeakHMI MODBUS TCP/IP Slave
simulator (Win GUI), на нее есть ссылка на вышеуказанном сайте. Когда откроете окно мониторинга, там можно посмотреть будет как выглядят запросы и ответы даже побайтно. Можно будет определить в каком месте ошибка с принятием читаемых регистров

DrKillJoy
02.12.2012, 12:33
С программы все считывается\записывается нормально... В чем подвох?
Попробую еще раз проект на ПЛК сделать с нуля... Может поможет.

* * *
Нет, не помогло. Уже столько всего прочитал... (
Сдается мне, что это переменные в ПЛК как-то не обозначены, потому их и не видно...
Но раньше же как-то получалось? Вообще ничего не понятно.
* * *
Та-а-ак, уже что-то. Понял почему в "EasyWorkPLC", я ничего не видел... Поменял настройки "Visibility" на "Yes", теперь видно, но не регистры, а адрес контроллера в сети.
Буду дальше разбираться...
Может есть еще советы?

capzap
02.12.2012, 14:06
ну видимо Вы читаете слишком много регистров, в плк столько нет или еще что то, в симуляторе их достаточно много, поэтому и получается

DrKillJoy
02.12.2012, 14:27
Спасибо конечно, но это не сильно разъяснило ситуацию... (
Просто все это я уже делал раньше, все работало. А теперь купил новый ПЛК и использовав для него старую программу, вдруг перестало работать. Что изменилось, непонятно... Вот я и мучаюсь.

* * *
Ах.. Нет! Вы оказались правы!!! Как вы и сказали, я просто считывал слишком много регистров (больше чем их было)... Но с записью все работало, а со считывание нет... Вот я и думал, что ошибка не в этом. Большое вам спасибо!

Еще, может знаете библиотеку или пример, работы с протоколом ModBus в .Net(Желательно в Visual Basic)?
А то приходиться .Net и компоненты com, а это такой страшный велосипед...

capzap
02.12.2012, 15:20
С .Net работать "устав" не позволяет :) я работаю на Яве и JavaFX

DrKillJoy
02.12.2012, 17:25
Жаль, но все равно, большое спасибо за помощь!

Yegor
03.12.2012, 11:03
Еще, может знаете библиотеку или пример, работы с протоколом ModBus в .NetNModbus

Админ, отключи порог в 10 символов на сообщение.

IVM
05.12.2012, 11:09
Спасибо конечно, но это не сильно разъяснило ситуацию... (
Просто все это я уже делал раньше, все работало. А теперь купил новый ПЛК и использовав для него старую программу, вдруг перестало работать. Что изменилось, непонятно... Вот я и мучаюсь.

* * *
Ах.. Нет! Вы оказались правы!!! Как вы и сказали, я просто считывал слишком много регистров (больше чем их было)... Но с записью все работало, а со считывание нет... Вот я и думал, что ошибка не в этом. Большое вам спасибо!

Еще, может знаете библиотеку или пример, работы с протоколом ModBus в .Net(Желательно в Visual Basic)?
А то приходиться .Net и компоненты com, а это такой страшный велосипед...
Возможно причина в том, что у ПЛК поменялась прошивка и Target-файл, т.е. Ваш старый Target-файл не соответствует новой прошивке.