партнерский раздел
ФорумЭксплуатацияУдаление ошибочных приборов и шлейфов из БД.

Эксплуатация » Удаление ошибочных приборов и шлейфов из БД.

Сразу откажусь от предложения отправить БД в поддержку. потому что нужно принимать множество решений, какой из конфликтующих вариантов выбрать.
Видимо, в результате "удачного" импорта конфигурации из пульта в ОрионПро 1.20 случилась каша в БД.
Проблема №1: в КДЛ некоторые шлейфы стали совместно реле - ни шс с этим адресом, ни реле ни удалить, ни объединить, т.к. они имеют разные индексы.
Проблема №2: В один КДЛ оказались привязаны как в пульт несколько приборов и они на самом деле есть в системе, но подключены в пульт, а не в КДЛ (естесственно :) ) - просто пульт раньше имел адрес этого КДЛ. Приборы видно с крестами в Списке приборов ОЗ, но их нет нигде в структуре. У них иные индексы, чем у реально рабочих приборов.
Я осознаю, что наверное придётся лазать через SQL Studio. Подскажите. как искать нужные индексы, как аккуратно пришибить лишнее, не уложив систему целиком. Понятное дело, удалять КДЛ и рисовать заново все сотню извещателей не охота. 
Приветствуются в т.ч. домыслы и предположения.
PS:При попытке преобразования ШС в реле (реле с таким номером уже есть) выскакивает ошибка, которая подсказывает, что искать надо в dbo.DevItems с индексом lbx_Devitems_DeviceID, значение ключа (7, 626,9). Я не вижу ассоциаций ни одного из этих чисел ни с адресом КДЛ, ни номером ШС ...

5 месяцев назад

avatar
Попробуйте провести модернизацию БД, при этом автоматом делается реиндексация, может поможет. Если не поможет, то руками, например используя SSMS, но муторно не меньше, чем в АБД переделать.
По поводу переноса из КДЛа приборов, так это не сложно, буквально ссылочный индекс поменять. Но кто гарантирует, что других "завихрений" в БД нет?

Налетов Константин 5 месяцев назад

Завихрений полно. но я готов менять ссылочные индексы. Где менять, что нужно знать? :)
У меня кроме этой БД в общем не на что облокотиться - проекты сказочные. Где правды больше, в пульте или АБД - ещё вопрос.
Модернизация БД заканчивается "Успехом". Правда, в результате девственная база данных. 

Королёв Евгений Владимирович 5 месяцев назад

Евгений, в настоящий момент Ориона нет под рукой, смогу подсказать только завтра (время МСК).
В двух словах так: в БД есть таблица приборов, в ней перечисляются все приборы (пульты в том числе), пульты и приборы в протоколе Орион имеют в ссылочном поле значение 0, а те приборы, которые подключены к пульту (протокол ОрионПро), имеют ссылку на индекс этого пульта.

Налетов Константин 5 месяцев назад

https://drive.google.com/file/d/1TwuufONT-k2JhGZpBmlKwgX7KOxn6MZZ/view?usp=sharing
Поле GType ещё на что-то похоже, но логику не вижу всё равно.

Королёв Евгений Владимирович 5 месяцев назад

