PDA

Просмотр полной версии : не могу вывести данные на сп270. потеря связи с плк



chago
03.05.2010, 16:09
печальная Предыстория:
пять дней назад мне достался незапущенный объект на котором просроченны сроки по запуску (как я понял год назад, но до этого
момента всем было наплевать) и очень злая эксплуатация которая не то, чтобы стоит над душой, а просто рвет и мечет.
человек я в этой конторе новый (2 недели как) и тех людей что проектировали уже как я понял тут нету я начал работу с нуля.

вообщем имеем :) следующую КОнфигурацию

СП270
ПЛК150-220.И-М
МВА8
МДВВ
МДВВ
МВА8
МДВВ

пару тройку дней потратил на изучение немалого объема материала и не без усилий, но все таки начал понимать как
конфигурировать железки и налаживать обмен данными между ними и панелькой.
условия работы адские сижу с ноутом в цеху у шкафа при рабочем оборудовании. башка пухнет. связи до кабинета не проложено,

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

кароче, суть проблемы. аналоговых значений у меня не так уж и много, аж целых 13 штук.
раскидав все по регистрам получилось что у меня в подэлементе (Modbus (slave) 13 подэлементов Float занимающих регистры 0, 4, 8, 12.... 48
вывожу данные используя элемент "цифровой дисплей" в конфигураторе панели, через порт PLC (адрес 1) по команде 4х
(тут я не знаю че это значит, в инструкции на конфигуратор панели ничего не написано или я не увидел) вывожу последовательно указанные выше регистры. начиная с 28 регистра при выводе на панель последняя теряет связь с контроллером.

если будет минутка посмотрите пож-та мой файл проекта CodeSys'а
маленькая просьба. Вы, как люди хорошо знающие свое оборудование, и как толковые программеры, может сразу сообразите где
я ошибаюсь или делаю что-то неверно, пожалуйста, не ругайтесь (мол это тысячу раз обсуждалось на форуме или
учи матчасть по протоколу модбас и пр. пр. пр.), а дайте, пж-та, ссылку на материал или название инструкции (перед выездом сюда
я скачал все с вашего сайта что скачивалось :) или ветку форума где это обсуждалось. или рекомендации по программированию.
а если еще попытаетесь объяснить то ваще буду рад.


thank's in advance как гриццо...
з.ы.завтра первый рабочий день и чуствую моя попэска будет надрана
з.з.ы. себе я уже тыщу раз пообещал не вписываться в такие авантюры. но сделать очень хочецца

Николаев Андрей
03.05.2010, 17:55
1. Real переменные занимают номера не по 4, а по 2.
То есть 0, 2, 4, 6, 8 и т.д...
2. Рекомендую, если точность не нужна и числа не огромные передавать Word-ом со смещением. Во первых меньше время опроса (быстрее время реакции), да и памяти меньше отъедает.
То есть чтобы вывести температуру на панель с одним знаком:
В конфигурации добавляете переменную word t_na_panel, в программе пишете: t_na_panel := real_to_int(t*10);
В панели указываете регистр, команду 4 (команды ModBus описаны в стандарте. Для начала достаточно знать, что она 4), количество знаков после запятой указываете 1.
Если нужно 2 знака, то в программе умножаете на 100, а в панели знаков - два.
Да и еще - перед тем как оперировать температурами обязательно проверьте достоверность данных с датчиков, используя блок Decoad из библиотеки Pid_function. Да и фильтр от туда же не плохо сразу ввести...

chago
04.05.2010, 11:32
спс. не понимаю как я с регистрами напутал наверное не в себе был.

по поводу библиотеки Вы скорее всего имели ввиду блок DECODE_FLOAT из библиотеки PID_Regulators.lib
че то не могу разобраться с его вызовом.
скопировал саму библиотеку в папку C:\Program Files\3S Software\CoDeSys V2.3\Library как сказано в мане.
в менеджере библиотек я ее добавил.
пытаюсь вызвать ее в основной программе (PLC_PRG которая) выдает ошибку: "Ошибка 4051 'DECODE_FLOAT' не является функцией."
F1 по ошибке говорит: "4051 <имя> не является функцией.Вместо <Name> используйте функцию, определенную в проекте или библиотеках."

бррррр... я ж ее подключил библиотеку же. щас полезу в мануал конечно же... вот что нашел не отходя от браузера:
1. По умолчанию доступен только стандартный набор библиотек. Для каждого нового проекта проводится присоединение новых
библиотек индивидуально, по мере необходимости.
2. У функциональных блоков разработанных для контроллеров фирмы ОВЕН
режим симуляции (Simulation Mode) не предусмотрен. Отладка программы в режиме визуализации
проводится при подключенном контроллере – функциональные блоки работают только в самом контроллере.

ошибку выдает при отладке проги на контролле естессно.

господа, где у меня ошибка? тока не говорите что в ДНК )))))

вызываю ее просто по имени, т.е. строчка в редакторе ST

DECODE_FLOAT(VALUE:=T_Posl_AVO , DEF_VALUE:=AI_Dummy , _ERR=>_ErrorCode , OUT_VALUE=>T_Posl_AVO_Tru );

з.ы. респект за помогание )

Николаев Андрей
04.05.2010, 13:49
Тип программного модуля Decoad float какой?
Да и в общем то функцию не правильно вызываете...
otfiltr:=decoad_float........

chago
05.05.2010, 18:37
тип программного модуля ?? "фунциональный блок декодирования ошибки возвращаемой аналоговым входом прибора" или что вы имели ввиду?

где взять функцию о которой идет речь?

Малышев Олег
05.05.2010, 19:29
f:decode_float;

f(...);

Николаев Андрей
05.05.2010, 22:39
эээх...
в кодесис есть возможность создавать разные типы программных модулей (pou)...
и, соответственно правила вызова разных поу - разные...
в примеры программ и полезности - там выложен пример для всех типов...
блок декодирования ошибки - програмный модуль типа функциональный блок.