PDA

Просмотр полной версии : Использование файлов для задания уставок



mike_if
29.03.2011, 11:30
Здравствуйте!
На установке необходимо регулировать температуру и давление по заданным программам. Всего программ 40 по 30 шагов каждая. Сейчас там используются Retain переменные, которые сохраняются в энергонезависимой памяти что не очень удобно при наладке.
Есть идея использовать файлы в качестве уставок для задания параметров.
Для этого попробовал написать код, который должен создавать файл и потом его же и понимать. Кроме того программы должны создаваться как в EXEL, так и с панели оператора.
Теперь по сути - ПОМОГИТЕ!!! Что то не совсем работает, голова уже не варит.
Файл создается но не всегда чтение вроде проходит но не проверял полностью.
Программу прилагаю. Контроллер ПЛК154 прошивка 2.07.
Спасибо.

lara197a
29.03.2011, 15:57
Создайте массив и организуйте присваивание.(но без ретайн все равно не обойтись)

mike_if
29.03.2011, 16:11
Идея в том чтоб не использовать именно Retain переменные, а данные брать из файла.
После написания программа тест на создание файла прошла, даже Exel все понял, созданный на ПК файл контроллер тоже вроде правильно разделил (правда я проверял коды только первых пару рядов но количество ячеек сошлось)
А вот во второй раз файл имел размер 0 байт????
Может я не правильно организовал запись?

Евгений Пашигоров
01.04.2011, 08:42
Ну показали бы, что ли, как с файлами работаете?
Вот моя программа с функциональным блоком архиватора.
Архив пишется в файл, программа рабочая.
Сравните со своей.

mike_if
02.04.2011, 03:33
Большое спасибо Евгений Пашигоров за выложенный пример, но это не совсем то что нужно. Не обижайтесь, просто задача совсем другая.

Попробую раскрыть суть немного подробнее.

Как используются результаты Программа берет данные из трех массивов of_byte. В одном из них содержатся данные про тридцать значений температуры, в другом - про 30 значений давления, в третьем - время, за которое нужно получить "цифры", указанные в массивах 1 и 2. В результате получяется график в виде кривой для значений температуры и график для значений давления.

Для чего нужны файлы Немного напрягает каждый раз перезаписывать данные в переменные Retain, из за того что КДС не хочет коннектится к ПЛК с первого, второго а иногда и с десятого раза (хотя может проблемма не в КДС??).

Как планировал работать с файлами

Вариант 1
1 - Создать файл в EXEL (потому что быстро и удобно);
2 - Записать в ПЛК;
3 - При загрузке, ПЛК должен очистить файл от мусора (строки с заголовками, знаки переноса строки, знаки табуляции, порядковые номера);
4 - Записать каждую полезную колонку как отдельный массив [1..30] of byte (температура, давление, время);
5 - Использовать данные при работе;

Вариант 2
1 - При запросе от ПЛК файла которого нет создать его;
2 - с помощю панели оператора заполнить три массива [1..30] of byte (температура, давление, время);
3 - Добавить мусор (строки с заголовками, знаки переноса строки, знаки табуляции, порядковые номера);
4 - Записать данные в файл;
5 - при желании скачать для просмотра на ПК;
6 - использовать как в варианте 1;

Вариант 3
1 - Возможность записывать изменения в файл;

Вариант 4
Может кому то пригодится:rolleyes: и плохих слов будет меньше при сотом изменении сорока программ по 30 циклов (всего 1200 значений):eek: , а все из за какойто кнопки Reset::mad:

Евгений Пашигоров
03.04.2011, 01:56
Для чего нужны файлы Немного напрягает каждый раз перезаписывать данные в переменные Retain, из за того что КДС не хочет коннектится к ПЛК с первого, второго а иногда и с десятого раза (хотя может проблемма не в КДС??).


Действительно, Кодесис хреново коннектится. А еще в процессе заливки проекта часто происходит
перезапуск контроллера. Хорошо хоть не всегда.
Разработчики рекомендуют увеличить таймауты связи в самой Кодесис.
Я увеличивал, но особой разницы не заметил.
Для считывания файлов с ПЛК я уже давно и без проблем пользуюсь утилиткой plc_io.exe
http://www.owen.ru/forum/showthread.php?t=10211
Большое ее преимущество - она не интерактивная, что позволяет пользоваться ею в своих скриптах.


Как планировал работать с файлами
. . . . . . . .


Тут я не понял, то ли из ПЛК надо брать данные, то ли наоборот, настройки в ПЛК загонять? Видимо, и то, и другое.
plc_io загружать файлы в ПЛК тоже умеет.

mike_if
03.04.2011, 02:25
Цитата от Евгений Пашигоров:

Тут я не понял, то ли из ПЛК надо брать данные, то ли наоборот, настройки в ПЛК загонять? Видимо, и то, и другое.

Совершенно верно - и то и другое.
Файлы используются не как архив, а как обычный массив с данными, только создавать их должен уметь как ПЛК так и ПК. А ПЛК, кроме того еще и должен использовать данные из них в процессе работы.


Цитата от Евгений Пашигоров:

plc_io загружать файлы в ПЛК тоже умеет

Совершенно согласен, и plc_io и сам КДС умеют и читать и писать файлы, но они только передают их, а мне нужно еще и сортировать.

Сегодня был лишний часок, попробовал немного изменить программу, в результате заметил что контроллер открывает файл, созданный на ПК, возвращает дескриптор файла, но при проверке размера значение = 0????:p
Хотя файл имеет около 1 кБ???
Не понимаю что не так???:confused:

mike_if
03.04.2011, 02:31
Может расширение файла имеет значение?
Останавливается здесь:

size1:=SysFileGetSize(filename);
size_int:=DWORD_TO_INT(size1);

При этом size1 = 0 ???

Евгений Пашигоров
03.04.2011, 13:45
Вы обратили внимание, что сушествует 2 версии plc_io?
Одна правильно читает файл, другая - правильно пишет. ;)
Сейчас нет под рукой контроллера, чтобы проверять.

mike_if
04.04.2011, 13:55
Уважаемый Евгений Пашигоров спасибо что вы проявляете интерес к этой теме и за ваши подсказки, но к сожалению сегодня я вернулся из командировки, где, как раз, и хотел использовать код выложенный в первом посте. В связи с этим вопрос уже утратил свою актуальность и тема может быть закрыта.

Что касается утилиты plc_io, то я видел только одну версию. Но пользуюсь все равно КДС, который умеет и читать и писать и даже показывает файлы имеющиеся на контроллере!!!

Отдельное спасибо представителям фирмы ОВЕН за ПОЛЕЗНЫЕ советы.

mike_if
04.04.2011, 14:37
К стати, в ходе командировки обнаружился еще один довод для актуальности данной темы. Дело в том, что это уже третья поездка на объект где работает установка под управлением ОВЕН ПЛК 154 на протяжении шести месяцев и третий раз приходится менять контроллер. Причем каждый раз не по вине заказчика, например последний раз сгорел аналоговый выход к которому был подключен регистратор данных.
При этом каждый раз приходится вбивать программы вручную, что занимает очень много времени (приблизительно 20 минут на 1 программу при этом всего используется 15 программ из 40 и каждая не больше 15 циклов).

Так вот, запись файла не занимает столько времени!!!

Еще один не приятный момент обнаружилось зависание панели оператора СП 270. Понятно что она китайская, но на ней же написано "ОВЕН"?

В общем, для себя решил использовать более надежную технику.

Дмитрий Артюховский
06.04.2011, 13:45
))) надежность системы определяется надежностью самого слабого звена, в подавляющем числе случаев это человек )))
- использовать для рагистрации данных ЦАП-АЦП преобразование, при наличии контроллера представляется слегка нелогичным;
- использовать retain переменные для хранения настроек слегка небезопасно и нет возможности перенести настройки при замене контроллера;
- использовать формат excel для задания настроек.... ну, во-первых он избыточен для 90 переменных, во-вторых он коммерческий... для 3 раз по 30 чисел проще использовать текстовый редактор;

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

mike_if
07.04.2011, 15:35
Наверно нужно ответить на ваши вопроси:

Сообщение От Дмитрий Артюховский
- использовать для рагистрации данных ЦАП-АЦП преобразование, при наличии контроллера представляется слегка нелогичным;

Регистратор печатает данные на бумажной ленте (требование заказчика)


- использовать retain переменные для хранения настроек слегка небезопасно и нет возможности перенести настройки при замене контроллера;

Именно по этой причине и создавалась данная тема, но, к сожалению еще не было ни одного ответа по вопросу, заданному в первом посте :)


- использовать формат excel для задания настроек.... ну, во-первых он избыточен для 90 переменных, во-вторых он коммерческий... для 3 раз по 30 чисел проще использовать текстовый редактор;

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

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

Как я уже упоминал выше вопрос уже не очень актуальный, но люди, может мне расскажет кто-нибудь что в моей проге не так??? Неужели Вам приятней обсуждать профессионализм человека на основе глобальных вопросов (не так подключил или упомянул коммерческую программу), а не на основе локальных (то есть программного обеспечения которое он выложил)???

Буду рад услышать любой ответ, даже не приятный, для этого форум и существует:)

Дмитрий Артюховский
08.04.2011, 14:49
ну, прежде всего, выкладывая свой код на обсуждение оформите его в читабельный вид, с комментариями и отступами, очень сложно выделять вложения циклов в каше, запросто может быть ошибка в закрывающих парах (if - end_if и пр)

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

совсем неочевидно как сработает sizeof для массива строковых величин

в одном цикле вы открываете файл, пишете в него значительный объем, закрываете, и снова открываете для чтения..... да еще пытаетесь узнать его размер! В ПЛК запись выполняется фоном и не быстро, одному Филоненко известно что вы увидите в открытом файле и какой у него будет размер)))

mike_if
08.04.2011, 21:28
Немного подредактировал код, чтоб было понятней

Добавил комментарии

Надеюсь что разберетесь, а если еще что-то не понятно спрашивайте

В понедельник попробую опять загнать прогу в ПЛК, может что увижу:eek:

mike_if
12.04.2011, 21:27
Пробовал отлаживать с подключенным контроллером

Получается то что во вложении

Вопрос: ПОЧЕМУ НЕ ЧИТАЕТСЯ НИ ОДИН БАЙТ?

Ниже переменные, которые используются

f1: dword (*дескриптор файла*)
buffer: array[1..1985] of byte (*буферный массив*)
read_byte: dword (*количество считанных байт????*)

mike_if
12.04.2011, 21:38
Еще вопрос:

можно ли использовать оператор CASE при работе с библиотекой SysLibFile?

Подскажите как ПОЖАЛУЙСТА!!! :o