Учет потребления тепловой энергии в жилом комплексе
Добавлено: 14 апр 2009, 17:31
Дорогие специалисты! Помогите с решением вот какой проблемы.
Есть современный жилой комплекс (25 этажей), инженерные системы которого управляеются комплексной системой автоматики. Параметры систем регистрируются
Одной из подсистем системы является технический учет теплоэнергии. Структура подсистемы следующая:
- По квартирам установлены теплосчетчики с телеметрическим выходом.
- На каждом этаже установлены 16-ти канальные устройства сбора данных (УСД), опрашивающие теплосчетчики. Каждый канал УСД это фактически счетный регистр. Получается 15 задействованных каналов на этаж.
- Все УСД «висят» на шине RS-485 (протокол «DCON»).
- В диспетчерской осуществляется преобразование RS-485 в ETHERNET через конвертор, который в конечном счете и выдает информацию рабочей станции (РС).
- К данной подсистеме с программной стороны поставлен OPC Server, с помощью которого можно без проблем просматривать текущее значения конкретного канала. Разумеется, что любое значение канала можно переслать OPC Клиенту.
Проблема:
OPC SERVER не пишет в базу данных (БД).
Задача:
Нужно сохранять показания от каждого канала в БД и предоставить пользователю приложение с помощью которого он сможет осуществлять выборку.
Мое видение решения:
1. БД будет преставлять перечень файлов (например , dbf, или вообще txt).
• Обращение к БД будет осуществляться через драйвер OLEDB.
• Каждый следующий файл будет создаваться, если объем текущего превысил, к примеру, 400 Mb. Думаю, что один файл вполне охватит год, а то и больше: 375 записей за час, 9000 записей за сутки, 3285000 записей за год.
2. Писать в БД будет приложение поток, написанное средствами MFC или др. С началом каждого нового часа поток будет запускать приблизительно следующий регламент.
• Опросили каждый канал через OPC Server.
• Записали накопленные значения от каналов в БД через OLEDB. То есть в некую таблицу БД добавили запись:
Этаж / Квартира / УСД/ Канал / Значение канала/ Дата / Время
• Обнулили каждый канал
3. Обращение к БД будет реализовано через приложение пользователя. Функционал приложение будет заключаться в формировании отчета за период времени по выбранным зонам.
Например результат запроса «вывести посуточный ИЛИ почасовой отчет за период времени T = [01.02.2009 00:00:00…08.03.2009 12:00:00] по этажам с 1-го по 8-й» должен будет вывести суммарное посуточное ИЛИ почасовое потребление выбранной зоны (с 1-го по 8-й этажи) за период времени T, а также общее суммарное потребление за весь период T выбранной зоны.
Сам отчет будет выводиться в какой-нибудь стандартный DataGrid вьювер поддерживающий механизм ADODC.
Все хорошо, но вот если пользователю понадобиться отчет за период времени, который выходит за рамки одного файла, например на два или три года, тогда придется склеивать (UNION ALL) файлы (таблицы). Я пробовал склевать три четыре таблицы таких размеров – результат не очень хороший. Перепробовал несколько DataGrid’ов - все долго грузились, а некоторые даже зависли.
Вопросы ВАМ!
Я автоматчик и В БД особо не разбираюсь. Поэтому все выше описанное может показаться профессионалу полным бредом.
Проверьте сам подход ?
Может выбор связи через OLEDB вообще не верный ?
Может, стоит для данной задачи поискать бесплатные СУБД ?
Есть современный жилой комплекс (25 этажей), инженерные системы которого управляеются комплексной системой автоматики. Параметры систем регистрируются
Одной из подсистем системы является технический учет теплоэнергии. Структура подсистемы следующая:
- По квартирам установлены теплосчетчики с телеметрическим выходом.
- На каждом этаже установлены 16-ти канальные устройства сбора данных (УСД), опрашивающие теплосчетчики. Каждый канал УСД это фактически счетный регистр. Получается 15 задействованных каналов на этаж.
- Все УСД «висят» на шине RS-485 (протокол «DCON»).
- В диспетчерской осуществляется преобразование RS-485 в ETHERNET через конвертор, который в конечном счете и выдает информацию рабочей станции (РС).
- К данной подсистеме с программной стороны поставлен OPC Server, с помощью которого можно без проблем просматривать текущее значения конкретного канала. Разумеется, что любое значение канала можно переслать OPC Клиенту.
Проблема:
OPC SERVER не пишет в базу данных (БД).
Задача:
Нужно сохранять показания от каждого канала в БД и предоставить пользователю приложение с помощью которого он сможет осуществлять выборку.
Мое видение решения:
1. БД будет преставлять перечень файлов (например , dbf, или вообще txt).
• Обращение к БД будет осуществляться через драйвер OLEDB.
• Каждый следующий файл будет создаваться, если объем текущего превысил, к примеру, 400 Mb. Думаю, что один файл вполне охватит год, а то и больше: 375 записей за час, 9000 записей за сутки, 3285000 записей за год.
2. Писать в БД будет приложение поток, написанное средствами MFC или др. С началом каждого нового часа поток будет запускать приблизительно следующий регламент.
• Опросили каждый канал через OPC Server.
• Записали накопленные значения от каналов в БД через OLEDB. То есть в некую таблицу БД добавили запись:
Этаж / Квартира / УСД/ Канал / Значение канала/ Дата / Время
• Обнулили каждый канал
3. Обращение к БД будет реализовано через приложение пользователя. Функционал приложение будет заключаться в формировании отчета за период времени по выбранным зонам.
Например результат запроса «вывести посуточный ИЛИ почасовой отчет за период времени T = [01.02.2009 00:00:00…08.03.2009 12:00:00] по этажам с 1-го по 8-й» должен будет вывести суммарное посуточное ИЛИ почасовое потребление выбранной зоны (с 1-го по 8-й этажи) за период времени T, а также общее суммарное потребление за весь период T выбранной зоны.
Сам отчет будет выводиться в какой-нибудь стандартный DataGrid вьювер поддерживающий механизм ADODC.
Все хорошо, но вот если пользователю понадобиться отчет за период времени, который выходит за рамки одного файла, например на два или три года, тогда придется склеивать (UNION ALL) файлы (таблицы). Я пробовал склевать три четыре таблицы таких размеров – результат не очень хороший. Перепробовал несколько DataGrid’ов - все долго грузились, а некоторые даже зависли.
Вопросы ВАМ!
Я автоматчик и В БД особо не разбираюсь. Поэтому все выше описанное может показаться профессионалу полным бредом.
Проверьте сам подход ?
Может выбор связи через OLEDB вообще не верный ?
Может, стоит для данной задачи поискать бесплатные СУБД ?