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

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

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

11 месяцев 16 дней назад

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Здравствуйте Королёв Евгений Владимирович!
Вот скрипт, делал для себя, может и вам службу верную сослужит-- === таблица шлефов всех КДЛ ==
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

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

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

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

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

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

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

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

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

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

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

0 ответов

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

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

ПОКАЗАН

1417 раз

ЗАДАН

11 месяцев 16 дней назад

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