Ссылку посмотреть не могу по причине отсутствия аккаунта Google :-((
По переносу приборов из КДЛа: таблица RSLines, для проблеммных приборов в поле PKUID указать ID записи в той же таблице для нужного пульта.

Налетов Константин 5 месяцев назад

Ссылку поправил. Ох уж этот гугл...
Попробую на объекте, спасибо.

Королёв Евгений Владимирович 5 месяцев назад

По поводу данных по ссылке - в поле GType указывается тип шлейфа на основе данных таблицы dTypesElement. В Вашем случае скорее всего 1 или 2 для ШС, а для считки оставьте 0.

Налетов Константин 5 месяцев назад

Докладываю из домашней лаборатории.
PKUID у пульта 0, у нормальных приборов 1, а у кривых 7. Исправил все 7 на 1, а поскольку при этом воникает ошибка, назначаю и запоминаю каждому из кривых приборов новые адреса в строку GLineNo. При этом у кривого БКИ в отличие от правильного был DeviceType 44 и пока я непоменял на верный 10, он в АБД не появлялся. Всё, с лишними приборами вопрос снят! Спасибо!
Остались Реле\ШС.
При преобразовании в БД ШС в реле возникает конфликт - данный GIndex уже занят в какой-то другой ещё таблице, видимо. Я могу прибавиь к индексу, например 10000 и тогда это реле исчезает и вроде бы проблемы не видно, но при попытке сменить тип уже в АБД возникает конфликт. Надо менять тип одновременно в некой связанной таблице кроме DevItems. 
Где-то была красивейшая таблица связей полей и таблиц.
PS: тип 1 - охранный шлейф, 2 - пожарный, 3 - вроде реле, но с ним связано поле ItemType со значением 9
PPS: в инспекторе справа кроме типа шлейфа есть пользвательский номер. Я просто удалил из той же таблицы для пробы пару элементов с более высоким номером (видимо более "молодых"). После этого со шлейфом можно работать и выставлять тип как обычно (не забудьте предварительно убрать со входов типа "Реле" связанные разделы). Есть неуверенность, можно ли так делать, хоть база и не легла, но выглядит оптимистично!

Королёв Евгений Владимирович 4 месяца 29 дней назад

Здравствуйте Королёв Евгений Владимирович!
Вот скрипт, делал для себя, может и вам службу верную сослужит-- === таблица шлефов всех КДЛ ==
SELECT
RSLines.GLineNo AS "Адрес"
, dTypes.Name
, RSLines.Name AS "Название прибора"
, DevItems.Address-DevItems.Address/256*256 AS "Шлейф" -- номер ШС реле считывателя
, DevItems.Name AS "Название шлейфа" -- название
, DevItems.Gtype as "Тип шлейфа"-- тип элемента
, DevItems.Config as "Накапливать статистику"-- накапливать статистику 1 - да 0 -нет 2 - централизованное управление
, pObjects.GIndex as "Раздел"
FROM DevItems
JOIN RSLines ON (DevItems.DeviceID = RSLines.ID)
JOIN dTypes ON (RSLines.DeviceType = dTypes.ID)
JOIN pObjCont ON (DevItems.ID = pObjCont.ShleifID)
JOIN pObjects ON (pObjCont.ObjectID = pObjects.ID)
WHERE
--DevItems.Address BETWEEN (256*XXX+YYY) AND (256*XXX+YYY) -- где XXX - адрес прибора YYY - адрес шлейфа
DevItems.Address BETWEEN (256*1+1) AND (256*1+14)
OR DevItems.Address BETWEEN (256*1+16) AND (256*1+25)
ORDER BY "Адрес", "Шлейф"
 -- == журнал за промежуток ==
SELECT
pLogData.TimeVal,
pLogData.DeviceTime,
pLogData.Par3 AS "адрес", -- адрес прибора
pLogData.Par4 AS "шлейф",
pLogData.Event, -- ID события
Events.Contents AS "Событие",
pLogData.Remark AS "Описание",
pLogData.RazdIndex AS "Раздел",-- номер раздела
pObjects.Name AS "Название Раздела"
FROM
pLogData, Events, pObjects
WHERE
pLogData.Event=Events.Event
AND pObjects.GIndex=pLogData.RazdIndex
AND pLogData.TimeVal BETWEEN "17.09.2019 00:00:00" AND "17.09.2019 23:59:59"
ORDER BY pLogData.TimeVal DESC -- сортировка в обратном порядке
--- обновление программы управления и типа шлефа СП 2
UPDATE
DevItems
SET
Gtype = 11 -- адресный релейный
, Config = 0
, State = 0
, Command = 39 -- Включить при пуске
, Flags = 0
, ItemType = 9 -- адресный релейный модуль
, TimeOutConfig = 0
, TimeOutControl = 65536
WHERE
-- РЕЛЕ СП2 --
Address = (256*1+9)
OR Address = (256*1+14)
GO

Осьмаков Андрей 4 месяца 24 дня назад

О, полезные штуки, спасибо. Можно даже сообразить, как с БД работать благодаря комментариям!

Королёв Евгений Владимирович 4 месяца 24 дня назад

В 2014 SQL Management Studio, к сожалению, не сработали запросы. Первый ничего не выдал. Второй ругается на дату\время. Не разобрался.

Королёв Евгений Владимирович 2 месяца 6 дней назад

Формат даты зависит от настроек вашей операционной системы, а во втором запросе проверьте какие адреса КДЛ вы указали. Внимательно изучите комментарии в скриптах

Осьмаков Андрей 2 месяца 6 дней назад

Ааа, ну комментарии же :) Да, пожалуй тупо копировать не вдумываясь - плохая практика.

Королёв Евгений Владимирович 2 месяца 5 дней назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

0 ответов

Добавить ответ

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

ПОКАЗАН

805 раз

ЗАДАН

5 месяцев назад

По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.