Содержание

msc (сервисное обслуживание со считывателями)

Модуль msc (Machinery Service Control) предназначен для работы со считывателями rfid-карт, установленными на технологическом оборудовании, которое требует периодического тех.обслуживания. Поднесение карты к считывателю фиксирует факт выполнения поставленное мастером задачи по обслуживанию конкретного оборудования.

Модуль msc осуществляет подключение к серверу данных по протоколу rpsvr, опрашивающему считыватели, и подключение к базе данных firebird.

Если база данных не существует, то создается автоматически. Для существующей базы данных проводится проверка на наличие определенных метаданных, и если не найдено, то создается необходимая структура. Все объекты метаданных имеют в имени определенный префикс, называемый схемой. Таким образом модуль msc может соседствовать в базе с другими данными, например, с весовым учетом.

Конфигурация

Пример конфигурационного файла:

<?xml version="1.0" encoding="UTF-8" ?>
 
<configuration
    password="admin" >
 
<dbscr>
  <include file="inc/dbscr.utils.xml"/>
  <include file="inc/dbscr.msc.xml"/>
</dbscr>
 
<works>
    <work id="work_msc" period="1000" enabled="true">
        <module id="db"/>
        <module id="rpcl"/>
        <module id="msc"/>
    </work>
</works>
 
<modules>
    <module id="db" class="database" enabled="true"
        driver="FIREBIRD"
        host="localhost"
        dbname="/home/denis/asutp/promauto/db/fb25/msctest1.fdb"
        username="SYSDBA"
        password="masterkey"
        reconnect_time_sec="5"
    />
 
    <module id="rpcl" class="rpclient" enabled="true"
        host="localhost"
        port="3040"
        tagfilter="*"
        reconnect_time_sec="5"
    />
 
    <module id="msc" class="msc" enabled="true"
        db="db"
        refmod="rpcl"
        scheme="msc"
        script="msc"
    />
 
</modules>
</configuration>
ПараметрПо умолчаниюОписание
db db Модуль базы данных
refmod - Модуль, содержащий теги от считывателей
script msc Имя dbscr-скрипта
schema msc Название схемы (префикс для имен метаобъектов в базе данных)

Основные таблицы

Во многих таблицах встречается поле deleted. Если значение в нем не равно 0, то запись считается удаленной и не будет участвовать при создании новых задач.

reader

            CREATE TABLE {schema}_READER (
                ID INTEGER NOT NULL PRIMARY KEY,
		ISGROUP SMALLINT DEFAULT 0,
                NAME VARCHAR(128),
                IDNAME VARCHAR(64),
                READERTYPE VARCHAR(64),
                DELETED SMALLINT DEFAULT 0
              )

ISGROUP – 0 - обычная запись, 1 - группа
NAME - текстовое название считывателя
IDNAME - имя модуля считывателя, по которому будут созданы теги
READERTYPE - пока только promauto

person

            CREATE TABLE {schema}_PERSON (
                ID INTEGER NOT NULL PRIMARY KEY,
		ISGROUP SMALLINT DEFAULT 0,
                NAME VARCHAR(128),
                DELETED SMALLINT DEFAULT 0
              )

Владельцы карт.

card

            CREATE TABLE {schema}_CARD (
                ID INTEGER NOT NULL PRIMARY KEY,
                PERSON_ID INTEGER REFERENCES {schema}_PERSON ON DELETE cascade ON UPDATE cascade,
                CODE VARCHAR(32),
                DT_CREATE TIMESTAMP,
                DELETED SMALLINT DEFAULT 0
              )

Карты.

CODE - код карты в десятичном формате, пример: «89,11,36277»

schedule

            CREATE TABLE {schema}_SCHEDULE (
                ID INTEGER NOT NULL PRIMARY KEY,
                READER_ID INTEGER REFERENCES {schema}_READER ON DELETE cascade ON UPDATE cascade,
	        TIMETBL VARCHAR(1024),
		DURATION INTEGER,
                DESCR VARCHAR(256),
		AUTOTASK SMALLINT DEFAULT 1,
                DELETED SMALLINT DEFAULT 0
              )

