Просмотр полной версии : Проблема передачи данных ПЛК <=> ПК
DrKillJoy
01.12.2012, 18:48
Выручайте братцы! Вспомнил я как работать с ПЛК, нашел прошивку старую, прошил! Все работает нормально кроме, передачи переменных по TCP. В ПЛК записать с ПК получается без проблем, а вот считать никак... Иногда считывает, но с чем это связанно... Может переменные как-то отметить нужно... Может я чего-то упускаю? Очень надеюсь на любые советы! Может хоть направление укажите!
Вы бы хоть по подробнее делились своей проблемой, просто через ТСР Вы передаете или по какому то протоколу
DrKillJoy
01.12.2012, 19:40
Протокол ModBus.
ну тогда вопрос сколько регистров в слейве (в плк) и по каким адресам пытаетесь считать инфу
DrKillJoy
01.12.2012, 21:43
Я неплохой программист, но с протоколом ModBus, я так и не разобрался. Делал все по примерам в итоге, получился "зверь", который работал по мне не известным принципам. (Представляю сколько критики будет в мой адрес).
Я просто в проекте CoDeSys, в ModBus (slave) добавлял переменные по два байта в кол-ве пяти штук (Может сними нужно что-то сделать... В этот раз, я просто загрузил готовую прошивку). А во внешней программе с первой (переменной) считывал показания, а в остальные записывал.
С внешней программой работал по принципу черного ящика... Нашел рабочий пример по обмену через ModBus, взял оттуда модуль протокола обмена и использовал его в своем проекте. (Повторюсь об отсутствии знаний, протокола обмена) Знаю, что проект 100% рабочий (ранее работал с другим ПЛК и все считывал\записывал нормально). А сейчас записывает нормально, а считывает очень редко (или вообще не считывает). Возможно ошибка где-то в настройке ПЛК (внутренней программы), так как сейчас взял другой ПЛК и проделал с ним все тоже, что делал и с предыдущим. Результат идентичен. Просто даже не знаю, в какую сторону капать. Буду рад любой помощи!
P.S. По себе знаю, что пытаться помочь человеку совсем не разбирающемуся в теме, крайне сложно и неблагодарно. Но очень прошу помочь!
нумерация в модбас начинается с нуля, т.е. у Вас есть регистры с 0 по 4, чтение осуществляется 03 функцией модбас
ru.m.wikipedia.org/wiki/Modbus
Здесь должны немножко разобраться о чем я написал. Ищите в своей проге для ПК либо номер либо текстовое название функции
PS пишу с телефона, так что ссылка какая есть уж :)
DrKillJoy
02.12.2012, 10:06
Спасибо за ссылку, уже понемногу начинаю понимать ModBus, уже разобрался, что можно писать не только с первого регистра, а с любого выбранного и можно записывать любое кол-во регистров. Но это так...
Увы с моей проблемой это не помогло. Ведь и раньше я мог записывать нормально, просто сейчас получается лучше. )
При считывании же вообще ничего не возвращает, как будто не видит мои переменные(регистры). Может их надо еще как-то объявить\расшарить?
* * *
Пробовал подключиться к ПЛК с помощью "EasyWorkPLC", но она выдает ошибку, и не подключается... Может, это как-то связанно?
* * *
Смог подключить... (Это CoDeSys не давал). Но насколько я помню, в ней (EasyWorkPLC) можно было посмотреть значения переменных. А тут у меня пусто окно. ( Программа видит ПЛК, но не видит его "внутренностей". Что я сделал не так?
для начала попробуйте воспользоваться такой прогой PeakHMI MODBUS TCP/IP Slave
simulator (Win GUI), на нее есть ссылка на вышеуказанном сайте. Когда откроете окно мониторинга, там можно посмотреть будет как выглядят запросы и ответы даже побайтно. Можно будет определить в каком месте ошибка с принятием читаемых регистров
DrKillJoy
02.12.2012, 12:33
С программы все считывается\записывается нормально... В чем подвох?
Попробую еще раз проект на ПЛК сделать с нуля... Может поможет.
* * *
Нет, не помогло. Уже столько всего прочитал... (
Сдается мне, что это переменные в ПЛК как-то не обозначены, потому их и не видно...
Но раньше же как-то получалось? Вообще ничего не понятно.
* * *
Та-а-ак, уже что-то. Понял почему в "EasyWorkPLC", я ничего не видел... Поменял настройки "Visibility" на "Yes", теперь видно, но не регистры, а адрес контроллера в сети.
Буду дальше разбираться...
Может есть еще советы?
ну видимо Вы читаете слишком много регистров, в плк столько нет или еще что то, в симуляторе их достаточно много, поэтому и получается
DrKillJoy
02.12.2012, 14:27
Спасибо конечно, но это не сильно разъяснило ситуацию... (
Просто все это я уже делал раньше, все работало. А теперь купил новый ПЛК и использовав для него старую программу, вдруг перестало работать. Что изменилось, непонятно... Вот я и мучаюсь.
* * *
Ах.. Нет! Вы оказались правы!!! Как вы и сказали, я просто считывал слишком много регистров (больше чем их было)... Но с записью все работало, а со считывание нет... Вот я и думал, что ошибка не в этом. Большое вам спасибо!
Еще, может знаете библиотеку или пример, работы с протоколом ModBus в .Net(Желательно в Visual Basic)?
А то приходиться .Net и компоненты com, а это такой страшный велосипед...
С .Net работать "устав" не позволяет :) я работаю на Яве и JavaFX
DrKillJoy
02.12.2012, 17:25
Жаль, но все равно, большое спасибо за помощь!
Еще, может знаете библиотеку или пример, работы с протоколом ModBus в .NetNModbus
Админ, отключи порог в 10 символов на сообщение.
Спасибо конечно, но это не сильно разъяснило ситуацию... (
Просто все это я уже делал раньше, все работало. А теперь купил новый ПЛК и использовав для него старую программу, вдруг перестало работать. Что изменилось, непонятно... Вот я и мучаюсь.
* * *
Ах.. Нет! Вы оказались правы!!! Как вы и сказали, я просто считывал слишком много регистров (больше чем их было)... Но с записью все работало, а со считывание нет... Вот я и думал, что ошибка не в этом. Большое вам спасибо!
Еще, может знаете библиотеку или пример, работы с протоколом ModBus в .Net(Желательно в Visual Basic)?
А то приходиться .Net и компоненты com, а это такой страшный велосипед...
Возможно причина в том, что у ПЛК поменялась прошивка и Target-файл, т.е. Ваш старый Target-файл не соответствует новой прошивке.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot