Вход

Просмотр полной версии : Запись переменных в таблицу отображения данных, архивирование данных в файл



Mikhail_NNT
23.08.2024, 14:01
Здравствуйте, изучил документ Первый старт и Архивация, но все равно не пойму, как записать переменные в ячейки таблицы и потом их сохранить в файл. Среда программирования CodeSys 3.5, среда визуализации Конфигуратор ОВЕН СП300.

Задача глобальная: Разработать систему визуализации и управления временем такта сборочной линии грузовиков.
Задача локальная: По нажатию кнопки фиксировать простои оборудования на каждой сборочной станции и выводить их на панель по периодам времени.

20 сборочных станций, 8-ми часовой рабочий день. На каждой станции кнопка с фиксацией, для начала/окончания простоя. В Конфигураторе нарисовал таблицу со сборочными станциями и интервалами времени. В CodeSys объявил переменные и написал код:
Сначала селектору количества часов в смену присваиваю значения (1..8, 8 рабочих часов в смену ), предварительно проверив, в какой промежуток времени (указаны в таблице отображения данных) попадает простой.
Далее отслеживаю задний фронт кнопки начала/окончания простоя. При нажатии кнопки запускаю счетчик простоя, при отжатии кнопки и срабатывании заднего фронта, записываю в переменную текущее значение счетчика таймера и выключаю его. Открываю Case, time преобразую в real и делю на 60 (секунды перевожу в минуты). В зависимости от промежутка времени, в который произошел простой, записываю значение в соответствующую переменную.

Данный FB хочу сделать универсальным, то есть в Main буду вызывать его 20 раз (20 сборочных станций), чтобы по каждой станции получить почасовые простои.

Вопрос: Как эти значения простоев присвоить определенным ячейкам в таблице, далее эти значения ежедневно сохранять в файл CVS?

П.С. Новичок в ОВЕН и CodeSys, сильно не ругайте:)

kondor3000
23.08.2024, 14:28
Данный FB хочу сделать универсальным, то есть в Main буду вызывать его 20 раз (20 сборочных станций), чтобы по каждой станции получить почасовые простои.

Вопрос: Как эти значения простоев присвоить определенным ячейкам в таблице, далее эти значения ежедневно сохранять в файл CVS?

П.С. Новичок в ОВЕН и CodeSys, сильно не ругайте:)

Почему переводите Time в Real ? Вообще то надо конвертировать в DWORD и делить на 1000, убрав мс, останется время в секундах, которое и надо делить на 60 и конвертировать в WORD ( 1 регистр), их и отправлять в таблицу. Хотя думаю лучше считать в секундах.
REAL (2 регистра) тут не нужен вообще,

В слейве (или мастере) ПЛК надо создать нужное кол-во переменных WORD , можно массив, или структуру массивов, по кол-ву переменных в таблице, например у вас 10 столбцов и 10 строк. В панели раскладываете переменные по местам в таблице.
Пример таблиц в СП3хх, есть на сайте Овен и много тем в разделе по панелям СП3хх.
Там же есть примеры архивирования таблиц на флешку в файл CVS

Mikhail_NNT
27.08.2024, 08:22
Почему переводите Time в Real ? Вообще то надо конвертировать в DWORD и делить на 1000, убрав мс, останется время в секундах, которое и надо делить на 60 и конвертировать в WORD ( 1 регистр), их и отправлять в таблицу. Хотя думаю лучше считать в секундах.
REAL (2 регистра) тут не нужен вообще,

В слейве (или мастере) ПЛК надо создать нужное кол-во переменных WORD , можно массив, или структуру массивов, по кол-ву переменных в таблице, например у вас 10 столбцов и 10 строк. В панели раскладываете переменные по местам в таблице.
Пример таблиц в СП3хх, есть на сайте Овен и много тем в разделе по панелям СП3хх.
Там же есть примеры архивирования таблиц на флешку в файл CVS

kondor3000,

Спасибо за информацию! Изучил соответствующие инструкции по Овну, исправил код программы, но остались вопросы:
1 Не могу найти однозначную информацию, по связке HMI и PLC, кого сделать мастером и почему? (Моя топология: СП310-Р 1шт-----ПЛК210-11-CS 1шт-----БП240К-24 2шт-----МУ210-403 5шт-----МВ210-202 5шт-----КСН210-5 1шт)
2 Создал две структуры массивов (I и II смены по 8 часов) для записи данных в таблицу, вывода их на панель и последующего сохранения в CSV файл. В Конфигураторе в настройках таблицы не нашел поле для привязки переменной к определенной ячейке. Также создавал поля для ввода данных, не нашел где привязать переменные. Можете на примере показать конструкцию привязки переменной к ячейке таблицы?
3 После изучения инструкции Архивация, выяснил что OwenArchiver мне не подойдет (у меня 180 переменных-заполняются 20 строк и 9 столбцов). Библиотека CAA File и архивирование с помощью макросов вызвали больше вопросов. Подскажите, в каком направлении действовать, что и какие конструкции использовать?

