BEGIN TRANSACTION; DROP TABLE IF EXISTS "betriebsmittel"; CREATE TABLE "betriebsmittel" ( "ID" INTEGER, "kennzeichen" TEXT NOT NULL COLLATE NOCASE, "gruppe" INTEGER NOT NULL, "ort" TEXT, "bezeichnung" TEXT, "beschreibung" TEXT, UNIQUE("kennzeichen" COLLATE NOCASE,"gruppe"), PRIMARY KEY("ID"), FOREIGN KEY("gruppe") REFERENCES "gruppen"("gruppe") ON UPDATE CASCADE ON DELETE RESTRICT, FOREIGN KEY("ort") REFERENCES "orte"("ort") ON UPDATE CASCADE ON DELETE RESTRICT ); DROP TABLE IF EXISTS "gruppen"; CREATE TABLE "gruppen" ( "gruppe" INTEGER, "beschreibung" TEXT, PRIMARY KEY("gruppe") ); DROP TABLE IF EXISTS "input"; CREATE TABLE "input" ( "ID" INTEGER, "kennzeichen" TEXT NOT NULL COLLATE NOCASE, "gruppe" INTEGER NOT NULL, "byte" INTEGER NOT NULL CHECK("byte" >= 0), "bit" INTEGER NOT NULL CHECK("bit" BETWEEN 0 AND 7), "mapping" TEXT, "funktion" TEXT, "schaltet_betriebsmittel" TEXT COLLATE NOCASE, "schaltet_gruppe" INTEGER, "schaltet_klemme" TEXT COLLATE NOCASE, UNIQUE("schaltet_betriebsmittel" COLLATE NOCASE,"schaltet_gruppe","schaltet_klemme"), PRIMARY KEY("ID" AUTOINCREMENT), UNIQUE("gruppe","byte","bit"), FOREIGN KEY("kennzeichen","gruppe") REFERENCES "betriebsmittel"("kennzeichen","gruppe") ON UPDATE CASCADE ON DELETE RESTRICT, FOREIGN KEY("schaltet_betriebsmittel","schaltet_gruppe") REFERENCES "betriebsmittel"("kennzeichen","gruppe") ON UPDATE CASCADE ON DELETE RESTRICT, CHECK(("schaltet_betriebsmittel" IS NULL AND "schaltet_gruppe" IS NULL) OR ("schaltet_betriebsmittel" IS NOT NULL AND "schaltet_gruppe" IS NOT NULL)) ); DROP TABLE IF EXISTS "orte"; CREATE TABLE "orte" ( "ort" TEXT, "beschreibung" TEXT, PRIMARY KEY("ort") ); DROP TABLE IF EXISTS "output"; CREATE TABLE "output" ( "ID" INTEGER, "kennzeichen" TEXT NOT NULL COLLATE NOCASE, "gruppe" INTEGER NOT NULL, "byte" INTEGER NOT NULL CHECK("byte" >= 0), "bit" INTEGER NOT NULL CHECK("bit" BETWEEN 0 AND 7), "mapping" TEXT, "funktion" TEXT, "schaltet_betriebsmittel" TEXT COLLATE NOCASE, "schaltet_gruppe" INTEGER, "schaltet_klemme" TEXT COLLATE NOCASE, UNIQUE("schaltet_betriebsmittel" COLLATE NOCASE,"schaltet_gruppe","schaltet_klemme"), PRIMARY KEY("ID" AUTOINCREMENT), UNIQUE("gruppe","byte","bit"), FOREIGN KEY("kennzeichen","gruppe") REFERENCES "betriebsmittel"("kennzeichen","gruppe") ON UPDATE CASCADE ON DELETE RESTRICT, FOREIGN KEY("schaltet_betriebsmittel","schaltet_gruppe") REFERENCES "betriebsmittel"("kennzeichen","gruppe") ON UPDATE CASCADE ON DELETE RESTRICT, CHECK(("schaltet_betriebsmittel" IS NULL AND "schaltet_gruppe" IS NULL) OR ("schaltet_betriebsmittel" IS NOT NULL AND "schaltet_gruppe" IS NOT NULL)) ); INSERT INTO "betriebsmittel" ("ID","kennzeichen","gruppe","ort","bezeichnung","beschreibung") VALUES (1,'M25',1,'H1','Schaltschranklüfter',NULL), (2,'A12',3,'H1','Pilz Basisgerät',NULL), (3,'F26',1,'H1','Blitzschutz Typ3',NULL), (4,'H24',1,'H1','Leuchte Hauptschalter EIN',NULL), (5,'L22',1,'H1','Blitzschutz Typ 2',NULL), (6,'F16',1,'H1','Sicherung Energiemessung',NULL), (7,'A14',1,'H1','Energiemessung',NULL), (8,'B12',1,'H1','Stromsummenzähler (CT) L3',NULL), (9,'B13',1,'H1','Stromsummenzähler (CT) L2',NULL), (10,'B14',1,'H1','Stromsummenzähler (CT) L1',NULL), (11,'S11',1,'H1','Hauptschalter',NULL), (12,'S25',1,'H1','Temperaturregler Schaltschranklüfter',NULL), (13,'F25',1,'H1','LS Schaltschranklüfter',NULL), (17,'A11',3,'H1','Pilz Buskoppler Ethercat',NULL), (18,'A16',3,'H1','Pilz Ausgangsbaugruppe',NULL), (19,'A17',3,'H1','Pilz Eingangsbaugruppe',NULL), (20,'A22',3,'H1','Pilz Eingangsbaugruppe',NULL), (21,'A23',3,'H1','Pilz Ausgangsbaugruppe',NULL), (22,'A24',3,'H1','Pilz Ausgangsbaugruppe',NULL), (24,'S32',3,'H1','Pilz Notausschalter',NULL), (25,'K62',15,'H1','Relais Ventil Y65 (Presse öffnen)',NULL), (26,'K63',15,'H1','Relais Ventil Y66 (Presse öffnen)',NULL), (27,'Y65',15,'H1','Ventil Presse öffnen 1',NULL), (28,'Y66',15,'H1','Ventil Presse öffnen 2',NULL), (29,'K72',15,'H1','Relais Ventil Y75 (Presse öffnen)',NULL), (30,'K73',15,'H1','Relais Ventil Y76 (Presse öffnen)',NULL), (31,'Y75',15,'H1','Ventil Presse öffnen 3',NULL), (32,'Y76',15,'H1','Ventil Presse öffnen 4',NULL), (34,'A14',2,'H1','SPS Ausgansbaugruppe',NULL), (35,'T62',1,'H1','Netzgerät 400V 24VDC',NULL), (36,'S33',3,'H1','Pilz Notausschalter (oben)',NULL), (37,'S34',3,'H1','Taster Quittieren Not-Aus',NULL), (38,'H36',3,'H1','Leuchte Not-Aus Meldung',NULL), (39,'K37',3,'H1','',NULL), (40,'K37.1',3,'H1','',NULL), (41,'S42',3,'H1','Taster Quittieren Störung',NULL), (42,'A42',3,'H1','PIT m3.2p (Safe Operation Module)',NULL), (43,'S52',3,'H1','Taster Quittieren Betriebsart',''); INSERT INTO "gruppen" ("gruppe","beschreibung") VALUES (0,'Projektdaten'), (1,'Einspeisung'), (2,'Steuerung'), (3,'Pilz'), (11,'Bedienung Elemente'), (15,'Ventile'), (17,'Auswerfer'), (20,'Heizung'), (25,'Wasserbehälter'), (30,'Klemmleisten'); INSERT INTO "input" ("ID","kennzeichen","gruppe","byte","bit","mapping","funktion","schaltet_betriebsmittel","schaltet_gruppe","schaltet_klemme") VALUES (1,'A12',3,2060,4,'I4','Notaus Quittieren','S34',3,'4'), (2,'A12',3,2061,0,'I8','Quittieren Störung Pilz','S42',3,'4'), (3,'A12',3,2061,5,'I13','Betriebsart Einzelhub','A42',3,'SOM1'), (4,'A12',3,2061,6,'I14','Betriebsart Einrichten','A42',3,'SOM2'), (5,'A12',3,2061,7,'I15','Betriebsart -frei-','A42',3,'SOM3'), (6,'A12',3,2062,0,'I16','Betriebsart -frei-','A42',3,'SOM4'), (7,'A12',3,2062,1,'I17','Betriebsart -frei-','A42',3,'SOM5'), (8,'A12',3,2062,2,NULL,'reserve',NULL,NULL,NULL), (9,'A12',3,2062,3,NULL,'reserve',NULL,NULL,NULL); INSERT INTO "orte" ("ort","beschreibung") VALUES ('H1','Schaltschrank 1, groß'), ('H2','Schaltschrank 2, klein oberhalb H1'), ('H3','Schaltschrank 3, klein, hinter Ventilgruppe'), ('H4','mobiles Bedienelement'), ('H5','Monitorgehäuse, schwenbar'), ('H6','direkt an Presse montiert'), (NULL,NULL); INSERT INTO "output" ("ID","kennzeichen","gruppe","byte","bit","mapping","funktion","schaltet_betriebsmittel","schaltet_gruppe","schaltet_klemme") VALUES (1,'A14',2,2,0,NULL,'Schaltet -K72 und damit Ventil -Y75','K72',15,NULL); DROP VIEW IF EXISTS "v_input"; CREATE VIEW "v_input" AS SELECT i.ID, i.kennzeichen, i.byte, i.bit, printf('%d.%d', i.byte, i.bit) AS adresse, i.gruppe, i.funktion FROM input i; DROP VIEW IF EXISTS "v_output"; CREATE VIEW "v_output" AS SELECT o.ID, o.kennzeichen, o.byte, o.bit, printf('%d.%d', o.byte, o.bit) AS adresse, o.gruppe, o.funktion FROM output o; DROP TRIGGER IF EXISTS "bm_upper_ai"; CREATE TRIGGER bm_upper_ai AFTER INSERT ON betriebsmittel FOR EACH ROW BEGIN UPDATE betriebsmittel SET kennzeichen = UPPER(kennzeichen) WHERE rowid = NEW.rowid AND kennzeichen <> UPPER(kennzeichen) COLLATE BINARY; END; DROP TRIGGER IF EXISTS "bm_upper_au"; CREATE TRIGGER bm_upper_au AFTER UPDATE OF kennzeichen ON betriebsmittel FOR EACH ROW BEGIN UPDATE betriebsmittel SET kennzeichen = UPPER(kennzeichen) WHERE rowid = NEW.rowid AND kennzeichen <> UPPER(kennzeichen) COLLATE BINARY; END; DROP TRIGGER IF EXISTS "in_upper_ai"; CREATE TRIGGER in_upper_ai AFTER INSERT ON input FOR EACH ROW BEGIN UPDATE input SET kennzeichen = UPPER(kennzeichen), schaltet_betriebsmittel = CASE WHEN schaltet_betriebsmittel IS NULL THEN NULL ELSE UPPER(schaltet_betriebsmittel) END WHERE rowid = NEW.rowid AND (kennzeichen <> UPPER(kennzeichen) COLLATE BINARY OR (schaltet_betriebsmittel IS NOT NULL AND schaltet_betriebsmittel <> UPPER(schaltet_betriebsmittel) COLLATE BINARY)); END; DROP TRIGGER IF EXISTS "in_upper_au"; CREATE TRIGGER in_upper_au AFTER UPDATE OF kennzeichen, schaltet_betriebsmittel ON input FOR EACH ROW BEGIN UPDATE input SET kennzeichen = UPPER(kennzeichen), schaltet_betriebsmittel = CASE WHEN schaltet_betriebsmittel IS NULL THEN NULL ELSE UPPER(schaltet_betriebsmittel) END WHERE rowid = NEW.rowid AND (kennzeichen <> UPPER(kennzeichen) COLLATE BINARY OR (schaltet_betriebsmittel IS NOT NULL AND schaltet_betriebsmittel <> UPPER(schaltet_betriebsmittel) COLLATE BINARY)); END; DROP TRIGGER IF EXISTS "orte_upper_ai"; CREATE TRIGGER orte_upper_ai AFTER INSERT ON orte FOR EACH ROW WHEN NEW.ort <> UPPER(NEW.ort) BEGIN UPDATE orte SET ort = UPPER(NEW.ort) WHERE rowid = NEW.rowid; END; DROP TRIGGER IF EXISTS "orte_upper_au"; CREATE TRIGGER orte_upper_au AFTER UPDATE OF ort ON orte FOR EACH ROW WHEN NEW.ort <> UPPER(NEW.ort) BEGIN UPDATE orte SET ort = UPPER(NEW.ort) WHERE rowid = NEW.rowid; END; DROP TRIGGER IF EXISTS "out_upper_ai"; CREATE TRIGGER out_upper_ai AFTER INSERT ON output FOR EACH ROW BEGIN UPDATE output SET kennzeichen = UPPER(kennzeichen), schaltet_betriebsmittel = CASE WHEN schaltet_betriebsmittel IS NULL THEN NULL ELSE UPPER(schaltet_betriebsmittel) END WHERE rowid = NEW.rowid AND (kennzeichen <> UPPER(kennzeichen) COLLATE BINARY OR (schaltet_betriebsmittel IS NOT NULL AND schaltet_betriebsmittel <> UPPER(schaltet_betriebsmittel) COLLATE BINARY)); END; DROP TRIGGER IF EXISTS "out_upper_au"; CREATE TRIGGER out_upper_au AFTER UPDATE OF kennzeichen, schaltet_betriebsmittel ON output FOR EACH ROW BEGIN UPDATE output SET kennzeichen = UPPER(kennzeichen), schaltet_betriebsmittel = CASE WHEN schaltet_betriebsmittel IS NULL THEN NULL ELSE UPPER(schaltet_betriebsmittel) END WHERE rowid = NEW.rowid AND (kennzeichen <> UPPER(kennzeichen) COLLATE BINARY OR (schaltet_betriebsmittel IS NOT NULL AND schaltet_betriebsmittel <> UPPER(schaltet_betriebsmittel) COLLATE BINARY)); END; COMMIT;