Расписание по которому будут генерироваться задачи.

TIMETABLE - задание время для автоматического создания задач. Формат записи на примерах:

e/0800 Ежедневно в 8:00
e/0800 0830 Ежедневно в 8:00 и 8:30
w 1 2 3 4 5/0800 0830 Каждую неделю по будням в 8:00 и 8:30
m 1 10 20/0000 1200 Каждый месяц 1-го, 10-го и 20-го числа в 00:00 и 12:00
d 20160621 20160622/0800 0830 21.06.2016 и 22.06.2016 в 8:00 и 8:30
e/0800;m 1 4/0830 Ежедневно в 8:00 и в каждый понедельник и четверг в 8:30

DURATION - длительность задачи в минутах. В течение этого времени от начала задачи требуется ее выполнение.
AUTOTASK - если 1, то разрешена автоматическая генерация задач по данному расписанию.

task

            CREATE TABLE {schema}_TASK (
                ID INTEGER NOT NULL PRIMARY KEY,
                SCHEDULE_ID INTEGER REFERENCES {schema}_SCHEDULE ON DELETE cascade ON UPDATE cascade,
                READER_ID INTEGER REFERENCES {schema}_READER ON DELETE cascade ON UPDATE cascade,
                PERSON_ID INTEGER REFERENCES {schema}_PERSON ON DELETE SET NULL ON UPDATE cascade,
                DT_CREATE TIMESTAMP,
                DT_BEGIN TIMESTAMP,
                DT_END TIMESTAMP,
                DT_EXPIRE TIMESTAMP,
                DT_REG TIMESTAMP,
                STATUS SMALLINT,
                DELETED SMALLINT DEFAULT 0
              )

Таблица содержит задачи на обслуживание определенного оборудования со считывателемя.

DT_CREATE - создание задачи - момент создания записи в таблицы.
DT_BEGIN - начало задачи - с какого момента можно подносить карту к считывателю.
DT_END - окончание задачи - поднесение карты после этого момента будет засчитано как выполнение с опозданием.
DT_EXPIRE - максимальное время жизни открытой задачи, после которого она автоматически закрывается со статусом 3.
DT_REG - дата и время выполнения задачи (поднесения карты).
PERSON_ID - человек, выполнивший задачу.
STATUS - статус задачи:

Код статуса Описание
0 Открыта
1 Закрыта во время
2 Закрыта с опозданием
3 Закрыта по просрочке
4 Отменена

input

            CREATE TABLE {schema}_INPUT (
                ID INTEGER NOT NULL PRIMARY KEY,
                CARD_ID INTEGER REFERENCES {schema}_CARD ON DELETE cascade ON UPDATE cascade,
                READER_ID INTEGER REFERENCES {schema}_READER ON DELETE cascade ON UPDATE cascade,
                PERSON_ID INTEGER REFERENCES {schema}_PERSON ON DELETE SET NULL ON UPDATE cascade,
                DT TIMESTAMP
              )

В данной таблице сохраняются все считывания карт. PERSON_ID может содержать null, если карта не имеет владельца.

Работа модуля

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

Получение и сохранение данных от считывателей

Выполняется проверка поступления новых кодов от считывателей, и если есть, фиксирование их в базе данных в таблице input. При этом выполняется поиск открытой задачи по данному считывателю, и, если у владельца карты есть права на задачу, в таблице task выполняется закрытие задачи со статусом 1 или 2.

После успешной записи данных считывателю посылается обратная связь на светодиоды:

  1. длинный зеленый - задача закрыта
  2. длинный синий - задача не найдена, либо у владельца карты нет прав
  3. мигающий синий - карта не имеет владельца

Генерирование новых задач

По расписанию в таблице schedule создаются задачи и помещаются в таблицу task. При этом сразу расчитываются даты открытия, закрытия и просрочки задачи. Дата просрочки вычисляется как дата начала следующей задачи по данному расписанию.

Закрытие просроченных задач

Открытые задачи, т.е. те у которых STATUS=0 и DT_REG is null, считаются просроченными, если DT_EXPIRE < текущее время. При этом в task для данной задачи прописывается STATUS=3 и DT_REG=текущее время.