782327823378234782357823678237782387823978240

kondor3000
27.08.2024, 08:56
kondor3000,

Спасибо за информацию! Изучил соответствующие инструкции по Овну, исправил код программы, но остались вопросы:
1 Не могу найти однозначную информацию, по связке HMI и PLC, кого сделать мастером и почему? (Моя топология: СП310-Р 1шт-----ПЛК210-11-CS 1шт-----БП240К-24 2шт-----МУ210-403 5шт-----МВ210-202 5шт-----КСН210-5 1шт)
2 Создал две структуры массивов (I и II смены по 8 часов) для записи данных в таблицу, вывода их на панель и последующего сохранения в CSV файл. В Конфигураторе в настройках таблицы не нашел поле для привязки переменной к определенной ячейке. Также создавал поля для ввода данных, не нашел где привязать переменные. Можете на примере показать конструкцию привязки переменной к ячейке таблицы?
3 После изучения инструкции Архивация, выяснил что OwenArchiver мне не подойдет (у меня 180 переменных-заполняются 20 строк и 9 столбцов). Библиотека CAA File и архивирование с помощью макросов вызвали больше вопросов. Подскажите, в каком направлении действовать, что и какие конструкции использовать?


В модбас ТСР мастере у вас добавлены шаблоны модулей, там же вы можете добавить Модбас слейв (это не шаблон, а произвольный прибор, у вас СП310)
Настроить в нём IP панели и добавить нужные переменные, можно сразу Массив WORD, например запись 100 регистров с адреса 256 (функция 0х10).
Панель будет слейвом, кстати вы так и не убрали Float из панели. Если панель слейв, адреса у неё начинаются с PSW256, в ПЛК с 256 адреса.
Таблица тоже начинается с PSW256, туда вы и положите свой Массив, например 100 регистров, с адреса 256.
Архивацию таблицы можно сделать в панели, на флешку.

Можно наоборот, панель мастер, ПЛК слейв. Тогда в панели адреса будут с 4х 0, а в ПЛК с 0. Тогда лучше использовать другой порт ПЛК.

Посмотрите видео 10 и 11, ПЛК в режиме ТСР мастер и ТСР слейв https://www.youtube.com/watch?v=mkpY3u7K8Kg
Видео 8 и 9, ПЛК в режиме мастер и Слейв, обмен с Панелью по Модбас RTU https://www.youtube.com/watch?v=77fdfnfdJME

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

Mikhail_NNT
02.09.2024, 11:20
В модбас ТСР мастере у вас добавлены шаблоны модулей, там же вы можете добавить Модбас слейв (это не шаблон, а произвольный прибор, у вас СП310)
Настроить в нём IP панели и добавить нужные переменные, можно сразу Массив WORD, например запись 100 регистров с адреса 256 (функция 0х10).
Панель будет слейвом, кстати вы так и не убрали Float из панели. Если панель слейв, адреса у неё начинаются с PSW256, в ПЛК с 256 адреса.
Таблица тоже начинается с PSW256, туда вы и положите свой Массив, например 100 регистров, с адреса 256.
Архивацию таблицы можно сделать в панели, на флешку.

Можно наоборот, панель мастер, ПЛК слейв. Тогда в панели адреса будут с 4х 0, а в ПЛК с 0. Тогда лучше использовать другой порт ПЛК.

Посмотрите видео 10 и 11, ПЛК в режиме ТСР мастер и ТСР слейв https://www.youtube.com/watch?v=mkpY3u7K8Kg
Видео 8 и 9, ПЛК в режиме мастер и Слейв, обмен с Панелью по Модбас RTU https://www.youtube.com/watch?v=77fdfnfdJME

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

У меня две таблицы состоящие из 9 столбцов и 21 строки, соответственно 189 ячеек записи. Максимально в один канал можно записать 123 регистра (есть ли ограничения по записи на Slave?). Как я понял мне нужно разбить таблицы каждую на две, и заполнять двумя каналами записи каждую? При соотнесении переменных (использую структуру массивов Word) в Slave присваивать элемент структуры, отступать 8 регистров, так как в них будет записан элемент структуры=массив Word 1..9 и так далее?783977839878399784007840178402

kondor3000
02.09.2024, 13:28
Не понятно зачем вы используете PFW регистры напрямую? Да ещё и записывать будете по 10 раз в секунду. За 2-4 недели так память и убьёте.

Таблица отображения работает с оперативными регистрами, начиная с PSW256 и далее, а записывать данные вы можете уже на PFW или флешку.
И снова вы не убрали Float из таблицы. Читайте что я вам уже раньше писал. Используйте WORD, записывайте в секундах, и регистров в 2 раза уменьшится.

Mikhail_NNT
02.09.2024, 14:36
Сохранение данных таблицы будет происходить в конце смен, т.е. в сутки будет создаваться 2 файла с таблицами простоев за I и II смены. Если в течении смены пропадает питание (у нас такое бывает), то данные в PSW не сохранятся, поэтому PFW. Не смог найти галочку размещение в авто области, как рассказывают в роликах.
Не могу разобраться как правильно соотнести структуру массивов с ячейками в таблице. Unit/Word занимают 2 байта, при записи элемента структуры (массива 1..9 элементов) получается нужно 189 регистров. Если мне нужно в минутах простои сохранять, то выход только делить на две таблицы?
В таблице параметры поменял: Тип word, Формат unsigned. Нужна визуализация простоев в минутах (согласно ТЗ), никто не будет стоять и высчитывать постоянно)

kondor3000
02.09.2024, 14:48
Сохранение данных таблицы будет происходить в конце смен, т.е. в сутки будет создаваться 2 файла с таблицами простоев за I и II смены. Если в течении смены пропадает питание (у нас такое бывает), то данные в PSW не сохранятся, поэтому PFW. Не смог найти галочку размещение в авто области, как рассказывают в роликах.
Не могу разобраться как правильно соотнести структуру массивов с ячейками в таблице. Unit/Word занимают 2 байта, при записи элемента структуры (массива 1..9 элементов) получается нужно 189 регистров. Если мне нужно в минутах простои сохранять, то выход только делить на две таблицы?
В таблице параметры поменял: Тип word, Формат unsigned. Нужна визуализация простоев в минутах (согласно ТЗ), никто не будет стоять и высчитывать постоянно)

Секунды переведите в минуты, разделив на 60 и пишите в минутах тогда, правда без секунд. Потому что 0,5 мин это 30 секунд, перевод не корректный.
Всё равно WORD только в минутах.

По поводу записи в PFW, у вас запись через 100 мс. Это 10 раз в секунду, адреса у вас 10410 (+10000 обращение напрямую в PFW ) запись убьёт память за 2-4 недели.

Mikhail_NNT
02.09.2024, 15:01
Вопрос у меня в другом, берем один элемент структуры (массив word 1...9), записываем: PFW 4100...4108 (область для таблиц), далее второй и так далее. Элементов в структуре (массивов) 21. Получается нужно 189 регистров для записи, а позволяет в один канал записать 123. Не могу понять, что я упускаю или где ошибаюсь? Получается в Конфигураторе нужно делить таблицу на две, и писать в несколько каналов?

kondor3000
02.09.2024, 15:11
Вопрос у меня в другом, берем один элемент структуры (массив word 1...9), записываем: PFW 4100...4108 (область для таблиц), далее второй и так далее. Элементов в структуре (массивов) 21. Получается нужно 189 регистров для записи, а позволяет в один канал записать 123. Не могу понять, что я упускаю или где ошибаюсь? Получается в Конфигураторе нужно делить таблицу на две, и писать в несколько каналов?

Разговор слепого с глухим.
Откройте пример с сайта, таблица отображения записывается в PSW регистры.
В примере адреса таблицы начинаются с PSW400, и имеют длину 36 регистров.

У вас например будет, с PSW401 по PSW589 и длина 189 регистров. Таблица на всю длину.
В ПЛК отправляете 100 регистров с адреса 401 и 89 регистров с адреса 501. В таблице уже имеете 189 регистров. Всё.
Далее либо записываете на флешку либо по кнопке в память панели, теперь уже в регистры PFW, только лучше раз в сутки ( но не чаще чем раз в час).

Если нет галки авто область, то ставите начальный адрес PFW4096, и количество записей N * 189 регистров+ 6 регистров метка времени и даты+ буфер.
В памяти почти 4 000 000 регистров. Например выберите от 100 - до 1000 раз. Для 1000 раз будет 195 000 +195 регистров. Панель сама будет раскладывать всю таблицу автоматом, так же и считывать на флешку.
Сразу скажу, что таких таблиц по 195 регистров не записывал, так что всё надо проверить.
Возможно лучше будет записывать в память, например по 1 строке из таблицы, каждый час.