Compare commits

..

334 Commits

Author SHA1 Message Date
Samuele E. Locatelli fe25ae54e6 Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-03-15 17:07:47 +01:00
Samuele E. Locatelli 614acd2e40 Fix scrittura nome IMG x thermo 2021-03-15 17:07:40 +01:00
Thermo_SIM d70474c01f Fix dashboard UI 2021-03-15 16:26:28 +01:00
Thermo_SIM 045dd808e5 Fix nebulizzatori 2021-03-15 15:55:07 +01:00
Thermo_SIM 92cb66d539 Fix thermoprophet view 2021-03-15 15:54:53 +01:00
Thermo_SIM 941535056d Fix Bitselect 2021-03-15 15:31:25 +01:00
Thermo_SIM f6d794d90c Fix UI 2021-03-15 15:05:17 +01:00
Thermo_SIM 1f769677d1 Added Backup features 2021-03-15 14:51:24 +01:00
Thermo_SIM 9de1286290 Fix Setup 2021-03-15 12:38:22 +01:00
Thermo_SIM 59bacaa1a6 Fix quote Frame 2021-03-15 08:31:48 +01:00
Thermo_SIM abc8564f2f Fix riscaldi 2021-03-12 17:34:59 +01:00
Thermo_SIM 8bfd294525 Merge remote-tracking branch 'origin/develop' into develop 2021-03-10 18:31:18 +01:00
Thermo_SIM 47119e7828 Implementato Assi 2021-03-10 18:30:25 +01:00
Samuele E. Locatelli a8dbf3d15d Merge remote-tracking branch 'origin/new/ThermoCamManager' into develop 2021-03-10 14:55:31 +01:00
Samuele E. Locatelli 7bbe807359 start new rel 178 2021-03-10 14:54:52 +01:00
Samuele E. Locatelli 5884f229b1 Merge remote-tracking branch 'origin/new/ThermoCamManager' into develop 2021-03-10 14:53:58 +01:00
Samuele E. Locatelli 8842111125 fix conf assi 2021-03-10 14:53:15 +01:00
Samuele E. Locatelli 7110d05782 Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-03-10 14:40:01 +01:00
Thermo_SIM fa41a5f577 Fix visualizzazione assi 2021-03-10 10:46:50 +01:00
Samuele E. Locatelli e09ca359dd update version 2021-03-10 09:44:04 +01:00
Samuele E. Locatelli e01731685e Modifica stats x threads 2021-03-10 09:43:14 +01:00
Thermo_SIM 9a9fa64200 Fix translations 2021-03-09 18:05:53 +01:00
= 83492b3a00 Merge remote-tracking branch 'CMS/develop' into develop 2021-03-09 14:58:09 +01:00
= 954224c80f coolers bit selector 2021-03-09 14:57:59 +01:00
Thermo_SIM 64fbb2e106 Fix Under the hood + adv mode 2021-03-09 12:39:20 +01:00
Thermo_SIM 95559497af Added par "extraction_main_drawing_enabled" 2021-03-09 12:38:54 +01:00
Thermo_SIM 71667b87a9 Merge remote-tracking branch 'origin/new/ThermoCamManager' into develop 2021-03-09 12:07:10 +01:00
Samuele E. Locatelli 6919827661 Merge remote-tracking branch 'origin/new/ThermoCamManager' into new/ThermoCamManager 2021-03-09 11:22:19 +01:00
Samuele E. Locatelli 76044293af start new rel 2021-03-09 11:20:52 +01:00
Samuele E. Locatelli bc817fcbf6 fix decodifica comandi assi 2021-03-09 11:18:40 +01:00
Thermo_SIM 45e62c635f Fix Axis visible 2021-03-09 09:37:04 +01:00
Samuele E. Locatelli 0440202342 bozza metodi gestione AdvMode x assi 2021-03-05 07:39:24 +01:00
Samuele E. Locatelli 9a0705130a aggiunta preliminare metodo gen cmd/status assi 2021-03-04 17:25:57 +01:00
Samuele E. Locatelli bdf80680c2 new rel 175 2021-03-04 14:23:50 +01:00
= 729fa17209 Merge remote-tracking branch 'CMS/develop' into develop 2021-03-04 14:17:45 +01:00
= bf6e16a4d6 fix posizione valori x/y piastra 2021-03-04 14:17:28 +01:00
Samuele E. Locatelli e9af483682 new rel vers 2021-03-04 11:57:31 +01:00
Samuele E. Locatelli 5ee41656b7 Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-03-04 11:56:16 +01:00
Samuele E. Locatelli f1aff9393f discovery thread statico 2021-03-04 11:56:01 +01:00
= 2e745a53b7 fix gantt timeline 2021-03-03 14:46:38 +01:00
Thermo_SIM 34651b7c7c Fix IO 2021-03-02 17:59:06 +01:00
Samuele E. Locatelli 24db3c589e fix gestione info assi (refresh) 2021-03-02 12:58:33 +01:00
Samuele E. Locatelli 31f8e90325 new rel vers 2021-03-02 12:37:33 +01:00
Samuele E. Locatelli a1284af386 fix letture CycleLog (anche sovrapposti) 2021-03-02 12:37:19 +01:00
Thermo_SIM 6aa6df7e39 Fix view 2021-03-01 15:54:44 +01:00
Thermo_SIM 9aa360bb5f Fix axes management 2021-03-01 14:55:28 +01:00
Thermo_SIM 19951eeb7c Fix css IO + log ciclo automatico 2021-02-28 19:28:44 +01:00
= 2841738be8 Merge remote-tracking branch 'CMS/develop' into develop 2021-02-26 20:17:33 +01:00
= 5a3e8c297a estrazione 2021-02-26 20:17:22 +01:00
= a2fbaf9a61 vuoto 2021-02-26 20:15:06 +01:00
= 1f8b751d0f raffreddamento 2021-02-26 20:09:54 +01:00
= 24d8986a50 controstampo 2021-02-26 20:04:13 +01:00
= 9fa289194f pirometro 2021-02-26 19:58:11 +01:00
= 152a5489ee riscaldi 2021-02-26 19:53:47 +01:00
= 5a0518af42 modale termo e misure, tab con validazione 2021-02-26 19:49:35 +01:00
Samuele E. Locatelli 878bf9e229 Aggiunta comandi assi (da provare in SIM) 2021-02-26 19:15:47 +01:00
Samuele E. Locatelli a9843c3a5b fix enum x swagger 2021-02-26 18:25:55 +01:00
Samuele E. Locatelli d4cfe8d27c Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-02-26 18:12:17 +01:00
Samuele E. Locatelli 8e03c97f8f fix out stato assi + cycleLog from/to 2021-02-26 18:12:10 +01:00
Thermo_SIM f9e9234d55 Log Ciclo AUtomatico FRONTEND 2021-02-26 18:05:26 +01:00
Samuele E. Locatelli 5122bb5b79 new rel + cleanup 2021-02-26 16:09:15 +01:00
Samuele E. Locatelli 5091401096 update XML x assi 2021-02-26 16:09:04 +01:00
Samuele E. Locatelli 2907387e09 fix cyclelogData 2021-02-26 16:08:53 +01:00
Thermo_SIM 11d5d547f6 Gantt 2021-02-26 11:03:10 +01:00
Samuele E. Locatelli 885742bb88 pulizia img inutilizzate 2021-02-25 19:27:36 +01:00
Samuele E. Locatelli 81037fa8b1 Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-02-25 19:17:18 +01:00
Samuele E. Locatelli 1f04b99414 new rel 169 2021-02-25 19:16:13 +01:00
Samuele E. Locatelli 0eab7c119b fix punti misura resi STATIC... 2021-02-25 19:15:53 +01:00
Thermo_SIM bf9bb455af Merge remote-tracking branch 'origin/develop' into develop 2021-02-25 18:52:37 +01:00
Thermo_SIM f36143336f unther-the-hood translations 2021-02-25 18:51:53 +01:00
= 2eb2440204 Merge remote-tracking branch 'CMS/develop' into develop 2021-02-25 18:40:08 +01:00
Samuele E. Locatelli cd2cb99bd8 Merge branch 'develop' into new/ThermoCamManager 2021-02-25 18:28:55 +01:00
Samuele E. Locatelli b1333263c2 Merge branch 'new/ThermoCamManager' of https://bitbucket.org/ncarminati/cms_thermo_active into new/ThermoCamManager 2021-02-25 18:28:45 +01:00
Samuele E. Locatelli 2d8a9b9ea6 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2021-02-25 18:28:24 +01:00
= 7c999c712b fix measure points 2021-02-25 18:08:48 +01:00
= 1ee0d5add8 fix gantt 2021-02-25 18:01:46 +01:00
= 548f36ccf8 fix gantt 2021-02-25 17:53:18 +01:00
Samuele E. Locatelli 3ed4fc8312 fix gitignore 2021-02-25 17:39:25 +01:00
Samuele E. Locatelli 67eb8a9de7 Merge branch 'new/ThermoCamManager' into develop 2021-02-25 17:36:37 +01:00
Samuele E. Locatelli 1914658e5c typo 2021-02-25 17:35:57 +01:00
Thermo_SIM e2c1a6ef19 Fix preriscaldi 2021-02-25 17:34:16 +01:00
Samuele E. Locatelli 747ac452d9 fix discovery IP sim 2021-02-25 17:13:56 +01:00
Samuele E. Locatelli 54930860bd Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-02-25 17:13:23 +01:00
Samuele E. Locatelli 0e89edbfb8 update forzatura json 2021-02-25 17:13:15 +01:00
Samuele E. Locatelli db320d3fb1 fix gestioen thermo in SIM 2021-02-25 17:12:47 +01:00
= 04df04d15c visualizzazione gantt solo per le sezioni attive 2021-02-25 17:11:58 +01:00
Thermo_SIM 60bddba24f added error in labels 2021-02-25 17:01:31 +01:00
Thermo_SIM 01e7f87c82 Fix Hub implementation 2021-02-25 16:08:16 +01:00
= daa8f42762 Merge remote-tracking branch 'CMS/develop' into develop 2021-02-25 15:53:44 +01:00
= 5205593f9f fix modale dettaglio thermo - mancano misure reali 2021-02-25 15:53:35 +01:00
Thermo_SIM 9fe9ffa736 Fix users Area + Process softkey 2021-02-25 15:22:57 +01:00
Thermo_SIM 12a3bde770 Fix Cursor pointer & input Focus 2021-02-25 12:16:46 +01:00
Thermo_SIM 1f04efa0ee Fix charts 2021-02-25 11:34:48 +01:00
Thermo_SIM 9a87ddee9f Fix IO visible 2021-02-25 10:51:48 +01:00
Thermo_SIM 7ebf5013b3 Fix Resistances Watt 2021-02-25 10:26:37 +01:00
Samuele E. Locatelli 57a60f9d12 ThermoSetup vers 168 2021-02-24 08:35:39 +01:00
= aa03bd0a1a Merge remote-tracking branch 'CMS/develop' into develop 2021-02-23 17:37:32 +01:00
= 9c54f3aaa9 layout termo - manca storico immagini da leggere correttamente per fare prove 2021-02-23 17:37:13 +01:00
Samuele E. Locatelli 093e50b006 Merge branch 'new/ThermoCamManager' into develop 2021-02-23 17:11:57 +01:00
Samuele E. Locatelli 37ef6055dc fix warmers x UI (array punti) e PLC (id/valore) 2021-02-23 17:11:12 +01:00
Samuele E. Locatelli 5fbbb5e61f new rel 2021-02-23 17:10:39 +01:00
= 0ba2c8305c modal show & get tcamdata 2021-02-23 16:31:13 +01:00
Samuele E. Locatelli 7d1f9b4d4c fix nome last image (static var) 2021-02-23 16:30:43 +01:00
Samuele E. Locatelli 72a762b24c new release start 2021-02-23 16:27:40 +01:00
Samuele E. Locatelli eeeeba88a4 fix path x salvataggio foto automatico 2021-02-23 16:27:32 +01:00
Samuele E. Locatelli e85bccf0b1 Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-02-23 15:44:14 +01:00
Thermo_SIM 79035f49d2 Merge remote-tracking branch 'origin/develop' into develop 2021-02-23 15:43:30 +01:00
Thermo_SIM 38cbb34921 Fix IO 2021-02-23 15:42:38 +01:00
Samuele E. Locatelli 3ef60f8ead cleanup x setup 2021-02-23 15:42:16 +01:00
Samuele E. Locatelli 3db4f8ded4 Fix gestione chiusura thread discovery x setup e active 2021-02-23 15:41:32 +01:00
Samuele E. Locatelli fe972b16dd new rel 165 x ThermoActive 2021-02-23 15:03:40 +01:00
Samuele E. Locatelli 9a0e5729bf ancora fix x metodi thermocam 2021-02-23 15:03:19 +01:00
= cc2dd06c53 Merge remote-tracking branch 'CMS/develop' into develop 2021-02-23 14:37:41 +01:00
Samuele E. Locatelli da2839b3b2 fix image save path 2021-02-23 13:50:59 +01:00
Samuele E. Locatelli a540ef1768 fix config costanti x release 2021-02-23 12:12:04 +01:00
Samuele E. Locatelli b3d0be026a Merge remote-tracking branch 'origin/new/ThermoCamManager' into new/ThermoCamManager 2021-02-23 11:45:56 +01:00
Samuele E. Locatelli 604e1c8f8e new rel number 2021-02-23 11:45:46 +01:00
Samuele E. Locatelli 4d210ddf9b fix conf x Setup a 32bit 2021-02-23 11:43:08 +01:00
Samuele E. Locatelli b6dbe49a47 rimozione dll locali 2021-02-23 11:42:55 +01:00
Samuele E. Locatelli 782ea9f03e Setup riportato a 64bit 2021-02-23 10:52:15 +01:00
Samuele E. Locatelli 666feefbd1 test flir x86 2021-02-23 10:44:02 +01:00
Samuele E. Locatelli 3172febf24 aggiunta bat x setup FLIR 2021-02-23 10:43:17 +01:00
Samuele E. Locatelli d0e1b138f2 FIX versione 64bit Thermo.Cam.Setup 2021-02-22 23:22:20 +01:00
Samuele E. Locatelli 8a5035b23b fix classe ThermoCamController x live, da testare dll FLIR 2021-02-22 23:10:21 +01:00
Samuele E. Locatelli b603072618 fix config server x test, rimozione files inutili 2021-02-22 23:09:54 +01:00
Samuele E. Locatelli 8f293b8fa9 forzatura post build event x86 2021-02-22 19:52:29 +01:00
Samuele E. Locatelli 3d0e261ceb Merge remote-tracking branch 'origin/new/ThermoCamManager' into new/ThermoCamManager 2021-02-22 19:25:17 +01:00
Samuele E. Locatelli ad7abfa4b0 aggiunta conf in active.config 2021-02-22 19:24:32 +01:00
Samuele E. Locatelli 93e767563f pulizia xml inutilizzato x tooltable 2021-02-22 19:24:19 +01:00
Samuele E. Locatelli 34702f322d reconf x dll locali 2021-02-22 19:23:58 +01:00
Samuele E. Locatelli 1d8e405862 aggiunta dll locali 2021-02-22 19:23:18 +01:00
Samuele E. Locatelli 0f7e94b758 rallentamento lettura recipe 2021-02-22 19:00:12 +01:00
Samuele E. Locatelli 68d8ff4480 Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-02-22 18:29:15 +01:00
Samuele E. Locatelli d15719c1bd new rel version 2021-02-22 18:24:12 +01:00
Samuele E. Locatelli c4faa9b6cc Fix full recompile issue... 2021-02-22 18:23:57 +01:00
= cbd3561cb5 layout 2021-02-22 18:20:08 +01:00
= 4725f63181 Merge remote-tracking branch 'CMS/develop' into develop 2021-02-22 18:08:19 +01:00
= 2f753cc8c4 termografica 2021-02-22 18:08:08 +01:00
= 2c8e54c9a6 thermo grafica 2021-02-22 18:07:54 +01:00
Samuele E. Locatelli 0153bd1759 fix metodi comunicator e renaming 2021-02-22 17:41:17 +01:00
Samuele E. Locatelli ac9fc3ddd2 Riorganizzazione metodi automatici x scatti imamgini FLIR 2021-02-22 17:38:09 +01:00
Samuele E. Locatelli ffca754194 Aggancio metodi nuova classe communicator 2021-02-22 17:25:33 +01:00
Samuele E. Locatelli fc0a3d64af Altri helper x metodi conversione formati 2021-02-22 17:06:04 +01:00
Thermo_SIM 4ed3a26768 Fix IO scroll 2021-02-22 16:37:02 +01:00
Thermo_SIM 1a3d2fc733 Fix INPUT view + Immagini Setup 2021-02-22 15:06:55 +01:00
Thermo_SIM 631ae60294 Merge remote-tracking branch 'origin/develop' into develop 2021-02-22 13:04:44 +01:00
Thermo_SIM ad1a53c4fc fix disegni "quote e velocità" 2021-02-22 13:03:39 +01:00
Samuele E. Locatelli b2a300a7a1 inizio porting classe gestione comunicazione ThermoCam 2021-02-22 12:15:30 +01:00
Samuele E. Locatelli 1b76c379c4 fix costanti x camera 2021-02-22 12:15:14 +01:00
Samuele E. Locatelli c530a9823c fix setup area wwwroot immagini 2021-02-22 12:15:04 +01:00
Samuele E. Locatelli c47b7c0c57 demo conf json in utils 2021-02-22 12:14:45 +01:00
Samuele E. Locatelli f194225bdc Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-02-20 17:38:43 +01:00
Samuele E. Locatelli 274cfdfc6b Fix test finali x restart 2021-02-20 17:38:14 +01:00
Thermo_SIM 4a2d40308c Merge remote-tracking branch 'origin/develop' into develop 2021-02-20 16:32:58 +01:00
Thermo_SIM 3f412e9e17 fix layout 2021-02-20 16:32:14 +01:00
Samuele E. Locatelli 59eb4b2357 new rel 2021-02-20 16:19:40 +01:00
Samuele E. Locatelli 0849871914 fix calss rename 2021-02-20 16:19:30 +01:00
Samuele E. Locatelli 6c9bfacf6f pulizia codice 2021-02-20 15:59:09 +01:00
Samuele E. Locatelli 1cf33caac3 ok eliminazione files vecchi + test connesisone camera auto da helper 2021-02-20 12:37:17 +01:00
Samuele E. Locatelli a67381c9b8 FIx procedura init camera 2021-02-20 12:17:09 +01:00
Samuele E. Locatelli 57baeaf849 eliminazione trasf BN inutilizzata 2021-02-20 11:14:44 +01:00
Samuele E. Locatelli 24a8b7db12 new rel number 2021-02-20 10:49:32 +01:00
Samuele E. Locatelli 8163e6867b ok nuova gestione helper discovery 2021-02-20 10:49:11 +01:00
Samuele E. Locatelli cbb9a758b1 Merge commit '78e7af66e23a53306157b708ce994240a752da00' into new/ThermoCamManager 2021-02-19 19:11:32 +01:00
Samuele E. Locatelli 71cbab86de Abbozzata gestione DiscoveryHelper (non becca evento...) 2021-02-19 19:10:51 +01:00
Samuele E. Locatelli f650b4a1d2 ok setup calcolo trasf + renaming condizioni 2021-02-19 18:56:26 +01:00
Samuele E. Locatelli 32d8a52c6d fix renaming 2021-02-19 17:59:39 +01:00
Thermo_SIM 78e7af66e2 Fix riscaldi (comportamento) 2021-02-19 17:55:54 +01:00
Samuele E. Locatelli 5ef2f30938 fix antitrasformata punti!!! 2021-02-19 17:55:09 +01:00
Samuele E. Locatelli eaca7781cd test reverse trasformata punti 2021-02-19 17:15:18 +01:00
Samuele E. Locatelli dfb6b5b4da bozza helper selezione camera (DA TESTARE!!!) 2021-02-18 19:28:53 +01:00
Samuele E. Locatelli fc04bf50f5 rimozione form inutilizzate 2021-02-18 19:18:31 +01:00
Samuele E. Locatelli f9ce06f2b1 Ancora fix naming Thermo.Cam.Utils 2021-02-18 19:16:31 +01:00
Samuele E. Locatelli a356169539 Ancora renaming progetto Thermo.Cam.Setup 2021-02-18 19:11:43 +01:00
Samuele E. Locatelli 12ad1388b9 fix chiamata temperatura (1 punto alla volta) 2021-02-18 19:09:22 +01:00
= 344f976017 modal container2 2021-02-18 18:41:28 +01:00
= a970592c12 Merge remote-tracking branch 'CMS/develop' into develop 2021-02-18 18:40:39 +01:00
= 40a7a40678 fix thermo riscaldi sup inf layout.. dubbi sulla disattivazione della selezione. 2021-02-18 18:40:27 +01:00
Samuele E. Locatelli 490c95ac9c fix api TCamData x range temp + dim immagine 2021-02-18 18:23:50 +01:00
Samuele E. Locatelli 1536042a38 update conf x IO 2021-02-18 18:23:10 +01:00
Samuele E. Locatelli a2c019837a Ridenominazione progetto Thermo.CamSetup e Utils 2021-02-18 17:12:21 +01:00
Samuele E. Locatelli 4280254535 Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-02-17 19:52:03 +01:00
Samuele E. Locatelli cffb93d09d metodo fake x recupero temp da lista punti 2021-02-17 19:51:56 +01:00
Samuele E. Locatelli 72a5ff1879 new rel number 2021-02-17 19:20:22 +01:00
Samuele E. Locatelli 2ac7fa4361 modifica DB con migrazione x gestione last image thermo 2021-02-17 19:13:24 +01:00
Thermo_SIM a09b593fb8 Merge remote-tracking branch 'origin/develop' into develop 2021-02-17 15:12:20 +01:00
Thermo_SIM 9a36d1568a Fix Riscaldi 2021-02-17 15:05:29 +01:00
= ac212a3a6e ID+bo in resistenze 2021-02-17 12:36:38 +01:00
= b8b64189fc fix layout 2021-02-17 12:34:44 +01:00
= 5be2108efb resistance layout, termoprophet layout e varie 2021-02-17 12:30:32 +01:00
= eac94482b9 thermo layout 2021-02-17 11:42:14 +01:00
= 67298b0899 warmer position 2021-02-17 10:08:48 +01:00
Samuele E. Locatelli 4b346d8ba7 fix conf e discovery iniziale 2021-02-17 08:57:34 +01:00
Samuele E. Locatelli 0b47c548f8 tentativo setup camera da IP (fallito...) da rivedere 2021-02-16 19:28:01 +01:00
Samuele E. Locatelli fe518b2ce7 refactor main class + pulizia codice 2021-02-16 19:04:31 +01:00
Samuele E. Locatelli b69927bc70 ancora spostamento metodi init in libreria 2021-02-16 18:49:47 +01:00
Samuele E. Locatelli dc8f2d6b8d pulizia metodi commentati 2021-02-16 18:23:38 +01:00
Samuele E. Locatelli bb4ac545a0 completato spostamento metodi connect/disconnect camera in class lib 2021-02-16 18:13:15 +01:00
= b60fa9b07e image && opacity 2021-02-16 17:43:24 +01:00
= 5789360908 layout thermoprohet right 2021-02-16 17:14:47 +01:00
Samuele E. Locatelli c9c1f20f9e fix range reload + fix color reload 2021-02-16 14:50:13 +01:00
Samuele E. Locatelli 22c25ee2bb modifica comportamento LOAD image... 2021-02-16 12:53:18 +01:00
Samuele E. Locatelli c7018202c3 ok salvataggio 3 img + dati temperature 2021-02-16 09:50:07 +01:00
Samuele E. Locatelli 134f891f03 copia img unique +code cleanup (2 test...) 2021-02-15 20:17:52 +01:00
Samuele E. Locatelli f073e37254 spostato save in libreria 2021-02-15 20:11:14 +01:00
Samuele E. Locatelli 14dfcf35c7 aggiunte immagini _last x segnaposto 2021-02-15 14:53:21 +01:00
Samuele E. Locatelli eebbd98280 Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager 2021-02-15 12:00:05 +01:00
Samuele E. Locatelli 8e0821ca72 Aggiunta foder immagini con esempi 2021-02-15 11:59:55 +01:00
Thermo_SIM 1b869c4408 Fix Style + Modal info resistenze 2021-02-13 18:07:36 +01:00
Samuele E. Locatelli 189b29540b spostamento classi lettura temp in libreria base 2021-02-13 11:59:02 +01:00
Samuele E. Locatelli 40ff5dae6f spostato metodi ricalcolo img in classe libreria 2021-02-13 11:49:04 +01:00
Samuele E. Locatelli fac46ce12e Fix scala cromatica assoluta da impostazione 2021-02-12 19:33:34 +01:00
Samuele E. Locatelli c9efa885d9 Riorganizzazione MainForm con CodeMaid 2021-02-12 18:45:34 +01:00
Samuele E. Locatelli 21a262b3fb Riorganizzaizone memorie x image 2021-02-12 18:45:23 +01:00
Thermo_SIM 8e4b2d5913 Fix style 2021-02-12 16:30:50 +01:00
Thermo_SIM 0b6c5475bd Fix Min-Role for using Thermo UnderTheHood 2021-02-12 16:30:11 +01:00
Samuele E. Locatelli c0a2084edf fixed SAVE/LOAD delle immagini thermo 2021-02-12 15:56:01 +01:00
Samuele E. Locatelli f385141d05 modifica comportamento avvio + inizio test SAVE/LOAD 2021-02-11 19:24:23 +01:00
= abba69d0d7 Merge branch 'feature/fixsottocofano' into develop 2021-02-11 12:04:37 +01:00
= 38311df33a fix layout sottocofano 2021-02-11 12:04:26 +01:00
Samuele E. Locatelli 7a41ce29fa ok cross x punti 2021-02-10 19:36:24 +01:00
Samuele E. Locatelli 2aa6112113 OK disegno punti su immagine 2021-02-10 19:03:44 +01:00
Samuele E. Locatelli 83341c6004 testing temp FLIR vs ponderata (XOXO) 2021-02-10 18:23:50 +01:00
Samuele E. Locatelli 00c5b8b97a refresh comportamento x test temperature 2021-02-10 17:06:58 +01:00
Samuele E. Locatelli 7501ee38ec Fix processing byt video in parallelo (mashalled) 2021-02-09 19:58:01 +01:00
Samuele E. Locatelli f1b3a90c2e relayout form 2021-02-09 18:20:20 +01:00
Samuele E. Locatelli 4d847c2add ok anche live transform 2021-02-09 18:06:33 +01:00
Samuele E. Locatelli 53a0084df1 Ok acquisizione da CAM + trasformazione 2021-02-09 12:42:16 +01:00
Samuele E. Locatelli 9f6ebc84bf ok setup acquisizione punti preliminare 2021-02-09 11:49:03 +01:00
Samuele E. Locatelli bc54666dbd Aggiunta preliminare progetto FLIR 2021-02-08 19:49:01 +01:00
= b7fd90d300 Merge branch 'feature/sottocofano' into develop 2021-02-08 09:59:58 +01:00
= bc7a45f514 fix less 2021-02-08 09:37:51 +01:00
Thermo_SIM 6059670422 Merge branch 'new/UnderTheHood' into feature/sottocofano 2021-02-06 17:22:57 +01:00
Thermo_SIM 3d616d83b0 FIx Warmers Under-the-hood (TODO Details modal) 2021-02-06 17:19:50 +01:00
Thermo_SIM 81bf6a308b Merge branch 'new/UnderTheHood' of https://bitbucket.org/ncarminati/cms_thermo_active into new/UnderTheHood 2021-02-06 10:39:56 +01:00
Samuele E. Locatelli b0ffae1969 Merge remote-tracking branch 'origin/develop' into new/UnderTheHood 2021-02-05 18:33:10 +01:00
Samuele E. Locatelli 4926394bfb Merge remote-tracking branch 'origin/feature/sottocofano' into new/UnderTheHood 2021-02-05 18:33:01 +01:00
Samuele E. Locatelli 381adc93a5 new rel 2021-02-05 18:32:57 +01:00
Samuele E. Locatelli ea29ef5f92 equality senza incapsulamento (errori) 2021-02-05 18:32:29 +01:00
= 967846f83d fix layout assi 2021-02-05 18:07:33 +01:00
Samuele E. Locatelli 3ed92738d2 aggiunta invio iniziale 2021-02-05 18:04:28 +01:00
= a4ce9b63a5 Merge remote-tracking branch 'CMS/feature/sottocofano' into feature/sottocofano 2021-02-05 17:45:40 +01:00
= 939d37eb63 Merge remote-tracking branch 'CMS/develop' into develop 2021-02-05 17:45:29 +01:00
= 47579dc6af Merge branch 'feature/sottocofano' into develop 2021-02-05 17:45:24 +01:00
Samuele E. Locatelli ba2359469d Merge remote-tracking branch 'origin/develop' into new/UnderTheHood 2021-02-05 17:38:18 +01:00
= 45c25b7835 scrittura output e gestione tastierino 2021-02-05 17:38:08 +01:00
Samuele E. Locatelli fbc5e09f04 Merge remote-tracking branch 'origin/new/UnderTheHood' into new/UnderTheHood 2021-02-05 17:37:32 +01:00
Samuele E. Locatelli df9e5fc477 fix equality test x signal-r degli IO 2021-02-05 17:37:01 +01:00
Thermo_SIM 9ad36718bb Merge branch 'new/UnderTheHood' of https://bitbucket.org/ncarminati/cms_thermo_active into new/UnderTheHood 2021-02-05 16:30:00 +01:00
Giuseppe Marazzita 147c64f88a fix - [assi] 2021-02-05 16:28:57 +01:00
Samuele E. Locatelli 6154e5fa14 Merge branch 'new/UnderTheHood' of https://bitbucket.org/ncarminati/cms_thermo_active into new/UnderTheHood 2021-02-05 16:06:03 +01:00
Samuele E. Locatelli 8fc103563d fix swagger class reference 2021-02-05 16:04:03 +01:00
= f861534e01 Merge branch 'feature/sottocofano' into develop 2021-02-05 15:36:48 +01:00
= fe4d3a1635 fix tastiera su numeric input 2021-02-05 15:36:34 +01:00
= 854b28f588 Merge branch 'feature/sottocofano' into develop 2021-02-05 15:25:53 +01:00
= ba6894e15d fix rimozione "main-container" nei file innestati di background 2021-02-05 15:24:29 +01:00
= 617802ddf6 fix layout 2021-02-05 14:47:17 +01:00
= ee6fc599d8 signalr per channels IO 2021-02-05 14:44:26 +01:00
= 9bdcb6ef14 preparazione a signalr 2021-02-05 14:39:24 +01:00
Samuele E. Locatelli 648ef062c5 Merge branch 'new/UnderTheHood' of https://bitbucket.org/ncarminati/cms_thermo_active into new/UnderTheHood 2021-02-05 14:33:31 +01:00
Samuele E. Locatelli a5519a7e23 Merge remote-tracking branch 'origin/new/UnderTheHood' into new/UnderTheHood 2021-02-05 14:29:42 +01:00
Samuele E. Locatelli 6bd0d8ef96 Merge remote-tracking branch 'origin/develop' into new/UnderTheHood 2021-02-05 14:28:56 +01:00
Samuele E. Locatelli de3c615801 new rel 2021-02-05 14:28:47 +01:00
Samuele E. Locatelli 0ccab81063 Aggiunta conf x sample variabile 2021-02-05 14:28:39 +01:00
Nicola 695f363b88 Merge remote-tracking branch 'origin/feature/sottocofano' into new/UnderTheHood 2021-02-05 14:24:11 +01:00
= 30ad2fc050 fix scroll into view 2021-02-05 14:17:45 +01:00
= 7e464a8638 fix layout 2021-02-05 14:07:34 +01:00
Samuele E. Locatelli 28444f60c0 Completata implementazione WRITE IO (testare!) 2021-02-05 13:59:49 +01:00
= ead221b0ac Merge remote-tracking branch 'CMS/feature/sottocofano' into feature/sottocofano 2021-02-05 13:10:12 +01:00
= c864cec1d4 Merge branch 'feature/sottocofano' into develop 2021-02-05 13:09:55 +01:00
= 48d973fc01 clean 2021-02-05 13:09:23 +01:00
= ae87d3cd07 fix easy less upgrade to last version 2021-02-05 13:08:07 +01:00
Samuele E. Locatelli dd7ca930ae Add PLC R/W per channlesIO (val e forzature) 2021-02-05 12:24:56 +01:00
Samuele E. Locatelli 83e2ab062d Merge remote-tracking branch 'origin/feature/sottocofano' into new/UnderTheHood 2021-02-05 10:15:28 +01:00
Giuseppe Marazzita 69629c257d fix [riscaldi] - [buttons] 2021-02-05 09:32:41 +01:00
Giuseppe Marazzita b0aa56d06d fix [ciclo] [misurazioni] [riscaldi] 2021-02-05 09:27:50 +01:00
Samuele E. Locatelli 302c74c64e start new rel sprint 2021-02-04 19:14:08 +01:00
Samuele E. Locatelli 7578bc4b5b new rel vers 2021-02-04 19:13:43 +01:00
Samuele E. Locatelli 9f05b65ca6 Merge remote-tracking branch 'origin/develop' into new/UnderTheHood 2021-02-04 19:12:29 +01:00
Samuele E. Locatelli b6dc59ea93 Prima vers signal-r x dati ChannelsIO 2021-02-04 19:12:19 +01:00
Thermo_SIM 45ea2a309e Merge remote-tracking branch 'origin/develop' into new/UnderTheHood 2021-02-04 17:41:42 +01:00
= fbe3f56bc3 Merge branch 'feature/sottocofano' into develop 2021-02-04 17:20:00 +01:00
= 73124002a6 fix output 2021-02-04 17:18:17 +01:00
= 8d31628cc2 fix output layout con dati 2021-02-04 17:15:15 +01:00
Samuele E. Locatelli ee11717644 Merge remote-tracking branch 'origin/new/UnderTheHood' into new/UnderTheHood 2021-02-04 16:46:50 +01:00
Samuele E. Locatelli 4aec0ca0d9 OK x nuova API invio solo valori (DTO signal-r) 2021-02-04 16:45:22 +01:00
Samuele E. Locatelli f7fdfd7f55 new rel x API solo valori 2021-02-04 16:44:42 +01:00
Thermo_SIM 7d6cdeb612 Merge branch 'feature/sottocofano' into new/UnderTheHood 2021-02-04 16:33:15 +01:00
= b85ed71319 fix ai input style 2021-02-04 16:23:45 +01:00
Samuele E. Locatelli a6a078faac refactor + new DTO x valori signal-r 2021-02-04 16:19:11 +01:00
Samuele E. Locatelli b8462438c1 completata verifica lettura IO: OK x AI/AO! 2021-02-04 15:54:27 +01:00
= 7a0099336c fix input 2021-02-04 15:17:10 +01:00
= 490c4ed21b fix store channel 2021-02-04 14:40:25 +01:00
= c44465430d fix output 2021-02-04 14:14:33 +01:00
= 9c427d23a3 remove output 2021-02-04 13:55:07 +01:00
= 6f1e429c4e fix layout e collegamento con server 2021-02-04 13:13:42 +01:00
Samuele E. Locatelli d6d5c10517 completato preview conf x IO 2021-02-04 11:24:03 +01:00
Samuele E. Locatelli 89ee203461 test x output conf IO 2021-02-04 10:55:36 +01:00
Giuseppe Marazzita 50d63545ba Merge remote-tracking branch 'origin/feature/sottocofano' into feature/sottocofano 2021-02-04 09:57:02 +01:00
Giuseppe Marazzita 3a0ad9db97 fix output 2021-02-04 09:56:10 +01:00
= 2a6410ffdc fix file casing 2021-02-04 09:53:07 +01:00
Giuseppe Marazzita 236443b777 Moduli sotto cofano (solo parte grafica) 2021-02-04 09:32:38 +01:00
Samuele E. Locatelli d2d20d16a2 Aggiunta altri parametri realtime letti da PLC x IO 2021-02-03 19:33:26 +01:00
Samuele E. Locatelli 272f0823af OK primo test lettura dal PLC x bit vbisibilità canali IO 2021-02-03 19:20:48 +01:00
Samuele E. Locatelli bd1994e6ec Merge remote-tracking branch 'origin/new/UnderTheHood' into new/UnderTheHood 2021-02-03 19:04:49 +01:00
Samuele E. Locatelli 5ad7b7990c inizio lettura da PLC (da testare!!!) 2021-02-03 19:04:40 +01:00
Samuele E. Locatelli e16fc55c57 refresh vers numb 1.1.150 2021-02-03 14:36:40 +01:00
Samuele E. Locatelli e77887153d Aggiunto chiamata x status canali IO 2021-02-03 14:28:18 +01:00
Samuele E. Locatelli 7af6a9726a Update lettura XML + conf DTO 2021-02-03 13:21:00 +01:00
Samuele E. Locatelli 64e8bd0331 ok gestione CONF x IO 2021-02-03 08:47:33 +01:00
Samuele E. Locatelli fb16f616e5 partial commit: update config IO 2021-02-02 19:39:35 +01:00
Samuele E. Locatelli dd869ef966 Sim CycleLog in UTH 2021-02-01 19:45:25 +01:00
Samuele E. Locatelli 8fdf8b74c4 Bozza oggetti DI/O 2021-02-01 19:45:09 +01:00
Samuele E. Locatelli 256895ad04 Merge remote-tracking branch 'origin/develop' into develop 2021-02-01 17:30:02 +01:00
Samuele E. Locatelli 6855503714 fix setup IP dell'NC 2021-02-01 17:26:57 +01:00
Nicola c8773d1418 Merge branch 'Build_Script' into develop 2021-02-01 16:37:18 +01:00
Nicola 140599cd1c Fix build Script + Installer 2021-02-01 16:29:33 +01:00
Nicola e772745253 Merge remote-tracking branch 'origin/develop' into develop 2021-02-01 14:35:25 +01:00
Nicola d487ca5f60 Fix startup checks (Active PRJ) 2021-02-01 14:33:49 +01:00
Samuele E. Locatelli 53d0b16205 Merge commit '46dbf006600a211b64576df26e599b6fb87d9af3' into develop 2021-02-01 10:54:32 +01:00
Samuele E. Locatelli 46dbf00660 fix avvio controllo star1&2 x user login 2021-02-01 10:37:25 +01:00
Giuseppe Marazzita 7e2649efeb moduli sottocofano 2021-02-01 09:45:41 +01:00
Thermo_SIM 0ab280076f Merge commit '456481e65aa36f9dc8f91347cf077b0f54e857e3' into Build_Script 2020-12-16 16:43:57 +01:00
Thermo_SIM 456481e65a FIx Config Files for Simulator 2020-12-16 10:32:33 +01:00
Thermo_SIM f28cc72be0 FIx steps 2020-12-16 10:15:39 +01:00
Thermo_SIM 307303f99c Fix Build 2020-12-16 10:13:35 +01:00
Thermo_SIM 9980358636 Added feature fix 2020-12-16 10:09:21 +01:00
Thermo_SIM 58c1ef1788 Import from Active 2020-12-16 09:31:14 +01:00
Thermo_SIM fb2f6ac315 Fix mariaDB Database 2020-12-16 09:28:32 +01:00
Nicola 8315a632bf Fix riscaldi 2020-11-16 09:12:08 +01:00
Nicola 9b4119451f Fix selection thermocamera 2020-11-13 16:47:22 +01:00
Nicola 65c849315f Fix config 2020-11-13 15:37:38 +01:00
Nicola 28198b434f fixes 2020-11-13 15:36:56 +01:00
Nicola 7173eb749f Fix errors in production 2020-11-13 14:18:45 +01:00
373 changed files with 21636 additions and 5944 deletions
+6
View File
@@ -21,3 +21,9 @@ Output/
*.njsproj
/ConsoleApp1
/WindowsFormsApp1
!Thermo.Active/wwwroot/thermoprophet/colored/_last.jpg
Thermo.Active/wwwroot/thermoprophet/colored/*.jpg
!Thermo.Active/wwwroot/thermoprophet/original/_last.jpg
Thermo.Active/wwwroot/thermoprophet/original/*.jpg
!Thermo.Active/wwwroot/thermoprophet/data/_last.dat
Thermo.Active/wwwroot/thermoprophet/data/*.dat
+361
View File
@@ -0,0 +1,361 @@
#SCRIPT AUTO-BUILD
# - Author: Nicola Carminati
# - Version: 1.0
# - Date: 07/12/2020
#
#
#---------------------------------------------------------------------------------------------------------------------------
# recupera timestamp x logging
function Get-TimeStamp
{
return "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)
}
function getFileLog()
{
return "{0:yyy_MM_dd}_{0:HH_mm}" -f (Get-Date) + "_$pid.log"
}
function ExecuteLog($txt2log)
{
Write-Output "-------------------------------------------------------------------------------------------------------------------------------------------------" | Out-File -FilePath "$filelog" -Append
Write-Output "$(Get-TimeStamp) $txt2log" | Out-File -FilePath "$filelog" -Append
Invoke-Expression "$txt2log 2>&1 | Out-File -FilePath $filelog -Append"
if( $LASTEXITCODE -ne 0)
{
Write-Host "Error during cmmand: $txt2log" -ForegroundColor Red ;
Write-Host "Exit...." -ForegroundColor Red ;
Set-Location $PSScriptRoot
exit
}
}
function askConfirmorDie($message)
{
if ($silent -eq 0) {
while ($confirmation -ne 'y') {
$confirmation = Read-Host $message
if ($confirmation -eq 'n') {
Write-Host "As you like...." -ForegroundColor Red ;
Write-Host "Bye...." -ForegroundColor Red ;
Set-Location $PSScriptRoot
exit
}
}
}
}
function ExitOk()
{
Write-Host "Done!" -ForegroundColor Green
exit
}
function ExitERR($msg)
{
Write-Host "Error: $msg" -ForegroundColor Red
Write-Host "Bye...." -ForegroundColor Red ;
exit
}
function getAssemblyInfo($file)
{
$regex = "\[assembly\: AssemblyVersion\(""([\.\d+]*)""\)\]"
$row = ((Get-Content $file ) | Select-String $regex) | Out-String
$found1 = $row.IndexOf("""")
$found2 = $row.LastIndexOf("""")
RETURN $row.substring($found1+1, $found2 - $found1 -1)
}
function ChangeAssemblyVersion($file,$version)
{
$regex = "\[assembly\: AssemblyVersion\(""([\.\d+]*)""\)\]"
(Get-Content $file) -replace $regex, "[assembly: AssemblyVersion(""$version"")]" | Set-Content $file
}
function CheckNugetScm()
{
$url = 'https://repository.scmgroup.com/repository/mconnect-nuget/'
$ngt = nuget sources -Format Detailed | Out-String
$ind = $ngt.LastIndexOf($url)
if($ind -lt 0)
{
ExitERR("Nuget package Scm not found: $url. Add this Repository `r`n -USR: guest`r`n -PSW: mB6SQvj6`r`n")
}
}
function CheckSingleCommand($cmd)
{
if ($null -eq (Get-Command $cmd -ErrorAction SilentlyContinue))
{
ExitERR("Command ""$cmd"" not found in your PATH")
}
}
function CheckAllCommand()
{
CheckSingleCommand "git"
CheckSingleCommand "nuget"
CheckSingleCommand "devenv"
CheckSingleCommand "npm"
CheckSingleCommand "7z"
CheckSingleCommand "iscc"
}
#---------------------------------------------------------------------------------------------------------------------------
# Main Function
#Setup Variables
$outputdir = $PSScriptRoot + "\Thermo.Active\bin"
$outputServer = $outputdir + "\Thermo.Active.exe"
$outputClient = $outputdir + "\Client\Active_Client.exe"
$assemblyInfoFile = $PSScriptRoot + "\Thermo.Active\Properties\AssemblyInfo.cs"
$installerFilePath = $PSScriptRoot + "\Thermo.Active\SetupActive_Auto.iss"
$outBuildPath = "C:\CMS\AutoBuild\"
$branch = "master"
$version = ""
$branchNeedsToBeSetted = 1;
$versionNeedsToBeSetted = 1;
$zipOutput = 0;
$silent = 0;
$excludeClient = 0;
$excludeServer = 0;
$excludeFrontend = 0;
$excludeNodeUpdate = 0;
$excludeNugetUpdate = 0;
$excludeGit = 0;
$filelog = $PSScriptRoot + "\" + $filelog
$version = getAssemblyInfo $assemblyInfoFile
$outBuild = $outBuildPath + $version
$outLogs = $outBuildPath + "_Logs\"
#Setup Arguments
for ( $i = 0; $i -lt $args.count; $i++ ) {
if($args[$i] -eq "-branch")
{
if($args[$i+1].StartsWith("-"))
{
$err = $args[$i+1]
ExitERR "Invalid Branch Name"
}
else
{
$branch = $args[$i +1]
$i++;
$branchNeedsToBeSetted = 0;
}
}
elseif($args[$i] -eq "-version")
{
if($args[$i+1].StartsWith("-"))
{
$err = $args[$i+1]
ExitERR "Invalid Version Name"
}
else
{
$version = $args[$i +1]
$outBuild = $outBuildPath + $version
$i++;
$versionNeedsToBeSetted = 0;
}
}
elseif($args[$i] -eq "-silent")
{
$silent = 1;
}
elseif($args[$i] -eq "-portable")
{
$zipOutput = 1;
}
elseif($args[$i] -eq "-excludeclient")
{
$excludeClient = 1;
}
elseif($args[$i] -eq "-excludenodeupdate")
{
$excludeNodeUpdate = 1;
}
elseif($args[$i] -eq "-excludenugetupdate")
{
$excludeNugetUpdate = 1;
}
elseif($args[$i] -eq "-excludegit")
{
$excludeGit = 1;
}
elseif($args[$i] -eq "-excludeserver")
{
$excludeServer = 1;
}
elseif($args[$i] -eq "-excludefrontend")
{
$excludeFrontend = 1;
}
else
{
$err = $args[$i]
ExitERR "Invalid parameter: $err"
}
}
#Operations...
CheckAllCommand
Write-Host "CMS-Active Builder...." -ForegroundColor Green
$tempname = getFileLog
$filelog = $outLogs + $tempname
New-Item -ItemType "directory" -Path "$outLogs" -Force | Out-Null
Write-Host "Log File: " $filelog -ForegroundColor Green
if (($silent -eq 0) -and ($branchNeedsToBeSetted -eq 1)) {
$branch = git branch --show-current
$response = Read-Host "insert the name of the Git Branch [$branch]"
if ($response -ne '') {
$branch = $response
}
}
if (($silent -eq 0) -and ($versionNeedsToBeSetted -eq 1)) {
$response = Read-Host "insert the name of the New Version [$version]"
if ($response -ne '') {
$version = $response
$outBuild = $outBuildPath + $version
}
}
Write-Host "-------------------------------"
if ($excludeGit -ne 1) {
Write-Host "Git Feching"
ExecuteLog "git fetch --all"
Write-Host "Moving to branch '$branch'"
ExecuteLog "git checkout $branch"
$mail = git log -1 --pretty=format:'%ae'
$author = git log -1 --pretty=format:'%an'
Write-Host "This is your last commit message from '$author' [$mail]:"
git log --oneline -n 1 HEAD
askConfirmorDie "`r`nAre you sure do you want to continue [y,n]"
ExecuteLog "git checkout ."
Write-Host "Pulling"
ExecuteLog "git pull"
}
Write-Host "-------------------------------"
Write-Host "Clean the Solution"
ExecuteLog "devenv Thermo.Active.sln /Clean"
$outFile = Test-Path $outputdir
if($outFile -eq "True")
{
Remove-Item $outputdir -Recurse -Force
}
if ($excludeNugetUpdate -ne 1) {
Write-Host "Update the Nuget Packages"
CheckNugetScm
ExecuteLog "nuget restore Thermo.Active.sln "
}
if ($version -ne "") {
ExecuteLog "ChangeAssemblyVersion $assemblyInfoFile $version"
}
if ($excludeServer -ne 1) {
Write-Host "Build the Server APP"
ExecuteLog "devenv Thermo.Active.sln /Build Release /Projectconfig ""Release"" /project ""Thermo.Active\Thermo.Active.csproj"""
$newv = (Get-Item $outputServer).VersionInfo.FileVersion
$outBuild = $outBuildPath + $newv
$outFile = Test-Path $outputServer
if($outFile -ne "True")
{
ExitERR "Error while building Server APP (Exe not created)"
}
}
if ($excludeClient -ne 1) {
Write-Host "Build the Client APP"
ExecuteLog "devenv Thermo.Active.sln /Build Release /Projectconfig ""Release|x64"" /project ""Client2020\Client2020.csproj"""
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\bin\Client\x64"" -Destination ""$PSScriptRoot\tmp"" -Recurse"
ExecuteLog "Remove-Item -Path ""$PSScriptRoot\Thermo.Active\bin\Client\x64*"" -Force -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\tmp\*"" -Destination ""$PSScriptRoot\Thermo.Active\bin\Client"" -Recurse"
$outFile = Test-Path $outputClient
if($outFile -ne "True")
{
ExitERR "Error while building Client APP (Exe not created)"
}
}
Write-Host "-------------------------------"
if ($excludeFrontend -ne 1) {
Set-Location .\Thermo.Active\wwwroot\
if ($excludeNodeUpdate -ne 1) {
Write-Host "Update the Node dependencies"
ExecuteLog "npm install"
}
Write-Host "Build the Frontend"
ExecuteLog "npm run build"
Set-Location $PSScriptRoot
}
Write-Host "-------------------------------"
Write-Host "Create the output directory"
ExecuteLog "New-Item -ItemType ""directory"" -Path $outBuild -Force"
ExecuteLog "Remove-Item $outBuild -Recurse -Force"
if ($zipOutput -ne 1) {
Write-Host "-------------------------------"
Write-Host "Create the installer"
ExecuteLog "iscc ""$installerFilePath"""
ExecuteLog "Remove-Item -Path ""$PSScriptRoot\tmp"" -Force -Recurse"
}
if ($zipOutput -eq 1) {
Write-Host "-------------------------------"
Write-Host "Create the Zip file"
$outFile = Test-Path $outputdir
if($outFile -eq "True")
{
ExecuteLog "7z a ""$outBuild\Active_Portable_$version.zip"" $outputdir\* "
}
Write-Host "Create the view Folder"
ExecuteLog "New-Item -ItemType ""directory"" -Path view -Force"
ExecuteLog "Remove-Item -Path ""view\*"" -Force -Recurse"
Write-Host "Copy the files in View Folder"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\dist"" -Destination ""view"" -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\Scripts"" -Destination ""view"" -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\libs"" -Destination ""view"" -Recurse"
ExecuteLog "New-Item -ItemType ""directory"" -Path view\Assets\styles -Force"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\Assets\fonts"" -Destination ""view\Assets"" -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\Assets\images"" -Destination ""view\Assets"" -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\Assets\icons"" -Destination ""view\Assets"" -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\Assets\svg"" -Destination ""view\Assets"" -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\Assets\animations"" -Destination ""view\Assets"" -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\Assets\styles\style.css"" -Destination ""view\Assets\styles"" "
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\Assets\styles\style.css.map"" -Destination ""view\Assets\styles"" "
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\Assets\styles\iziToast.min.css"" -Destination ""view\Assets\styles"" "
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\index.html"" -Destination ""view"" -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\favicon.ico"" -Destination ""view"" -Recurse"
ExecuteLog "Copy-Item -Path ""$PSScriptRoot\Thermo.Active\wwwroot\config.development.json"" -Destination ""view"" -Recurse"
Write-Host "Copy view in Zip file"
$outFile = Test-Path ".\View"
if($outFile -eq "True")
{
ExecuteLog "7z a ""$outBuild\Active_Portable_$version.zip"" "".\view"" "
ExecuteLog "Remove-Item "".\View"" -Recurse -Force"
ExecuteLog "Remove-Item -Path ""$PSScriptRoot\tmp"" -Force -Recurse"
}
}
Write-Host "Version created: $version" -ForegroundColor Green
Write-Host "Output dir: $outBuild"
if ($silent -eq 0) {
explorer.exe $outBuild
}
ExitOk
@@ -26,6 +26,7 @@ namespace Client2020.BrowserTools
private static Dictionary<string, IntPtr> _editorOpened = new Dictionary<string, IntPtr>();
public static string RECENT_FOLDER_KEY = "RECENT";
private const string THERMO_RECIPE_PATH = @"C:\CMS\Recipes";
private const string THERMO_RECIPE_FOLDER_NAME = @"Recipes";
private const string THERMO_SCREENSHOT_PATH = @"C:\CMS\Screenshots";
private const string CMS_PATH = @"C:\CMS";
@@ -313,6 +314,32 @@ namespace Client2020.BrowserTools
return JsonConvert.SerializeObject("");
}
public string backupSubRecipes(String p, String folder)
{
if (!Directory.Exists(p))
{
return (JsonConvert.SerializeObject(new ErrorContainer("path_not_exists")));
}
folder = folder.Remove(0,THERMO_RECIPE_FOLDER_NAME.Length);
try
{
string finalPath = p + "Backup_Recipes_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");
Directory.CreateDirectory(finalPath);
this.CopyFilesRecursively(new DirectoryInfo(THERMO_RECIPE_PATH + folder), new DirectoryInfo(finalPath));
File.WriteAllText(finalPath + "\\data.json", JsonConvert.SerializeObject(new FolderBackup(folder)));
Process.Start(finalPath);
}
catch (Exception e)
{
return (JsonConvert.SerializeObject(new ErrorContainer("error_during_backup")));
}
return JsonConvert.SerializeObject("");
}
// Read all files in directory
public string getFileList(string p)
{
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
namespace Client2020.BrowserTools.Models
{
public class FolderBackup
{
public String AbsolutePath;
public FolderBackup(String Str)
{
this.AbsolutePath = Str;
}
}
}
+1
View File
@@ -76,6 +76,7 @@
<Compile Include="BrowserTools\Models\Drive.cs" />
<Compile Include="BrowserTools\Models\Errors\ErrorContainer.cs" />
<Compile Include="BrowserTools\Models\File.cs" />
<Compile Include="BrowserTools\Models\FolderBackup.cs" />
<Compile Include="BrowserTools\Models\InfoFile.cs" />
<Compile Include="BrowserTools\Models\JobToStep.cs" />
<Compile Include="BrowserTools\Models\MetadataToFile.cs" />
@@ -5,11 +5,11 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("THermo.Active.Thermocamera")]
[assembly: AssemblyTitle("Thermo.Active.Thermocamera")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("THermo.Active.Thermocamera")]
[assembly: AssemblyProduct("Thermo.Active.Thermocamera")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -7,8 +7,8 @@
<ProjectGuid>{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>THermo.Active.Thermocamera</RootNamespace>
<AssemblyName>THermo.Active.Thermocamera</AssemblyName>
<RootNamespace>Thermo.Active.Thermocamera</RootNamespace>
<AssemblyName>Thermo.Active.Thermocamera</AssemblyName>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
@@ -30,10 +30,31 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -43,7 +64,7 @@
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="ThermocameraComunicator.cs" />
<Compile Include="ThermoCamComunicator.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
@@ -51,6 +72,10 @@
<Project>{631375DD-06D3-49BB-8130-D9DDB34C429D}</Project>
<Name>Thermo.Active.Model</Name>
</ProjectReference>
<ProjectReference Include="..\Thermo.Cam.Utils\Thermo.Cam.Utils.csproj">
<Project>{e4587942-498b-4aa7-9cc9-9304eb2d05c8}</Project>
<Name>Thermo.Cam.Utils</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectView>ShowAllFiles</ProjectView>
</PropertyGroup>
</Project>
@@ -0,0 +1,145 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Thermo.Active.Model;
using Thermo.Active.Model.DTOModels.ThWarmers;
using Thermo.Cam.Utils;
namespace Thermo.Active.Thermocamera
{
public class ThermoCamComunicator
{
#region Protected Fields
/// <summary>
/// Classe gestione ThermoCam (oggetti Image, metodi processing...)
/// </summary>
protected TCContr TCamLive = new TCContr(BASE_PATH, BASE_PATH);
#endregion Protected Fields
#region Public Fields
public static readonly string BASE_PATH = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
#endregion Public Fields
#region Public Constructors
/// <summary>
/// Init classe
/// </summary>
/// <param name="isLive">Indica aabilitazione alive straming vs load dati storici</param>
public ThermoCamComunicator(bool isLive)
{
// init classe controllo camera
TCamLive = new TCContr($"{Constants.WEBSITE_DIRECTORY}\\{Constants.THERMO_DATA_FOLDER}", $"{BASE_PATH}\\{Constants.CONFIG_DIRECTORY}");
// avvio classe gestione thermocamera...
TCamLive.tryReloadConf();
if (isLive)
{
// SOLO PER IL LIVE --> cerco camera
TCamLive.discoveryCamera();
}
}
#endregion Public Constructors
#region Protected Methods
/// <summary>
/// Rilettura da file di tutti i dati
/// </summary>
/// <param name="fileName">Nome set file (originale + colorized + dati temperatura)</param>
/// <returns></returns>
protected bool loadData(string fileName)
{
bool done = false;
try
{
done = TCamLive.fileLoad(fileName);
}
catch
{ }
return done;
}
#endregion Protected Methods
#region Public Methods
/// <summary>
/// chiusura metodi legati a ThermoCam (discovery e connessione)
/// </summary>
public void Dispose()
{
TCamLive.stopDiscovery();
TCamLive.DisconnectCamera();
TCamLive.DisposeCamera();
}
/// <summary>
/// Restituisce lettura di tutti i punti richiesti (es centroidi riscaldi)
/// </summary>
/// <param name="setName">Nome dei dati da leggere, se "" --> live</param>
/// <param name="points">Dictionary id richiesta + punto (es canali + relativi punti medi come centro calcolato della resistenza di riferimento del canale)</param>
/// <param name="temp">Dizionario temperature come id + valore double in °C</param>
/// <returns></returns>
public bool readMultiTemperatures(string setName, Dictionary<int, ThermoPoint> points, out List<MeasurePoint> temp)
{
temp = new List<MeasurePoint>();
// converto la richiesta in una lista di punti di misura...
List<MeasurePoint> reqData = points.Select(item => new MeasurePoint()
{
Id = item.Key,
Coords = new System.Drawing.Point(item.Value.X, item.Value.Y),
Temperature = 0
}).ToList();
bool done = false;
if (string.IsNullOrEmpty(setName) || setName == "_live")
{
done = true;
}
else
{
// carico file vari...
done = TCamLive.fileLoad(setName);
}
try
{
temp = TCamLive.getPointsTemperature(false, reqData);
}
catch
{ }
// fatto!
return true;
}
/// <summary>
/// Richiesta di acquisizione immagine FLIR (restituisce nome con cui sono stati salvati file)
/// </summary>
/// <returns></returns>
public string takePicture()
{
string imgName = "";
try
{
// effettua chiamata x scattare immagine e SALVARE
TCamLive.takePicture();
TCamLive.calculateTarget();
imgName = TCamLive.fileSave();
}
catch
{ }
return imgName;
}
#endregion Public Methods
}
}
@@ -1,308 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Drawing;
using System.Globalization;
using System.IO.MemoryMappedFiles;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using Thermo.Active.Model.DTOModels.ThWarmers;
namespace Thermo.Active.Thermocamera
{
public class ThermocameraComunicator
{
#region Private Fields
private const int DIM_MMF = NUM_CHAR_MSG * 2 + 2;
private const string MMF_REQ = "CMS_MMF_REQ";
private const string MMF_RES = "CMS_MMF_RES";
private const int NUM_CHAR_MSG = 5000;
private const int REQ = 1;
private const int RES = 2;
private static ThermocameraComunicator _instance;
private MemoryMappedViewAccessor accessor;
private MemoryMappedViewAccessor accessorResp;
private MemoryMappedFile mmf;
private MemoryMappedFile mmfRes;
#endregion Private Fields
#region Protected Fields
/// <summary>
/// Generatore random
/// </summary>
protected Random rnd = new Random();
/// <summary>
/// Booleana dell'uso sw ext: true = Utilizzo vero sw lettura FLIR / false = simulazione SW RAND
/// </summary>
protected bool useTCamSw = true;
#endregion Protected Fields
#region Private Constructors
private ThermocameraComunicator()
{
mmf = MemoryMappedFile.CreateOrOpen(MMF_REQ, DIM_MMF);
mmfRes = MemoryMappedFile.CreateOrOpen(MMF_RES, DIM_MMF);
accessor = mmf.CreateViewAccessor();
accessorResp = mmfRes.CreateViewAccessor();
}
#endregion Private Constructors
#region Private Properties
/// <summary>
/// Simulazione valore tra 100 e 300 °C
/// </summary>
private float simVal
{
get
{
float answ = 100 + 200 * (float)rnd.NextDouble();
return answ;
}
}
#endregion Private Properties
#region Private Methods
private bool readCommand(MemoryMappedViewAccessor accessor, string command, int timeoutMS, out string resp)
{
resp = "";
byte response = 0;
int totalCycle = 0;
int sleepTime = 500;
byte[] bytesToRead = new byte[NUM_CHAR_MSG];
if (!accessor.CanRead)
return false;
//Read Pre-Command
while (response != RES)
{
totalCycle++;
accessor.Read(0, out response);
if (response != RES)
Thread.Sleep(sleepTime);
if (totalCycle * sleepTime > timeoutMS)
return false;
}
//Read Command
accessor.ReadArray(1, bytesToRead, 0, bytesToRead.Length);
//Elaborate String
string textRecieved = Encoding.UTF8.GetString(bytesToRead);
if (textRecieved == null)
return false;
string[] textSplitted = textRecieved.Replace("\0", string.Empty).Split(';');
if (textSplitted.Length < 2)
return false;
if (textSplitted[0] != command)
return false;
char[] bufferToClean = Enumerable.Repeat('\0', NUM_CHAR_MSG).ToArray();
accessor.WriteArray(0, bufferToClean, 0, bufferToClean.Length);
//Output
textSplitted = textSplitted.Skip(1).ToArray();
resp = String.Join(";", textSplitted);
return true;
}
private bool writeCommand(MemoryMappedViewAccessor accessor, string command)
{
char[] bufferToClean = Enumerable.Repeat('\0', NUM_CHAR_MSG).ToArray();
accessor.WriteArray(0, bufferToClean, 0, bufferToClean.Length);
char[] bufferToWrite = command.ToCharArray();
//Write Pre-Command
accessor.Write(0, REQ);
//Write Command
accessor.WriteArray(1, bufferToWrite, 0, bufferToWrite.Length);
return true;
}
#endregion Private Methods
#region Public Methods
/// <summary>
/// Swap x/y requesto from FLIR camera
/// </summary>
public bool flirSwapXY
{
get
{
bool answ = false;
bool.TryParse(ConfigurationManager.AppSettings["flirSwapXY"], out answ);
return answ;
}
}
public static ThermocameraComunicator getInstance()
{
if (_instance == null)
_instance = new ThermocameraComunicator();
return _instance;
}
/// <summary>
/// Restituisce lettura di tutti i punti (cetroidi) richeisti
/// </summary>
/// <param name="points">Dictionary dei canali e relativi punti medi (centro calcolato della resistenza di riferimento del canale)</param>
/// <param name="timeoutMS">Timeout in ms, 10000 std, da conf</param>
/// <param name="temp">°C</param>
/// <returns></returns>
public bool readMultiTemperatures(Dictionary<int, ThermoPoint> points, int timeoutMS, out Dictionary<int, double> temp)
{
temp = new Dictionary<int, double>();
// modalità impiego vero sw esterno
if (useTCamSw)
{
const string tempCommand = "GetTemperature";
string response;
string cmdRead = "";
foreach (var point in points)
{
if (flirSwapXY)
{
cmdRead += point.Value.Y + ";" + point.Value.X + ";";
}
else
{
cmdRead += point.Value.X + ";" + point.Value.Y + ";";
}
}
if (!writeCommand(accessor, tempCommand + ";" + cmdRead))
return false;
if (!readCommand(accessorResp, tempCommand, timeoutMS, out response))
return false;
string[] respSplitted = response.Replace(",", ".").Split(';');
int idxResp = 0;
foreach (var item in points)
{
string str = respSplitted[idxResp];
double tmp;
if (str.Trim() != "")
{
if (double.TryParse(str.Trim(), NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
temp.Add(item.Key, tmp);
else
return false;
}
idxResp++;
}
}
else
{
// simulo!
foreach (var item in points)
{
temp.Add(item.Key, simVal);
}
// attende 5 sec
Thread.Sleep(5000);
}
return true;
}
/// <summary>
/// Lettura temp singolo punto
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="timeoutMS"></param>
/// <param name="temp"></param>
/// <returns></returns>
public bool readTemperature(int x, int y, int timeoutMS, out float temp)
{
temp = 0f;
// modalità impiego vero sw esterno
if (useTCamSw)
{
const string tempCommand = "GetTemperature";
string response;
if (!writeCommand(accessor, tempCommand + ";" + x + ";" + y + ";"))
return false;
if (!readCommand(accessorResp, tempCommand, timeoutMS, out response))
return false;
response = response.TrimEnd(';');
if (!float.TryParse(response, NumberStyles.Float, CultureInfo.InvariantCulture, out temp))
return false;
}
else
{
// simulo!
temp = simVal;
// attende 5 sec
Thread.Sleep(5000);
}
return true;
}
public bool showWindow(int x, int y, int dimX, int dimY, int timeoutMS)
{
const string tempCommand = "ShowWindow";
string response;
if (!writeCommand(accessor, tempCommand + ";" + x + ";" + y + ";" + dimX + ";" + dimY + ";"))
return false;
if (!readCommand(accessorResp, tempCommand, timeoutMS, out response))
return false;
if (!response.StartsWith("1;"))
return false;
return true;
}
/// <summary>
/// Richiesta di scattare fotografia
/// </summary>
/// <param name="timeoutMS">attesa in ms, 10000 std, da conf</param>
/// <returns></returns>
public bool takePicture(int timeoutMS)
{
// modalità impiego vero sw esterno
if (useTCamSw)
{
const string tempCommand = "SetParameter_Integer";
string response;
if (!writeCommand(accessor, tempCommand + ";TAKE_IMAGE;"))
return false;
if (!readCommand(accessorResp, tempCommand, timeoutMS, out response))
return false;
if (!response.StartsWith("True;"))
return false;
}
else
{
// attende 5 sec
Thread.Sleep(5000);
}
return true;
}
#endregion Public Methods
}
}
@@ -79,8 +79,8 @@
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
+1 -1
View File
@@ -8,7 +8,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
@@ -14,7 +14,7 @@
<package id="System.IO.Pipelines" version="4.7.3" targetFramework="net462" />
<package id="System.Memory" version="4.5.4" targetFramework="net462" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net462" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.1" targetFramework="net462" />
<package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net462" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net462" />
<package id="System.Threading.Channels" version="4.7.1" targetFramework="net462" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="IOSetup">
<!-- Heads -->
<xs:complexType>
<xs:sequence>
<xs:element name="parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element name="id" type="xs:int"/>
<xs:element name="category" type="io_type" />
<xs:element name="bank" type="xs:string" />
<xs:element name="position" type="xs:string" />
<xs:element name="page" type="xs:string" />
<xs:element name="wire" type="xs:string" />
<xs:element name="profinet" type="xs:string" />
<xs:element name="disableForce" type ="xs:boolean" minOccurs="0" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Head Type -->
<xs:simpleType name="io_type" final="restriction">
<xs:restriction base="xs:string">
<xs:enumeration value="DI" />
<xs:enumeration value="DO" />
<xs:enumeration value="AI"/>
<xs:enumeration value="AO"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
@@ -308,6 +308,7 @@
"options_thermoregulator_9_setpoint": 0.0,
"options_thermoregulator_10_enabled": 0.0,
"options_thermoregulator_10_setpoint": 0.0
"extraction_main_drawing_enabled": 0.0
},
"ChannelSetpoints": {
"1": 0,
@@ -0,0 +1,31 @@
{
"MeasPoints": [],
"CameraAddress": "",
"CameraName": "Camera Emulator",
"DestPoints": {
"Coords": [
"0, 0",
"1500, 0",
"1500, 1200",
"0, 1200"
],
"curr": 0
},
"OrigPoints": {
"Coords": [
"0, 0",
"640, 0",
"640, 480",
"0, 480"
],
"curr": 4
},
"TargetRange": {
"Max": 60.0,
"Min": 0.0
},
"TargetSize": {
"X": 1500,
"Y": 1200
}
}
@@ -40,4 +40,9 @@
<allowExternalBrowser>true</allowExternalBrowser>
<ncNeeded>false</ncNeeded>
</users>
<thermoHood>
<enabled>true</enabled>
<allowExternalBrowser>true</allowExternalBrowser>
<ncNeeded>false</ncNeeded>
</thermoHood>
</areasConfig>
@@ -82,6 +82,16 @@
</xs:complexType>
</xs:element>
<xs:element name="thermoHood">
<xs:complexType>
<xs:all>
<xs:element name="enabled" type="xs:boolean" />
<xs:element name="allowExternalBrowser" type="xs:boolean" />
<xs:element name="ncNeeded" type="xs:boolean" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
+52 -34
View File
@@ -1,37 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
enabledWord:
bit 0 : Move Absolute [Ack]
bit 1 : Jog inc + [Ack]
bit 2 : Jog inc - [Ack]
bit 3 : Allinea [Ack]
bit 4 : Probe (Ack)
bit 5 : SetSlavePosition (Ack)
bit 6 : Azzera (Ack)
bit 7 - bit14: not used
bit15 : Target pos
Asse slave : 6
Asse master gantry con proxy: 56
Asse master gantry senza proxy: 2152
Asse singolo con proxy: 16
Asse singolo senza proxy: 2112
-->
<axes>
<axis id="1" name="KI_Asse_W1" type="LINEAR" enabled="true" />
<axis id="2" name="KI_Asse_W2" type="LINEAR" enabled="true" />
<axis id="3" name="KI_Asse_W3" type="LINEAR" enabled="false" />
<axis id="4" name="KI_Asse_W4" type="LINEAR" enabled="false" />
<axis id="5" name="KI_Asse_Z1" type="LINEAR" enabled="true" />
<axis id="6" name="KI_Asse_Z2" type="LINEAR" enabled="true" />
<axis id="7" name="KI_Asse_Z3" type="LINEAR" enabled="true" />
<axis id="8" name="KI_Asse_Z4" type="LINEAR" enabled="true" />
<axis id="9" name="KI_Asse_R1" type="LINEAR" enabled="true" />
<axis id="10" name="KI_Asse_R2" type="LINEAR" enabled="false" />
<axis id="11" name="KI_Asse_S1" type="LINEAR" enabled="true" />
<axis id="12" name="KI_Asse_S2" type="LINEAR" enabled="false" />
<axis id="13" name="KI_Asse_CZ1" type="LINEAR" enabled="true" />
<axis id="14" name="KI_Asse_CZ2" type="LINEAR" enabled="true" />
<axis id="15" name="KI_Asse_CZ3" type="LINEAR" enabled="true" />
<axis id="16" name="KI_Asse_CZ4" type="LINEAR" enabled="true" />
<axis id="17" name="KI_Asse_U1" type="LINEAR" enabled="true" />
<axis id="18" name="KI_Asse_U2" type="LINEAR" enabled="true" />
<axis id="19" name="KI_Asse_P" type="LINEAR" enabled="true" />
<axis id="20" name="KI_Asse_X" type="LINEAR" enabled="true" />
<axis id="21" name="KI_Asse_CX1" type="LINEAR" enabled="true" />
<axis id="22" name="KI_Asse_CX2" type="LINEAR" enabled="true" />
<axis id="23" name="KI_Asse_CY1" type="LINEAR" enabled="true" />
<axis id="24" name="KI_Asse_CY2" type="LINEAR" enabled="true" />
<axis id="25" name="KI_Asse_F11" type="LINEAR" enabled="true" />
<axis id="26" name="KI_Asse_F12" type="LINEAR" enabled="false" />
<axis id="27" name="KI_Asse_F21" type="LINEAR" enabled="true" />
<axis id="28" name="KI_Asse_F22" type="LINEAR" enabled="false" />
<axis id="29" name="KI_Asse_F31" type="LINEAR" enabled="true" />
<axis id="30" name="KI_Asse_F32" type="LINEAR" enabled="false" />
<axis id="31" name="KI_Asse_F41" type="LINEAR" enabled="true" />
<axis id="32" name="KI_Asse_F42" type="LINEAR" enabled="false" />
<axis id="33" name="KI_Asse_E" type="LINEAR" enabled="true" />
<axis id="34" name="KI_Asse_M" type="LINEAR" enabled="false" />
<axis id="1" name="W1" type="LINEAR" enabled="true" master="0" enabledWord="56" />
<axis id="2" name="W2" type="LINEAR" enabled="true" master="1" enabledWord="6" />
<axis id="3" name="W3" type="LINEAR" enabled="false" master="1" enabledWord="6" />
<axis id="4" name="W4" type="LINEAR" enabled="false" master="1" enabledWord="6" />
<axis id="5" name="Z1" type="LINEAR" enabled="true" master="0" enabledWord="56" />
<axis id="6" name="Z2" type="LINEAR" enabled="true" master="5" enabledWord="6" />
<axis id="7" name="Z3" type="LINEAR" enabled="true" master="5" enabledWord="6" />
<axis id="8" name="Z4" type="LINEAR" enabled="true" master="5" enabledWord="6" />
<axis id="9" name="R1" type="LINEAR" enabled="true" master="0" enabledWord="16" />
<axis id="10" name="R2" type="LINEAR" enabled="false" master="9" enabledWord="6" />
<axis id="11" name="S1" type="LINEAR" enabled="true" master="0" enabledWord="16" />
<axis id="12" name="S2" type="LINEAR" enabled="false" master="11" enabledWord="6" />
<axis id="13" name="CZ1" type="LINEAR" enabled="true" master="0" enabledWord="56" />
<axis id="14" name="CZ2" type="LINEAR" enabled="true" master="13" enabledWord="6" />
<axis id="15" name="CZ3" type="LINEAR" enabled="true" master="13" enabledWord="6" />
<axis id="16" name="CZ4" type="LINEAR" enabled="true" master="13" enabledWord="6" />
<axis id="17" name="U1" type="LINEAR" enabled="true" master="0" enabledWord="56" />
<axis id="18" name="U2" type="LINEAR" enabled="true" master="17" enabledWord="6" />
<axis id="19" name="P" type="LINEAR" enabled="true" master="0" enabledWord="16" />
<axis id="20" name="X" type="LINEAR" enabled="true" master="0" enabledWord="16" />
<axis id="21" name="CX1" type="LINEAR" enabled="true" master="0" enabledWord="2152" />
<axis id="22" name="CX2" type="LINEAR" enabled="true" master="21" enabledWord="6" />
<axis id="23" name="CY1" type="LINEAR" enabled="true" master="0" enabledWord="2152" />
<axis id="24" name="CY2" type="LINEAR" enabled="true" master="23" enabledWord="6" />
<axis id="25" name="F11" type="LINEAR" enabled="true" master="0" enabledWord="2112" />
<axis id="26" name="F12" type="LINEAR" enabled="false" master="25" enabledWord="6" />
<axis id="27" name="F21" type="LINEAR" enabled="true" master="0" enabledWord="2112" />
<axis id="28" name="F22" type="LINEAR" enabled="false" master="27" enabledWord="6" />
<axis id="29" name="F31" type="LINEAR" enabled="true" master="0" enabledWord="2112" />
<axis id="30" name="F32" type="LINEAR" enabled="false" master="29" enabledWord="6" />
<axis id="31" name="F41" type="LINEAR" enabled="true" master="0" enabledWord="2112" />
<axis id="32" name="F42" type="LINEAR" enabled="false" master="31" enabledWord="6" />
<axis id="33" name="E" type="LINEAR" enabled="true" master="0" enabledWord="16" />
<axis id="34" name="M" type="LINEAR" enabled="false" master="0" enabledWord="0" />
</axes>
@@ -6,7 +6,7 @@
<xs:element name="axis" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:complexContent>
<xs:extension base="axisType"/>
<xs:extension base="axisType" />
</xs:complexContent>
</xs:complexType>
</xs:element>
@@ -22,8 +22,12 @@
</xs:attribute>
<xs:attribute name="enabled" type="xs:boolean" use="required">
</xs:attribute>
<xs:attribute name="master" type="xs:integer" use="required">
</xs:attribute>
<xs:attribute name="enabledWord" type="xs:integer" use="required">
</xs:attribute>
</xs:complexType>
<xs:simpleType name="axType" final="restriction" >
<xs:simpleType name="axType" final="restriction">
<xs:restriction base="xs:string">
<xs:enumeration value="NA" />
<xs:enumeration value="LINEAR" />
@@ -3902,4 +3902,15 @@
<scaleFactor>1</scaleFactor>
<numDec>1</numDec>
</parameter>
<parameter>
<id>307</id>
<category>Extraction</category>
<subCategory_1>Main</subCategory_1>
<subCategory_2></subCategory_2>
<name>Drawing_Enabled</name>
<description>Abilitazione valvola imbutitura</description>
<format>boolean</format>
<scaleFactor>1</scaleFactor>
<numDec>1</numDec>
</parameter>
</recipe>
+13 -2
View File
@@ -88,7 +88,7 @@
<entry>
<key>loaderSuckersNumber</key>
<value>12</value>
</entry>
</entry>
<entry>
<key>ThermoCameraXpos</key>
<value>93</value>
@@ -105,6 +105,14 @@
<key>ThermoCameraYdim</key>
<value>1004</value>
</entry>
<entry>
<key>RangeTempMin</key>
<value>0</value>
</entry>
<entry>
<key>RangeTempMax</key>
<value>100</value>
</entry>
</additionalParameters>
<unitOfMeasures>
<unitOfMeasure id="0" value="" />
@@ -119,6 +127,8 @@
<sampling>
<thread name="alarms" value="200" />
<thread name="axis" value="200" />
<thread name="channelsIoFast" value="300" />
<thread name="channelsIoSlow" value="5000" />
<thread name="area" value="500" />
<thread name="confReq" value="2000" />
<thread name="expMan" value="30000" />
@@ -131,12 +141,13 @@
<thread name="prodInfo" value="1000" />
<thread name="prodPanel" value="500" />
<thread name="modules" value="200" />
<thread name="recipe" value="400" />
<thread name="recipe" value="4000" />
<thread name="scada" value="1000" />
<thread name="statusCommand" value="250" />
<thread name="FlirCamera" value="500" />
<thread name="userSK" value="250" />
<thread name="warmers" value="500" />
<thread name="watchdog" value="250" />
<thread name="stats" value="2000" />
</sampling>
</serverConfig>
@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<toolTable>
<options>
<family>true</family>
<multiTool>true</multiTool>
<magazinePosition>false</magazinePosition>
</options>
<fields>
<familyName>true</familyName>
<childId>true</childId>
<magazinePositionType>true</magazinePositionType>
</fields>
</toolTable>
@@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="toolTable">
<xs:complexType>
<xs:all>
<xs:element name="options">
<xs:complexType>
<xs:all>
<xs:element name="family" type="xs:boolean"></xs:element>
<xs:element name="multiTool" type="xs:boolean"></xs:element>
<xs:element name="magazinePosition" type="xs:boolean"></xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="fields">
<xs:complexType>
<xs:all>
<xs:element name="familyName" type="xs:boolean"></xs:element>
<xs:element name="childId" type="xs:boolean"></xs:element>
<xs:element name="magazinePositionType" type="xs:boolean"></xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
@@ -26,7 +26,7 @@
</softKey_procedure>
<softKey_procedure>
<active>false</active>
<active>true</active>
<category>2</category>
<operatorConfirmationNeeded>false</operatorConfirmationNeeded>
<plcId>3</plcId>
@@ -35,6 +35,7 @@
<lang langKey="it">Termoregolatori</lang>
</localizedNames>
<visible>true</visible>
<starred>true</starred>
<refCallParam>options_thermoregulator_enable</refCallParam>
<refCallLabel>options_thermoregulator_enable_button</refCallLabel>
</softKey_procedure>
@@ -101,7 +102,7 @@
<lang langKey="it">Riscaldi indietro</lang>
</localizedNames>
<visible>true</visible>
<starred>true</starred>
<starred>false</starred>
</softKey_procedure>
<softKey_procedure>
@@ -467,22 +468,44 @@
<refCallLabel>dash_setpoint_minus_button</refCallLabel>
</softKey_procedure>
<!--softKey_group>
<active>true</active>
<category>1</category>
<operatorConfirmationNeeded>false</operatorConfirmationNeeded>
<softKey_procedure>
<active>true</active>
<category>3</category>
<operatorConfirmationNeeded>true</operatorConfirmationNeeded>
<plcId>39</plcId>
<localizedNames>
<lang langKey="en">aaa:</lang>
<lang langKey="it">aaa</lang>
<lang langKey="en">Mould heating</lang>
<lang langKey="it">Riscaldo stampo</lang>
</localizedNames>
<subKeys>
<subKey active="true" plcId="21"> B </subKey>
<subKey active="true" plcId="22"> C </subKey>
</subKeys>
<visible>true</visible>
</softKey_group-->
<visible>true</visible>
</softKey_procedure>
<softKey_procedure>
<active>true</active>
<category>2</category>
<operatorConfirmationNeeded>true</operatorConfirmationNeeded>
<plcId>40</plcId>
<localizedNames>
<lang langKey="en">Frame X+Y</lang>
<lang langKey="it">Cornice X+Y</lang>
</localizedNames>
<visible>true</visible>
<refCallParam>dimensions_frame_setupall</refCallParam>
<refCallLabel>dimensions_frame_setupall_button</refCallLabel>
</softKey_procedure>
<softKey_procedure>
<active>true</active>
<category>2</category>
<operatorConfirmationNeeded>true</operatorConfirmationNeeded>
<plcId>41</plcId>
<localizedNames>
<lang langKey="en">Windowplate X+Y</lang>
<lang langKey="it">Piastrafinestra X+Y</lang>
</localizedNames>
<visible>true</visible>
<refCallParam>dimensions_plate_setupall</refCallParam>
<refCallLabel>dimensions_plate_setupall_button</refCallLabel>
</softKey_procedure>
</userSoftKeys>
+2
View File
@@ -47,6 +47,7 @@ namespace Thermo.Active.Config
public static AreasConfigModel ScadaConfig;
public static AreasConfigModel JobEditorConfig;
public static AreasConfigModel UsersConfig;
public static AreasConfigModel ThermoHoodConfig;
public static List<ScadaSchemaModel> ProductionScadaSchema = new List<ScadaSchemaModel>();
public static List<ScadaSchemaModel> ConfiguredScadaSchema = new List<ScadaSchemaModel>();
@@ -61,6 +62,7 @@ namespace Thermo.Active.Config
public static List<ThermoProdConfigModel> ThermoProdConfig;
public static List<RecipeConfigModel> RecipeConfig;
public static List<ModBlockConfigModel> ModBlockConfig;
public static List<IOConfigModel> IOConfig;
public static List<RiskResistModel> RiskResistConfig;
public static List<RiskChannelModel> RiskChannelConfig;
public static List<RiskBoardModel> RiskBoardConfig;
+299 -336
View File
@@ -83,278 +83,6 @@ namespace Thermo.Active.Config
return xmlConfigFile;
}
private static void ReadDataModel()
{
XDocument xmlConfigFile = GetXmlHandler(CONNECT_DATAMODEL_CONFIG_PATH);
XElement el = xmlConfigFile.Descendants("Machine").First();
CMSConnectEntry = new Dictionary<string, string>();
ElaborateDataModel(el, el.Name.LocalName, ref CMSConnectEntry);
CMSConnectDataModel = File.ReadAllText(CONNECT_DATAMODEL_CONFIG_PATH);
}
private static void ReadM156()
{
// Get Areas file handler
XDocument xmlConfigFile = GetXmlHandlerWithValidator(M156_CONFIG_SCHEMA_PATH, M156_CONFIG_PATH);
InputsOperatorConfig = xmlConfigFile
.Descendants("inputsOperator")
.Elements()
.Select(x => new InputOperatorConfigModel()
{
Id = Convert.ToInt32(x.Element("id").Value),
Messages = x.Element("title").Elements().ToDictionary( // Read localized names and convert into a dictionary
y => y.Attribute("langKey").Value, y => y.Value
),
Buttons = x.Element("buttons")?.Elements().ToDictionary( // Read buttons data and convert into a dictionary
y => Convert.ToByte(y.Element("value").Value),
y => y.Element("title").Elements().ToDictionary( // Read localized names and convert into a dictionary
z => z.Attribute("langKey").Value,
z => z.Value
)
),
Type = GetInputOperatoType(x.Name.ToString())
})
.ToList();
}
private static void ReadScadaFile()
{
DirectoryInfo d = new DirectoryInfo(SCADA_DIRECTORY);
FileInfo[] files = d.GetFiles("*.xml");
int i = 1;
// Cycle inside xml files
foreach (var file in files)
{
validateScada(SCADA_PAGES_SCHEMA_PATH, SCADA_DIRECTORY + file.Name);
StreamReader sr = new StreamReader(SCADA_DIRECTORY + file.Name);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ScadaSchemaModel));
ScadaSchemaModel schema = xmlSerializer.Deserialize(sr) as ScadaSchemaModel;
// Setup incremental ids
schema.Id = i++;
var name = Path.GetFileNameWithoutExtension(file.Name);
schema.BackgroundImage = GetImageBase64String(SCADA_DIRECTORY + name, schema.BackgroundImage);
schema.Layers = schema.Layers.Select(x => new ScadaSchemaLayerModel()
{
Id = i++,
Buttons = x.Buttons.Select(y => { y.Id = i++; return y; }).ToArray(),
Images = x.Images.Select(y =>
{
y.Id = i++;
y.Name = GetImageBase64String(SCADA_DIRECTORY + name, y.Name);
return y;
})
.ToArray(),
Labels = x.Labels.Select(y => { y.Id = i++; return y; }).ToArray(),
ProgressBars = x.ProgressBars.Select(y => { y.Id = i++; return y; }).ToArray(),
Inputs = x.Inputs.Select(y => { y.Id = i++; return y; }).ToArray()
})
.ToArray();
if (schema.IsInProductionPage == true)
ProductionScadaSchema.Add(schema);
else
ConfiguredScadaSchema.Add(schema);
}
}
private static void SetAreaValue(ref AreasConfigModel areasConfig, XElement element)
{
// Set area model with xml data
areasConfig = new AreasConfigModel()
{
Name = element.Name.ToString(),
Enabled = Convert.ToBoolean(element.Element("enabled").Value),
AllowExternalBrowser = Convert.ToBoolean(element.Element("allowExternalBrowser").Value),
NcNeeded = Convert.ToBoolean(element.Element("ncNeeded").Value)
};
}
private static void SetAreaValueByName(XElement element)
{
// Choose which area to be set
switch (element.Name.ToString())
{
case AREAS.PRODUCTION_KEY:
SetAreaValue(ref ProductionConfig, element);
break;
case AREAS.REPORT_KEY:
SetAreaValue(ref ReportConfig, element);
break;
case AREAS.ALARMS_KEY:
SetAreaValue(ref AlarmsConfig, element);
break;
case AREAS.MAINTENANCE_KEY:
SetAreaValue(ref MaintenanceConfig, element);
break;
case AREAS.UTILITIES_KEY:
SetAreaValue(ref UtilitiesConfig, element);
break;
case AREAS.SCADA_KEY:
SetAreaValue(ref ScadaConfig, element);
break;
case AREAS.JOBEDITOR_KEY:
SetAreaValue(ref JobEditorConfig, element);
break;
case AREAS.USERS_KEY:
SetAreaValue(ref UsersConfig, element);
break;
}
}
private static void validateScada(string configSchemaFilePath, string configFilePath)
{
// Create new instance
XmlSchemaSet readerSettings = new XmlSchemaSet();
// Add Schema from Assembly
Assembly myAssembly = Assembly.GetExecutingAssembly();
using (Stream schemaStream = myAssembly.GetManifestResourceStream(configSchemaFilePath))
{
using (XmlReader schemaReader = XmlReader.Create(schemaStream))
{
readerSettings.Add(null, schemaReader);
}
}
actualFileName = Path.GetFileName(configFilePath);
// Open file reader
XDocument xmlConfigFile = XDocument.Load(configFilePath);
// Validate file
xmlConfigFile.Validate(readerSettings, ValidationHandler);
}
private static void ValidationHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
ExceptionManager.ManageError(ERROR_LEVEL.WARNING, e.Message, true);
}
else if (e.Severity == XmlSeverityType.Error)
{
ExceptionManager.ManageError(ERROR_LEVEL.FATAL,
// "Error while reading file: " + e.Exception.SourceUri +
"Error while reading XML file \"" + actualFileName + "\" \n\n" + e.Message,
true
);
}
}
#endregion Private Methods
#region Public Methods
public static bool CheckAreaStatus(string areaName)
{ // Get Area status ( enabled field) by name
switch (areaName)
{
case AREAS.PRODUCTION_KEY:
return ProductionConfig.Enabled;
case AREAS.REPORT_KEY:
return ProductionConfig.Enabled;
case AREAS.ALARMS_KEY:
return AlarmsConfig.Enabled;
case AREAS.MAINTENANCE_KEY:
return MaintenanceConfig.Enabled;
case AREAS.UTILITIES_KEY:
return UtilitiesConfig.Enabled;
case AREAS.SCADA_KEY:
return ScadaConfig.Enabled;
case AREAS.JOBEDITOR_KEY:
return ScadaConfig.Enabled;
case AREAS.GENERAL_KEY:
case AREAS.UNDER_HOOD:
return true;
default:
return false;
}
}
public static string GetInputOperatoType(string tagName)
{
switch (tagName)
{
case "modalValue":
return "REAL";
case "buttonsListModal":
return "MULTIPLE_BUTTONS";
case "showValModal":
return "SHOW_VAL";
case "simpleModal":
return "MODAL";
default:
return "REAL";
}
}
public static void ReadStartupConfig()
{
try
{
ReadServerConfig();
ReadAreaConfig();
ReadMaintenancesConfig();
ReadNcSoftKeys();
ReadUserSoftKeysConfig();
ReadAlarmsConfig();
ReadHeadsConfig();
ReadThermoProdConfig();
ReadRecipeConfig();
ReadModBlockConfig();
ReadRiskConfig();
ReadAxesConfig();
ReadCMSConnectConfig();
ReadMacros();
ReadScadaFile();
ReadM156();
ReadDataModel();
}
catch (XmlException ex)
{
ExceptionManager.ManageError(ERROR_LEVEL.FATAL,
"Error while reading file: " + ex.SourceUri +
"\n Error: " + ex.Message,
true
);
}
catch (Exception ex)
{
var message = ex.Message;
if (ex.InnerException != null)
message += "\n" + ex.InnerException.Message;
ExceptionManager.ManageError(ERROR_LEVEL.FATAL, message, true);
}
}
#endregion Public Methods
#region Read config from file from configuration
private static void ReadAlarmsConfig()
{
XDocument xmlConfigFile = GetXmlHandlerWithValidator(ALARMS_CONFIG_SCHEMA_PATH, ALARMS_CONFIG_PATH);
@@ -399,7 +127,10 @@ namespace Thermo.Active.Config
{
Id = Convert.ToInt16(x.Attribute("id").Value),
Name = x.Attribute("name").Value,
Type = GetTActAxes_Type(x.Attribute("type").Value)
MasterId = Convert.ToInt16(x.Attribute("master").Value),
EnabledWord = Convert.ToInt16(x.Attribute("enabledWord").Value),
Type = GetTActAxes_Type(x.Attribute("type").Value),
IsVisible = Convert.ToBoolean(x.Attribute("enabled").Value)
})
.ToList();
}
@@ -446,6 +177,15 @@ namespace Thermo.Active.Config
CmsConnectConfig.Gateway = tempGatewayConfigModel;
}
private static void ReadDataModel()
{
XDocument xmlConfigFile = GetXmlHandler(CONNECT_DATAMODEL_CONFIG_PATH);
XElement el = xmlConfigFile.Descendants("Machine").First();
CMSConnectEntry = new Dictionary<string, string>();
ElaborateDataModel(el, el.Name.LocalName, ref CMSConnectEntry);
CMSConnectDataModel = File.ReadAllText(CONNECT_DATAMODEL_CONFIG_PATH);
}
private static void ReadHeadsConfig()
{
XDocument xmlConfigFile = GetXmlHandlerWithValidator(HEADS_CONFIG_SCHEMA_PATH, HEADS_CONFIG_PATH);
@@ -469,6 +209,56 @@ namespace Thermo.Active.Config
.ToList();
}
/// <summary>
/// IO config setup from file
/// </summary>
private static void ReadIOConfig()
{
XDocument xmlConfigFile = GetXmlHandlerWithValidator(IO_CONFIG_SCHEMA_PATH, IO_CONFIG_PATH);
// Read head config from XML file
IOConfig = xmlConfigFile
.Root
.Elements()
.Select(x => new IOConfigModel()
{
Id = Convert.ToInt16(x.Element("id").Value),
Category = GetTActIO_Type(x.Element("category").Value),
Bank = x.Element("bank") != null ? x.Element("bank").Value : "0",
Position = x.Element("position") != null ? x.Element("position").Value : "0",
Page = x.Element("page") != null ? x.Element("page").Value : "",
Wire = x.Element("wire") != null ? x.Element("wire").Value : "",
Profinet = x.Element("profinet") != null ? x.Element("profinet").Value : "",
DisableForce = x.Element("disableForce") != null ? Convert.ToBoolean(x.Element("disableForce").Value) : false
})
.ToList();
}
private static void ReadM156()
{
// Get Areas file handler
XDocument xmlConfigFile = GetXmlHandlerWithValidator(M156_CONFIG_SCHEMA_PATH, M156_CONFIG_PATH);
InputsOperatorConfig = xmlConfigFile
.Descendants("inputsOperator")
.Elements()
.Select(x => new InputOperatorConfigModel()
{
Id = Convert.ToInt32(x.Element("id").Value),
Messages = x.Element("title").Elements().ToDictionary( // Read localized names and convert into a dictionary
y => y.Attribute("langKey").Value, y => y.Value
),
Buttons = x.Element("buttons")?.Elements().ToDictionary( // Read buttons data and convert into a dictionary
y => Convert.ToByte(y.Element("value").Value),
y => y.Element("title").Elements().ToDictionary( // Read localized names and convert into a dictionary
z => z.Attribute("langKey").Value,
z => z.Value
)
),
Type = GetInputOperatoType(x.Name.ToString())
})
.ToList();
}
/// <summary>
/// Module config setup from file
/// </summary>
@@ -586,7 +376,8 @@ namespace Thermo.Active.Config
{
Canale = Convert.ToInt16(y.Attribute("canale").Value),
Riga = Convert.ToInt16(y.Attribute("riga").Value),
Tipo = Convert.ToInt16(y.Attribute("tipo").Value)
Tipo = Convert.ToInt16(y.Attribute("tipo").Value),
IdGruppo = Convert.ToInt16(y.Attribute("idGruppo").Value),
}
)
.ToList()
@@ -694,7 +485,8 @@ namespace Thermo.Active.Config
Column = numCol,
IdChannel = resistenza.Canale,
Dimension = riferimento.Dimensione,
IdReflector = riflettore.Tipo
IdReflector = riflettore.Tipo,
IdGroup = resistenza.IdGruppo,
}); ;
maxRow = resistenza.Riga > maxRow ? resistenza.Riga : maxRow;
}
@@ -766,73 +558,51 @@ namespace Thermo.Active.Config
}
}
}
}
int zero = 0;
#if false
foreach (var currResist in listResist.OrderBy(x => x.Row).OrderBy(x => x.Column))
private static void ReadScadaFile()
{
DirectoryInfo d = new DirectoryInfo(SCADA_DIRECTORY);
FileInfo[] files = d.GetFiles("*.xml");
int i = 1;
// Cycle inside xml files
foreach (var file in files)
{
// se cambio riga --> mi metto a metà della prima cella
if (currResist.Row != currRow)
{
currX = (currResist.Dimension * resistSizeX) / 2;
currRow = currResist.Row;
}
else
{
// calcolo coordinata X CumSum
currX += (currResist.Dimension * resistSizeX);
}
//// reset distanza
//actDist = warmerPlanSizeX + warmerPlanSizeY;
//minDist = warmerPlanSizeX + warmerPlanSizeY;
validateScada(SCADA_PAGES_SCHEMA_PATH, SCADA_DIRECTORY + file.Name);
// tutti i calcoli in coordinate mm del riscaldo
punto = new ThermoPoint() { X = (int)currX, Y = currResist.Row * resistSizeY + resistSizeY / 2 };
puntoFlirImg = new ThermoPoint();
actDist = ThermoPoint.distance(punto, centro);
// cerco i dati del canale attuale...
var currChannel = RiskChannelConfig.FirstOrDefault(x => x.IdChannel == currResist.IdChannel);
if (currChannel.refPosDistance > actDist)
{
// riscalo il punto per la dimensione della FLIR
puntoFlirImg.X = punto.X * flirImgX / warmerPlanSizeX;
puntoFlirImg.Y = punto.Y * flirImgY / warmerPlanSizeY;
currChannel.refPos = puntoFlirImg;
currChannel.refPosDistance = actDist;
}
}
#endif
StreamReader sr = new StreamReader(SCADA_DIRECTORY + file.Name);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ScadaSchemaModel));
ScadaSchemaModel schema = xmlSerializer.Deserialize(sr) as ScadaSchemaModel;
#if false
foreach (var currChannel in listChSup)
{
// reset distanza
actDist = warmerPlanSizeX + warmerPlanSizeY;
minDist = warmerPlanSizeX + warmerPlanSizeY;
// recupero resistenze
var currResist = RiskResistConfig.Where(x => x.IdChannel == currChannel.IdChannel);
// ciclo x trovare minimo
foreach (var resist in currResist)
// Setup incremental ids
schema.Id = i++;
var name = Path.GetFileNameWithoutExtension(file.Name);
schema.BackgroundImage = GetImageBase64String(SCADA_DIRECTORY + name, schema.BackgroundImage);
schema.Layers = schema.Layers.Select(x => new ScadaSchemaLayerModel()
{
// tutti i calcoli in coordinate mm del riscaldo
punto = new ThermoPoint() { X = resist.Column * resistSizeX + resistSizeX / 2, Y = resist.Row * resistSizeY + resistSizeY / 2 };
puntoFlirImg = new ThermoPoint();
actDist = ThermoPoint.distance(punto, centro);
if (actDist < minDist)
Id = i++,
Buttons = x.Buttons.Select(y => { y.Id = i++; return y; }).ToArray(),
Images = x.Images.Select(y =>
{
// riscalo il punto per la dimensione della FLIR
puntoFlirImg.X = punto.X * flirImgX / warmerPlanSizeX;
puntoFlirImg.Y = punto.Y * flirImgY / warmerPlanSizeY;
//// OLD coordinate in mm
//currChannel.refPos = punto;
// aggiorno conf channels con coord in punti FLIR
currChannel.refPos = puntoFlirImg;
// riporto minimo aggiornato
minDist = actDist;
}
}
y.Id = i++;
y.Name = GetImageBase64String(SCADA_DIRECTORY + name, y.Name);
return y;
})
.ToArray(),
Labels = x.Labels.Select(y => { y.Id = i++; return y; }).ToArray(),
ProgressBars = x.ProgressBars.Select(y => { y.Id = i++; return y; }).ToArray(),
Inputs = x.Inputs.Select(y => { y.Id = i++; return y; }).ToArray()
})
.ToArray();
if (schema.IsInProductionPage == true)
ProductionScadaSchema.Add(schema);
else
ConfiguredScadaSchema.Add(schema);
}
#endif
}
/// <summary>
@@ -898,6 +668,104 @@ namespace Thermo.Active.Config
.ToList();
}
private static void SetAreaValue(ref AreasConfigModel areasConfig, XElement element)
{
// Set area model with xml data
areasConfig = new AreasConfigModel()
{
Name = element.Name.ToString(),
Enabled = Convert.ToBoolean(element.Element("enabled").Value),
AllowExternalBrowser = Convert.ToBoolean(element.Element("allowExternalBrowser").Value),
NcNeeded = Convert.ToBoolean(element.Element("ncNeeded").Value)
};
}
private static void SetAreaValueByName(XElement element)
{
// Choose which area to be set
switch (element.Name.ToString())
{
case AREAS.PRODUCTION_KEY:
SetAreaValue(ref ProductionConfig, element);
break;
case AREAS.REPORT_KEY:
SetAreaValue(ref ReportConfig, element);
break;
case AREAS.ALARMS_KEY:
SetAreaValue(ref AlarmsConfig, element);
break;
case AREAS.MAINTENANCE_KEY:
SetAreaValue(ref MaintenanceConfig, element);
break;
case AREAS.UTILITIES_KEY:
SetAreaValue(ref UtilitiesConfig, element);
break;
case AREAS.SCADA_KEY:
SetAreaValue(ref ScadaConfig, element);
break;
case AREAS.JOBEDITOR_KEY:
SetAreaValue(ref JobEditorConfig, element);
break;
case AREAS.USERS_KEY:
SetAreaValue(ref UsersConfig, element);
break;
case AREAS.THERMO_HOOD_KEY:
SetAreaValue(ref ThermoHoodConfig, element);
break;
}
}
private static void validateScada(string configSchemaFilePath, string configFilePath)
{
// Create new instance
XmlSchemaSet readerSettings = new XmlSchemaSet();
// Add Schema from Assembly
Assembly myAssembly = Assembly.GetExecutingAssembly();
using (Stream schemaStream = myAssembly.GetManifestResourceStream(configSchemaFilePath))
{
using (XmlReader schemaReader = XmlReader.Create(schemaStream))
{
readerSettings.Add(null, schemaReader);
}
}
actualFileName = Path.GetFileName(configFilePath);
// Open file reader
XDocument xmlConfigFile = XDocument.Load(configFilePath);
// Validate file
xmlConfigFile.Validate(readerSettings, ValidationHandler);
}
private static void ValidationHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
ExceptionManager.ManageError(ERROR_LEVEL.WARNING, e.Message, true);
}
else if (e.Severity == XmlSeverityType.Error)
{
ExceptionManager.ManageError(ERROR_LEVEL.FATAL,
// "Error while reading file: " + e.Exception.SourceUri +
"Error while reading XML file \"" + actualFileName + "\" \n\n" + e.Message,
true
);
}
}
#endregion Private Methods
#region Public Methods
public static string CalculateHash(string filename)
{
using (var sha = SHA1.Create())
@@ -910,6 +778,61 @@ namespace Thermo.Active.Config
}
}
public static bool CheckAreaStatus(string areaName)
{ // Get Area status ( enabled field) by name
switch (areaName)
{
case AREAS.PRODUCTION_KEY:
return ProductionConfig.Enabled;
case AREAS.REPORT_KEY:
return ProductionConfig.Enabled;
case AREAS.ALARMS_KEY:
return AlarmsConfig.Enabled;
case AREAS.MAINTENANCE_KEY:
return MaintenanceConfig.Enabled;
case AREAS.UTILITIES_KEY:
return UtilitiesConfig.Enabled;
case AREAS.SCADA_KEY:
return ScadaConfig.Enabled;
case AREAS.JOBEDITOR_KEY:
return ScadaConfig.Enabled;
case AREAS.GENERAL_KEY:
case AREAS.UNDER_HOOD:
return true;
default:
return false;
}
}
public static string GetInputOperatoType(string tagName)
{
switch (tagName)
{
case "modalValue":
return "REAL";
case "buttonsListModal":
return "MULTIPLE_BUTTONS";
case "showValModal":
return "SHOW_VAL";
case "simpleModal":
return "MODAL";
default:
return "REAL";
}
}
public static void ReadAssistanceConfig()
{
//Read Standard CMS Configuration
@@ -1150,6 +1073,46 @@ namespace Thermo.Active.Config
.ToDictionary(x => x.Key, x => x.Value);
}
#endregion Read config from file from configuration
public static void ReadStartupConfig()
{
try
{
ReadServerConfig();
ReadAreaConfig();
ReadMaintenancesConfig();
ReadNcSoftKeys();
ReadUserSoftKeysConfig();
ReadAlarmsConfig();
ReadHeadsConfig();
ReadThermoProdConfig();
ReadRecipeConfig();
ReadModBlockConfig();
ReadIOConfig();
ReadRiskConfig();
ReadAxesConfig();
ReadCMSConnectConfig();
ReadMacros();
ReadScadaFile();
ReadM156();
ReadDataModel();
}
catch (XmlException ex)
{
ExceptionManager.ManageError(ERROR_LEVEL.FATAL,
"Error while reading file: " + ex.SourceUri +
"\n Error: " + ex.Message,
true
);
}
catch (Exception ex)
{
var message = ex.Message;
if (ex.InnerException != null)
message += "\n" + ex.InnerException.Message;
ExceptionManager.ManageError(ERROR_LEVEL.FATAL, message, true);
}
}
#endregion Public Methods
}
}
@@ -65,6 +65,9 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ServerConfig.cs" />
<Compile Include="ServerConfigController.cs" />
<Content Include="Config\IOConfig.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\thermoProdConfig.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
@@ -215,6 +218,10 @@
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="Config\IOConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<None Include="Config\Recipes\template.tpl">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
@@ -222,6 +229,9 @@
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<None Include="Config\ThermoConf.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="packages.config" />
<None Include="Recipes\testa.rcp">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@@ -31,6 +31,27 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
@@ -89,6 +110,10 @@
<Project>{cbeb631b-abfa-4042-9779-c0060b0dfefe}</Project>
<Name>Thermo.Active.Utils</Name>
</ProjectReference>
<ProjectReference Include="..\Thermo.Cam.Utils\Thermo.Cam.Utils.csproj">
<Project>{E4587942-498B-4AA7-9CC9-9304EB2D05C8}</Project>
<Name>Thermo.Cam.Utils</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
+328 -247
View File
@@ -21,7 +21,6 @@ using Thermo.Active.Model.DTOModels.ThProd;
using Thermo.Active.Model.DTOModels.ThRecipe;
using Thermo.Active.Model.DTOModels.ThWarmers;
using Thermo.Active.NC;
using Thermo.Active.Thermocamera;
using Thermo.Active.Utils;
using static CMS_CORE_Library.Models.DataStructures;
using static Thermo.Active.Config.ServerConfig;
@@ -30,6 +29,9 @@ using static Thermo.Active.Utils.ExceptionManager;
using System.Windows;
using System.Drawing;
using System.Configuration;
using Thermo.Active.Model.DTOModels.ThIO;
using Thermo.Active.Thermocamera;
public static class ThreadsFunctions
{
@@ -50,8 +52,109 @@ public static class ThreadsFunctions
#endregion Public Fields
#region Internal Properties
/// <summary>
/// Swap x/y requesto from FLIR camera
/// </summary>
internal static bool cacheWarmers
{
get
{
bool answ = false;
bool.TryParse(ConfigurationManager.AppSettings["cacheWarmers"], out answ);
return answ;
}
}
#endregion Internal Properties
#region Private Methods
private static int CalcSleepTime(int maxSleep, int execTime)
{
int sleep = 0;
// Check if the execution time is greater than the half of the max sleep time
if (maxSleep - execTime < maxSleep / 2)
{
sleep = maxSleep;
}
else
{
sleep = maxSleep - execTime;
}
return sleep;
}
private static bool ClientIsRunning()
{
Process[] p = Process.GetProcessesByName(CLIENT_EXE_NAME_NOEXT);
foreach (Process pr in p)
{
if (pr.MainWindowHandle != IntPtr.Zero)
{
ShowWindow(pr.MainWindowHandle, 9);
SetForegroundWindow(pr.MainWindowHandle);
return true;
}
}
return false;
}
private static void clientProcess()
{
string CMSClientPath = "";
// Check if the system is 64/32 bit
if (Environment.Is64BitOperatingSystem && File.Exists(CLIENT_PATH_64))
CMSClientPath = CLIENT_PATH_64;
else if (File.Exists(CLIENT_PATH_86))
CMSClientPath = CLIENT_PATH_86;
if (!String.IsNullOrEmpty(CMSClientPath))
{
Process pr = Process.Start(CMSClientPath, null);
if (ServerStartupConfig.AutoOpenCmsClient)
{
pr.WaitForExit();
MessageServices.Current.Publish(SEND_STOP_SERVER);
}
}
}
private static Dictionary<string, string> GetPlcAlarmsTranslations(string language)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
Dictionary<string, string> returnValue = new Dictionary<string, string>();
Dictionary<int, string> messages = new Dictionary<int, string>();
// Read data from CN
ncAdapter.numericalControl.NC_GetTranslatedPlcMessages(language, ref messages); // Avoid checking error because in the worst case "messages" is empty
// Id start from 1
for (int i = 1; i <= 1024; i++)
{
// Get configurated alarms
var tmpAlarmConfig = InitialAlarmsConfig.Where(x => x.PlcId == i).FirstOrDefault();
// Default string
string message = string.Format(NOT_CONFIGURATED_ALARM_MESSAGE, i);
// If is configurated
if (tmpAlarmConfig != null)
{
// Find translated string
message = messages.Where(x => x.Key == tmpAlarmConfig.AlarmId).FirstOrDefault().Value;
if (message == null)
message = string.Format(NOT_FOUND_ALARM_MESSAGE, i);
}
// Add to dictionary
returnValue.Add(i.ToString("D6") + "|900", message);
}
return returnValue;
}
}
/// <summary>
/// restituisce il periodo di campionamento SE configurato, altrimenti 1000 ms
/// </summary>
@@ -67,9 +170,120 @@ public static class ThreadsFunctions
return answ;
}
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private static void StatReset()
{
foreach (var value in Counter)
{
Timers[value.Key] = 0;
Counter[value.Key] = 0;
}
}
private static void TryNcConnection()
{
// Stop all the NC threads
ThreadsHandler.Stop();
StatReset();
NcAdapter ncAdapter = new NcAdapter();
CmsError libraryError = NO_ERROR;
// Run loop until NC is connected
while (!ncAdapter.numericalControl.NC_IsConnected())
{
// Try reconnection
libraryError = ncAdapter.Connect();
if (libraryError.errorCode == CMS_ERROR_CODES.SIEMENS_ENVIRONMENT_NOT_FOUND || libraryError.errorCode == CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING || libraryError.errorCode == CMS_ERROR_CODES.OSAI_TT_FOLDER_NOT_FOUND)
ManageLibraryError(libraryError);
else if (libraryError.errorCode != CMS_ERROR_CODES.OK)
{
ncAdapter.Dispose();
}
// Send status to UI
MessageServices.Current.Publish(SEND_NC_STATUS_UI, null, ncAdapter.numericalControl.NC_IsConnected());
// Send status to signalr
MessageServices.Current.Publish(SEND_NC_STATUS, null, ncAdapter.numericalControl.NC_IsConnected());
Thread.Sleep(1000);
}
if (!libraryError.IsError())
{
if (ServerStartupConfig.AutoOpenCmsClient)
StartCMSClient();
// Start/Restart NC threads
ThreadsHandler.StartWorkers();
reconnectionIsRunning = false;
}
}
#endregion Private Methods
#region Functions
#region Internal Methods
internal static void StatThread()
{
int samplePeriod = samplMsec("stats") > 0 ? samplMsec("stats") : 1000;
while (true)
{
long totTime = 0;
foreach (var value in Counter)
{
if (ThreadsHandler.RunningThreadStatus.ContainsKey(value.Key) && Counter[value.Key] != 0)
{
totTime += Timers[value.Key];
ThreadsHandler.RunningThreadStatus[value.Key] = $"{((double)Timers[value.Key] / samplePeriod):P1} | {(Timers[value.Key] / Counter[value.Key])} ms x {Counter[value.Key]}";
Timers[value.Key] = 0;
Counter[value.Key] = 0;
}
}
// aggiungo totale
string grandTotal = $"{((double)totTime / samplePeriod):P1} | {totTime} ms";
if (ThreadsHandler.RunningThreadStatus.ContainsKey(" TOTAL"))
{
ThreadsHandler.RunningThreadStatus[" TOTAL"] = grandTotal;
}
else
{
ThreadsHandler.RunningThreadStatus.Add(" TOTAL", grandTotal);
}
MessageServices.Current.Publish(SEND_THREADS_STATUS, null, ThreadsHandler.RunningThreadStatus);
Thread.Sleep(samplePeriod);
}
}
internal static void UpdateStat(string functionName, long timer)
{
if (!Timers.ContainsKey(functionName))
Timers.TryAdd(functionName, timer);
else
Timers[functionName] += timer;
if (!Counter.ContainsKey(functionName))
Counter.TryAdd(functionName, 1);
else
Counter[functionName]++;
}
#endregion Internal Methods
#region Public Methods
public static void AbortNcConnection()
{
if (ConnThread != null && ConnThread.IsAlive)
ConnThread.Abort();
}
/// <summary>
/// Manage action for conf request
@@ -125,6 +339,7 @@ public static class ThreadsFunctions
public static void ManageFlirCamera()
{
NcAdapter ncAdapter = new NcAdapter();
ThermoCamComunicator TCCom = new ThermoCamComunicator(true);
Stopwatch sw = new Stopwatch();
try
{
@@ -137,7 +352,6 @@ public static class ThreadsFunctions
{
bool flirImageReq = false;
sw.Restart();
int tOut = 30000;
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
@@ -153,16 +367,23 @@ public static class ThreadsFunctions
// if requested --> give ack!
ncAdapter.ManageFlirStrobe();
// requesto photo from library
done = ThermocameraComunicator.getInstance().takePicture(tOut);
NcAdapter.lastThermoImage = TCCom.takePicture();
done = !string.IsNullOrEmpty(NcAdapter.lastThermoImage);
if (done)
{
// init
List<Thermo.Cam.Utils.MeasurePoint> measuredpoints = new List<Thermo.Cam.Utils.MeasurePoint>();
Dictionary<int, double> actualTemp = new Dictionary<int, double>();
Dictionary<int, ThermoPoint> chPoints = new Dictionary<int, ThermoPoint>();
// recupero punti centrali resistenze
ncAdapter.GetWarmersChannelCenterPoints(out chPoints);
// richiesta temperature per i punti
done = ThermocameraComunicator.getInstance().readMultiTemperatures(chPoints, tOut, out actualTemp);
done = TCCom.readMultiTemperatures("", chPoints, out measuredpoints);
// converto in actualTemp
foreach (var item in measuredpoints)
{
actualTemp.Add(item.Id, item.Temperature);
}
// salvo dati temp sul PLC
ncAdapter.WriteRecipeWarmChTCamTempAct(actualTemp);
// give PLC strobe for uploaded Actual TEMP from image
@@ -185,6 +406,43 @@ public static class ThreadsFunctions
{
ncAdapter.Dispose();
}
finally
{
// chiudo thermocam
TCCom.Dispose();
}
}
public static void ManageLibraryError(CmsError libraryError)
{
switch (libraryError.errorCode)
{
case CMS_ERROR_CODES.NC_PROD_ERROR:
ManageError(ERROR_LEVEL.WARNING, libraryError.localizationKey);
break;
case CMS_ERROR_CODES.NOT_CONNECTED:
RestoreConnection(); // If not connected try reconnection
break;
case CMS_ERROR_CODES.SIEMENS_ENVIRONMENT_NOT_FOUND:
case CMS_ERROR_CODES.OSAI_TT_FOLDER_NOT_FOUND:
case CMS_ERROR_CODES.OPTION_NOT_CONSISTENT:
ManageError(ERROR_LEVEL.FATAL, libraryError.localizationKey);
break;
case CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING:
ManageError(ERROR_LEVEL.FATAL, "SIEMENS HMI NOT RUNNING");
break;
case CMS_ERROR_CODES.SELECTED_PROCESS:
ManageError(ERROR_LEVEL.WARNING, libraryError.localizationKey);
break;
case CMS_ERROR_CODES.INTERNAL_ERROR:
ManageException(ERROR_LEVEL.FATAL, libraryError.exception);
break;
}
}
/// <summary>
@@ -413,6 +671,55 @@ public static class ThreadsFunctions
}
}
/// <summary>
/// Lettura valorichannelsIO
/// </summary>
public static void ReadChannelsIoData()
{
NcAdapter ncAdapter = new NcAdapter();
Stopwatch sw = new Stopwatch();
try
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
while (true)
{
sw.Restart();
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Get Data from config and PLC
libraryError = ncAdapter.ReadValIO(out DTOChannelsIOVal currChannelsIoVal);
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
else
// Send through signalR
MessageServices.Current.Publish(SEND_CHANNELS_IO_DATA, null, currChannelsIoVal);
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// verifico se periodo rapido o veloce...
int timerAct = RedisController.FastIoSample ? samplMsec("channelsIoFast") : samplMsec("channelsIoSlow");
// Wait
Thread.Sleep(CalcSleepTime(timerAct, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadEnabledFunctionality()
{
NcAdapter ncAdapter = new NcAdapter();
@@ -1197,19 +1504,6 @@ public static class ThreadsFunctions
ncAdapter.Dispose();
}
}
/// <summary>
/// Swap x/y requesto from FLIR camera
/// </summary>
internal static bool cacheWarmers
{
get
{
bool answ = false;
bool.TryParse(ConfigurationManager.AppSettings["cacheWarmers"], out answ);
return answ;
}
}
public static void ReadWarmersData()
{
@@ -1263,6 +1557,21 @@ public static class ThreadsFunctions
}
}
public static void RestoreConnection()
{
if (reconnectionIsRunning == false)
{ // Set thread as running state
reconnectionIsRunning = true;
// Start reconnection thread
ConnThread = new Thread(() =>
TryNcConnection()
);
ConnThread.Start();
}
}
public static void SetupCmsConnect()
{
NcAdapter ncAdapter = new NcAdapter();
@@ -1341,234 +1650,6 @@ public static class ThreadsFunctions
}
}
#endregion Functions
#region SupportFunctions
private static int CalcSleepTime(int maxSleep, int execTime)
{
int sleep = 0;
// Check if the execution time is greater than the half of the max sleep time
if (maxSleep - execTime < maxSleep / 2)
{
sleep = maxSleep;
}
else
{
sleep = maxSleep - execTime;
}
return sleep;
}
private static bool ClientIsRunning()
{
Process[] p = Process.GetProcessesByName(CLIENT_EXE_NAME_NOEXT);
foreach (Process pr in p)
{
if (pr.MainWindowHandle != IntPtr.Zero)
{
ShowWindow(pr.MainWindowHandle, 9);
SetForegroundWindow(pr.MainWindowHandle);
return true;
}
}
return false;
}
private static void clientProcess()
{
string CMSClientPath = "";
// Check if the system is 64/32 bit
if (Environment.Is64BitOperatingSystem && File.Exists(CLIENT_PATH_64))
CMSClientPath = CLIENT_PATH_64;
else if (File.Exists(CLIENT_PATH_86))
CMSClientPath = CLIENT_PATH_86;
if (!String.IsNullOrEmpty(CMSClientPath))
{
Process pr = Process.Start(CMSClientPath, null);
if (ServerStartupConfig.AutoOpenCmsClient)
{
pr.WaitForExit();
MessageServices.Current.Publish(SEND_STOP_SERVER);
}
}
}
private static Dictionary<string, string> GetPlcAlarmsTranslations(string language)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
Dictionary<string, string> returnValue = new Dictionary<string, string>();
Dictionary<int, string> messages = new Dictionary<int, string>();
// Read data from CN
ncAdapter.numericalControl.NC_GetTranslatedPlcMessages(language, ref messages); // Avoid checking error because in the worst case "messages" is empty
// Id start from 1
for (int i = 1; i <= 1024; i++)
{
// Get configurated alarms
var tmpAlarmConfig = InitialAlarmsConfig.Where(x => x.PlcId == i).FirstOrDefault();
// Default string
string message = string.Format(NOT_CONFIGURATED_ALARM_MESSAGE, i);
// If is configurated
if (tmpAlarmConfig != null)
{
// Find translated string
message = messages.Where(x => x.Key == tmpAlarmConfig.AlarmId).FirstOrDefault().Value;
if (message == null)
message = string.Format(NOT_FOUND_ALARM_MESSAGE, i);
}
// Add to dictionary
returnValue.Add(i.ToString("D6") + "|900", message);
}
return returnValue;
}
}
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private static void StatReset()
{
foreach (var value in Counter)
{
Timers[value.Key] = 0;
Counter[value.Key] = 0;
}
}
private static void TryNcConnection()
{
// Stop all the NC threads
ThreadsHandler.Stop();
StatReset();
NcAdapter ncAdapter = new NcAdapter();
CmsError libraryError = NO_ERROR;
// Run loop until NC is connected
while (!ncAdapter.numericalControl.NC_IsConnected())
{
// Try reconnection
libraryError = ncAdapter.Connect();
if (libraryError.errorCode == CMS_ERROR_CODES.SIEMENS_ENVIRONMENT_NOT_FOUND || libraryError.errorCode == CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING || libraryError.errorCode == CMS_ERROR_CODES.OSAI_TT_FOLDER_NOT_FOUND)
ManageLibraryError(libraryError);
else if (libraryError.errorCode != CMS_ERROR_CODES.OK)
{
ncAdapter.Dispose();
}
// Send status to UI
MessageServices.Current.Publish(SEND_NC_STATUS_UI, null, ncAdapter.numericalControl.NC_IsConnected());
// Send status to signalr
MessageServices.Current.Publish(SEND_NC_STATUS, null, ncAdapter.numericalControl.NC_IsConnected());
Thread.Sleep(1000);
}
if (!libraryError.IsError())
{
if (ServerStartupConfig.AutoOpenCmsClient)
StartCMSClient();
// Start/Restart NC threads
ThreadsHandler.StartWorkers();
reconnectionIsRunning = false;
}
}
internal static void StatThread()
{
while (true)
{
foreach (var value in Counter)
{
if (ThreadsHandler.RunningThreadStatus.ContainsKey(value.Key) && Counter[value.Key] != 0)
{
ThreadsHandler.RunningThreadStatus[value.Key] = $"{(Timers[value.Key] / Counter[value.Key])} ms x {Counter[value.Key]}";
Timers[value.Key] = 0;
Counter[value.Key] = 0;
}
}
MessageServices.Current.Publish(SEND_THREADS_STATUS, null, ThreadsHandler.RunningThreadStatus);
Thread.Sleep(2000);
}
}
internal static void UpdateStat(string functionName, long timer)
{
if (!Timers.ContainsKey(functionName))
Timers.TryAdd(functionName, timer);
else
Timers[functionName] += timer;
if (!Counter.ContainsKey(functionName))
Counter.TryAdd(functionName, 1);
else
Counter[functionName]++;
}
public static void AbortNcConnection()
{
if (ConnThread != null && ConnThread.IsAlive)
ConnThread.Abort();
}
public static void ManageLibraryError(CmsError libraryError)
{
switch (libraryError.errorCode)
{
case CMS_ERROR_CODES.NC_PROD_ERROR:
ManageError(ERROR_LEVEL.WARNING, libraryError.localizationKey);
break;
case CMS_ERROR_CODES.NOT_CONNECTED:
RestoreConnection(); // If not connected try reconnection
break;
case CMS_ERROR_CODES.SIEMENS_ENVIRONMENT_NOT_FOUND:
case CMS_ERROR_CODES.OSAI_TT_FOLDER_NOT_FOUND:
case CMS_ERROR_CODES.OPTION_NOT_CONSISTENT:
ManageError(ERROR_LEVEL.FATAL, libraryError.localizationKey);
break;
case CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING:
ManageError(ERROR_LEVEL.FATAL, "SIEMENS HMI NOT RUNNING");
break;
case CMS_ERROR_CODES.SELECTED_PROCESS:
ManageError(ERROR_LEVEL.WARNING, libraryError.localizationKey);
break;
case CMS_ERROR_CODES.INTERNAL_ERROR:
ManageException(ERROR_LEVEL.FATAL, libraryError.exception);
break;
}
}
public static void RestoreConnection()
{
if (reconnectionIsRunning == false)
{ // Set thread as running state
reconnectionIsRunning = true;
// Start reconnection thread
ConnThread = new Thread(() =>
TryNcConnection()
);
ConnThread.Start();
}
}
public static void StartCMSClient()
{
//Setup the Path Variable
@@ -1579,5 +1660,5 @@ public static class ThreadsFunctions
}
}
#endregion SupportFunctions
#endregion Public Methods
}
+1
View File
@@ -36,6 +36,7 @@ namespace Thermo.Active.Core
ThreadsFunctions.ReadScadaData,
ThreadsFunctions.ReadMComandsData,
ThreadsFunctions.ReadAxisInfoData,
ThreadsFunctions.ReadChannelsIoData,
ThreadsFunctions.ReadM154Data // levare?
};
+5 -1
View File
@@ -28,7 +28,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
@@ -38,6 +38,10 @@
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+5 -1
View File
@@ -47,7 +47,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
@@ -57,6 +57,10 @@
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
@@ -6,206 +6,224 @@ using Thermo.Active.Model.DatabaseModels;
namespace Thermo.Active.Database.Controllers
{
public class ProdInfoController : IDisposable
{
private DatabaseContext dbCtx;
public class ProdInfoController : IDisposable
{
#region Private Fields
public ProdInfoController()
{
// Initialize database context
dbCtx = new DatabaseContext();
}
private DatabaseContext dbCtx;
public void Dispose()
{
// Clear database context
dbCtx.Dispose();
}
/// <summary>
/// Get record by NumDone
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public ProdInfoModel FindByNumDone(int num)
{
return dbCtx
.ProdInfo
.Where(x => x.NumDone == num)
.SingleOrDefault();
}
/// <summary>
/// Get historical paginated data from DB (DESC ordered)
/// </summary>
/// <param name="numStart"></param>
/// <param name="numRecord"></param>
/// <returns></returns>
public List<ProdInfoModel> GetPaginatedDesc(int numStart, int numRecord)
{
int numEnd = numStart - numRecord;
// check numEnd
if (numEnd < 0)
numEnd = 0;
// retrieve
return dbCtx
.ProdInfo
.Where(x => x.NumDone <= numStart)
//.Where(x => x.NumDone <= numStart && x.NumDone > numEnd)
.OrderByDescending(x => x.DtEvent)
.Take(numRecord)
.ToList();
}
/// <summary>
/// Get historical paginated data from DB (ASC ordered)
/// </summary>
/// <param name="numStart"></param>
/// <param name="numRecord"></param>
/// <returns></returns>
public List<ProdInfoModel> GetPaginatedAsc(int numStart, int numRecord)
{
int numEnd = numStart + numRecord;
// retrieve
return dbCtx
.ProdInfo
.Where(x => x.NumDone >= numStart)
.OrderBy(x => x.DtEvent)
.Take(numRecord)
.ToList();
}
/// <summary>
/// Create new prodInfo record on DB
/// </summary>
/// <param name="NumTarget"></param>
/// <param name="NumDone"></param>
/// <param name="TimeWarm"></param>
/// <param name="TimeVent"></param>
/// <param name="TimeVacuum"></param>
/// <param name="TimeCycleGross"></param>
/// <param name="TimeCycleNet"></param>
/// <param name="MaterialTempEndWarm"></param>
/// <param name="MaterialTempEndVent"></param>
/// <param name="MoldTemp"></param>
/// <param name="VacuumReadVal"></param>
/// <param name="MouldEnergyOUT"></param>
/// <param name="MouldEnergyIN"></param>
/// <param name="IsScrap"></param>
/// <returns></returns>
public ProdInfoModel Create(short NumTarget, short NumDone, int TimeWarm, int TimeVent, int TimeVacuum, int TimeCycleGross, int TimeCycleNet, double MaterialTempEndWarm, double MaterialTempEndVent, double MoldTemp, double VacuumReadVal, double MouldEnergyOUT, double MouldEnergyIN, bool IsScrap)
{
// Create database machine model
ProdInfoModel prodData = new ProdInfoModel()
{
DtEvent = DateTime.Now,
NumTarget = NumTarget,
NumDone = NumDone,
TimeWarm = TimeWarm,
TimeVent = TimeVent,
TimeVacuum = TimeVacuum,
TimeCycleGross = TimeCycleGross,
TimeCycleNet = TimeCycleNet,
MaterialTempEndWarm = MaterialTempEndWarm,
MaterialTempEndVent = MaterialTempEndVent,
MoldTemp = MoldTemp,
VacuumReadVal = VacuumReadVal,
MouldEnergyOUT = MouldEnergyOUT,
MouldEnergyIN = MouldEnergyIN,
IsScrap = IsScrap
};
try
{
// Add to database
dbCtx.ProdInfo.AddOrUpdate(prodData);
//dbCtx.ProdInfo.Add(prodData);
// Commit changes
dbCtx.SaveChanges();
}
catch
{ }
#endregion Private Fields
return prodData;
}
/// <summary>
/// Process table and set as scrap by num value
/// </summary>
/// <param name="maxKeep"></param>
/// <returns></returns>
public bool SetScrap(int num, bool isScrap)
{
bool answ = false;
#region Public Constructors
var currRecord = dbCtx
.ProdInfo
.Where(x => x.NumDone == num)
.SingleOrDefault();
try
{
if (currRecord != null)
public ProdInfoController()
{
currRecord.IsScrap = isScrap;
// Initialize database context
dbCtx = new DatabaseContext();
}
// save!
dbCtx.SaveChanges();
answ = true;
}
catch
{ }
return answ;
}
/// <summary>
/// Process table and keep only maxKeep most recent ones
/// </summary>
/// <param name="maxKeep"></param>
/// <returns></returns>
public bool PurgeOldest(int maxKeep)
{
bool answ = false;
#endregion Public Constructors
// check if purge needed
int numRec = dbCtx.ProdInfo.Count();
if (numRec > maxKeep)
{
ProdInfoModel firstToDelete = (ProdInfoModel)(from p in dbCtx.ProdInfo
orderby p.DtEvent descending
select p).Skip(maxKeep).Take(1);
#region Public Methods
// call deletion
dbCtx
.ProdInfo
.RemoveRange(
dbCtx
/// <summary>
/// Create new prodInfo record on DB
/// </summary>
/// <param name="NumTarget"></param>
/// <param name="NumDone"></param>
/// <param name="TimeWarm"></param>
/// <param name="TimeVent"></param>
/// <param name="TimeVacuum"></param>
/// <param name="TimeCycleGross"></param>
/// <param name="TimeCycleNet"></param>
/// <param name="MaterialTempEndWarm"></param>
/// <param name="MaterialTempEndVent"></param>
/// <param name="MoldTemp"></param>
/// <param name="VacuumReadVal"></param>
/// <param name="MouldEnergyOUT"></param>
/// <param name="MouldEnergyIN"></param>
/// <param name="IsScrap"></param>
/// <returns></returns>
public ProdInfoModel Create(short NumTarget, short NumDone, int TimeWarm, int TimeVent, int TimeVacuum, int TimeCycleGross, int TimeCycleNet, float MaterialTempEndWarm, float MaterialTempEndVent, float MoldTemp, float VacuumReadVal, float MouldEnergyOUT, float MouldEnergyIN, bool IsScrap, string ThermoImage)
{
// Create database machine model
ProdInfoModel prodData = new ProdInfoModel()
{
DtEvent = DateTime.Now,
NumTarget = NumTarget,
NumDone = NumDone,
TimeWarm = TimeWarm,
TimeVent = TimeVent,
TimeVacuum = TimeVacuum,
TimeCycleGross = TimeCycleGross,
TimeCycleNet = TimeCycleNet,
MaterialTempEndWarm = MaterialTempEndWarm,
MaterialTempEndVent = MaterialTempEndVent,
MoldTemp = MoldTemp,
VacuumReadVal = VacuumReadVal,
MouldEnergyOUT = MouldEnergyOUT,
MouldEnergyIN = MouldEnergyIN,
IsScrap = IsScrap,
ThermoImage = ThermoImage
};
try
{
// Add to database
dbCtx.ProdInfo.AddOrUpdate(prodData);
//dbCtx.ProdInfo.Add(prodData);
// Commit changes
dbCtx.SaveChanges();
}
catch
{ }
return prodData;
}
public void Dispose()
{
// Clear database context
dbCtx.Dispose();
}
/// <summary>
/// Get record by NumDone
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public ProdInfoModel FindByNumDone(int num)
{
return dbCtx
.ProdInfo
.Where(x => x.DtEvent <= firstToDelete.DtEvent)
);
try
{
// save!
dbCtx.SaveChanges();
answ = true;
.Where(x => x.NumDone == num)
.SingleOrDefault();
}
catch
{ }
}
return answ;
}
/// <summary>
/// Process table and delete all record (truncate)
/// </summary>
/// <returns></returns>
public bool PurgeAll()
{
bool answ = false;
/// <summary>
/// Get historical paginated data from DB (ASC ordered)
/// </summary>
/// <param name="numStart"></param>
/// <param name="numRecord"></param>
/// <returns></returns>
public List<ProdInfoModel> GetPaginatedAsc(int numStart, int numRecord)
{
int numEnd = numStart + numRecord;
// retrieve
return dbCtx
.ProdInfo
.Where(x => x.NumDone >= numStart)
.OrderBy(x => x.DtEvent)
.Take(numRecord)
.ToList();
}
try
{
dbCtx
.Database
.ExecuteSqlCommand("TRUNCATE TABLE prodInfo");
}
catch
{ }
return answ;
/// <summary>
/// Get historical paginated data from DB (DESC ordered)
/// </summary>
/// <param name="numStart"></param>
/// <param name="numRecord"></param>
/// <returns></returns>
public List<ProdInfoModel> GetPaginatedDesc(int numStart, int numRecord)
{
int numEnd = numStart - numRecord;
// check numEnd
if (numEnd < 0)
numEnd = 0;
// retrieve
return dbCtx
.ProdInfo
.Where(x => x.NumDone <= numStart)
//.Where(x => x.NumDone <= numStart && x.NumDone > numEnd)
.OrderByDescending(x => x.DtEvent)
.Take(numRecord)
.ToList();
}
/// <summary>
/// Process table and delete all record (truncate)
/// </summary>
/// <returns></returns>
public bool PurgeAll()
{
bool answ = false;
try
{
dbCtx
.Database
.ExecuteSqlCommand("TRUNCATE TABLE prodInfo");
}
catch
{ }
return answ;
}
/// <summary>
/// Process table and keep only maxKeep most recent ones
/// </summary>
/// <param name="maxKeep"></param>
/// <returns></returns>
public bool PurgeOldest(int maxKeep)
{
bool answ = false;
// check if purge needed
int numRec = dbCtx.ProdInfo.Count();
if (numRec > maxKeep)
{
ProdInfoModel firstToDelete = (ProdInfoModel)(from p in dbCtx.ProdInfo
orderby p.DtEvent descending
select p).Skip(maxKeep).Take(1);
// call deletion
dbCtx
.ProdInfo
.RemoveRange(
dbCtx
.ProdInfo
.Where(x => x.DtEvent <= firstToDelete.DtEvent)
);
try
{
// save!
dbCtx.SaveChanges();
answ = true;
}
catch
{ }
}
return answ;
}
/// <summary>
/// Process table and set as scrap by num value
/// </summary>
/// <param name="maxKeep"></param>
/// <returns></returns>
public bool SetScrap(int num, bool isScrap)
{
bool answ = false;
var currRecord = dbCtx
.ProdInfo
.Where(x => x.NumDone == num)
.SingleOrDefault();
try
{
if (currRecord != null)
{
currRecord.IsScrap = isScrap;
}
// save!
dbCtx.SaveChanges();
answ = true;
}
catch
{ }
return answ;
}
#endregion Public Methods
}
}
}
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using Thermo.Active.Database.Redis;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.ThAxes;
@@ -19,7 +20,7 @@ namespace Thermo.Active.Database.Controllers
private const string machinePowerPath = "Machine:Power";
private const string machineAlarmPath = "Machine:Alarm";
private const string machineEmergencyPath = "Machine:Emergency";
private const string alarmsPath = "Machine:Plc:Condition";
private const string alarmsPath = "Machine:Plc:Condition";
private const string processStatusPath = "Machine:Cnc:CncProcesses:%NN%:Status";
private const string processModePath = "Machine:Cnc:CncProcesses:%NN%:Mode";
private const string processFeedOverridePath = "Machine:Cnc:CncProcesses:%NN%:FeedOverride";
@@ -27,7 +28,7 @@ namespace Thermo.Active.Database.Controllers
private const string processSpeedOverridePath = "Machine:Cnc:CncProcesses:%NN%:SpeedOverride";
private const string datamodelPath = "AdpConf:DataModel";
private const string currentActiveVersionPath = "Machine:Hmi:Version";
private const string currentActiveVersionPath = "Machine:Hmi:Version";
private const string machineAxisPosition = "Machine:Axes:%NN%:CurrentPos";
private const string machineAxisSpeed = "Machine:Axes:%NN%:FeedRate";
private const string machineAxisLoad = "Machine:Axes:%NN%:Load";
@@ -70,7 +71,7 @@ namespace Thermo.Active.Database.Controllers
string redisHash = redUtil.man.redHash(redisAlmEn);
return redUtil.man.redSaveHashDict(redisHash, alarms);
}
public static bool WriteDatamodel(string datamodel)
{
@@ -79,7 +80,7 @@ namespace Thermo.Active.Database.Controllers
}
public static bool WriteDefaultEntry(Dictionary<string, string> entries)
{
foreach (KeyValuePair<string,string> entry in entries)
foreach (KeyValuePair<string, string> entry in entries)
{
if (!redUtil.man.setRSV(redUtil.man.redHash(entry.Key), entry.Value))
return false;
@@ -109,7 +110,7 @@ namespace Thermo.Active.Database.Controllers
string redisHash = redUtil.man.redHash(machineStatusPath);
return redUtil.man.setRSV(redisHash, status.ToString());
}
public static bool WriteCurrentProcessStatus(uint ProductionProcess, string status)
{
string redisHash = redUtil.man.redHash(processStatusPath).Replace("%NN%", ProductionProcess.ToString("00"));
@@ -131,21 +132,21 @@ namespace Thermo.Active.Database.Controllers
if (!redUtil.man.setRSV(redisHash, "100"))
return false;
redisHash = redUtil.man.redHash(processSpeedOverridePath).Replace("%NN%", ProductionProcess.ToString("00"));
if(!redUtil.man.setRSV(redisHash, "100"))
if (!redUtil.man.setRSV(redisHash, "100"))
return false;
return true;
}
public static bool WriteCurrentMachinePowerPath(bool status)
{
string redisHash = redUtil.man.redHash(machinePowerPath);
if(status)
if (status)
return redUtil.man.setRSV(redisHash, "true");
else
return redUtil.man.setRSV(redisHash, "false");
}
public static bool WriteCurrentMachineAlarmPath(bool status)
{
string redisHash = redUtil.man.redHash(machineAlarmPath);
@@ -154,7 +155,7 @@ namespace Thermo.Active.Database.Controllers
else
return redUtil.man.setRSV(redisHash, "false");
}
public static bool WriteCurrentMachineEmergencyPath(bool status)
{
string redisHash = redUtil.man.redHash(machineEmergencyPath);
@@ -183,14 +184,51 @@ namespace Thermo.Active.Database.Controllers
redUtil.man.ListPush(redisHash, msg);
return true;
}
public static string ReadValue(string msgKey)
{
string redisHash = redUtil.man.redHash(msgKey);
return redUtil.man.getRSV(redisHash);
}
public static bool WriteValue(string msgKey, string msg, int ttlSec)
{
string redisHash = redUtil.man.redHash(msgKey);
redUtil.man.setRSV(redisHash, msg, ttlSec);
return true;
}
public static bool FastIoSample
{
get
{
var currVal = ReadValue("FastIoSample");
bool answ = !string.IsNullOrEmpty(currVal);
return answ;
}
set
{
// TTL: se true 20 min, altrimenti 1 sec
int ttlSec = value ? 60 * 20 : 1;
WriteValue("FastIoSample", "Active", ttlSec);
}
}
public static DateTime SetFastIoSample(bool value)
{
// TTL: se true 20 min, altrimenti 1 sec
int ttlSec = value ? 60 * 20 : 1;
WriteValue("FastIoSample", "Active", ttlSec);
return DateTime.Now.AddSeconds(ttlSec);
}
public static bool WriteCurrentAxisStatus(Dictionary<int, DTOAxisInfoModel> axis)
{
foreach(KeyValuePair<int, DTOAxisInfoModel> asse in axis)
foreach (KeyValuePair<int, DTOAxisInfoModel> asse in axis)
{
string redisHash = redUtil.man.redHash(machineAxisName).Replace("%NN%", asse.Value.ID.ToString("00"));
if(redUtil.man.getRSV(redisHash) != null)
if (redUtil.man.getRSV(redisHash) != null)
{
redisHash = redUtil.man.redHash(machineAxisPosition).Replace("%NN%", asse.Value.ID.ToString("00"));
if (!redUtil.man.setRSV(redisHash, asse.Value.position.ToString()))
@@ -203,7 +241,7 @@ namespace Thermo.Active.Database.Controllers
redisHash = redUtil.man.redHash(machineAxisLoad).Replace("%NN%", asse.Value.ID.ToString("00"));
if (!redUtil.man.setRSV(redisHash, asse.Value.load.ToString()))
return false;
}
}
}
return true;
}
+60 -8
View File
@@ -65,19 +65,44 @@ namespace Thermo.Active.Database
{
try
{
ServiceController service = new ServiceController("MySQL");
String serviceName = getDbServiceName();
if(serviceName.Equals(""))
{
ManageError(ERROR_LEVEL.FATAL, "Database SQL service not found", true);
return false;
}
String serviceRedisName = getRedisServiceName();
if (serviceRedisName.Equals(""))
{
ManageError(ERROR_LEVEL.FATAL, "Database REDIS service not found", true);
return false;
}
ServiceController service = new ServiceController(serviceName);
try
{
TimeSpan timeout = TimeSpan.FromSeconds(DATABASE_PROCESS_TIMEOUT);
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch (Exception ex)
{
ManageError(ERROR_LEVEL.FATAL, "Database not started");
Console.WriteLine(ex.Message);
return false;
}
ManageError(ERROR_LEVEL.FATAL, "Database SQL not started", true);
return false;
}
service = new ServiceController(serviceRedisName);
try
{
TimeSpan timeout = TimeSpan.FromSeconds(DATABASE_PROCESS_TIMEOUT);
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch (Exception e)
{
ManageError(ERROR_LEVEL.FATAL, "Database REDIS not started", true);
return false;
}
System.Data.Entity.Database.SetInitializer<DatabaseContext>(null);
var migrator = new DbMigrator(new Configuration());
@@ -114,7 +139,7 @@ namespace Thermo.Active.Database
return true;
}
public static void FindOrCreateMachineUniqueId()
private static void FindOrCreateMachineUniqueId()
{
// Find machine unique id in the register
string uniqueId = ReadUniqueIdFromRegister();
@@ -198,5 +223,32 @@ namespace Thermo.Active.Database
// Return value
return (string)key.GetValue(REGISTER_MACHINE_ID_KEY_NAME);
}
}
private static string getDbServiceName()
{
ServiceController[] services = ServiceController.GetServices();
var service = services.FirstOrDefault(s => s.ServiceName == "MariaDB");
if (service != null)
return service.DisplayName;
service = services.FirstOrDefault(s => s.ServiceName == "MySQL");
if (service != null)
return service.DisplayName;
return "";
}
private static string getRedisServiceName()
{
ServiceController[] services = ServiceController.GetServices();
var service = services.FirstOrDefault(s => s.ServiceName == "Redis");
if (service != null)
return service.DisplayName;
return "";
}
}
}
@@ -0,0 +1,29 @@
// <auto-generated />
namespace Thermo.Active.Database.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.2.0-61023")]
public sealed partial class Added_ThermoImage_prodInfo : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(Added_ThermoImage_prodInfo));
string IMigrationMetadata.Id
{
get { return "202102171753226_Added_ThermoImage_prodInfo"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,30 @@
namespace Thermo.Active.Database.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class Added_ThermoImage_prodInfo : DbMigration
{
public override void Up()
{
AddColumn("dbo.ProdInfo", "ThermoImage", c => c.String(unicode: false));
AlterColumn("dbo.ProdInfo", "MaterialTempEndWarm", c => c.Single(nullable: false));
AlterColumn("dbo.ProdInfo", "MaterialTempEndVent", c => c.Single(nullable: false));
AlterColumn("dbo.ProdInfo", "MoldTemp", c => c.Single(nullable: false));
AlterColumn("dbo.ProdInfo", "VacuumReadVal", c => c.Single(nullable: false));
AlterColumn("dbo.ProdInfo", "MouldEnergyOUT", c => c.Single(nullable: false));
AlterColumn("dbo.ProdInfo", "MouldEnergyIN", c => c.Single(nullable: false));
}
public override void Down()
{
AlterColumn("dbo.ProdInfo", "MouldEnergyIN", c => c.Double(nullable: false));
AlterColumn("dbo.ProdInfo", "MouldEnergyOUT", c => c.Double(nullable: false));
AlterColumn("dbo.ProdInfo", "VacuumReadVal", c => c.Double(nullable: false));
AlterColumn("dbo.ProdInfo", "MoldTemp", c => c.Double(nullable: false));
AlterColumn("dbo.ProdInfo", "MaterialTempEndVent", c => c.Double(nullable: false));
AlterColumn("dbo.ProdInfo", "MaterialTempEndWarm", c => c.Double(nullable: false));
DropColumn("dbo.ProdInfo", "ThermoImage");
}
}
}
File diff suppressed because one or more lines are too long
@@ -45,13 +45,17 @@ namespace Thermo.Active.Database.Migrations
// Main Areas
new FunctionAccessModel() { Name = "productionArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 20, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "reportArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 30, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "alarmsArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "maintenanceArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "scadaArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "usersArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 30, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "jobeditorArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 20, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "utilitiesArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "setupArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 20, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "progrpreriscArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 20, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "thermoHoodArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 30, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "modal-load-programArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 20, ReadLevelMin = 1, PlcId = 0 },
// thermo functions
new FunctionAccessModel() { Name = RECIPE_MANAGER, Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 0 }
@@ -95,8 +95,8 @@
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
@@ -154,6 +154,10 @@
<Compile Include="Migrations\202011051531133_AddedKeyboaSoftkey.Designer.cs">
<DependentUpon>202011051531133_AddedKeyboaSoftkey.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202102171753226_Added_ThermoImage_prodInfo.cs" />
<Compile Include="Migrations\202102171753226_Added_ThermoImage_prodInfo.Designer.cs">
<DependentUpon>202102171753226_Added_ThermoImage_prodInfo.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\Configuration.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Redis\redUtil.cs" />
@@ -205,6 +209,9 @@
<EmbeddedResource Include="Migrations\202011051531133_AddedKeyboaSoftkey.resx">
<DependentUpon>202011051531133_AddedKeyboaSoftkey.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202102171753226_Added_ThermoImage_prodInfo.resx">
<DependentUpon>202102171753226_Added_ThermoImage_prodInfo.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
+1 -1
View File
@@ -16,7 +16,7 @@
<package id="System.IO.Pipelines" version="4.7.3" targetFramework="net462" />
<package id="System.Memory" version="4.5.4" targetFramework="net462" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net462" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.1" targetFramework="net462" />
<package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net462" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net462" />
<package id="System.Threading.Channels" version="4.7.1" targetFramework="net462" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net462" />
@@ -8,6 +8,9 @@ namespace Thermo.Active.Model.ConfigModels
public int Id;
public string Name { get; set; }
public bool IsSelectable { get; set; } = true;
public TACT_AXES_TYPE Type { get; set; }
public bool IsVisible { get; set; }
public TACT_AXES_TYPE Type { get; set; }
public int MasterId { get; set; } = 0;
public int EnabledWord { get; set; } = 0;
}
}
@@ -0,0 +1,26 @@
using System.Collections.Generic;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Model.ConfigModels
{
public class IOConfigModel
{
public TACT_IO_TYPE Category { get; set; }
public int Id { get; set; } =0;
public string Bank { get; set; } = "0";
public string Position { get; set; } = "0";
public string Page { get; set; } = "";
public string Wire { get; set; } = "";
public string Profinet { get; set; } = "";
public bool DisableForce { get; set; } = false;
public string Label
{
get
{
string answ = $"LBL_IO_{Category}_{Id}";
return answ;
}
}
}
}
@@ -44,6 +44,7 @@ namespace Thermo.Active.Model.ConfigModels
#region Public Fields
public int Canale;
public int IdGruppo;
public int Riga;
public int Tipo;
@@ -52,16 +53,17 @@ namespace Thermo.Active.Model.ConfigModels
public class RiskResistModel
{
#region Public Fields
#region Public Properties
public int Column { get; set; } = 0;
public int Dimension { get; set; } = 0;
public int Id { get; set; } = 0;
public int IdChannel { get; set; } = 0;
public int IdGroup { get; set; } = 0;
public int IdReflector { get; set; } = 0;
public int Row { get; set; } = 0;
#endregion Public Fields
#endregion Public Properties
}
public class RiskRiferimenti
+391 -342
View File
@@ -7,17 +7,272 @@ namespace Thermo.Active.Model
{
public static class Constants
{
public static bool IS_BETA = false;
public static string NOT_FOUND_ALARM_MESSAGE = "Alarm_id_{0} : Message not found";
public static string NOT_CONFIGURATED_ALARM_MESSAGE = "Alarm_id_{0} : Message not configurated";
public static string CMS_CONNECT_SETUP_ALARM_MESSAGE = "Error during CMS-Connect setup: Redis Db Not Found";
public static int DATABASE_PROCESS_TIMEOUT = 5;
#region Public Fields
public const string ALARM_ATTACHMENT_PATH = @"C:\CMS\Active\attachment\alarm\";
public const string ALARM_PREFIX = "alarm_";
public const string ALARMS_CONFIG_PATH = CONFIG_DIRECTORY + "alarmsConfig.xml";
public const string ALARMS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "alarmsConfigValidator.xsd";
public const string AREAS_CONFIG_KEY = "areasConfig";
public const string AREAS_CONFIG_PATH = CONFIG_DIRECTORY + "areasConfig.xml";
public const string AREAS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "areasConfigValidator.xsd";
// Token fields Keys
public const string AUTHENTICATION_TYPE = "Bearer";
public const string AXES_CONFIG_PATH = CONFIG_DIRECTORY + "axesConfig.xml";
public const string AXES_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + @"axesConfigValidator.xsd";
public const string BROADCAST_DATA = "BROADCAST_DATA";
// File paths
public const string CLIENT_EXE_NAME = @"Active_Client.exe";
public const string CLIENT_EXE_NAME_NOEXT = @"Active_Client";
public const string CMS_CONNECT_CONFIG_PATH = CONFIG_DIRECTORY + "cmsConnectConfig.xml";
public const string CMS_CONNECT_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "cmsConnectConfigValidator.xsd";
public const string CMS_FOLDER_PATH = @"C:\CMS\";
public const string CONFIG_DIRECTORY = "Config\\";
public const string CONNECT_DATAMODEL_CONFIG_PATH = CONFIG_DIRECTORY + "DataModel.xml";
public const string CONNECT_DATAMODEL_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "dataModelConfigValidator.xsd";
public const string CUSTOMER_CONTACTS = CMS_FOLDER_PATH + "ContactInfo.xml";
public const string CUSTOMER_CONTACTS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "customerContactConfigValidator.xsd";
public const string DATABASE_NAME = "ThermoActive";
public const string DATABASE_PWD = "root";
// Database config
public const string DATABASE_USER = "root";
public const string DEFAULT_FAM_NAME = "Family";
public const string DIAM_METRIC = "DIAMETER";
public const double EPSILON = 0.1;
public const string HEADS_CONFIG_PATH = CONFIG_DIRECTORY + "headsConfig.xml";
public const string HEADS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "headsConfigValidator.xsd";
public const string IO_CONFIG_PATH = CONFIG_DIRECTORY + "IOConfig.xml";
public const string IO_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "IOConfigValidator.xsd";
public const string JOB_MAIN_FILENAME = "main.cnc";
public const string JOB_METADATA_FILENAME = "metadata.json";
public const string JOB_TMP_DIRECTORY = TEMP_PP_FOLDER + @"job\";
public const string LIVE_RECIPE_PATH = TEMP_FOLDER + "Recipes\\current.rcp";
public const string LIVE_SCHED_TASK_PATH = TEMP_FOLDER + "Recipes\\sched.tsk";
public const string M156_CONFIG_PATH = CONFIG_DIRECTORY + "inputOperatorConfig.xml";
public const string M156_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "inputOperatorConfigValidator.xsd";
public const string MACHINE_ID_KEY = "machineId";
public const string MACROS_CONFIG_PATH = CONFIG_DIRECTORY + "macrosConfig.xml";
public const string MACROS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "macrosConfigValidator.xsd";
public const string MAIN_PROGRAM_CONFIG_PATH = CONFIG_DIRECTORY + "customMainProgram.txt";
public const string MAINTENANCE_ATTACHMENT_PATH = @"C:\CMS\Active\attachment\maintenance\";
public const string MAINTENANCE_DESC_PREFIX_ID = "maint_desc_";
// ID prefix
public const string MAINTENANCE_PREFIX_ID = "maint_";
public const string MAINTENANCES_CONFIG_PATH = CONFIG_DIRECTORY + "maintenancesConfig.xml";
public const string MAINTENANCES_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "maintenancesConfigValidator.xsd";
public const int MAX_NUM_OF_WATCHDOG_ERROR = 4;
public const int MIN_ADMIN_ROLE = 30;
public const int MIN_CMS_ROLE = 100;
public const string MODBLOCK_CONFIG_PATH = CONFIG_DIRECTORY + "moduleBlockConfig.xml";
public const string MODBLOCK_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "moduleBlockConfigValidator.xsd";
public const string NC_CONFIG_KEY = "ncConfig";
public const string NC_SOFTKEYS_CONFIG_PATH = CONFIG_DIRECTORY + "ncSoftKeyConfig.xml";
public const string NC_SOFTKEYS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "ncSoftKeyConfigValidator.xsd";
public const int numRecProdPanelGraph = 30;
public const string PART_PRG_IMAGES = TEMP_FOLDER + @"pp_img\";
public const string PROD_SFT_CONFIG_KEY = "softwareProdConfig";
public const string QUEUE_TMP_FOLDER = TEMP_PP_FOLDER + @"queue\";
//Costanti Tipo metreica utensili
public const string RADIUS_METRIC = "RADIUS";
public const string DIAM_METRIC = "DIAMETER";
public const string DEFAULT_FAM_NAME = "Family";
public const string RECIPE_CONFIG_PATH = CONFIG_DIRECTORY + "recipeConfig.xml";
public const string RECIPE_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "recipeConfigValidator.xsd";
public const string RECIPE_TEMPLATE_PATH = CONFIG_DIRECTORY + "Recipes\\template.tpl";
// Registry key
public const string REGISTER_MACHINE_ID_KEY_NAME = "MachineUniqueId";
public const string RESOURCE_DIRECTORY = @"Thermo.Active.Config.Config.";
public const string RISK_CONFIG_PATH = CONFIG_DIRECTORY + "risk2007.xml";
public const string RISK_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "risk2007Validator.xsd";
public const string ROLE_LEVEL_KEY = "roleLevel";
public const string SCADA_DIRECTORY = @"C:\CMS\Active\scada\";
public const string SCADA_PAGES_SCHEMA_PATH = RESOURCE_DIRECTORY + "scadaValidator.xsd";
public const string SEND_ACTIVE_PROGRAM_DATA = "SEND_ACTIVE_PROGRAM_DATA";
// MVVM Messages to signalR tasks
public const string SEND_ALARMS = "SEND_ALARMS";
public const string SEND_AXIS_INFO = "SEND_AXIS_INFO";
public const string SEND_CHANNELS_IO_DATA = "SEND_CHANNELS_IO_DATA";
public const string SEND_CMSCONNECT_GW_REBOOT_STATUS = "SEND_CMSCONNECT_GW_REBOOT_STATUS";
public const string SEND_ERROR_TO_UI = "SEND_ERROR_TO_UI";
public const string SEND_EXPIRED_MAINTENANCES_DATA = "SEND_EXPIRED_MAINTENANCES_DATA";
public const string SEND_FUNCTIONALITY_DATA = "SEND_FUNCTION_DATA";
public const string SEND_GENERIC_DATA = "SEND_GENERIC_DATA";
public const string SEND_HEADS_DATA = "SEND_HEADS_DATA";
public const string SEND_M155_DATA = "SEND_M155_DATA";
public const string SEND_M156_DATA = "SEND_M156_DATA";
public const string SEND_MESSAGE = "SEND_MESSAGE";
public const string SEND_NC_SOFTKEYS_DATA = "SEND_NC_SOFTKEYS_DATA";
public const string SEND_NC_STATUS = "NC_STATUS";
public const string SEND_NC_STATUS_UI = "NC_STATUS_UI";
public const string SEND_POWER_ON_DATA = "SEND_POWER_ON_DATA";
public const string SEND_PROCESSES_DATA = "SEND_PROCESSES_STATUS";
public const string SEND_QUEUE_DATA = "SEND_QUEUE_DATA";
public const string SEND_SCADA_DATA = "SEND_SCADA_DATA";
// MVVM Messages to server UI
public const string SEND_STOP_SERVER = "STOP_SERVER";
public const string SEND_STOP_THREADS = "SEND_STOP_THREADS";
public const string SEND_THERMO_AREA_DATA = "SEND_THERMO_AREA_DATA";
public const string SEND_THERMO_GAUGE_DATA = "SEND_THERMO_GAUGE_DATA";
public const string SEND_THERMO_MODULE_DATA = "SEND_THERMO_MODULE_DATA";
public const string SEND_THERMO_PROD_CYCLE_DATA = "SEND_THERMO_PROD_CYCLE_DATA";
public const string SEND_THERMO_PROD_INFO_DATA = "SEND_THERMO_PROD_INFO_DATA";
public const string SEND_THERMO_PROD_PANEL_DATA = "SEND_THERMO_PROD_PANEL_DATA";
public const string SEND_THERMO_RECIPE_CHANGED = "SEND_THERMO_RECIPE_CHANGED";
// MVVM Messages for Thermo active specs
public const string SEND_THERMO_RECIPE_FULL = "SEND_THERMO_RECIPE_FULL";
public const string SEND_THERMO_RECIPE_OVERWIEW = "SEND_THERMO_RECIPE_OVERWIEW";
public const string SEND_THERMO_RECIPE_SETPOINTHMI_CHANGED = "SEND_THERMO_RECIPE_SETPOINTHMI_CHANGED";
public const string SEND_THERMO_WARMERS_DATA = "SEND_THERMO_WARMERS_DATA";
public const string SEND_THREADS_STATUS = "THREAD_STATUS";
public const string SEND_USER_SOFTKEYS_DATA = "SEND_USER_SOFTKEYS_DATA";
// Names in the xml file
public const string SERVER_CONFIG_KEY = "serverConfig";
public const string SERVER_CONFIG_PATH = CONFIG_DIRECTORY + "serverConfig.xml";
public const string SERVER_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + @"serverConfigValidator.xsd";
public const string SHOW_MSG_UI = "SHOW_MSG_UI";
public const string SOFTKEY_HEAD_ID = "Head_";
public const string SOFTKEY_PREFIX_ID = "softkey_";
public const string TEMP_FOLDER = @"C:\CMS\ThermoActive\TMP\";
public const string TEMP_PP_FOLDER = TEMP_FOLDER + @"pp\";
public const string THERMO_DATA_FOLDER = "thermoprophet\\";
public const string THERMO_PROD_PATH = CONFIG_DIRECTORY + "thermoProdConfig.xml";
public const string THERMO_PROD_SCHEMA_PATH = RESOURCE_DIRECTORY + "thermoProdConfigValidator.xsd";
// THERMO SPEC
public const string THERMOCAM_CONFIG_PATH = CONFIG_DIRECTORY + "ThermoConf.json";
public const string USER_ID_KEY = "id";
public const string USER_SOFTKEYS_CONFIG_PATH = CONFIG_DIRECTORY + "userSoftKeyConfig.xml";
public const string USER_SOFTKEYS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "userSoftKeyConfigValidator.xsd";
public const string USERNAME_KEY = "username";
// Config File Names
public static readonly string BASE_PATH = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
public static readonly string[] VALID_FILE_EXTENSIONS = { "", ".txt", ".cnc", ".ini", ".mpf", ".spf" };
public static readonly string[] VALID_IMAGE_EXTENSIONS = { ".jpg", ".jpeg", ".png", ".bmp", ".gif" };
public static string CANDY_DUMMYFILE_PATH = BASE_PATH + "\\dll.dll";
public static string CMS_CONNECT_SETUP_ALARM_MESSAGE = "Error during CMS-Connect setup: Redis Db Not Found";
public static int DATABASE_PROCESS_TIMEOUT = 5;
public static string[] DATE_FORMATS = new[] {
"M-d-yyyy",
"dd-MM-yyyy",
"MM-dd-yyyy",
"M/d/yyyy",
"dd/MM/yyyy",
"MM/dd/yyyy",
"dd.MM.yyyy",
"MM.dd.yyyy"
};
public static string[] DATE_TIME_FORMATS = new[] {
"M-d-yyyy HH:mm",
"dd-MM-yyyy HH:mm",
"MM-dd-yyyy HH:mm",
"M/d/yyyy HH:mm",
"dd/MM/yyyy HH:mm",
"MM/dd/yyyy HH:mm"
};
public static bool IS_BETA = false;
public static string[] JOB_EXTENSIONS = { ".job", ".zip" };
public static string LANGUAGE_PACK_DIRECTORY = BASE_PATH + "\\languages\\";
public static string LANGUAGE_SCHEMA_PATH = BASE_PATH + "\\LanguageValidator.xsd";
public static string NOT_CONFIGURATED_ALARM_MESSAGE = "Alarm_id_{0} : Message not configurated";
public static string NOT_FOUND_ALARM_MESSAGE = "Alarm_id_{0} : Message not found";
public static string PARTPRG_LIST_FILE = "activePP.list";
public static string QUEUE_FILE_NAME = "pp";
#endregion Public Fields
#region Public Enums
public enum ACTIONS
{
READ,
WRITE
}
public enum ALARM_SOURCE
{
NC = 0,
PLC = 1
}
public enum ALARM_TYPE
{
ERROR = 0,
WARNING = 1
}
public enum ERROR_LEVEL
{
INFO = 1,
WARNING = 2,
ERROR = 3,
FATAL = 4
}
public enum HEAD_TYPE
{
SPINDLE = 0,
WJ = 1,
AWJ = 2,
LASER = 3
}
// Maintenances types
public enum MAINTENANCE_TYPE
{
EXP_DATE = 0,
MACHINE_INTERVAL = 1,
TIME_INTERVAL = 2
}
public enum MAINTENANCE_UNIT_OF_MEASURE
{
mm = 0,
D = 1,
H = 2,
M = 3
}
public enum QUEUE_ITEM_STATUS
{
NOT_ACTIVE = 0,
RUNNING = 1,
WAITING_OPERATOR = 2,
FINISHED = 3
}
public enum ROLE_IDS
{
CMS_SERVICE = 1,
CMS_UT = 2,
CUSTOMER_ADMIN = 3,
CUSTOMER_OPERATOR = 4,
CUSTOMER_MAINTAINER = 5
}
public enum SCADA_ELEMENT_TYPE
{
@@ -29,36 +284,10 @@ namespace Thermo.Active.Model
NEGATE_IMAGE = 5
}
public struct SCADA_ACTION
public enum SOFTKEY_PLACE : int
{
public static string READ = "read";
public static string WRITE = "write";
}
public const int MIN_CMS_ROLE = 100;
public const int MIN_ADMIN_ROLE = 30;
public enum ROLE_IDS
{
CMS_SERVICE = 1,
CMS_UT = 2,
CUSTOMER_ADMIN = 3,
CUSTOMER_OPERATOR = 4,
CUSTOMER_MAINTAINER = 5
}
public enum ACTIONS
{
READ,
WRITE
}
public enum ERROR_LEVEL
{
INFO = 1,
WARNING = 2,
ERROR = 3,
FATAL = 4
PADDLE = 0,
GANT = 1,
}
public enum SOFTKEY_TYPE
@@ -68,18 +297,67 @@ namespace Thermo.Active.Model
GROUP = 2
}
public enum SOFTKEY_PLACE : int
public enum TACT_AXES_TYPE
{
PADDLE = 0,
GANT = 1,
NA = 0,
LINEAR,
ROTATIONAL
}
public enum HEAD_TYPE
[JsonConverter(typeof(StringEnumConverter))]
public enum TACT_DOW
{
SPINDLE = 0,
WJ = 1,
AWJ = 2,
LASER = 3
Sunday = 0,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
public enum TACT_IO_TYPE
{
ND = 0,
/// <summary>
/// Digital IN
/// </summary>
DI,
/// <summary>
/// Digital OUT
/// </summary>
DO,
/// <summary>
/// Analog IN
/// </summary>
AI,
/// <summary>
/// Analog OUT
/// </summary>
AO
}
public enum TACT_MBLOCK_SECTION
{
ND = 0,
HEATING,
FORMING,
EXTRACTION
}
public enum TACT_MBLOCK_TYPE
{
ND = 0,
HEATING,
DRAWING,
MOVEMENT,
VACUUM,
COOLING,
EXTRACTION
}
public enum TACT_PARAM_TYPE
@@ -98,23 +376,6 @@ namespace Thermo.Active.Model
Options
}
public enum TACT_MBLOCK_TYPE
{
ND = 0,
HEATING,
DRAWING,
MOVEMENT,
VACUUM,
COOLING,
EXTRACTION
}
public enum TACT_AXES_TYPE
{
NA = 0,
LINEAR,
ROTATIONAL
}
[JsonConverter(typeof(StringEnumConverter))]
public enum TACT_PROD_CATEGORY
{
@@ -122,20 +383,6 @@ namespace Thermo.Active.Model
GAUGE
}
public enum TACT_MBLOCK_SECTION
{
ND = 0,
HEATING,
FORMING,
EXTRACTION
}
[JsonConverter(typeof(StringEnumConverter))]
public enum TACT_SCHED_TASK
{
ND = 0,
PRE_HEAT
}
[JsonConverter(typeof(StringEnumConverter))]
public enum TACT_SCHED_PERIOD
{
@@ -145,108 +392,106 @@ namespace Thermo.Active.Model
MONTH,
YEAR
}
[JsonConverter(typeof(StringEnumConverter))]
public enum TACT_DOW
public enum TACT_SCHED_TASK
{
Sunday = 0,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
ND = 0,
PRE_HEAT
}
public enum MAINTENANCE_UNIT_OF_MEASURE
#endregion Public Enums
#region Public Structs
public struct SCADA_ACTION
{
mm = 0,
D = 1,
H = 2,
M = 3
#region Public Fields
public static string READ = "read";
public static string WRITE = "write";
#endregion Public Fields
}
public enum ALARM_SOURCE
#endregion Public Structs
#region Public Classes
public static class API_ERROR_KEYS
{
NC = 0,
PLC = 1
#region Public Fields
public const string CUSTOMER_FILE_INVALID = "contactinfo_error_customer_configfile";
public const string DUPLICATED_USERNAME = "error_duplicated_username";
public const string ID_ALREADY_EXIST = "error_id_already_exist";
public const string IMPORT_FILE_NOT_VALID = "error_import_file_not_valid";
public const string INCORRECT_PARAMETERS = "error_incorrect_parameters";
public const string OPTION_NOT_ACTIVE = "error_option_not_active";
public const string PASSWORD_IS_INVALID = "error_password_is_invalid";
#endregion Public Fields
}
public enum ALARM_TYPE
public static class FUNCTIONALITY_NAMES
{
ERROR = 0,
WARNING = 1
}
#region Public Fields
// Maintenances types
public enum MAINTENANCE_TYPE
{
EXP_DATE = 0,
MACHINE_INTERVAL = 1,
TIME_INTERVAL = 2
}
public const string ALARM_CMD = "alarmCmd";
public const string AXES_SELECTION = "axesSoftkeys";
public const string GENERAL = "general";
public const string HEADS_CMD = "headsCmd";
public const string MAINTENANCE = "maintenance";
public const string NC_DATA = "ncData";
public const string NC_SOFTKEY = "ncSoftkeys";
public const string PROCESS_CMD = "processCmd";
public const string RECIPE_MANAGER = "thermoRecipeManager";
public const string RISC_MANAGER = "riscManager";
public const string STARTUP_ICONS = "startupIcons";
public const string THERMO_MANAGER = "thermoManager";
public const string USER_FUNCTIONS = "userFunctions";
public const string USER_SOFTKEY = "userSoftkeys";
public enum QUEUE_ITEM_STATUS
{
NOT_ACTIVE = 0,
RUNNING = 1,
WAITING_OPERATOR = 2,
FINISHED = 3
#endregion Public Fields
}
public const int MAX_NUM_OF_WATCHDOG_ERROR = 4;
public static class NC_VENDOR
{
#region Public Fields
public const string DEMO = "DEMO";
public const string FANUC = "FANUC";
public const string SIEMENS = "SIEMENS";
public const string OSAI = "OSAI";
public const string S7NET = "S7NET";
public const string SIEMENS = "SIEMENS";
#endregion Public Fields
}
// Database config
public const string DATABASE_USER = "root";
public const string DATABASE_PWD = "root";
public const string DATABASE_NAME = "ThermoActive";
// Registry key
public const string REGISTER_MACHINE_ID_KEY_NAME = "MachineUniqueId";
// Token fields Keys
public const string AUTHENTICATION_TYPE = "Bearer";
public const string MACHINE_ID_KEY = "machineId";
public const string ROLE_LEVEL_KEY = "roleLevel";
public const string USERNAME_KEY = "username";
public const string USER_ID_KEY = "id";
// Names in the xml file
public const string SERVER_CONFIG_KEY = "serverConfig";
public const string NC_CONFIG_KEY = "ncConfig";
public const string PROD_SFT_CONFIG_KEY = "softwareProdConfig";
public const string AREAS_CONFIG_KEY = "areasConfig";
// Active Areas
public class AREAS
{
#region Public Fields
public const string ALARMS_KEY = "alarms";
public const string GENERAL_KEY = "general";
public const string JOBEDITOR_KEY = "jobeditor";
public const string MAINTENANCE_KEY = "maintenance";
public const string PRODUCTION_KEY = "production";
public const string REPORT_KEY = "report";
public const string ALARMS_KEY = "alarms";
public const string MAINTENANCE_KEY = "maintenance";
public const string UTILITIES_KEY = "utilities";
public const string SCADA_KEY = "scada";
public const string GENERAL_KEY = "general";
public const string UNDER_HOOD = "underHood";
public const string JOBEDITOR_KEY = "jobeditor";
public const string USERS_KEY = "users";
public const string THERMO_KEY = "thermo";
public const string RISC_KEY = "risc";
public const string SCADA_KEY = "scada";
public const string THERMO_HOOD_KEY = "thermoHood";
public const string THERMO_KEY = "thermo";
public const string UNDER_HOOD = "underHood";
public const string USERS_KEY = "users";
public const string UTILITIES_KEY = "utilities";
#endregion Public Fields
}
// Config File Names
public static readonly string BASE_PATH = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
#endregion Public Classes
//public static readonly string BASE_PATH = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).Replace("\\lib", "");
#if DEBUG
@@ -258,201 +503,5 @@ namespace Thermo.Active.Model
public static readonly string CLIENT_PATH_86 = BASE_PATH + @"\Client\x86\" + CLIENT_EXE_NAME;
public static string WEBSITE_DIRECTORY = BASE_PATH + "\\view";
#endif
public const int numRecProdPanelGraph = 30;
public const string CONFIG_DIRECTORY = "Config\\";
public const string RECIPE_TEMPLATE_PATH = CONFIG_DIRECTORY + "Recipes\\template.tpl";
public const string LIVE_RECIPE_PATH = TEMP_FOLDER + "Recipes\\current.rcp";
public const string LIVE_SCHED_TASK_PATH = TEMP_FOLDER + "Recipes\\sched.tsk";
public const string RESOURCE_DIRECTORY = @"Thermo.Active.Config.Config.";
public const string SERVER_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + @"serverConfigValidator.xsd";
public const string SERVER_CONFIG_PATH = CONFIG_DIRECTORY + "serverConfig.xml";
public const string AREAS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "areasConfigValidator.xsd";
public const string AREAS_CONFIG_PATH = CONFIG_DIRECTORY + "areasConfig.xml";
public const string M156_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "inputOperatorConfigValidator.xsd";
public const string M156_CONFIG_PATH = CONFIG_DIRECTORY + "inputOperatorConfig.xml";
public const string CONNECT_DATAMODEL_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "dataModelConfigValidator.xsd";
public const string CONNECT_DATAMODEL_CONFIG_PATH = CONFIG_DIRECTORY + "DataModel.xml";
public const string MAINTENANCES_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "maintenancesConfigValidator.xsd";
public const string CUSTOMER_CONTACTS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "customerContactConfigValidator.xsd";
public const string MAINTENANCES_CONFIG_PATH = CONFIG_DIRECTORY + "maintenancesConfig.xml";
public const string CUSTOMER_CONTACTS = CMS_FOLDER_PATH + "ContactInfo.xml";
public const string USER_SOFTKEYS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "userSoftKeyConfigValidator.xsd";
public const string USER_SOFTKEYS_CONFIG_PATH = CONFIG_DIRECTORY + "userSoftKeyConfig.xml";
public const string ALARMS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "alarmsConfigValidator.xsd";
public const string ALARMS_CONFIG_PATH = CONFIG_DIRECTORY + "alarmsConfig.xml";
public const string HEADS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "headsConfigValidator.xsd";
public const string HEADS_CONFIG_PATH = CONFIG_DIRECTORY + "headsConfig.xml";
// THERMO SPEC
public const string THERMO_PROD_SCHEMA_PATH = RESOURCE_DIRECTORY + "thermoProdConfigValidator.xsd";
public const string THERMO_PROD_PATH = CONFIG_DIRECTORY + "thermoProdConfig.xml";
public const string RECIPE_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "recipeConfigValidator.xsd";
public const string RECIPE_CONFIG_PATH = CONFIG_DIRECTORY + "recipeConfig.xml";
public const string MODBLOCK_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "moduleBlockConfigValidator.xsd";
public const string MODBLOCK_CONFIG_PATH = CONFIG_DIRECTORY + "moduleBlockConfig.xml";
public const string RISK_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "risk2007Validator.xsd";
public const string RISK_CONFIG_PATH = CONFIG_DIRECTORY + "risk2007.xml";
public const string NC_SOFTKEYS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "ncSoftKeyConfigValidator.xsd";
public const string NC_SOFTKEYS_CONFIG_PATH = CONFIG_DIRECTORY + "ncSoftKeyConfig.xml";
public const string CMS_CONNECT_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "cmsConnectConfigValidator.xsd";
public const string CMS_CONNECT_CONFIG_PATH = CONFIG_DIRECTORY + "cmsConnectConfig.xml";
public const string MACROS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "macrosConfigValidator.xsd";
public const string MACROS_CONFIG_PATH = CONFIG_DIRECTORY + "macrosConfig.xml";
public const string AXES_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + @"axesConfigValidator.xsd";
public const string AXES_CONFIG_PATH = CONFIG_DIRECTORY + "axesConfig.xml";
public const string MAIN_PROGRAM_CONFIG_PATH = CONFIG_DIRECTORY + "customMainProgram.txt";
public static string LANGUAGE_PACK_DIRECTORY = BASE_PATH + "\\languages\\";
public static string LANGUAGE_SCHEMA_PATH = BASE_PATH + "\\LanguageValidator.xsd";
public const string SCADA_PAGES_SCHEMA_PATH = RESOURCE_DIRECTORY + "scadaValidator.xsd";
public static string CANDY_DUMMYFILE_PATH = BASE_PATH + "\\dll.dll";
public static string PARTPRG_LIST_FILE = "activePP.list";
// MVVM Messages to server UI
public const string SEND_STOP_SERVER = "STOP_SERVER";
public const string SEND_MESSAGE = "SEND_MESSAGE";
public const string SEND_STOP_THREADS = "SEND_STOP_THREADS";
public const string SEND_NC_STATUS = "NC_STATUS";
public const string SEND_NC_STATUS_UI = "NC_STATUS_UI";
public const string SEND_THREADS_STATUS = "THREAD_STATUS";
public const string SEND_CMSCONNECT_GW_REBOOT_STATUS = "SEND_CMSCONNECT_GW_REBOOT_STATUS";
public const string SHOW_MSG_UI = "SHOW_MSG_UI";
public const string SEND_ERROR_TO_UI = "SEND_ERROR_TO_UI";
// MVVM Messages to signalR tasks
public const string SEND_ALARMS = "SEND_ALARMS";
public const string SEND_POWER_ON_DATA = "SEND_POWER_ON_DATA";
public const string SEND_GENERIC_DATA = "SEND_GENERIC_DATA";
public const string SEND_PROCESSES_DATA = "SEND_PROCESSES_STATUS";
public const string SEND_FUNCTIONALITY_DATA = "SEND_FUNCTION_DATA";
public const string SEND_EXPIRED_MAINTENANCES_DATA = "SEND_EXPIRED_MAINTENANCES_DATA";
public const string SEND_USER_SOFTKEYS_DATA = "SEND_USER_SOFTKEYS_DATA";
public const string SEND_NC_SOFTKEYS_DATA = "SEND_NC_SOFTKEYS_DATA";
public const string SEND_HEADS_DATA = "SEND_HEADS_DATA";
public const string SEND_AXIS_INFO = "SEND_AXIS_INFO";
public const string SEND_ACTIVE_PROGRAM_DATA = "SEND_ACTIVE_PROGRAM_DATA";
public const string SEND_QUEUE_DATA = "SEND_QUEUE_DATA";
public const string SEND_M155_DATA = "SEND_M155_DATA";
public const string SEND_M156_DATA = "SEND_M156_DATA";
public const string SEND_SCADA_DATA = "SEND_SCADA_DATA";
// MVVM Messages for Thermo active specs
public const string SEND_THERMO_RECIPE_FULL = "SEND_THERMO_RECIPE_FULL";
public const string SEND_THERMO_RECIPE_OVERWIEW = "SEND_THERMO_RECIPE_OVERWIEW";
public const string SEND_THERMO_RECIPE_CHANGED = "SEND_THERMO_RECIPE_CHANGED";
public const string SEND_THERMO_RECIPE_SETPOINTHMI_CHANGED = "SEND_THERMO_RECIPE_SETPOINTHMI_CHANGED";
public const string SEND_THERMO_MODULE_DATA = "SEND_THERMO_MODULE_DATA";
public const string SEND_THERMO_WARMERS_DATA = "SEND_THERMO_WARMERS_DATA";
public const string SEND_THERMO_AREA_DATA = "SEND_THERMO_AREA_DATA";
public const string SEND_THERMO_GAUGE_DATA = "SEND_THERMO_GAUGE_DATA";
public const string SEND_THERMO_PROD_PANEL_DATA = "SEND_THERMO_PROD_PANEL_DATA";
public const string SEND_THERMO_PROD_INFO_DATA = "SEND_THERMO_PROD_INFO_DATA";
public const string SEND_THERMO_PROD_CYCLE_DATA = "SEND_THERMO_PROD_CYCLE_DATA";
public const string BROADCAST_DATA = "BROADCAST_DATA";
// ID prefix
public const string MAINTENANCE_PREFIX_ID = "maint_";
public const string MAINTENANCE_DESC_PREFIX_ID = "maint_desc_";
public const string SOFTKEY_PREFIX_ID = "softkey_";
public const string SOFTKEY_HEAD_ID = "Head_";
public const string ALARM_PREFIX = "alarm_";
public static class FUNCTIONALITY_NAMES
{
public const string GENERAL = "general";
public const string USER_FUNCTIONS = "userFunctions";
public const string NC_DATA = "ncData";
public const string ALARM_CMD = "alarmCmd";
public const string STARTUP_ICONS = "startupIcons";
public const string PROCESS_CMD = "processCmd";
public const string NC_SOFTKEY = "ncSoftkeys";
public const string USER_SOFTKEY = "userSoftkeys";
public const string HEADS_CMD = "headsCmd";
public const string MAINTENANCE = "maintenance";
public const string AXES_SELECTION = "axesSoftkeys";
public const string THERMO_MANAGER = "thermoManager";
public const string RISC_MANAGER = "riscManager";
public const string RECIPE_MANAGER = "thermoRecipeManager";
}
public static class API_ERROR_KEYS
{
public const string INCORRECT_PARAMETERS = "error_incorrect_parameters";
public const string OPTION_NOT_ACTIVE = "error_option_not_active";
public const string ID_ALREADY_EXIST = "error_id_already_exist";
public const string PASSWORD_IS_INVALID = "error_password_is_invalid";
public const string IMPORT_FILE_NOT_VALID = "error_import_file_not_valid";
public const string DUPLICATED_USERNAME = "error_duplicated_username";
public const string CUSTOMER_FILE_INVALID = "contactinfo_error_customer_configfile";
}
// File paths
public const string CLIENT_EXE_NAME = @"Active_Client.exe";
public const string CLIENT_EXE_NAME_NOEXT = @"Active_Client";
public const string MAINTENANCE_ATTACHMENT_PATH = @"C:\CMS\Active\attachment\maintenance\";
public const string CMS_FOLDER_PATH = @"C:\CMS\";
public const string ALARM_ATTACHMENT_PATH = @"C:\CMS\Active\attachment\alarm\";
public const string TEMP_FOLDER = @"C:\CMS\ThermoActive\TMP\";
public const string TEMP_PP_FOLDER = TEMP_FOLDER + @"pp\";
public const string JOB_TMP_DIRECTORY = TEMP_PP_FOLDER + @"job\";
public const string QUEUE_TMP_FOLDER = TEMP_PP_FOLDER + @"queue\";
public const string PART_PRG_IMAGES = TEMP_FOLDER + @"pp_img\";
public const string SCADA_DIRECTORY = @"C:\CMS\Active\scada\";
public static readonly string[] VALID_FILE_EXTENSIONS = { "", ".txt", ".cnc", ".ini", ".mpf", ".spf" };
public static readonly string[] VALID_IMAGE_EXTENSIONS = { ".jpg", ".jpeg", ".png", ".bmp", ".gif" };
public const double EPSILON = 0.1;
public static string QUEUE_FILE_NAME = "pp";
public const string JOB_MAIN_FILENAME = "main.cnc";
public const string JOB_METADATA_FILENAME = "metadata.json";
public static string[] JOB_EXTENSIONS = { ".job", ".zip" };
public static string[] DATE_TIME_FORMATS = new[] {
"M-d-yyyy HH:mm",
"dd-MM-yyyy HH:mm",
"MM-dd-yyyy HH:mm",
"M/d/yyyy HH:mm",
"dd/MM/yyyy HH:mm",
"MM/dd/yyyy HH:mm"
};
public static string[] DATE_FORMATS = new[] {
"M-d-yyyy",
"dd-MM-yyyy",
"MM-dd-yyyy",
"M/d/yyyy",
"dd/MM/yyyy",
"MM/dd/yyyy",
"dd.MM.yyyy",
"MM.dd.yyyy"
};
}
}
@@ -12,5 +12,6 @@ namespace Thermo.Active.Model.DTOModels
public AreasConfigModel ScadaConfig;
public AreasConfigModel JobEditorConfig;
public AreasConfigModel UsersConfig;
public AreasConfigModel ThermoHoodConfig;
}
}
@@ -10,14 +10,26 @@ namespace Thermo.Active.Model.DTOModels.ThAxes
public class DTOAxisInfoModel
{
/// <summary>
/// Actual position
/// Axes ID
/// </summary>
public int ID { get; set; } = 0;
/// <summary>
/// Actual position
/// Axes Name
/// </summary>
public string name { get; set; } = "";
/// <summary>
/// visible in the page
/// </summary>
public bool visible { get; set; } = false;
/// <summary>
/// Master (0--> is master, > 0 --> is slave)
/// </summary>
public int masterID { get; set; } = 0;
/// <summary>
/// Enabled command in Word mode
/// </summary>
public AxisCommand enabledWord { get; set; } = 0;
/// <summary>
/// Type of axis
/// </summary>
public string type { get; set; } = "";
@@ -53,6 +65,10 @@ namespace Thermo.Active.Model.DTOModels.ThAxes
return false;
if (ID != item.ID)
return false;
if (masterID != item.masterID)
return false;
if (enabledWord != item.enabledWord)
return false;
if (name != item.name)
return false;
if (Math.Round(Math.Abs(position - item.position), 1) >= Constants.EPSILON)
@@ -134,4 +150,26 @@ namespace Thermo.Active.Model.DTOModels.ThAxes
}
#endif
}
[Flags]
public enum AxisCommand
{
None = 0,
MoveAbsolute = 1 << 0,
JogIncPlus = 1 << 1,
JogIncMinus = 1 << 2,
Align = 1 << 3,
Probe = 1 << 4,
SetSlavePosition = 1 << 5,
Reset = 1 << 6,
Num07 = 1 << 7,
Num08 = 1 << 8,
Num09 = 1 << 9,
Num10 = 1 << 10,
Num11 = 1 << 11,
Num12 = 1 << 12,
Num13 = 1 << 13,
Num14 = 1 << 14,
Num15 = 1 << 15,
}
}
@@ -0,0 +1,191 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThIO
{
public class DTOChannelsIO
{
public List<DigitalIN> DI { get; set; } = new List<DigitalIN>();
public List<DigitalOUT> DO { get; set; } = new List<DigitalOUT>();
public List<AnalogIN> AI { get; set; } = new List<AnalogIN>();
public List<AnalogOUT> AO { get; set; } = new List<AnalogOUT>();
}
public class DigitalIN : IoItemConf
{
public bool Value { get; set; } = false;
public override bool Equals(object obj)
{
if (!(obj is DigitalIN item))
return false;
if (Id != item.Id)
return false;
if (Bank != item.Bank)
return false;
if (Position != item.Position)
return false;
if (Page != item.Page)
return false;
if (Wire != Wire)
return false;
if (Profinet != item.Profinet)
return false;
if (Label != item.Label)
return false;
if (Visible != item.Visible)
return false;
if (Value != item.Value)
return false;
return true;
}
/// <summary>
/// Hash gen
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class AnalogIN : IoItemConf
{
public int Value { get; set; } = 0;
public override bool Equals(object obj)
{
if (!(obj is AnalogIN item))
return false;
if (Id != item.Id)
return false;
if (Bank != item.Bank)
return false;
if (Position != item.Position)
return false;
if (Page != item.Page)
return false;
if (Wire != Wire)
return false;
if (Profinet != item.Profinet)
return false;
if (Label != item.Label)
return false;
if (Visible != item.Visible)
return false;
if (Value != item.Value)
return false;
return true;
}
/// <summary>
/// Hash gen
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class DigitalOUT : DigitalIN
{
public bool ForceEnabled { get; set; } = true;
public bool ForceZero { get; set; } = false;
public bool ForceOne { get; set; } = false;
public bool IsForced { get; set; } = false;
public override bool Equals(object obj)
{
if (!(obj is DigitalOUT item))
return false;
if (Id != item.Id)
return false;
if (Bank != item.Bank)
return false;
if (Position != item.Position)
return false;
if (Page != item.Page)
return false;
if (Wire != Wire)
return false;
if (Profinet != item.Profinet)
return false;
if (Label != item.Label)
return false;
if (Visible != item.Visible)
return false;
if (Value != item.Value)
return false;
if (ForceEnabled != item.ForceEnabled)
return false;
if (ForceZero != item.ForceZero)
return false;
if (ForceOne != item.ForceOne)
return false;
if (IsForced != item.IsForced)
return false;
return true;
}
/// <summary>
/// Hash gen
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class AnalogOUT : AnalogIN
{
public bool ForceEnabled { get; set; } = true;
public int ForcedValue { get; set; } = 0;
public bool IsForced { get; set; } = false;
public override bool Equals(object obj)
{
if (!(obj is AnalogOUT item))
return false;
if (Id != item.Id)
return false;
if (Bank != item.Bank)
return false;
if (Position != item.Position)
return false;
if (Page != item.Page)
return false;
if (Wire != Wire)
return false;
if (Profinet != item.Profinet)
return false;
if (Label != item.Label)
return false;
if (Visible != item.Visible)
return false;
if (Value != item.Value)
return false;
if (ForceEnabled != item.ForceEnabled)
return false;
if (ForcedValue != item.ForcedValue)
return false;
if (IsForced != item.IsForced)
return false;
return true;
}
/// <summary>
/// Hash gen
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
@@ -0,0 +1,136 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThIO
{
public class DTOChannelsIOVal
{
public List<DigInVal> DI { get; set; } = new List<DigInVal>();
public List<DigOutVal> DO { get; set; } = new List<DigOutVal>();
public List<AnalInVal> AI { get; set; } = new List<AnalInVal>();
public List<AnalOutVal> AO { get; set; } = new List<AnalOutVal>();
}
public class DigInVal: IoItem
{
public bool Value { get; set; } = false;
public override bool Equals(object obj)
{
if (!(obj is DigInVal item))
return false;
if (Id != item.Id)
return false;
if (Value != item.Value)
return false;
return true;
}
/// <summary>
/// Hash gen
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class AnalInVal: IoItem
{
public int Value { get; set; } = 0;
public override bool Equals(object obj)
{
if (!(obj is AnalInVal item))
return false;
if (Id != item.Id)
return false;
if (Value != item.Value)
return false;
return true;
}
/// <summary>
/// Hash gen
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class DigOutVal : DigInVal
{
public bool ForceEnabled { get; set; } = true;
public bool ForceZero { get; set; } = false;
public bool ForceOne { get; set; } = false;
public bool IsForced { get; set; } = false;
public override bool Equals(object obj)
{
if (!(obj is DigOutVal item))
return false;
if (Id != item.Id)
return false;
if (ForceEnabled != item.ForceEnabled)
return false;
if (ForceZero != item.ForceZero)
return false;
if (ForceOne != item.ForceOne)
return false;
if (IsForced != item.IsForced)
return false;
if (Value != item.Value)
return false;
return true;
}
/// <summary>
/// Hash gen
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class AnalOutVal : AnalInVal
{
public bool ForceEnabled { get; set; } = true;
public int ForcedValue { get; set; } = 0;
public bool IsForced { get; set; } = false;
public override bool Equals(object obj)
{
if (!(obj is AnalOutVal item))
return false;
if (Id != item.Id)
return false;
if (ForceEnabled != item.ForceEnabled)
return false;
if (ForcedValue != item.ForcedValue)
return false;
if (IsForced != item.IsForced)
return false;
if (Value != item.Value)
return false;
return true;
}
/// <summary>
/// Hash gen
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThIO
{
public class DTOChannelsSetup
{
public List<string> DI { get; set; } = new List<string>();
public List<string> DO { get; set; } = new List<string>();
public List<string> AI { get; set; } = new List<string>();
public List<string> AO { get; set; } = new List<string>();
}
}
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThIO
{
public class DTOCycleLog
{
public List<CycleEvent> events { get; set; } = new List<CycleEvent>();
}
public class CycleEvent
{
public DateTime dtEvent { get; set; }
public int code { get; set; } = 0;
}
}
@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThIO
{
public class IoItem
{
public int Id { get; set; } = 0;
}
public class IoItemDigi : IoItem
{
public bool value { get; set; } = false;
}
public class IoItemAnal : IoItem
{
public int value { get; set; } = 0;
}
public class IoItemConf : IoItem
{
public string Bank { get; set; } = "0";
public string Position { get; set; } = "0";
public string Page { get; set; } = "0";
public string Wire { get; set; } = "0";
public string Profinet { get; set; } = "0";
public string Label { get; set; } = "LBL";
public bool Visible { get; set; } = true;
public override bool Equals(object obj)
{
if (!(obj is IoItemConf item))
return false;
if (Id != item.Id)
return false;
if (Bank != item.Bank)
return false;
if (Position != item.Position)
return false;
if (Page != item.Page)
return false;
if (Wire != Wire)
return false;
if (Profinet != item.Profinet)
return false;
if (Label != item.Label)
return false;
if (Visible != item.Visible)
return false;
return true;
}
/// <summary>
/// Hash gen
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
@@ -7,95 +7,112 @@ using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThProd
{
public class DTOProdInfo
{
public DateTime DtEvent { get; set; }
public short NumTarget { get; set; } = 0;
public short NumDone { get; set; } = 0;
public double TimeWarm { get; set; } = 0;
public double TimeVent { get; set; } = 0;
public double TimeVacuum { get; set; } = 0;
public double TimeCycleGross { get; set; } = 0;
public double TimeCycleNet { get; set; } = 0;
public int NumDec { get; set; } = 1;
public int ScaleFactor { get; set; } = 1000;
public double MaterialTempEndWarm { get; set; } = 0;
public double MaterialTempEndVent { get; set; } = 0;
public double MoldTemp { get; set; } = 0;
public double VacuumReadVal { get; set; } = 0;
public double MouldEnergyOUT { get; set; } = 0;
public double MouldEnergyIN { get; set; } = 0;
public bool IsScrap { get; set; } = false;
public short NumPreHot { get; set; } = 0;
public override bool Equals(object obj)
public class DTOProdInfo
{
// Object is not a GaugeModel instance
if (!(obj is DTOProdInfo item))
return false;
#region Public Constructors
if (DtEvent != item.DtEvent)
return false;
if (NumTarget != item.NumTarget)
return false;
if (NumDone != item.NumDone)
return false;
if (Math.Round(Math.Abs(TimeWarm - item.TimeWarm), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(TimeVent - item.TimeVent), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(TimeVacuum - item.TimeVacuum), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(TimeCycleGross - item.TimeCycleGross), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(TimeCycleNet - item.TimeCycleNet), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MaterialTempEndWarm - item.MaterialTempEndWarm), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MaterialTempEndVent - item.MaterialTempEndVent), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MoldTemp - item.MoldTemp), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(VacuumReadVal - item.VacuumReadVal), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MouldEnergyOUT - item.MouldEnergyOUT), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MouldEnergyIN - item.MouldEnergyIN), 1) >= Constants.EPSILON)
return false;
if (IsScrap != item.IsScrap)
return false;
if (NumPreHot != item.NumPreHot)
return false;
public DTOProdInfo()
{
}
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public DTOProdInfo(ThermoModels.ProdInfoModel pimRawData)
{
this.DtEvent = pimRawData.DtEvent;
this.NumDone = pimRawData.NumDone;
this.NumTarget = pimRawData.NumTarget;
this.ThermoImage = pimRawData.ThermoImage;
this.TimeCycleGross = Math.Round((double)pimRawData.TimeCycleGross / this.ScaleFactor, 2);
this.TimeCycleNet = Math.Round((double)pimRawData.TimeCycleNet / this.ScaleFactor, 2);
this.TimeVacuum = Math.Round((double)pimRawData.TimeVacuum / this.ScaleFactor, 2);
this.TimeVent = Math.Round((double)pimRawData.TimeVent / this.ScaleFactor, 2);
this.TimeWarm = Math.Round((double)pimRawData.TimeWarm / this.ScaleFactor, 2);
this.MaterialTempEndWarm = pimRawData.MaterialTempEndWarm;
this.MaterialTempEndVent = pimRawData.MaterialTempEndVent;
this.MoldTemp = pimRawData.MoldTemp;
this.VacuumReadVal = pimRawData.VacuumReadVal;
this.MouldEnergyIN = pimRawData.MouldEnergyIN;
this.MouldEnergyOUT = pimRawData.MouldEnergyOUT;
this.IsScrap = pimRawData.IsScrap;
this.NumPreHot = pimRawData.NumPreHot;
}
public DTOProdInfo()
{
}
#endregion Public Constructors
public DTOProdInfo(ThermoModels.ProdInfoModel pimRawData)
{
this.DtEvent = pimRawData.DtEvent;
this.NumDone = pimRawData.NumDone;
this.NumTarget = pimRawData.NumTarget;
this.TimeCycleGross = Math.Round((double)pimRawData.TimeCycleGross / this.ScaleFactor, 2);
this.TimeCycleNet = Math.Round((double)pimRawData.TimeCycleNet / this.ScaleFactor, 2);
this.TimeVacuum = Math.Round((double)pimRawData.TimeVacuum / this.ScaleFactor, 2);
this.TimeVent = Math.Round((double)pimRawData.TimeVent / this.ScaleFactor, 2);
this.TimeWarm = Math.Round((double)pimRawData.TimeWarm / this.ScaleFactor, 2);
this.MaterialTempEndWarm = pimRawData.MaterialTempEndWarm;
this.MaterialTempEndVent = pimRawData.MaterialTempEndVent;
this.MoldTemp = pimRawData.MoldTemp;
this.VacuumReadVal = pimRawData.VacuumReadVal;
this.MouldEnergyIN = pimRawData.MouldEnergyIN;
this.MouldEnergyOUT = pimRawData.MouldEnergyOUT;
this.IsScrap = pimRawData.IsScrap;
this.NumPreHot = pimRawData.NumPreHot;
#region Public Properties
public DateTime DtEvent { get; set; }
public bool IsScrap { get; set; } = false;
public double MaterialTempEndVent { get; set; } = 0;
public double MaterialTempEndWarm { get; set; } = 0;
public double MoldTemp { get; set; } = 0;
public double MouldEnergyIN { get; set; } = 0;
public double MouldEnergyOUT { get; set; } = 0;
public int NumDec { get; set; } = 1;
public short NumDone { get; set; } = 0;
public short NumPreHot { get; set; } = 0;
public short NumTarget { get; set; } = 0;
public int ScaleFactor { get; set; } = 1000;
public string ThermoImage { get; set; } = "";
public double TimeCycleGross { get; set; } = 0;
public double TimeCycleNet { get; set; } = 0;
public double TimeVacuum { get; set; } = 0;
public double TimeVent { get; set; } = 0;
public double TimeWarm { get; set; } = 0;
public double VacuumReadVal { get; set; } = 0;
#endregion Public Properties
#region Public Methods
public override bool Equals(object obj)
{
// Object is not a GaugeModel instance
if (!(obj is DTOProdInfo item))
return false;
if (DtEvent != item.DtEvent)
return false;
if (NumTarget != item.NumTarget)
return false;
if (NumDone != item.NumDone)
return false;
if (ThermoImage != item.ThermoImage)
return false;
if (Math.Round(Math.Abs(TimeWarm - item.TimeWarm), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(TimeVent - item.TimeVent), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(TimeVacuum - item.TimeVacuum), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(TimeCycleGross - item.TimeCycleGross), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(TimeCycleNet - item.TimeCycleNet), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MaterialTempEndWarm - item.MaterialTempEndWarm), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MaterialTempEndVent - item.MaterialTempEndVent), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MoldTemp - item.MoldTemp), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(VacuumReadVal - item.VacuumReadVal), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MouldEnergyOUT - item.MouldEnergyOUT), 1) >= Constants.EPSILON)
return false;
if (Math.Round(Math.Abs(MouldEnergyIN - item.MouldEnergyIN), 1) >= Constants.EPSILON)
return false;
if (IsScrap != item.IsScrap)
return false;
if (NumPreHot != item.NumPreHot)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
#endregion Public Methods
}
}
}
}
@@ -8,19 +8,37 @@ namespace Thermo.Active.Model.DTOModels.ThWarmers
{
public class DTOThermoCam
{
#region Public Properties
/// <summary>
/// Opzione ThermoCamera (set by PLC)
/// Thermo Image Size
/// </summary>
public bool ThermoOptionActive { get; set; } = false;
public Size ImageSize { get; set; } = new Size();
/// <summary>
/// Thermo Temperature Range
/// </summary>
public RangeVal RangeTemperature { get; set; } = new RangeVal();
/// <summary>
/// Modalità ThermoCamera (set by HMI)
/// </summary>
public bool ThermoCamMode { get; set; } = false;
/// <summary>
/// Funzionamento ThermoCamera (set by HMI)
/// </summary>
public bool ThermoCamOnOff { get; set; } = false;
/// <summary>
/// Opzione ThermoCamera (set by PLC)
/// </summary>
public bool ThermoOptionActive { get; set; } = false;
#endregion Public Properties
#region Public Methods
/// <summary>
/// Equality test for class object
/// </summary>
@@ -37,6 +55,10 @@ namespace Thermo.Active.Model.DTOModels.ThWarmers
return false;
if (ThermoCamOnOff != item.ThermoCamOnOff)
return false;
if (ImageSize != item.ImageSize)
return false;
if (RangeTemperature != item.RangeTemperature)
return false;
return true;
}
@@ -49,5 +71,41 @@ namespace Thermo.Active.Model.DTOModels.ThWarmers
{
return base.GetHashCode();
}
#endregion Public Methods
}
}
public class RangeVal
{
#region Public Properties
/// <summary>
/// VAlore MASSIMO
/// </summary>
public double Max { get; set; } = 50;
/// <summary>
/// Valore minimo
/// </summary>
public double Min { get; set; } = 0;
#endregion Public Properties
}
public class Size
{
#region Public Properties
/// <summary>
/// Dimensione X
/// </summary>
public int X { get; set; } = 100;
/// <summary>
/// Dimensione X
/// </summary>
public int Y { get; set; } = 100;
#endregion Public Properties
}
}
@@ -8,14 +8,31 @@ namespace Thermo.Active.Model.DTOModels.ThWarmers
{
public class ThermoPoint
{
#region Public Properties
public int X { get; set; } = 0;
public int Y { get; set; } = 0;
#endregion Public Properties
#region Public Methods
public static int distance(ThermoPoint a, ThermoPoint b)
{
int answ = 0;
answ = (int)Math.Sqrt(Math.Pow((a.X - b.X), 2) + Math.Pow((a.Y - b.Y), 2));
return answ;
}
#endregion Public Methods
}
}
public class ThermoPointFlir : ThermoPoint
{
#region Public Properties
public float Temperature { get; set; } = 0;
#endregion Public Properties
}
}
@@ -7,43 +7,58 @@ namespace Thermo.Active.Model.DatabaseModels
[Table("ProdInfo")]
public class ProdInfoModel
{
#region Public Properties
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Column("DtEvent", Order = 0)]
public DateTime DtEvent { get; set; }
[Column("NumTarget")]
public short NumTarget { get; set; }
[Column("NumDone")]
public short NumDone { get; set; }
[Column("TimeWarm")]
public int TimeWarm { get; set; }
[Column("TimeVent")]
public int TimeVent { get; set; }
[Column("TimeVacuum")]
public int TimeVacuum { get; set; }
[Column("TimeCycleGross")]
public int TimeCycleGross { get; set; }
[Column("TimeCycleNet")]
public int TimeCycleNet { get; set; }
[Column("MaterialTempEndWarm")]
public double MaterialTempEndWarm { get; set; }
[Column("MaterialTempEndVent")]
public double MaterialTempEndVent { get; set; }
[Column("MoldTemp")]
public double MoldTemp { get; set; }
[Column("VacuumReadVal")]
public double VacuumReadVal { get; set; }
[Column("MouldEnergyOUT")]
public double MouldEnergyOUT { get; set; }
[Column("MouldEnergyIN")]
public double MouldEnergyIN { get; set; }
[Column("IsScrap")]
public bool IsScrap { get; set; }
[Column("MaterialTempEndVent")]
public float MaterialTempEndVent { get; set; }
[Column("MaterialTempEndWarm")]
public float MaterialTempEndWarm { get; set; }
[Column("MoldTemp")]
public float MoldTemp { get; set; }
[Column("MouldEnergyIN")]
public float MouldEnergyIN { get; set; }
[Column("MouldEnergyOUT")]
public float MouldEnergyOUT { get; set; }
[Column("NumDone")]
public short NumDone { get; set; }
[Column("NumTarget")]
public short NumTarget { get; set; }
[Column("ThermoImage")]
public string ThermoImage { get; set; }
[Column("TimeCycleGross")]
public int TimeCycleGross { get; set; }
[Column("TimeCycleNet")]
public int TimeCycleNet { get; set; }
[Column("TimeVacuum")]
public int TimeVacuum { get; set; }
[Column("TimeVent")]
public int TimeVent { get; set; }
[Column("TimeWarm")]
public int TimeWarm { get; set; }
[Column("VacuumReadVal")]
public float VacuumReadVal { get; set; }
#endregion Public Properties
}
}
}
@@ -66,6 +66,7 @@
<Compile Include="ConfigModels\ExtSoftwareModel.cs" />
<Compile Include="ConfigModels\InputOperatorConfigModel.cs" />
<Compile Include="ConfigModels\AxesConfigModel.cs" />
<Compile Include="ConfigModels\IOConfigModel.cs" />
<Compile Include="ConfigModels\ThermoProdConfigModel.cs" />
<Compile Include="ConfigModels\ModBlockConfigModel.cs" />
<Compile Include="ConfigModels\RiskConfigModel.cs" />
@@ -112,6 +113,11 @@
<Compile Include="DTOModels\DTOM156InputModel.cs" />
<Compile Include="DTOModels\DTOMessageModel.cs" />
<Compile Include="DTOModels\ThAxes\DTOAxisInfoModel.cs" />
<Compile Include="DTOModels\ThIO\DTOChannelsIOVal.cs" />
<Compile Include="DTOModels\ThIO\DTOCycleLog.cs" />
<Compile Include="DTOModels\ThIO\DTOChannelsSetup.cs" />
<Compile Include="DTOModels\ThIO\DTOChannelsIO.cs" />
<Compile Include="DTOModels\ThIO\IoItemConf.cs" />
<Compile Include="DTOModels\ThModules\DTOModulesBlock.cs" />
<Compile Include="DTOModels\ThProd\DTOProdInfo.cs" />
<Compile Include="DTOModels\ThProd\DTOThermoPanelProd.cs" />
File diff suppressed because it is too large Load Diff
+5 -1
View File
@@ -28,7 +28,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
@@ -38,6 +38,10 @@
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+400 -400
View File
@@ -30,436 +30,436 @@ namespace Thermo.Active.UI
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServerControlWindow));
this.StepNotifyIcon = new System.Windows.Forms.NotifyIcon(this.components);
this.NotifyIconMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.adminMachineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.passwordToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.goBackToStandardModeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator();
this.resetSpindleHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.resetCountersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.resetMachineWorkingHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.StopServerItem = new System.Windows.Forms.ToolStripMenuItem();
this.TXTstatus = new System.Windows.Forms.TextBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.stopServerButton = new System.Windows.Forms.Button();
this.openUiButton = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.label3 = new System.Windows.Forms.Label();
this.TXTVersion = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.TXTType = new System.Windows.Forms.Label();
this.CHNcConnected = new System.Windows.Forms.CheckBox();
this.label2 = new System.Windows.Forms.Label();
this.TXTMachId = new System.Windows.Forms.Label();
this.LISTThreadStatus = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.menuToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.closeCMSServerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.serviceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.passwordToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.goBackToStandardModeToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.resetSpindleHoursToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.resetCountersToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.resetMachineWorkingHoursToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.NotifyIconMenu.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
//
// StepNotifyIcon
//
this.StepNotifyIcon.BalloonTipText = "Active";
this.StepNotifyIcon.ContextMenuStrip = this.NotifyIconMenu;
this.StepNotifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("StepNotifyIcon.Icon")));
this.StepNotifyIcon.Text = "Active";
this.StepNotifyIcon.Visible = true;
this.StepNotifyIcon.DoubleClick += new System.EventHandler(this.NotifyIcon_Click);
//
// NotifyIconMenu
//
this.NotifyIconMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServerControlWindow));
this.StepNotifyIcon = new System.Windows.Forms.NotifyIcon(this.components);
this.NotifyIconMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.adminMachineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.passwordToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.goBackToStandardModeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator();
this.resetSpindleHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.resetCountersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.resetMachineWorkingHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.StopServerItem = new System.Windows.Forms.ToolStripMenuItem();
this.TXTstatus = new System.Windows.Forms.TextBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.stopServerButton = new System.Windows.Forms.Button();
this.openUiButton = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.label3 = new System.Windows.Forms.Label();
this.TXTVersion = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.TXTType = new System.Windows.Forms.Label();
this.CHNcConnected = new System.Windows.Forms.CheckBox();
this.label2 = new System.Windows.Forms.Label();
this.TXTMachId = new System.Windows.Forms.Label();
this.LISTThreadStatus = new System.Windows.Forms.ListView();
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.menuToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.closeCMSServerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.serviceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.passwordToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.goBackToStandardModeToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.resetSpindleHoursToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.resetCountersToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.resetMachineWorkingHoursToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.NotifyIconMenu.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
//
// StepNotifyIcon
//
this.StepNotifyIcon.BalloonTipText = "Active";
this.StepNotifyIcon.ContextMenuStrip = this.NotifyIconMenu;
this.StepNotifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("StepNotifyIcon.Icon")));
this.StepNotifyIcon.Text = "Active";
this.StepNotifyIcon.Visible = true;
this.StepNotifyIcon.DoubleClick += new System.EventHandler(this.NotifyIcon_Click);
//
// NotifyIconMenu
//
this.NotifyIconMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.adminMachineToolStripMenuItem,
this.toolStripSeparator3,
this.StopServerItem});
this.NotifyIconMenu.Name = "NotifyIconMenu";
this.NotifyIconMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
this.NotifyIconMenu.Size = new System.Drawing.Size(175, 54);
//
// adminMachineToolStripMenuItem
//
this.adminMachineToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.NotifyIconMenu.Name = "NotifyIconMenu";
this.NotifyIconMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
this.NotifyIconMenu.Size = new System.Drawing.Size(175, 54);
//
// adminMachineToolStripMenuItem
//
this.adminMachineToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.passwordToolStripMenuItem,
this.goBackToStandardModeToolStripMenuItem,
this.toolStripSeparator,
this.resetSpindleHoursToolStripMenuItem,
this.resetCountersToolStripMenuItem,
this.resetMachineWorkingHoursToolStripMenuItem});
this.adminMachineToolStripMenuItem.Name = "adminMachineToolStripMenuItem";
this.adminMachineToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
this.adminMachineToolStripMenuItem.Text = "Service";
//
// passwordToolStripMenuItem
//
this.passwordToolStripMenuItem.Image = global::Thermo.Active.UI.Properties.Resources.Apps_Lock_icon;
this.passwordToolStripMenuItem.Name = "passwordToolStripMenuItem";
this.passwordToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.passwordToolStripMenuItem.Text = "Password";
this.passwordToolStripMenuItem.Click += new System.EventHandler(this.passwordToolStripMenuItem_Click);
//
// goBackToStandardModeToolStripMenuItem
//
this.goBackToStandardModeToolStripMenuItem.Image = global::Thermo.Active.UI.Properties.Resources.Apps_Unlock_icon;
this.goBackToStandardModeToolStripMenuItem.Name = "goBackToStandardModeToolStripMenuItem";
this.goBackToStandardModeToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.goBackToStandardModeToolStripMenuItem.Text = "Go back to standard mode";
this.goBackToStandardModeToolStripMenuItem.Visible = false;
this.goBackToStandardModeToolStripMenuItem.Click += new System.EventHandler(this.goBackToStandardModeToolStripMenuItem_Click);
//
// toolStripSeparator
//
this.toolStripSeparator.Name = "toolStripSeparator";
this.toolStripSeparator.Size = new System.Drawing.Size(231, 6);
this.toolStripSeparator.Visible = false;
//
// resetSpindleHoursToolStripMenuItem
//
this.resetSpindleHoursToolStripMenuItem.Name = "resetSpindleHoursToolStripMenuItem";
this.resetSpindleHoursToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.resetSpindleHoursToolStripMenuItem.Text = "Reset Spindle Active Time";
this.resetSpindleHoursToolStripMenuItem.Visible = false;
this.resetSpindleHoursToolStripMenuItem.Click += new System.EventHandler(this.resetSpindleHoursToolStripMenuItem_Click);
//
// resetCountersToolStripMenuItem
//
this.resetCountersToolStripMenuItem.Name = "resetCountersToolStripMenuItem";
this.resetCountersToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.resetCountersToolStripMenuItem.Text = "Reset CMS-Active Counters";
this.resetCountersToolStripMenuItem.Visible = false;
this.resetCountersToolStripMenuItem.Click += new System.EventHandler(this.resetCountersToolStripMenuItem_Click);
//
// resetMachineWorkingHoursToolStripMenuItem
//
this.resetMachineWorkingHoursToolStripMenuItem.Name = "resetMachineWorkingHoursToolStripMenuItem";
this.resetMachineWorkingHoursToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.resetMachineWorkingHoursToolStripMenuItem.Text = "Reset Machine Working Hours";
this.resetMachineWorkingHoursToolStripMenuItem.Visible = false;
this.resetMachineWorkingHoursToolStripMenuItem.Click += new System.EventHandler(this.resetMachineWorkingHoursToolStripMenuItem_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(171, 6);
//
// StopServerItem
//
this.StopServerItem.Name = "StopServerItem";
this.StopServerItem.Size = new System.Drawing.Size(174, 22);
this.StopServerItem.Text = "Close Active Server";
this.StopServerItem.Click += new System.EventHandler(this.StopServerItem_Click);
//
// TXTstatus
//
this.TXTstatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
this.adminMachineToolStripMenuItem.Name = "adminMachineToolStripMenuItem";
this.adminMachineToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
this.adminMachineToolStripMenuItem.Text = "Service";
//
// passwordToolStripMenuItem
//
this.passwordToolStripMenuItem.Image = global::Thermo.Active.UI.Properties.Resources.Apps_Lock_icon;
this.passwordToolStripMenuItem.Name = "passwordToolStripMenuItem";
this.passwordToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.passwordToolStripMenuItem.Text = "Password";
this.passwordToolStripMenuItem.Click += new System.EventHandler(this.passwordToolStripMenuItem_Click);
//
// goBackToStandardModeToolStripMenuItem
//
this.goBackToStandardModeToolStripMenuItem.Image = global::Thermo.Active.UI.Properties.Resources.Apps_Unlock_icon;
this.goBackToStandardModeToolStripMenuItem.Name = "goBackToStandardModeToolStripMenuItem";
this.goBackToStandardModeToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.goBackToStandardModeToolStripMenuItem.Text = "Go back to standard mode";
this.goBackToStandardModeToolStripMenuItem.Visible = false;
this.goBackToStandardModeToolStripMenuItem.Click += new System.EventHandler(this.goBackToStandardModeToolStripMenuItem_Click);
//
// toolStripSeparator
//
this.toolStripSeparator.Name = "toolStripSeparator";
this.toolStripSeparator.Size = new System.Drawing.Size(231, 6);
this.toolStripSeparator.Visible = false;
//
// resetSpindleHoursToolStripMenuItem
//
this.resetSpindleHoursToolStripMenuItem.Name = "resetSpindleHoursToolStripMenuItem";
this.resetSpindleHoursToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.resetSpindleHoursToolStripMenuItem.Text = "Reset Spindle Active Time";
this.resetSpindleHoursToolStripMenuItem.Visible = false;
this.resetSpindleHoursToolStripMenuItem.Click += new System.EventHandler(this.resetSpindleHoursToolStripMenuItem_Click);
//
// resetCountersToolStripMenuItem
//
this.resetCountersToolStripMenuItem.Name = "resetCountersToolStripMenuItem";
this.resetCountersToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.resetCountersToolStripMenuItem.Text = "Reset CMS-Active Counters";
this.resetCountersToolStripMenuItem.Visible = false;
this.resetCountersToolStripMenuItem.Click += new System.EventHandler(this.resetCountersToolStripMenuItem_Click);
//
// resetMachineWorkingHoursToolStripMenuItem
//
this.resetMachineWorkingHoursToolStripMenuItem.Name = "resetMachineWorkingHoursToolStripMenuItem";
this.resetMachineWorkingHoursToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.resetMachineWorkingHoursToolStripMenuItem.Text = "Reset Machine Working Hours";
this.resetMachineWorkingHoursToolStripMenuItem.Visible = false;
this.resetMachineWorkingHoursToolStripMenuItem.Click += new System.EventHandler(this.resetMachineWorkingHoursToolStripMenuItem_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(171, 6);
//
// StopServerItem
//
this.StopServerItem.Name = "StopServerItem";
this.StopServerItem.Size = new System.Drawing.Size(174, 22);
this.StopServerItem.Text = "Close Active Server";
this.StopServerItem.Click += new System.EventHandler(this.StopServerItem_Click);
//
// TXTstatus
//
this.TXTstatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tableLayoutPanel1.SetColumnSpan(this.TXTstatus, 2);
this.TXTstatus.Enabled = false;
this.TXTstatus.Location = new System.Drawing.Point(3, 435);
this.TXTstatus.Name = "TXTstatus";
this.TXTstatus.ReadOnly = true;
this.TXTstatus.Size = new System.Drawing.Size(438, 20);
this.TXTstatus.TabIndex = 8;
this.TXTstatus.Text = "...";
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
this.tableLayoutPanel1.SetColumnSpan(this.TXTstatus, 2);
this.TXTstatus.Enabled = false;
this.TXTstatus.Location = new System.Drawing.Point(3, 620);
this.TXTstatus.Name = "TXTstatus";
this.TXTstatus.ReadOnly = true;
this.TXTstatus.Size = new System.Drawing.Size(438, 20);
this.TXTstatus.TabIndex = 8;
this.TXTstatus.Text = "...";
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tableLayoutPanel1.ColumnCount = 2;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Controls.Add(this.stopServerButton, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.openUiButton, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.TXTstatus, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.LISTThreadStatus, 0, 0);
this.tableLayoutPanel1.Location = new System.Drawing.Point(12, 27);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 3;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 89F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 54F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(444, 457);
this.tableLayoutPanel1.TabIndex = 58;
//
// stopServerButton
//
this.stopServerButton.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
this.tableLayoutPanel1.ColumnCount = 2;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Controls.Add(this.stopServerButton, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.openUiButton, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.TXTstatus, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.LISTThreadStatus, 0, 0);
this.tableLayoutPanel1.Location = new System.Drawing.Point(12, 27);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 3;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 89F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 54F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(444, 642);
this.tableLayoutPanel1.TabIndex = 58;
//
// stopServerButton
//
this.stopServerButton.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.stopServerButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.stopServerButton.Location = new System.Drawing.Point(225, 381);
this.stopServerButton.Name = "stopServerButton";
this.stopServerButton.Size = new System.Drawing.Size(216, 48);
this.stopServerButton.TabIndex = 3;
this.stopServerButton.TabStop = false;
this.stopServerButton.Text = "Close Active";
this.stopServerButton.Click += new System.EventHandler(this.StopServerButton_Click);
//
// openUiButton
//
this.openUiButton.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
this.stopServerButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.stopServerButton.Location = new System.Drawing.Point(225, 566);
this.stopServerButton.Name = "stopServerButton";
this.stopServerButton.Size = new System.Drawing.Size(216, 48);
this.stopServerButton.TabIndex = 3;
this.stopServerButton.TabStop = false;
this.stopServerButton.Text = "Close Active";
this.stopServerButton.Click += new System.EventHandler(this.StopServerButton_Click);
//
// openUiButton
//
this.openUiButton.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.openUiButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.openUiButton.Location = new System.Drawing.Point(3, 381);
this.openUiButton.Name = "openUiButton";
this.openUiButton.Size = new System.Drawing.Size(216, 48);
this.openUiButton.TabIndex = 58;
this.openUiButton.TabStop = false;
this.openUiButton.Text = "Open Active Client";
this.openUiButton.Click += new System.EventHandler(this.OpenUiButton_Click);
//
// panel1
//
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
this.openUiButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.openUiButton.Location = new System.Drawing.Point(3, 566);
this.openUiButton.Name = "openUiButton";
this.openUiButton.Size = new System.Drawing.Size(216, 48);
this.openUiButton.TabIndex = 58;
this.openUiButton.TabStop = false;
this.openUiButton.Text = "Open Active Client";
this.openUiButton.Click += new System.EventHandler(this.OpenUiButton_Click);
//
// panel1
//
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tableLayoutPanel1.SetColumnSpan(this.panel1, 2);
this.panel1.Controls.Add(this.label3);
this.panel1.Controls.Add(this.TXTVersion);
this.panel1.Controls.Add(this.label1);
this.panel1.Controls.Add(this.TXTType);
this.panel1.Controls.Add(this.CHNcConnected);
this.panel1.Controls.Add(this.label2);
this.panel1.Controls.Add(this.TXTMachId);
this.panel1.Location = new System.Drawing.Point(3, 292);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(438, 83);
this.panel1.TabIndex = 9;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(3, 49);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(78, 13);
this.label3.TabIndex = 59;
this.label3.Text = "Active Version:";
//
// TXTVersion
//
this.TXTVersion.AutoSize = true;
this.TXTVersion.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.TXTVersion.Location = new System.Drawing.Point(87, 49);
this.TXTVersion.Name = "TXTVersion";
this.TXTVersion.Size = new System.Drawing.Size(19, 13);
this.TXTVersion.TabIndex = 58;
this.TXTVersion.Text = "---";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(3, 24);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(44, 13);
this.label1.TabIndex = 54;
this.label1.Text = "Vendor:";
//
// TXTType
//
this.TXTType.AutoSize = true;
this.TXTType.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.TXTType.Location = new System.Drawing.Point(48, 24);
this.TXTType.Name = "TXTType";
this.TXTType.Size = new System.Drawing.Size(19, 13);
this.TXTType.TabIndex = 53;
this.TXTType.Text = "---";
//
// CHNcConnected
//
this.CHNcConnected.AutoCheck = false;
this.CHNcConnected.ForeColor = System.Drawing.SystemColors.ControlText;
this.CHNcConnected.Location = new System.Drawing.Point(340, 24);
this.CHNcConnected.Name = "CHNcConnected";
this.CHNcConnected.Size = new System.Drawing.Size(81, 20);
this.CHNcConnected.TabIndex = 52;
this.CHNcConnected.Text = "Connected";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(142, 24);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(63, 13);
this.label2.TabIndex = 57;
this.label2.Text = "Machine Id:";
//
// TXTMachId
//
this.TXTMachId.AutoSize = true;
this.TXTMachId.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.TXTMachId.Location = new System.Drawing.Point(240, 24);
this.TXTMachId.Name = "TXTMachId";
this.TXTMachId.Size = new System.Drawing.Size(19, 13);
this.TXTMachId.TabIndex = 56;
this.TXTMachId.Text = "---";
//
// LISTThreadStatus
//
this.LISTThreadStatus.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.tableLayoutPanel1.SetColumnSpan(this.panel1, 2);
this.panel1.Controls.Add(this.label3);
this.panel1.Controls.Add(this.TXTVersion);
this.panel1.Controls.Add(this.label1);
this.panel1.Controls.Add(this.TXTType);
this.panel1.Controls.Add(this.CHNcConnected);
this.panel1.Controls.Add(this.label2);
this.panel1.Controls.Add(this.TXTMachId);
this.panel1.Location = new System.Drawing.Point(3, 477);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(438, 83);
this.panel1.TabIndex = 9;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(3, 49);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(78, 13);
this.label3.TabIndex = 59;
this.label3.Text = "Active Version:";
//
// TXTVersion
//
this.TXTVersion.AutoSize = true;
this.TXTVersion.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.TXTVersion.Location = new System.Drawing.Point(87, 49);
this.TXTVersion.Name = "TXTVersion";
this.TXTVersion.Size = new System.Drawing.Size(19, 13);
this.TXTVersion.TabIndex = 58;
this.TXTVersion.Text = "---";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(3, 24);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(44, 13);
this.label1.TabIndex = 54;
this.label1.Text = "Vendor:";
//
// TXTType
//
this.TXTType.AutoSize = true;
this.TXTType.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.TXTType.Location = new System.Drawing.Point(48, 24);
this.TXTType.Name = "TXTType";
this.TXTType.Size = new System.Drawing.Size(19, 13);
this.TXTType.TabIndex = 53;
this.TXTType.Text = "---";
//
// CHNcConnected
//
this.CHNcConnected.AutoCheck = false;
this.CHNcConnected.ForeColor = System.Drawing.SystemColors.ControlText;
this.CHNcConnected.Location = new System.Drawing.Point(340, 24);
this.CHNcConnected.Name = "CHNcConnected";
this.CHNcConnected.Size = new System.Drawing.Size(81, 20);
this.CHNcConnected.TabIndex = 52;
this.CHNcConnected.Text = "Connected";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(142, 24);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(63, 13);
this.label2.TabIndex = 57;
this.label2.Text = "Machine Id:";
//
// TXTMachId
//
this.TXTMachId.AutoSize = true;
this.TXTMachId.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.TXTMachId.Location = new System.Drawing.Point(240, 24);
this.TXTMachId.Name = "TXTMachId";
this.TXTMachId.Size = new System.Drawing.Size(19, 13);
this.TXTMachId.TabIndex = 56;
this.TXTMachId.Text = "---";
//
// LISTThreadStatus
//
this.LISTThreadStatus.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2});
this.tableLayoutPanel1.SetColumnSpan(this.LISTThreadStatus, 2);
this.LISTThreadStatus.Dock = System.Windows.Forms.DockStyle.Fill;
this.LISTThreadStatus.HideSelection = false;
this.LISTThreadStatus.Location = new System.Drawing.Point(3, 3);
this.LISTThreadStatus.Name = "LISTThreadStatus";
this.LISTThreadStatus.Size = new System.Drawing.Size(438, 283);
this.LISTThreadStatus.TabIndex = 59;
this.LISTThreadStatus.UseCompatibleStateImageBehavior = false;
this.LISTThreadStatus.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Text = "Thread Name";
this.columnHeader1.Width = 328;
//
// columnHeader2
//
this.columnHeader2.Text = "Time";
this.columnHeader2.Width = 78;
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tableLayoutPanel1.SetColumnSpan(this.LISTThreadStatus, 2);
this.LISTThreadStatus.Dock = System.Windows.Forms.DockStyle.Fill;
this.LISTThreadStatus.HideSelection = false;
this.LISTThreadStatus.Location = new System.Drawing.Point(3, 3);
this.LISTThreadStatus.Name = "LISTThreadStatus";
this.LISTThreadStatus.Size = new System.Drawing.Size(438, 468);
this.LISTThreadStatus.TabIndex = 59;
this.LISTThreadStatus.UseCompatibleStateImageBehavior = false;
this.LISTThreadStatus.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Text = "Thread Name";
this.columnHeader1.Width = 200;
//
// columnHeader2
//
this.columnHeader2.Text = "Time";
this.columnHeader2.Width = 230;
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(468, 24);
this.menuStrip1.TabIndex = 59;
this.menuStrip1.Text = "menuStrip1";
//
// menuToolStripMenuItem
//
this.menuToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(468, 24);
this.menuStrip1.TabIndex = 59;
this.menuStrip1.Text = "menuStrip1";
//
// menuToolStripMenuItem
//
this.menuToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.closeCMSServerToolStripMenuItem,
this.toolStripSeparator2,
this.serviceToolStripMenuItem});
this.menuToolStripMenuItem.Name = "menuToolStripMenuItem";
this.menuToolStripMenuItem.Size = new System.Drawing.Size(50, 20);
this.menuToolStripMenuItem.Text = "Menu";
//
// closeCMSServerToolStripMenuItem
//
this.closeCMSServerToolStripMenuItem.Name = "closeCMSServerToolStripMenuItem";
this.closeCMSServerToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
this.closeCMSServerToolStripMenuItem.Text = "Close Active Server";
this.closeCMSServerToolStripMenuItem.Click += new System.EventHandler(this.closeCMSServerToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(171, 6);
//
// serviceToolStripMenuItem
//
this.serviceToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuToolStripMenuItem.Name = "menuToolStripMenuItem";
this.menuToolStripMenuItem.Size = new System.Drawing.Size(50, 20);
this.menuToolStripMenuItem.Text = "Menu";
//
// closeCMSServerToolStripMenuItem
//
this.closeCMSServerToolStripMenuItem.Name = "closeCMSServerToolStripMenuItem";
this.closeCMSServerToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
this.closeCMSServerToolStripMenuItem.Text = "Close Active Server";
this.closeCMSServerToolStripMenuItem.Click += new System.EventHandler(this.closeCMSServerToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(171, 6);
//
// serviceToolStripMenuItem
//
this.serviceToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.passwordToolStripMenuItem1,
this.goBackToStandardModeToolStripMenuItem1,
this.toolStripSeparator1,
this.resetSpindleHoursToolStripMenuItem1,
this.resetCountersToolStripMenuItem1,
this.resetMachineWorkingHoursToolStripMenuItem1});
this.serviceToolStripMenuItem.Name = "serviceToolStripMenuItem";
this.serviceToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
this.serviceToolStripMenuItem.Text = "Service";
//
// passwordToolStripMenuItem1
//
this.passwordToolStripMenuItem1.Image = global::Thermo.Active.UI.Properties.Resources.Apps_Lock_icon;
this.passwordToolStripMenuItem1.Name = "passwordToolStripMenuItem1";
this.passwordToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.passwordToolStripMenuItem1.Text = "Password";
this.passwordToolStripMenuItem1.Click += new System.EventHandler(this.passwordToolStripMenuItem1_Click);
//
// goBackToStandardModeToolStripMenuItem1
//
this.goBackToStandardModeToolStripMenuItem1.Image = global::Thermo.Active.UI.Properties.Resources.Apps_Unlock_icon;
this.goBackToStandardModeToolStripMenuItem1.Name = "goBackToStandardModeToolStripMenuItem1";
this.goBackToStandardModeToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.goBackToStandardModeToolStripMenuItem1.Text = "Go back to standard mode";
this.goBackToStandardModeToolStripMenuItem1.Visible = false;
this.goBackToStandardModeToolStripMenuItem1.Click += new System.EventHandler(this.goBackToStandardModeToolStripMenuItem1_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(231, 6);
this.toolStripSeparator1.Visible = false;
//
// resetSpindleHoursToolStripMenuItem1
//
this.resetSpindleHoursToolStripMenuItem1.Name = "resetSpindleHoursToolStripMenuItem1";
this.resetSpindleHoursToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.resetSpindleHoursToolStripMenuItem1.Text = "Reset Spindle Active Time";
this.resetSpindleHoursToolStripMenuItem1.Visible = false;
this.resetSpindleHoursToolStripMenuItem1.Click += new System.EventHandler(this.resetSpindleHoursToolStripMenuItem1_Click);
//
// resetCountersToolStripMenuItem1
//
this.resetCountersToolStripMenuItem1.Name = "resetCountersToolStripMenuItem1";
this.resetCountersToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.resetCountersToolStripMenuItem1.Text = "Reset CMS-Active Counters";
this.resetCountersToolStripMenuItem1.Visible = false;
this.resetCountersToolStripMenuItem1.Click += new System.EventHandler(this.resetCountersToolStripMenuItem1_Click);
//
// resetMachineWorkingHoursToolStripMenuItem1
//
this.resetMachineWorkingHoursToolStripMenuItem1.Name = "resetMachineWorkingHoursToolStripMenuItem1";
this.resetMachineWorkingHoursToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.resetMachineWorkingHoursToolStripMenuItem1.Text = "Reset Machine Working Hours";
this.resetMachineWorkingHoursToolStripMenuItem1.Visible = false;
this.resetMachineWorkingHoursToolStripMenuItem1.Click += new System.EventHandler(this.resetMachineWorkingHoursToolStripMenuItem1_Click);
//
// ServerControlWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(468, 496);
this.Controls.Add(this.menuStrip1);
this.Controls.Add(this.tableLayoutPanel1);
this.ForeColor = System.Drawing.SystemColors.ControlText;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.menuStrip1;
this.Margin = new System.Windows.Forms.Padding(2);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ServerControlWindow";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ServerControlWindow_FormClosing);
this.Load += new System.EventHandler(this.ServerControlWindow_Load);
this.NotifyIconMenu.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
this.serviceToolStripMenuItem.Name = "serviceToolStripMenuItem";
this.serviceToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
this.serviceToolStripMenuItem.Text = "Service";
//
// passwordToolStripMenuItem1
//
this.passwordToolStripMenuItem1.Image = global::Thermo.Active.UI.Properties.Resources.Apps_Lock_icon;
this.passwordToolStripMenuItem1.Name = "passwordToolStripMenuItem1";
this.passwordToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.passwordToolStripMenuItem1.Text = "Password";
this.passwordToolStripMenuItem1.Click += new System.EventHandler(this.passwordToolStripMenuItem1_Click);
//
// goBackToStandardModeToolStripMenuItem1
//
this.goBackToStandardModeToolStripMenuItem1.Image = global::Thermo.Active.UI.Properties.Resources.Apps_Unlock_icon;
this.goBackToStandardModeToolStripMenuItem1.Name = "goBackToStandardModeToolStripMenuItem1";
this.goBackToStandardModeToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.goBackToStandardModeToolStripMenuItem1.Text = "Go back to standard mode";
this.goBackToStandardModeToolStripMenuItem1.Visible = false;
this.goBackToStandardModeToolStripMenuItem1.Click += new System.EventHandler(this.goBackToStandardModeToolStripMenuItem1_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(231, 6);
this.toolStripSeparator1.Visible = false;
//
// resetSpindleHoursToolStripMenuItem1
//
this.resetSpindleHoursToolStripMenuItem1.Name = "resetSpindleHoursToolStripMenuItem1";
this.resetSpindleHoursToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.resetSpindleHoursToolStripMenuItem1.Text = "Reset Spindle Active Time";
this.resetSpindleHoursToolStripMenuItem1.Visible = false;
this.resetSpindleHoursToolStripMenuItem1.Click += new System.EventHandler(this.resetSpindleHoursToolStripMenuItem1_Click);
//
// resetCountersToolStripMenuItem1
//
this.resetCountersToolStripMenuItem1.Name = "resetCountersToolStripMenuItem1";
this.resetCountersToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.resetCountersToolStripMenuItem1.Text = "Reset CMS-Active Counters";
this.resetCountersToolStripMenuItem1.Visible = false;
this.resetCountersToolStripMenuItem1.Click += new System.EventHandler(this.resetCountersToolStripMenuItem1_Click);
//
// resetMachineWorkingHoursToolStripMenuItem1
//
this.resetMachineWorkingHoursToolStripMenuItem1.Name = "resetMachineWorkingHoursToolStripMenuItem1";
this.resetMachineWorkingHoursToolStripMenuItem1.Size = new System.Drawing.Size(234, 22);
this.resetMachineWorkingHoursToolStripMenuItem1.Text = "Reset Machine Working Hours";
this.resetMachineWorkingHoursToolStripMenuItem1.Visible = false;
this.resetMachineWorkingHoursToolStripMenuItem1.Click += new System.EventHandler(this.resetMachineWorkingHoursToolStripMenuItem1_Click);
//
// ServerControlWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(468, 681);
this.Controls.Add(this.menuStrip1);
this.Controls.Add(this.tableLayoutPanel1);
this.ForeColor = System.Drawing.SystemColors.ControlText;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.menuStrip1;
this.Margin = new System.Windows.Forms.Padding(2);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ServerControlWindow";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ServerControlWindow_FormClosing);
this.Load += new System.EventHandler(this.ServerControlWindow_Load);
this.NotifyIconMenu.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
+11 -9
View File
@@ -267,16 +267,18 @@ namespace Thermo.Active.UI
if (!isUpdatingThreads)
{
isUpdatingThreads = true;
Dictionary<String, String> Threads = new Dictionary<String, String>((Dictionary<String, String>)a);
//Begin the update
LISTThreadStatus.BeginUpdate();
//clear the List
LISTThreadStatus.Items.Clear();
//Add all items
foreach (KeyValuePair<string, String> Thr in Threads)
Dictionary<String, String> myThreads = new Dictionary<String, String>((Dictionary<String, String>)a);
//Begin the update
LISTThreadStatus.BeginUpdate();
//clear the List
LISTThreadStatus.Items.Clear();
//Add all items
foreach (KeyValuePair<string, String> Thr in myThreads)
{
LISTThreadStatus.Items.Add(new ListViewItem(new String[]{Thr.Key,Thr.Value }));
//End the update
LISTThreadStatus.EndUpdate();
}
//End the update
LISTThreadStatus.EndUpdate();
isUpdatingThreads = false;
}
});
+5 -1
View File
@@ -28,7 +28,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
@@ -38,6 +38,10 @@
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+430 -337
View File
@@ -1,340 +1,433 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Automatically generated by nicola.carminati: 2020-11-03 -->
<!-- Automatically generated by nicola.carminati: 2021-03-10 -->
<root>
<language_it>Italiano</language_it>
<header_maintainance_request>Effettuare manutenzione</header_maintainance_request>
<support_summary>Scadenza:</support_summary>
<header_maintainance_request_explanation>C&#39;è una procedura da effettuare</header_maintainance_request_explanation>
<alarm_ribbon_title_more_items>Ci sono %d allarmi attivi</alarm_ribbon_title_more_items>
<warning_ribbon_title_more_items>Ci sono %d warning attivi</warning_ribbon_title_more_items>
<userinfo_lbl_title>Impostazioni Utente</userinfo_lbl_title>
<userinfo_btn_logout>Log out</userinfo_btn_logout>
<userinfo_lbl_language>Lingua</userinfo_lbl_language>
<userinfo_btn_cancel>Annulla</userinfo_btn_cancel>
<userinfo_btn_save>Salva</userinfo_btn_save>
<login_lbl_title>Login utente</login_lbl_title>
<login_lbl_username>Nome utente</login_lbl_username>
<login_lbl_password>Password</login_lbl_password>
<login_btn_login>Log in</login_btn_login>
<login_lbl_invalidusername>Nome utente errato</login_lbl_invalidusername>
<login_lbl_invalidpassword>Password errata</login_lbl_invalidpassword>
<alarms_btn_history_show>Vedi storico allarmi</alarms_btn_history_show>
<alarms_refresh_all>Refresh tutti</alarms_refresh_all>
<alarm_item_btn_show>Vedi</alarm_item_btn_show>
<alarm_ribbon_title_1_item>Allarme</alarm_ribbon_title_1_item>
<warning_ribbon_title_1_item>Warning</warning_ribbon_title_1_item>
<alarm_detail_lbl_status>Stato</alarm_detail_lbl_status>
<alarm_manual_lbl_title>Procedura ripristino</alarm_manual_lbl_title>
<alarm_manual_lbl_description>Risoluzione dell&#39;allarme</alarm_manual_lbl_description>
<alarm_manual_btn_start>Avvia</alarm_manual_btn_start>
<alarm_detail_btn_show_manual>Vedi Manuale</alarm_detail_btn_show_manual>
<alarm_detail_btn_ask_help>Chiedi Aiuto</alarm_detail_btn_ask_help>
<alarm_detail_btn_refresh>Refresh</alarm_detail_btn_refresh>
<alarm_btn_back_to_list>Torna alla lista</alarm_btn_back_to_list>
<alarm_status_active>Attivo</alarm_status_active>
<alarm_status_deleted>Eliminato</alarm_status_deleted>
<alarm_btn_add_attach>Aggiungi un allegato</alarm_btn_add_attach>
<machineinfo_lbl_title>Informazioni Macchina</machineinfo_lbl_title>
<machine_serial_number>Matricola Nr:</machine_serial_number>
<machine_installation_date>Data di installazione:</machine_installation_date>
<machineinfo_model_nc>Modello Cn:</machineinfo_model_nc>
<machineinfo_serial_nc>Num. Seriale Cn:</machineinfo_serial_nc>
<machineinfo_firmware_version>Versione firmware Cn:</machineinfo_firmware_version>
<machineinfo_plc_version>Versione Plc:</machineinfo_plc_version>
<machineinfo_current_language>Lingua selezionata Cn:</machineinfo_current_language>
<machineinfo_processes>Numero di processi Cn:</machineinfo_processes>
<machineinfo_datetime>Time-Stamp Cn:</machineinfo_datetime>
<machineinfo_umeas>Unità di misura Cn:</machineinfo_umeas>
<machineinfo_server_cms_version>Versione Server CMS-Active:</machineinfo_server_cms_version>
<machineinfo_core_cms_version>Versione Core CMS-Active:</machineinfo_core_cms_version>
<machineinfo_cms_client_version>Versione Client CMS-Active:</machineinfo_cms_client_version>
<machineinfo_cms_dateformat>Formato delle date CMS-Active:</machineinfo_cms_dateformat>
<contactinfo_lbl_title>Informazioni di contatto</contactinfo_lbl_title>
<contactinfo_lbl_company>Nome contatto:</contactinfo_lbl_company>
<contactinfo_lbl_email>Email:</contactinfo_lbl_email>
<contactinfo_lbl_phoneNumber>Telefono:</contactinfo_lbl_phoneNumber>
<utilities_header_label>Utility &#38; Software esterni</utilities_header_label>
<modal_nochangepage_title>Operazione non posssibile</modal_nochangepage_title>
<modal_confirm_close_application>Sei sicuro di voler chiudere Active?</modal_confirm_close_application>
<modal_nocloseapp_title>Operazione non possibile</modal_nocloseapp_title>
<modal_confirm_title>Richiesta di conferma</modal_confirm_title>
<modal_ok_button>Ok</modal_ok_button>
<modal_cancel_button>Annulla</modal_cancel_button>
<maintenance_header_title>Gestore Manutenzioni</maintenance_header_title>
<maintenance_card_btn_save_note>Salva</maintenance_card_btn_save_note>
<maintenance_card_btn_view_all_attach>Mostra tutti i file</maintenance_card_btn_view_all_attach>
<maintenance_card_btn_hide_all_attach>Mostra solo gli ultimi file</maintenance_card_btn_hide_all_attach>
<maintenance_card_btn_add_attach>Aggiungi un file</maintenance_card_btn_add_attach>
<maintenance_card_btn_view_all_note>Mostra tutte le note</maintenance_card_btn_view_all_note>
<maintenance_card_btn_hide_all_note>Mostra solo le ultime le note</maintenance_card_btn_hide_all_note>
<maintenance_card_label_btn_footer>Segna come eseguita</maintenance_card_label_btn_footer>
<maintenance_header_label_procedure>Ricerca la manutenzione per nome</maintenance_header_label_procedure>
<maintenance_header_label_procedure_placeholder>Nome della manutenzione...</maintenance_header_label_procedure_placeholder>
<maintenance_header_label_state>Stato</maintenance_header_label_state>
<maintenance_label_create_intervention>Crea un intervento di manutenzione</maintenance_label_create_intervention>
<maintenance_label_disable-maintenance>Seleziona una manutenzione...</maintenance_label_disable-maintenance>
<maintenance_state_expired>Scaduta</maintenance_state_expired>
<maintenance_state_closed>Chiusa</maintenance_state_closed>
<maintenance_state_running>Non Scaduta</maintenance_state_running>
<maintenance_state_ending>In Scadenza</maintenance_state_ending>
<maintenance_table_header_counter>Contatore</maintenance_table_header_counter>
<maintenance_table_header_deadline>Scadenza</maintenance_table_header_deadline>
<maintenance_table_header_state>Stato</maintenance_table_header_state>
<maintenance_table_header_title>Titolo</maintenance_table_header_title>
<maintenance_card_label_date_timestamp>Aggiunta il %s alle %s</maintenance_card_label_date_timestamp>
<maintenance_card_btn_cancel_modify_note>Cancella</maintenance_card_btn_cancel_modify_note>
<maintenance_card_btn_save_modify_note>Salva</maintenance_card_btn_save_modify_note>
<maintenance_date_neverdone>Nessun intervento di manutenzione effettuato</maintenance_date_neverdone>
<maintenance_date_justdone>Ultimo intervento effettuato pochi minuti fa, da: %s</maintenance_date_justdone>
<maintenance_date_hours>Ultimo intervento effettuato %d ore fa, da: %s</maintenance_date_hours>
<maintenance_date_days>Ultimo intervento effettuato %d giorni fa, da: %s</maintenance_date_days>
<maintenance_date_fixeddate>Ultimo intervento effettuato in data: %s, da: %s</maintenance_date_fixeddate>
<maintenance_card_created_timestamp>Manutenzione creata in data %s alle ore %s</maintenance_card_created_timestamp>
<maintenance_card_attachments>Allegati</maintenance_card_attachments>
<maintenance_card_notes>Note</maintenance_card_notes>
<create_maintenance_lbl_title_window>Creazione intervento di manutenzione</create_maintenance_lbl_title_window>
<create_maintenance_lbl_title>Titolo</create_maintenance_lbl_title>
<create_maintenance_btn_cancel>Annulla</create_maintenance_btn_cancel>
<create_maintenance_lbl_date>Data</create_maintenance_lbl_date>
<create_maintenance_lbl_description>Descrizione</create_maintenance_lbl_description>
<create_maintenance_lbl_end_time>Ora</create_maintenance_lbl_end_time>
<create_maintenance_lbl_typology>Tipo</create_maintenance_lbl_typology>
<create_maintenance_lbl_repeat>Ripeti ogni</create_maintenance_lbl_repeat>
<create_maintenance_repeat_day>Giorni</create_maintenance_repeat_day>
<create_maintenance_repeat_hour>Ore</create_maintenance_repeat_hour>
<create_maintenance_repeat_minutes>Minuti</create_maintenance_repeat_minutes>
<create_maintenance_repeat_months>Mesi</create_maintenance_repeat_months>
<create_maintenance_lbl_fixeddate>Data Fissa</create_maintenance_lbl_fixeddate>
<create_maintenance_lbl_temporal>Temporale</create_maintenance_lbl_temporal>
<create_maintenance_btn_add_confirm>Crea Manutenzione</create_maintenance_btn_add_confirm>
<create_maintenance_btn_edit_confirm>Modifica Manutenzione</create_maintenance_btn_edit_confirm>
<modal_load_program_lbl_title_window>Carica-Ricetta</modal_load_program_lbl_title_window>
<modal_load_program_search_placeholder>Cerca una ricetta per nome</modal_load_program_search_placeholder>
<modal_load_program_creation_date>Data di creazione:</modal_load_program_creation_date>
<modal_load_program_last_change_date>Data di ult. mod:</modal_load_program_last_change_date>
<modal_load_program_lbl_img_not_found>Preview non disponibile</modal_load_program_lbl_img_not_found>
<alarm_history_filter_nc>NC</alarm_history_filter_nc>
<alarm_history_filter_plc>PLC</alarm_history_filter_plc>
<alarm_history_header_title>Gestore Storico Allarmi</alarm_history_header_title>
<alarm_history_body_filter>Filtra allarmi per titolo</alarm_history_body_filter>
<alarm_history_body_filter_placeholder>Titolo...</alarm_history_body_filter_placeholder>
<alarm_history_body_filter_source>Sorgente</alarm_history_body_filter_source>
<alarm_history_body_date_range>Intervallo date</alarm_history_body_date_range>
<alarm_history_body_user>Utenti</alarm_history_body_user>
<alarms_history_table_source>Sorgente</alarms_history_table_source>
<alarms_history_table_title>Titolo</alarms_history_table_title>
<alarms_history_table_date>Data</alarms_history_table_date>
<alarms_history_table_user>Utenti</alarms_history_table_user>
<alarm_history_label_select_alarms>Seleziona un allarme...</alarm_history_label_select_alarms>
<alarm_history_users_not_user>Nessun-Utente</alarm_history_users_not_user>
<create_user_lbl_title_window>Modifica utente</create_user_lbl_title_window>
<create_user_lbl_firstname>Nome</create_user_lbl_firstname>
<create_user_lbl_lastname>Cognome</create_user_lbl_lastname>
<create_user_lbl_password>Password</create_user_lbl_password>
<create_user_lbl_username>Username</create_user_lbl_username>
<create_user_btn_add_confirm>Aggiungi</create_user_btn_add_confirm>
<create_user_btn_edit_confirm>Modifica</create_user_btn_edit_confirm>
<create_user_btn_cancel>Annulla</create_user_btn_cancel>
<password_user_lbl_actpassword>Password attuale</password_user_lbl_actpassword>
<password_user_lbl_newpassword>Password nuova</password_user_lbl_newpassword>
<password_user_lbl_title_window>Modifica password: %s</password_user_lbl_title_window>
<role_user_lbl_title_window>Modifica ruolo: %s</role_user_lbl_title_window>
<modal_confirm_delete_user>Sei sicuro di voler eliminare l&#39;utente?</modal_confirm_delete_user>
<users_label_create_users>Aggiungi un nuovo utente</users_label_create_users>
<users_header_title>Gestore Utenti</users_header_title>
<users_header_label_userfilter>Filtra utenti per Username</users_header_label_userfilter>
<users_header_label_userfilter_placeholder>Username...</users_header_label_userfilter_placeholder>
<users_table_header_avatar>Avatar</users_table_header_avatar>
<users_table_header_username>Username</users_table_header_username>
<users_table_header_firstname>Nome</users_table_header_firstname>
<users_table_header_lastname>Cognome</users_table_header_lastname>
<users_table_header_language>Lingua</users_table_header_language>
<users_table_header_role>Ruolo</users_table_header_role>
<footer_tooltip_production>Manager della produzione</footer_tooltip_production>
<footer_tooltip_maintenance>Manager manutenzioni macchina</footer_tooltip_maintenance>
<footer_tooltip_alarms>Storico allarmi</footer_tooltip_alarms>
<footer_tooltip_report>Report e stato macchina</footer_tooltip_report>
<footer_tooltip_utilities>Utility e software esterni</footer_tooltip_utilities>
<footer_tooltip_users>User Manager</footer_tooltip_users>
<header_tooltip_btn_close>Chiudi CMS-Active</header_tooltip_btn_close>
<header_tooltip_btn_minimize>Minimizza CMS-Active</header_tooltip_btn_minimize>
<header_tooltip_btn_mchinfo>Visualizza Informazioni macchina</header_tooltip_btn_mchinfo>
<header_tooltip_btn_usrinfo>Visualizza Informazioni utente</header_tooltip_btn_usrinfo>
<header_tooltip_btn_nc_maintenance>Apre/Chiude la lista delle manutenzioni scadute</header_tooltip_btn_nc_maintenance>
<header_tooltip_nc_error>CN in Errore. Apre/Chiude la lista degli allarmi</header_tooltip_nc_error>
<header_tooltip_nc_idle>CN in Attesa di Comandi</header_tooltip_nc_idle>
<header_tooltip_Nc_Process>Informazioni processo</header_tooltip_Nc_Process>
<header_tooltip_mainstat_ko>Dispositivi macchina non ok</header_tooltip_mainstat_ko>
<header_tooltip_mainstat_ok>Macchina in funzione</header_tooltip_mainstat_ok>
<header_tooltip_powstat_ko>Macchina Non pronta a lavorare</header_tooltip_powstat_ko>
<header_tooltip_powstat_ok>Macchina pronta a lavorare</header_tooltip_powstat_ok>
<header_tooltip_emergency>Pulsanti di emergenza premuti</header_tooltip_emergency>
<header_tooltip_key>Chiave non inserita</header_tooltip_key>
<header_tooltip_power-on>Assi non in potenza</header_tooltip_power-on>
<header_tooltip_protections>Protezioni di sicurezza non ok</header_tooltip_protections>
<header_tooltip_settings-mode>Modalità setting attiva</header_tooltip_settings-mode>
<header_tooltip_air-flow>Aria compressa non ok</header_tooltip_air-flow>
<header_tooltip_zeroing>Azzeramento assi necessario</header_tooltip_zeroing>
<modal_load_program_empty_folder>Cartella Vuota</modal_load_program_empty_folder>
<alarm_history_label_date_timestamp>Aggiunta il %s alle %s</alarm_history_label_date_timestamp>
<alarm_history_btn_save_note>Salva</alarm_history_btn_save_note>
<contactinfo_lbl_assistance_name>Informazioni sull&#39;assistenza clienti:</contactinfo_lbl_assistance_name>
<contactinfo_lbl_qrdescription>Per maggiori informazioni clicca sul simbolo qui sotto o scansiona il codice con il tuo telefono:</contactinfo_lbl_qrdescription>
<contactinfo_btn_reloadfile>Ricarica dal file</contactinfo_btn_reloadfile>
<contactinfo_btn_showcmsdata>Mostra dati CMS</contactinfo_btn_showcmsdata>
<contactinfo_btn_openinbrowser>Apri nel browser</contactinfo_btn_openinbrowser>
<contactinfo_error_customer_configfile>Errore nel file &#34;C:\CMS\ContactInfo.xml&#34;</contactinfo_error_customer_configfile>
<create_maintenance_lbl_machine>Macchina</create_maintenance_lbl_machine>
<maintenance_machine_timer>Timer Macchina</maintenance_machine_timer>
<maintenance_remaining>Tempo rimanente</maintenance_remaining>
<maintenance_interval_timer>Intervallo</maintenance_interval_timer>
<maintenance_status>Stato</maintenance_status>
<maintenance_btn_showhistory>Mostra cronologia</maintenance_btn_showhistory>
<history_maintenance_lbl_title_window>Storico delle manutenzioni eseguite</history_maintenance_lbl_title_window>
<history_maintenance_table_header_date>Dati</history_maintenance_table_header_date>
<history_maintenance_table_header_user>Utente</history_maintenance_table_header_user>
<history_maintenance_table_header_counter>contatore</history_maintenance_table_header_counter>
<maintenance_exp_date>Scadenza</maintenance_exp_date>
<label_no_recipe>Nessuna ricetta caricata</label_no_recipe>
<modal_title_edit_note>Modifica Note</modal_title_edit_note>
<modal_recipe_note>Note della ricetta</modal_recipe_note>
<recipe_save>Salva</recipe_save>
<recipe_saveas_button>Salva con nome</recipe_saveas_button>
<recipe_saveas>Salva come nuova ricetta</recipe_saveas>
<recipe_change_note>Modifica Note ricetta</recipe_change_note>
<modal_title_save_as>Salva come nuova ricetta</modal_title_save_as>
<modal_confirm_save_recipe>Confermi di voler sovrascrivere la ricetta?</modal_confirm_save_recipe>
<modal_title_duplicate_recipe>Duplica Ricetta</modal_title_duplicate_recipe>
<folder_name>Nuova Cartella</folder_name>
<recipe_name>Nome della ricetta</recipe_name>
<cancel>Annulla</cancel>
<confirm>Conferma</confirm>
<modal_load_program_lbl_sheet_x>Dimensione lastra X:</modal_load_program_lbl_sheet_x>
<modal_load_program_lbl_sheet_y>Dimensione lastra Y:</modal_load_program_lbl_sheet_y>
<modal_load_program_lbl_sheet_z>Spessore lastra:</modal_load_program_lbl_sheet_z>
<modal_load_program_lbl_notes>Note:</modal_load_program_lbl_notes>
<modal_confirm_delete_recipe>Confermi di voler eliminare la ricetta?</modal_confirm_delete_recipe>
<modal_load_program_lbl_box_selected_folder>Cartella selezionata:</modal_load_program_lbl_box_selected_folder>
<modal_load_program_lbl_box_operations>Azioni disponibili:</modal_load_program_lbl_box_operations>
<modal_load_program_btn_upload_recipe>Carica e attiva ricetta</modal_load_program_btn_upload_recipe>
<setup_lbl_title>Setup</setup_lbl_title>
<lbl_recipe_overview_general>Formato</lbl_recipe_overview_general>
<lbl_recipe_overview_positions>Quote e velocità</lbl_recipe_overview_positions>
<lbl_recipe_overview_cycle>Ciclo</lbl_recipe_overview_cycle>
<lbl_recipe_overview_heats>Riscaldi</lbl_recipe_overview_heats>
<lbl_recipe_overview_pyrometer>Pirometro</lbl_recipe_overview_pyrometer>
<lbl_recipe_overview_drawing>Imbutitura</lbl_recipe_overview_drawing>
<lbl_recipe_overview_upperplate>Controstampo</lbl_recipe_overview_upperplate>
<lbl_recipe_overview_cooling>Raffreddamento</lbl_recipe_overview_cooling>
<lbl_recipe_overview_vacuum>Vuoto</lbl_recipe_overview_vacuum>
<lbl_recipe_overview_extraction>Estrazione</lbl_recipe_overview_extraction>
<lbl_recipe_overview_options>Opzioni</lbl_recipe_overview_options>
<process-heating>Riscaldo</process-heating>
<process-forming>Formatura</process-forming>
<process-extraction>Estrazione</process-extraction>
<preferred-softkeys>Softkey preferite</preferred-softkeys>
<progr-preriscaldo_lbl_title>Programmazione preriscaldo</progr-preriscaldo_lbl_title>
<history-item_warmup>Tempo di riscaldo</history-item_warmup>
<history-item_vacuum>Vuoto</history-item_vacuum>
<history-item_cycletime>Tempo ciclo netto</history-item_cycletime>
<dashboard-timing-start>Inizio</dashboard-timing-start>
<dashboard-timing-elapsed>Tempo trascorso</dashboard-timing-elapsed>
<dashboard-timing-end>Fine</dashboard-timing-end>
<remainging_days>gg</remainging_days>
<dashboard-setpoint>Set point</dashboard-setpoint>
<dashboard-remaining-time>Tempo rimanente</dashboard-remaining-time>
<dashboard-piece-hours>Pezzi/Ora</dashboard-piece-hours>
<dashboard-time-cycle>Tempo/Ciclo</dashboard-time-cycle>
<run_auto>Auto</run_auto>
<run_manual>Manuale</run_manual>
<mould>Stampo</mould>
<sheet>Lastra</sheet>
<plate>Stampo</plate>
<upperplate>Controstampo</upperplate>
<Frame>Cornice</Frame>
<formatoinfo_lbl_title>Formato</formatoinfo_lbl_title>
<position_upperplate>Discesa controstampo</position_upperplate>
<position_frame>Discesa cornice</position_frame>
<position_mould>Salita Stampo</position_mould>
<cycle>Ciclo di formatura</cycle>
<loader>Caricatore</loader>
<cycle_crystallisation>Cristallizzazione (secondo riscaldo)</cycle_crystallisation>
<acrilic_frame>Cornice per acrilico</acrilic_frame>
<additional_heating>Riscaldo superiore supplementare</additional_heating>
<upperheaters>Riscaldi superiori</upperheaters>
<lowerheaters>Riscaldi inferiori</lowerheaters>
<decomsustain>Sostentamento/Decompressione</decomsustain>
<warmers_select_all>Tutti</warmers_select_all>
<warmers_select_none>Nessuno</warmers_select_none>
<warmers_power>Gestione potenza</warmers_power>
<warmers_select_power>Seleziona...</warmers_select_power>
<warmers_autocomposition>Autocomposizione</warmers_autocomposition>
<upperthermoregulator>Termoregolazione riscaldo superiore</upperthermoregulator>
<lowerthermoregulator>Termoregolazione riscaldo inferiore</lowerthermoregulator>
<pyrometer>Pirometro</pyrometer>
<drawinginfo_lbl_title>Imbutitura</drawinginfo_lbl_title>
<upperplate_cycle>Ciclo controstampo</upperplate_cycle>
<upperplate_air>Aria controstampo</upperplate_air>
<upperplate_vacuum>Vuoto controstampo</upperplate_vacuum>
<upperplate_extraction>Estrazione controstampo</upperplate_extraction>
<blowers>Ventilatori</blowers>
<nebulizers>Nebulizzatori</nebulizers>
<telescopic>Telescopici</telescopic>
<shutters>Otturatori</shutters>
<main_vacuum>Vuoto principale</main_vacuum>
<direct_vacuum>Vuoto diretto</direct_vacuum>
<aux_vacuum>Vuoto ausiliario</aux_vacuum>
<pre_vacuum>Pre-Vuoto</pre_vacuum>
<main_extraction>Estrazione principale</main_extraction>
<aux_extraction>Estrazione ausiliaria</aux_extraction>
<modal_options_no_more_parameters>Nessun altro parametro da gestire</modal_options_no_more_parameters>
<thermoregulators>Termoregolatori</thermoregulators>
<undercut_mould>Sottosquadra stampo</undercut_mould>
<udercut_uppermould>Sottosquadra controstampo</udercut_uppermould>
<warmers_selection>Selezione</warmers_selection>
<opzioniinfo_lbl_title>Opzioni</opzioniinfo_lbl_title>
<history_item_venttime>Tempo raffreddamento</history_item_venttime>
<history_item_cycletimegross>Tempo ciclo lordo</history_item_cycletimegross>
<history_item_tempstampo>T. stampo</history_item_tempstampo>
<history_item_materialtempendwarm>T. Materiale fine riscaldo</history_item_materialtempendwarm>
<history_item_materialtempendvent>T. Materiale fine ventilazione</history_item_materialtempendvent>
<history_item_vacuumtime>Tempo vuoto</history_item_vacuumtime>
<history_item_mouldenergyin>Consumo energia netto</history_item_mouldenergyin>
<history_item_mouldenergyout>Consumo energia lordo</history_item_mouldenergyout>
<footer_tooltip_ricetta>Carica ricetta</footer_tooltip_ricetta>
<footer_tooltip_setup>Setup ricetta</footer_tooltip_setup>
<footer_tooltip_progr_prerisc>Pre-riscaldo</footer_tooltip_progr_prerisc>
<footer_tooltip_dashboard>Dashboard</footer_tooltip_dashboard>
<gauge_potenza>Potenza</gauge_potenza>
<gauge_vuoto>Vuoto</gauge_vuoto>
<gauge_aria>Aria</gauge_aria>
<lbl_btn_preheating_all>Seleziona tutti i giorni</lbl_btn_preheating_all>
<lbl_btn_preheating_non>Deseleziona tutti i giorni</lbl_btn_preheating_non>
<softkey_confirm>Sei sicuro?</softkey_confirm>
<confirm_request_confirm>Conferma</confirm_request_confirm>
<confirm_request_cancel>Annulla</confirm_request_cancel>
<lbl_loader_load_area>Area di carico</lbl_loader_load_area>
<avvio_prod_lbl_title>Avvio produione</avvio_prod_lbl_title>
<new_production>Nuovo lotto produttivo</new_production>
<warmup_cycles>Cicli di warmup</warmup_cycles>
<warmup_cycles_pieces>Numero di cicli:</warmup_cycles_pieces>
<modal_start_button>Avvio</modal_start_button>
<edit_prod_lbl_title>Modifica produione</edit_prod_lbl_title>
<production_management>Lotto di produzione</production_management>
<production_enabling>Setta numeto max di pezzi</production_enabling>
<mock_pieces>Numero di pezzi:</mock_pieces>
<heats_alert_thermocamera_not_enabled>Thermoprophet non abilitato</heats_alert_thermocamera_not_enabled>
<thermoprophet>Thermoprophet</thermoprophet>
<thermocamera_mode>Modalità Thermoprophet</thermocamera_mode>
<warmers_showcamera>Mostra immagine thermocamera</warmers_showcamera>
<warmers_enable>Gestione abilitazione/disabilitazione</warmers_enable>
<warmers_enabletemp>Abilita selzionate</warmers_enabletemp>
<warmers_disabletemp>Disabilita selezionate</warmers_disabletemp>
<warmers_temperature>Gestione temperature</warmers_temperature>
<warmers_set_temperature>Fissa tutte le temperature</warmers_set_temperature>
<thermocamera_on_off>Attivazione Thermoprophet</thermocamera_on_off>
<modal_title_backup>Backup ricette</modal_title_backup>
<select_devices>Seleziona dispositivo</select_devices>
<warmers_clear_temperature>Annulla tutte le temperature</warmers_clear_temperature>
<heats_alert_thermocamera_enabled>Thermoprophet abilitato</heats_alert_thermocamera_enabled>
<language_it>Italiano</language_it>
<header_maintainance_request>Effettuare manutenzione</header_maintainance_request>
<support_summary>Scadenza:</support_summary>
<header_maintainance_request_explanation>C&#39;è una procedura da effettuare</header_maintainance_request_explanation>
<alarm_ribbon_title_more_items>Ci sono %d allarmi attivi</alarm_ribbon_title_more_items>
<warning_ribbon_title_more_items>Ci sono %d warning attivi</warning_ribbon_title_more_items>
<userinfo_lbl_title>Impostazioni Utente</userinfo_lbl_title>
<userinfo_btn_logout>Log out</userinfo_btn_logout>
<userinfo_lbl_language>Lingua</userinfo_lbl_language>
<userinfo_btn_cancel>Annulla</userinfo_btn_cancel>
<userinfo_btn_save>Salva</userinfo_btn_save>
<login_lbl_title>Login utente</login_lbl_title>
<login_lbl_username>Nome utente</login_lbl_username>
<login_lbl_password>Password</login_lbl_password>
<login_btn_login>Log in</login_btn_login>
<login_lbl_invalidusername>Nome utente errato</login_lbl_invalidusername>
<login_lbl_invalidpassword>Password errata</login_lbl_invalidpassword>
<alarms_btn_history_show>Vedi storico allarmi</alarms_btn_history_show>
<alarms_refresh_all>Refresh tutti</alarms_refresh_all>
<alarm_item_btn_show>Vedi</alarm_item_btn_show>
<alarm_ribbon_title_1_item>Allarme</alarm_ribbon_title_1_item>
<warning_ribbon_title_1_item>Warning</warning_ribbon_title_1_item>
<alarm_detail_lbl_status>Stato</alarm_detail_lbl_status>
<alarm_manual_lbl_title>Procedura ripristino</alarm_manual_lbl_title>
<alarm_manual_lbl_description>Risoluzione dell&#39;allarme</alarm_manual_lbl_description>
<alarm_manual_btn_start>Avvia</alarm_manual_btn_start>
<alarm_detail_btn_show_manual>Vedi Manuale</alarm_detail_btn_show_manual>
<alarm_detail_btn_ask_help>Chiedi Aiuto</alarm_detail_btn_ask_help>
<alarm_detail_btn_refresh>Refresh</alarm_detail_btn_refresh>
<alarm_btn_back_to_list>Torna alla lista</alarm_btn_back_to_list>
<alarm_status_active>Attivo</alarm_status_active>
<alarm_status_deleted>Eliminato</alarm_status_deleted>
<alarm_btn_add_attach>Aggiungi un allegato</alarm_btn_add_attach>
<machineinfo_lbl_title>Informazioni Macchina</machineinfo_lbl_title>
<machine_serial_number>Matricola Nr:</machine_serial_number>
<machine_installation_date>Data di installazione:</machine_installation_date>
<machineinfo_model_nc>Modello Cn:</machineinfo_model_nc>
<machineinfo_serial_nc>Num. Seriale Cn:</machineinfo_serial_nc>
<machineinfo_firmware_version>Versione firmware Cn:</machineinfo_firmware_version>
<machineinfo_plc_version>Versione Plc:</machineinfo_plc_version>
<machineinfo_current_language>Lingua selezionata Cn:</machineinfo_current_language>
<machineinfo_processes>Numero di processi Cn:</machineinfo_processes>
<machineinfo_datetime>Time-Stamp Cn:</machineinfo_datetime>
<machineinfo_umeas>Unità di misura Cn:</machineinfo_umeas>
<machineinfo_server_cms_version>Versione Server CMS-Active:</machineinfo_server_cms_version>
<machineinfo_core_cms_version>Versione Core CMS-Active:</machineinfo_core_cms_version>
<machineinfo_cms_client_version>Versione Client CMS-Active:</machineinfo_cms_client_version>
<machineinfo_cms_dateformat>Formato delle date CMS-Active:</machineinfo_cms_dateformat>
<contactinfo_lbl_title>Informazioni di contatto</contactinfo_lbl_title>
<contactinfo_lbl_company>Nome contatto:</contactinfo_lbl_company>
<contactinfo_lbl_email>Email:</contactinfo_lbl_email>
<contactinfo_lbl_phoneNumber>Telefono:</contactinfo_lbl_phoneNumber>
<utilities_header_label>Utility &#38; Software esterni</utilities_header_label>
<modal_nochangepage_title>Operazione non posssibile</modal_nochangepage_title>
<modal_confirm_close_application>Sei sicuro di voler chiudere Active?</modal_confirm_close_application>
<modal_nocloseapp_title>Operazione non possibile</modal_nocloseapp_title>
<modal_confirm_title>Richiesta di conferma</modal_confirm_title>
<modal_ok_button>Ok</modal_ok_button>
<modal_cancel_button>Annulla</modal_cancel_button>
<maintenance_header_title>Gestore Manutenzioni</maintenance_header_title>
<maintenance_card_btn_save_note>Salva</maintenance_card_btn_save_note>
<maintenance_card_btn_view_all_attach>Mostra tutti i file</maintenance_card_btn_view_all_attach>
<maintenance_card_btn_hide_all_attach>Mostra solo gli ultimi file</maintenance_card_btn_hide_all_attach>
<maintenance_card_btn_add_attach>Aggiungi un file</maintenance_card_btn_add_attach>
<maintenance_card_btn_view_all_note>Mostra tutte le note</maintenance_card_btn_view_all_note>
<maintenance_card_btn_hide_all_note>Mostra solo le ultime le note</maintenance_card_btn_hide_all_note>
<maintenance_card_label_btn_footer>Segna come eseguita</maintenance_card_label_btn_footer>
<maintenance_header_label_procedure>Ricerca la manutenzione per nome</maintenance_header_label_procedure>
<maintenance_header_label_procedure_placeholder>Nome della manutenzione...</maintenance_header_label_procedure_placeholder>
<maintenance_header_label_state>Stato</maintenance_header_label_state>
<maintenance_label_create_intervention>Crea un intervento di manutenzione</maintenance_label_create_intervention>
<maintenance_label_disable-maintenance>Seleziona una manutenzione...</maintenance_label_disable-maintenance>
<maintenance_state_expired>Scaduta</maintenance_state_expired>
<maintenance_state_closed>Chiusa</maintenance_state_closed>
<maintenance_state_running>Non Scaduta</maintenance_state_running>
<maintenance_state_ending>In Scadenza</maintenance_state_ending>
<maintenance_table_header_counter>Contatore</maintenance_table_header_counter>
<maintenance_table_header_deadline>Scadenza</maintenance_table_header_deadline>
<maintenance_table_header_state>Stato</maintenance_table_header_state>
<maintenance_table_header_title>Titolo</maintenance_table_header_title>
<maintenance_card_label_date_timestamp>Aggiunta il %s alle %s</maintenance_card_label_date_timestamp>
<maintenance_card_btn_cancel_modify_note>Cancella</maintenance_card_btn_cancel_modify_note>
<maintenance_card_btn_save_modify_note>Salva</maintenance_card_btn_save_modify_note>
<maintenance_date_neverdone>Nessun intervento di manutenzione effettuato</maintenance_date_neverdone>
<maintenance_date_justdone>Ultimo intervento effettuato pochi minuti fa, da: %s</maintenance_date_justdone>
<maintenance_date_hours>Ultimo intervento effettuato %d ore fa, da: %s</maintenance_date_hours>
<maintenance_date_days>Ultimo intervento effettuato %d giorni fa, da: %s</maintenance_date_days>
<maintenance_date_fixeddate>Ultimo intervento effettuato in data: %s, da: %s</maintenance_date_fixeddate>
<maintenance_card_created_timestamp>Manutenzione creata in data %s alle ore %s</maintenance_card_created_timestamp>
<maintenance_card_attachments>Allegati</maintenance_card_attachments>
<maintenance_card_notes>Note</maintenance_card_notes>
<create_maintenance_lbl_title_window>Creazione intervento di manutenzione</create_maintenance_lbl_title_window>
<create_maintenance_lbl_title>Titolo</create_maintenance_lbl_title>
<create_maintenance_btn_cancel>Annulla</create_maintenance_btn_cancel>
<create_maintenance_lbl_date>Data</create_maintenance_lbl_date>
<create_maintenance_lbl_description>Descrizione</create_maintenance_lbl_description>
<create_maintenance_lbl_end_time>Ora</create_maintenance_lbl_end_time>
<create_maintenance_lbl_typology>Tipo</create_maintenance_lbl_typology>
<create_maintenance_lbl_repeat>Ripeti ogni</create_maintenance_lbl_repeat>
<create_maintenance_repeat_day>Giorni</create_maintenance_repeat_day>
<create_maintenance_repeat_hour>Ore</create_maintenance_repeat_hour>
<create_maintenance_repeat_minutes>Minuti</create_maintenance_repeat_minutes>
<create_maintenance_repeat_months>Mesi</create_maintenance_repeat_months>
<create_maintenance_lbl_fixeddate>Data Fissa</create_maintenance_lbl_fixeddate>
<create_maintenance_lbl_temporal>Temporale</create_maintenance_lbl_temporal>
<create_maintenance_btn_add_confirm>Crea Manutenzione</create_maintenance_btn_add_confirm>
<create_maintenance_btn_edit_confirm>Modifica Manutenzione</create_maintenance_btn_edit_confirm>
<modal_load_program_lbl_title_window>Carica-Ricetta</modal_load_program_lbl_title_window>
<modal_load_program_search_placeholder>Cerca una ricetta per nome</modal_load_program_search_placeholder>
<modal_load_program_creation_date>Data di creazione:</modal_load_program_creation_date>
<modal_load_program_last_change_date>Data di ult. mod:</modal_load_program_last_change_date>
<modal_load_program_lbl_img_not_found>Preview non disponibile</modal_load_program_lbl_img_not_found>
<alarm_history_filter_nc>NC</alarm_history_filter_nc>
<alarm_history_filter_plc>PLC</alarm_history_filter_plc>
<alarm_history_header_title>Gestore Storico Allarmi</alarm_history_header_title>
<alarm_history_body_filter>Filtra allarmi per titolo</alarm_history_body_filter>
<alarm_history_body_filter_placeholder>Titolo...</alarm_history_body_filter_placeholder>
<alarm_history_body_filter_source>Sorgente</alarm_history_body_filter_source>
<alarm_history_body_date_range>Intervallo date</alarm_history_body_date_range>
<alarm_history_body_user>Utenti</alarm_history_body_user>
<alarms_history_table_source>Sorgente</alarms_history_table_source>
<alarms_history_table_title>Titolo</alarms_history_table_title>
<alarms_history_table_date>Data</alarms_history_table_date>
<alarms_history_table_user>Utenti</alarms_history_table_user>
<alarm_history_label_select_alarms>Seleziona un allarme...</alarm_history_label_select_alarms>
<alarm_history_users_not_user>Nessun-Utente</alarm_history_users_not_user>
<create_user_lbl_title_window>Modifica utente</create_user_lbl_title_window>
<create_user_lbl_firstname>Nome</create_user_lbl_firstname>
<create_user_lbl_lastname>Cognome</create_user_lbl_lastname>
<create_user_lbl_password>Password</create_user_lbl_password>
<create_user_lbl_username>Username</create_user_lbl_username>
<create_user_btn_add_confirm>Aggiungi</create_user_btn_add_confirm>
<create_user_btn_edit_confirm>Modifica</create_user_btn_edit_confirm>
<create_user_btn_cancel>Annulla</create_user_btn_cancel>
<password_user_lbl_actpassword>Password attuale</password_user_lbl_actpassword>
<password_user_lbl_newpassword>Password nuova</password_user_lbl_newpassword>
<password_user_lbl_title_window>Modifica password: %s</password_user_lbl_title_window>
<role_user_lbl_title_window>Modifica ruolo: %s</role_user_lbl_title_window>
<modal_confirm_delete_user>Sei sicuro di voler eliminare l&#39;utente?</modal_confirm_delete_user>
<users_label_create_users>Aggiungi un nuovo utente</users_label_create_users>
<users_header_title>Gestore Utenti</users_header_title>
<users_header_label_userfilter>Filtra utenti per Username</users_header_label_userfilter>
<users_header_label_userfilter_placeholder>Username...</users_header_label_userfilter_placeholder>
<users_table_header_avatar>Avatar</users_table_header_avatar>
<users_table_header_username>Username</users_table_header_username>
<users_table_header_firstname>Nome</users_table_header_firstname>
<users_table_header_lastname>Cognome</users_table_header_lastname>
<users_table_header_language>Lingua</users_table_header_language>
<users_table_header_role>Ruolo</users_table_header_role>
<footer_tooltip_production>Manager della produzione</footer_tooltip_production>
<footer_tooltip_maintenance>Manager manutenzioni macchina</footer_tooltip_maintenance>
<footer_tooltip_alarms>Storico allarmi</footer_tooltip_alarms>
<footer_tooltip_report>Report e stato macchina</footer_tooltip_report>
<footer_tooltip_utilities>Utility e software esterni</footer_tooltip_utilities>
<footer_tooltip_users>User Manager</footer_tooltip_users>
<header_tooltip_btn_close>Chiudi CMS-Active</header_tooltip_btn_close>
<header_tooltip_btn_minimize>Minimizza CMS-Active</header_tooltip_btn_minimize>
<header_tooltip_btn_mchinfo>Visualizza Informazioni macchina</header_tooltip_btn_mchinfo>
<header_tooltip_btn_usrinfo>Visualizza Informazioni utente</header_tooltip_btn_usrinfo>
<header_tooltip_btn_nc_maintenance>Apre/Chiude la lista delle manutenzioni scadute</header_tooltip_btn_nc_maintenance>
<header_tooltip_nc_error>CN in Errore. Apre/Chiude la lista degli allarmi</header_tooltip_nc_error>
<header_tooltip_nc_idle>CN in Attesa di Comandi</header_tooltip_nc_idle>
<header_tooltip_Nc_Process>Informazioni processo</header_tooltip_Nc_Process>
<header_tooltip_mainstat_ko>Dispositivi macchina non ok</header_tooltip_mainstat_ko>
<header_tooltip_mainstat_ok>Macchina in funzione</header_tooltip_mainstat_ok>
<header_tooltip_powstat_ko>Macchina Non pronta a lavorare</header_tooltip_powstat_ko>
<header_tooltip_powstat_ok>Macchina pronta a lavorare</header_tooltip_powstat_ok>
<header_tooltip_emergency>Pulsanti di emergenza premuti</header_tooltip_emergency>
<header_tooltip_key>Chiave non inserita</header_tooltip_key>
<header_tooltip_power-on>Assi non in potenza</header_tooltip_power-on>
<header_tooltip_protections>Protezioni di sicurezza non ok</header_tooltip_protections>
<header_tooltip_settings-mode>Modalità setting attiva</header_tooltip_settings-mode>
<header_tooltip_air-flow>Aria compressa non ok</header_tooltip_air-flow>
<header_tooltip_zeroing>Azzeramento assi necessario</header_tooltip_zeroing>
<modal_load_program_empty_folder>Cartella Vuota</modal_load_program_empty_folder>
<alarm_history_label_date_timestamp>Aggiunta il %s alle %s</alarm_history_label_date_timestamp>
<alarm_history_btn_save_note>Salva</alarm_history_btn_save_note>
<contactinfo_lbl_assistance_name>Informazioni sull&#39;assistenza clienti:</contactinfo_lbl_assistance_name>
<contactinfo_lbl_qrdescription>Per maggiori informazioni clicca sul simbolo qui sotto o scansiona il codice con il tuo telefono:</contactinfo_lbl_qrdescription>
<contactinfo_btn_reloadfile>Ricarica dal file</contactinfo_btn_reloadfile>
<contactinfo_btn_showcmsdata>Mostra dati CMS</contactinfo_btn_showcmsdata>
<contactinfo_btn_openinbrowser>Apri nel browser</contactinfo_btn_openinbrowser>
<contactinfo_error_customer_configfile>Errore nel file &#34;C:\CMS\ContactInfo.xml&#34;</contactinfo_error_customer_configfile>
<create_maintenance_lbl_machine>Macchina</create_maintenance_lbl_machine>
<maintenance_machine_timer>Timer Macchina</maintenance_machine_timer>
<maintenance_remaining>Tempo rimanente</maintenance_remaining>
<maintenance_interval_timer>Intervallo</maintenance_interval_timer>
<maintenance_status>Stato</maintenance_status>
<maintenance_btn_showhistory>Mostra cronologia</maintenance_btn_showhistory>
<history_maintenance_lbl_title_window>Storico delle manutenzioni eseguite</history_maintenance_lbl_title_window>
<history_maintenance_table_header_date>Dati</history_maintenance_table_header_date>
<history_maintenance_table_header_user>Utente</history_maintenance_table_header_user>
<history_maintenance_table_header_counter>contatore</history_maintenance_table_header_counter>
<maintenance_exp_date>Scadenza</maintenance_exp_date>
<label_no_recipe>Nessuna ricetta caricata</label_no_recipe>
<modal_title_edit_note>Modifica Note</modal_title_edit_note>
<modal_recipe_note>Note della ricetta</modal_recipe_note>
<recipe_save>Salva</recipe_save>
<recipe_saveas_button>Salva con nome</recipe_saveas_button>
<recipe_saveas>Salva come nuova ricetta</recipe_saveas>
<recipe_change_note>Modifica Note ricetta</recipe_change_note>
<modal_title_save_as>Salva come nuova ricetta</modal_title_save_as>
<modal_confirm_save_recipe>Confermi di voler sovrascrivere la ricetta?</modal_confirm_save_recipe>
<modal_title_duplicate_recipe>Duplica Ricetta</modal_title_duplicate_recipe>
<folder_name>Nuova Cartella</folder_name>
<recipe_name>Nome della ricetta</recipe_name>
<cancel>Annulla</cancel>
<confirm>Conferma</confirm>
<modal_load_program_lbl_sheet_x>Dimensione lastra X:</modal_load_program_lbl_sheet_x>
<modal_load_program_lbl_sheet_y>Dimensione lastra Y:</modal_load_program_lbl_sheet_y>
<modal_load_program_lbl_sheet_z>Spessore lastra:</modal_load_program_lbl_sheet_z>
<modal_load_program_lbl_notes>Note:</modal_load_program_lbl_notes>
<modal_confirm_delete_recipe>Confermi di voler eliminare la ricetta?</modal_confirm_delete_recipe>
<modal_load_program_lbl_box_selected_folder>Cartella selezionata:</modal_load_program_lbl_box_selected_folder>
<modal_load_program_lbl_box_operations>Azioni disponibili:</modal_load_program_lbl_box_operations>
<modal_load_program_btn_upload_recipe>Carica e attiva ricetta</modal_load_program_btn_upload_recipe>
<setup_lbl_title>Setup</setup_lbl_title>
<lbl_recipe_overview_general>Formato</lbl_recipe_overview_general>
<lbl_recipe_overview_positions>Quote e velocità</lbl_recipe_overview_positions>
<lbl_recipe_overview_cycle>Ciclo</lbl_recipe_overview_cycle>
<lbl_recipe_overview_heats>Riscaldi</lbl_recipe_overview_heats>
<lbl_recipe_overview_pyrometer>Pirometro</lbl_recipe_overview_pyrometer>
<lbl_recipe_overview_drawing>Imbutitura</lbl_recipe_overview_drawing>
<lbl_recipe_overview_upperplate>Controstampo</lbl_recipe_overview_upperplate>
<lbl_recipe_overview_cooling>Raffreddamento</lbl_recipe_overview_cooling>
<lbl_recipe_overview_vacuum>Vuoto</lbl_recipe_overview_vacuum>
<lbl_recipe_overview_extraction>Estrazione</lbl_recipe_overview_extraction>
<lbl_recipe_overview_options>Opzioni</lbl_recipe_overview_options>
<process-heating>Riscaldo</process-heating>
<process-forming>Formatura</process-forming>
<process-extraction>Estrazione</process-extraction>
<preferred-softkeys>Softkey preferite</preferred-softkeys>
<progr-preriscaldo_lbl_title>Programmazione preriscaldo</progr-preriscaldo_lbl_title>
<history-item_warmup>Tempo di riscaldo</history-item_warmup>
<history-item_vacuum>Vuoto</history-item_vacuum>
<history-item_cycletime>Tempo ciclo netto</history-item_cycletime>
<dashboard-timing-start>Inizio</dashboard-timing-start>
<dashboard-timing-elapsed>Tempo trascorso</dashboard-timing-elapsed>
<dashboard-timing-end>Fine</dashboard-timing-end>
<remainging_days>gg</remainging_days>
<dashboard-setpoint>Set point</dashboard-setpoint>
<dashboard-remaining-time>Tempo rimanente</dashboard-remaining-time>
<dashboard-piece-hours>Pezzi/Ora</dashboard-piece-hours>
<dashboard-time-cycle>Tempo/Ciclo</dashboard-time-cycle>
<run_auto>Auto</run_auto>
<run_manual>Manuale</run_manual>
<mould>Stampo</mould>
<sheet>Lastra</sheet>
<plate>Stampo</plate>
<upperplate>Controstampo</upperplate>
<Frame>Cornice</Frame>
<formatoinfo_lbl_title>Formato</formatoinfo_lbl_title>
<position_upperplate>Discesa controstampo</position_upperplate>
<position_frame>Discesa cornice</position_frame>
<position_mould>Salita Stampo</position_mould>
<cycle>Ciclo di formatura</cycle>
<loader>Caricatore</loader>
<cycle_crystallisation>Cristallizzazione (secondo riscaldo)</cycle_crystallisation>
<acrilic_frame>Cornice per acrilico</acrilic_frame>
<additional_heating>Riscaldo superiore supplementare</additional_heating>
<upperheaters>Riscaldi superiori</upperheaters>
<lowerheaters>Riscaldi inferiori</lowerheaters>
<decomsustain>Sostentamento/Decompressione</decomsustain>
<warmers_select_all>Tutti</warmers_select_all>
<warmers_select_none>Nessuno</warmers_select_none>
<warmers_power>Gestione potenza</warmers_power>
<warmers_select_power>Seleziona...</warmers_select_power>
<warmers_autocomposition>Autocomposizione</warmers_autocomposition>
<upperthermoregulator>Termoregolazione riscaldo superiore</upperthermoregulator>
<lowerthermoregulator>Termoregolazione riscaldo inferiore</lowerthermoregulator>
<pyrometer>Pirometro</pyrometer>
<drawinginfo_lbl_title>Imbutitura</drawinginfo_lbl_title>
<upperplate_cycle>Ciclo controstampo</upperplate_cycle>
<upperplate_air>Aria controstampo</upperplate_air>
<upperplate_vacuum>Vuoto controstampo</upperplate_vacuum>
<upperplate_extraction>Estrazione controstampo</upperplate_extraction>
<blowers>Ventilatori</blowers>
<nebulizers>Nebulizzatori</nebulizers>
<telescopic>Telescopici</telescopic>
<shutters>Otturatori</shutters>
<main_vacuum>Vuoto principale</main_vacuum>
<direct_vacuum>Vuoto diretto</direct_vacuum>
<aux_vacuum>Vuoto ausiliario</aux_vacuum>
<pre_vacuum>Pre-Vuoto</pre_vacuum>
<main_extraction>Estrazione principale</main_extraction>
<aux_extraction>Estrazione ausiliaria</aux_extraction>
<modal_options_no_more_parameters>Nessun altro parametro da gestire</modal_options_no_more_parameters>
<thermoregulators>Termoregolatori</thermoregulators>
<undercut_mould>Sottosquadra stampo</undercut_mould>
<udercut_uppermould>Sottosquadra controstampo</udercut_uppermould>
<warmers_selection>Selezione</warmers_selection>
<opzioniinfo_lbl_title>Opzioni</opzioniinfo_lbl_title>
<history_item_venttime>Tempo raffreddamento</history_item_venttime>
<history_item_cycletimegross>Tempo ciclo lordo</history_item_cycletimegross>
<history_item_tempstampo>T. stampo</history_item_tempstampo>
<history_item_materialtempendwarm>T. Materiale fine riscaldo</history_item_materialtempendwarm>
<history_item_materialtempendvent>T. Materiale fine ventilazione</history_item_materialtempendvent>
<history_item_vacuumtime>Tempo vuoto</history_item_vacuumtime>
<history_item_mouldenergyin>Consumo energia netto</history_item_mouldenergyin>
<history_item_mouldenergyout>Consumo energia lordo</history_item_mouldenergyout>
<footer_tooltip_ricetta>Carica ricetta</footer_tooltip_ricetta>
<footer_tooltip_setup>Setup ricetta</footer_tooltip_setup>
<footer_tooltip_progr_prerisc>Pre-riscaldo</footer_tooltip_progr_prerisc>
<footer_tooltip_dashboard>Dashboard</footer_tooltip_dashboard>
<gauge_potenza>Potenza</gauge_potenza>
<gauge_vuoto>Vuoto</gauge_vuoto>
<gauge_aria>Aria</gauge_aria>
<lbl_btn_preheating_all>Seleziona tutti i giorni</lbl_btn_preheating_all>
<lbl_btn_preheating_non>Deseleziona tutti i giorni</lbl_btn_preheating_non>
<softkey_confirm>Sei sicuro?</softkey_confirm>
<confirm_request_confirm>Conferma</confirm_request_confirm>
<confirm_request_cancel>Annulla</confirm_request_cancel>
<lbl_loader_load_area>Area di carico</lbl_loader_load_area>
<avvio_prod_lbl_title>Avvio produione</avvio_prod_lbl_title>
<new_production>Nuovo lotto produttivo</new_production>
<warmup_cycles>Cicli di warmup</warmup_cycles>
<warmup_cycles_pieces>Numero di cicli:</warmup_cycles_pieces>
<modal_start_button>Avvio</modal_start_button>
<edit_prod_lbl_title>Modifica produione</edit_prod_lbl_title>
<production_management>Lotto di produzione</production_management>
<production_enabling>Setta numeto max di pezzi</production_enabling>
<mock_pieces>Numero di pezzi:</mock_pieces>
<heats_alert_thermocamera_not_enabled>Thermoprophet non abilitato</heats_alert_thermocamera_not_enabled>
<thermoprophet>Thermoprophet</thermoprophet>
<thermocamera_mode>Modalità Thermoprophet</thermocamera_mode>
<warmers_showcamera>Mostra immagine thermocamera</warmers_showcamera>
<warmers_enable>Gestione abilitazione/disabilitazione</warmers_enable>
<warmers_enabletemp>Abilita selzionate</warmers_enabletemp>
<warmers_disabletemp>Disabilita selezionate</warmers_disabletemp>
<warmers_temperature>Gestione temperature</warmers_temperature>
<warmers_set_temperature>Fissa tutte le temperature</warmers_set_temperature>
<thermocamera_on_off>Attivazione Thermoprophet</thermocamera_on_off>
<modal_title_backup>Backup ricette</modal_title_backup>
<select_devices>Seleziona dispositivo</select_devices>
<warmers_clear_temperature>Annulla tutte le temperature</warmers_clear_temperature>
<heats_alert_thermocamera_enabled>Thermoprophet abilitato</heats_alert_thermocamera_enabled>
<modal_resistance_info>Info Resistenza</modal_resistance_info>
<resistance_info_id_group>ID Gruppo:</resistance_info_id_group>
<resistance_info_id_reflector>ID Riflettore:</resistance_info_id_reflector>
<resistance_info_id_output>ID Output</resistance_info_id_output>
<resistance_info_wire_broken>Resistenza / Cavo rotto</resistance_info_wire_broken>
<resistance_info_fuse_blown>Fusibile Bruciato:</resistance_info_fuse_blown>
<resistance_info_short_triac>Corto Circuito:</resistance_info_short_triac>
<resistance_info_amp_low>Corrente troppo bassa:</resistance_info_amp_low>
<resistance_info_phase_missing>Una o più fasi mancanti:</resistance_info_phase_missing>
<resistance_info_ssr_overload>Sovraccarico SSR:</resistance_info_ssr_overload>
<resistance_info_frequency_not_ok>Frequenza non 49..51 o 59..61 Hz:</resistance_info_frequency_not_ok>
<underthehood_label_input>Input</underthehood_label_input>
<underthehood_label_output>Output</underthehood_label_output>
<underthehood_label_pinned>Selezionati</underthehood_label_pinned>
<underthehood_label_page>Pagina</underthehood_label_page>
<underthehood_label_wire>Cavo</underthehood_label_wire>
<underthehood_label_profinet>Profinet</underthehood_label_profinet>
<underthehood_label_desc>Descrizione</underthehood_label_desc>
<underthehood_label_val>Valore</underthehood_label_val>
<underthehood_label_force>Forzatura</underthehood_label_force>
<underthehood_label_io>Gestione IO</underthehood_label_io>
<underthehood_label_loga>Log - Ciclo automatico</underthehood_label_loga>
<underthehood_label_logm>Log - Lastre</underthehood_label_logm>
<underthehood_label_assi>Gestione assi</underthehood_label_assi>
<underthehood_label_riscaldi>Gestione riscaldi</underthehood_label_riscaldi>
<underthehood_btn_details>Dettagli</underthehood_btn_details>
<underthehood_label_cell>Cella</underthehood_label_cell>
<underthehood_label_reflector>Riflettore</underthehood_label_reflector>
<underthehood_label_channel>Canale</underthehood_label_channel>
<underthehood_label_board>Board</underthehood_label_board>
<underthehood_label_currenta>Corrente [A]</underthehood_label_currenta>
<underthehood_label_currentp>Power [%%]</underthehood_label_currentp>
<underthehood_label_status>Stato</underthehood_label_status>
<underthehood_label_date>Data</underthehood_label_date>
<underthehood_label_message>Messaggio</underthehood_label_message>
<underthehood_btn_zero>Set Zero</underthehood_btn_zero>
<underthehood_label_axis_enabled>Abilitato</underthehood_label_axis_enabled>
<underthehood_label_axes>Asse</underthehood_label_axes>
<underthehood_label_position>Posizione</underthehood_label_position>
<underthehood_label_speed>Velocità</underthehood_label_speed>
<underthehood_label_torque>Carico</underthehood_label_torque>
<underthehood_label_errorcode>Cod. errore</underthehood_label_errorcode>
<underthehood_label_motion>Fase mot.</underthehood_label_motion>
<underthehood_btn_align>Allinea</underthehood_btn_align>
<underthehood_btn_probe>Set Probe</underthehood_btn_probe>
<underthehood_btn_setslaves>Set posizione slave</underthehood_btn_setslaves>
<cmsconnect_info_lbl_title>Gestione CMS-Connect</cmsconnect_info_lbl_title>
<cmsconnect_info_menu_conn_status>Stato connessione</cmsconnect_info_menu_conn_status>
<cmsconnect_info_menu_networkconfig>Configurazione rete</cmsconnect_info_menu_networkconfig>
<cmsconnect_info_menu_proxyconfig>Configurazione s. proxy</cmsconnect_info_menu_proxyconfig>
<cmsconnect_info_menu_activation>Attivazione</cmsconnect_info_menu_activation>
<cmsconnect_info_menu_messages>Messaggi</cmsconnect_info_menu_messages>
<cmsconnect_info_menu_reboot>Riavvio</cmsconnect_info_menu_reboot>
<cmsconnect_info_lbl_url>Url</cmsconnect_info_lbl_url>
<cmsconnect_info_lbl_port>Porta</cmsconnect_info_lbl_port>
<cmsconnect_info_btn_run_conn_test>Avvia test</cmsconnect_info_btn_run_conn_test>
<star_keyboard_softkeys>Softkey in console</star_keyboard_softkeys>
<footer_tooltip_under_hood>Sotto il cofano</footer_tooltip_under_hood>
<underthehood_btn_move>Muovi</underthehood_btn_move>
<modal_confirm_mode_manual>Confermi di voler passare alla modalità manuale?</modal_confirm_mode_manual>
<cmsconnect_info_lbl_dhcp>Dhcp</cmsconnect_info_lbl_dhcp>
<cmsconnect_info_lbl_netmask>Netmask</cmsconnect_info_lbl_netmask>
<cmsconnect_info_lbl_dgateway>Default Gateway</cmsconnect_info_lbl_dgateway>
<cmsconnect_info_lbl_dns>Server Dns</cmsconnect_info_lbl_dns>
<cmsconnect_info_lbl_pref>Prefissi</cmsconnect_info_lbl_pref>
<cmsconnect_info_lbl_pref_placeholder>aggiungi un prefisso in ogni linea</cmsconnect_info_lbl_pref_placeholder>
<cmsconnect_info_lbl_proxy>Proxy</cmsconnect_info_lbl_proxy>
<cmsconnect_info_lbl_ip>Ip</cmsconnect_info_lbl_ip>
<cmsconnect_info_lbl_username>Username</cmsconnect_info_lbl_username>
<cmsconnect_info_lbl_password>Password</cmsconnect_info_lbl_password>
<cmsconnect_info_lbl_proxy_filters>Filtri proxy</cmsconnect_info_lbl_proxy_filters>
<cmsconnect_info_lbl_dns_placeholder>aggiungi un indirizzo in ogni linea</cmsconnect_info_lbl_dns_placeholder>
<cmsconnect_info_btn_load>Carica</cmsconnect_info_btn_load>
<cmsconnect_info_btn_save>Salva</cmsconnect_info_btn_save>
<connect_qrcode_activation_title>Scansiona il codice QR</connect_qrcode_activation_title>
<connect_link_activation_title>E inserisci il codice:</connect_link_activation_title>
<messages_lbl_create_message>Messaggio</messages_lbl_create_message>
<cmsconnect_info_messages_duration>Durata</cmsconnect_info_messages_duration>
<cmsconnect_info_messages_department>Dipartimento</cmsconnect_info_messages_department>
<cmsconnect_info_messages_department_maintenance>Manutenzione</cmsconnect_info_messages_department_maintenance>
<cmsconnect_info_messages_department_production>Produzione</cmsconnect_info_messages_department_production>
<cmsconnect_info_btn_send_message>Invia messaggio</cmsconnect_info_btn_send_message>
<cmsconnect_info_btn_reboot>Riavvia</cmsconnect_info_btn_reboot>
<modal_axis_info>Info Asse</modal_axis_info>
<axis_info_id>Id:</axis_info_id>
<axis_info_name>Nome:</axis_info_name>
<axis_info_torque>In coppia:</axis_info_torque>
<axis_info_gantry>Gantry:</axis_info_gantry>
<axis_info_moving>In movimento:</axis_info_moving>
<axis_info_zero>Azzerato:</axis_info_zero>
<axis_info_position>In posizione:</axis_info_position>
<axis_info_error>In errore:</axis_info_error>
<axis_info_brakealm>Allarme test freno:</axis_info_brakealm>
</root>
+430 -337
View File
@@ -1,340 +1,433 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Automatically generated by nicola.carminati: 2020-11-03 -->
<!-- Automatically generated by nicola.carminati: 2021-03-10 -->
<root>
<language_it>English</language_it>
<header_maintainance_request>Maintenance request</header_maintainance_request>
<support_summary>Expiration:</support_summary>
<header_maintainance_request_explanation>There is a procedure to be performed</header_maintainance_request_explanation>
<alarm_ribbon_title_more_items>There are %d active alarms</alarm_ribbon_title_more_items>
<warning_ribbon_title_more_items>There are %d active warnings</warning_ribbon_title_more_items>
<userinfo_lbl_title>User Settings</userinfo_lbl_title>
<userinfo_btn_logout>Log out</userinfo_btn_logout>
<userinfo_lbl_language>Language</userinfo_lbl_language>
<userinfo_btn_cancel>Cancel</userinfo_btn_cancel>
<userinfo_btn_save>Save</userinfo_btn_save>
<login_lbl_title>User login</login_lbl_title>
<login_lbl_username>User name</login_lbl_username>
<login_lbl_password>Password</login_lbl_password>
<login_btn_login>Log in</login_btn_login>
<login_lbl_invalidusername>Invalid user name</login_lbl_invalidusername>
<login_lbl_invalidpassword>Invalid password</login_lbl_invalidpassword>
<alarms_btn_history_show>Show alarms history</alarms_btn_history_show>
<alarms_refresh_all>Refresh all</alarms_refresh_all>
<alarm_item_btn_show>Show</alarm_item_btn_show>
<alarm_ribbon_title_1_item>Alarm</alarm_ribbon_title_1_item>
<warning_ribbon_title_1_item>Warning</warning_ribbon_title_1_item>
<alarm_detail_lbl_status>Status</alarm_detail_lbl_status>
<alarm_manual_lbl_title>Restore procedure</alarm_manual_lbl_title>
<alarm_manual_lbl_description>Alarm resolution</alarm_manual_lbl_description>
<alarm_manual_btn_start>Start</alarm_manual_btn_start>
<alarm_detail_btn_show_manual>Show Manual</alarm_detail_btn_show_manual>
<alarm_detail_btn_ask_help>Ask Help</alarm_detail_btn_ask_help>
<alarm_detail_btn_refresh>Refresh</alarm_detail_btn_refresh>
<alarm_btn_back_to_list>Back to alarm list</alarm_btn_back_to_list>
<alarm_status_active>Active</alarm_status_active>
<alarm_status_deleted>Deleted</alarm_status_deleted>
<alarm_btn_add_attach>Add an attachment</alarm_btn_add_attach>
<machineinfo_lbl_title>Machine Info</machineinfo_lbl_title>
<machine_serial_number>Machine Id:</machine_serial_number>
<machine_installation_date>Installation date:</machine_installation_date>
<machineinfo_model_nc>Nc Model:</machineinfo_model_nc>
<machineinfo_serial_nc>Nc Serial Num:</machineinfo_serial_nc>
<machineinfo_firmware_version>Nc Firmware Version:</machineinfo_firmware_version>
<machineinfo_plc_version>Plc Version:</machineinfo_plc_version>
<machineinfo_current_language>Nc Selected Language:</machineinfo_current_language>
<machineinfo_processes>Nc Configured Processes:</machineinfo_processes>
<machineinfo_datetime>Nc Time-Stamp:</machineinfo_datetime>
<machineinfo_umeas>Nc Unit measure:</machineinfo_umeas>
<machineinfo_server_cms_version>CMS-Active Server Version:</machineinfo_server_cms_version>
<machineinfo_core_cms_version>CMS-Active Core Version:</machineinfo_core_cms_version>
<machineinfo_cms_client_version>CMS-Active Client Version:</machineinfo_cms_client_version>
<machineinfo_cms_dateformat>CMS-Active Data Format:</machineinfo_cms_dateformat>
<contactinfo_lbl_title>Contact Info</contactinfo_lbl_title>
<contactinfo_lbl_company>Contact Name:</contactinfo_lbl_company>
<contactinfo_lbl_email>Email:</contactinfo_lbl_email>
<contactinfo_lbl_phoneNumber>Phone Number:</contactinfo_lbl_phoneNumber>
<utilities_header_label>Utilities &#38; External Softwares</utilities_header_label>
<modal_nochangepage_title>Operation not allowed</modal_nochangepage_title>
<modal_confirm_close_application>Are you sure you want to close Active?</modal_confirm_close_application>
<modal_nocloseapp_title>Action not allowed</modal_nocloseapp_title>
<modal_confirm_title>Confirm Operation</modal_confirm_title>
<modal_ok_button>Ok</modal_ok_button>
<modal_cancel_button>Cancel</modal_cancel_button>
<maintenance_header_title>Maintenance manager</maintenance_header_title>
<maintenance_card_btn_save_note>Save</maintenance_card_btn_save_note>
<maintenance_card_btn_view_all_attach>Show all files</maintenance_card_btn_view_all_attach>
<maintenance_card_btn_hide_all_attach>Show only last files</maintenance_card_btn_hide_all_attach>
<maintenance_card_btn_add_attach>Add a file</maintenance_card_btn_add_attach>
<maintenance_card_btn_view_all_note>Show all notes</maintenance_card_btn_view_all_note>
<maintenance_card_btn_hide_all_note>Show olny last notes</maintenance_card_btn_hide_all_note>
<maintenance_card_label_btn_footer>Mark as performed</maintenance_card_label_btn_footer>
<maintenance_header_label_procedure>Find a maintenance by name</maintenance_header_label_procedure>
<maintenance_header_label_procedure_placeholder>Maintenance name...</maintenance_header_label_procedure_placeholder>
<maintenance_header_label_state>State</maintenance_header_label_state>
<maintenance_label_create_intervention>Create a new maintenance-event</maintenance_label_create_intervention>
<maintenance_label_disable-maintenance>Select a maintenance...</maintenance_label_disable-maintenance>
<maintenance_state_expired>Expired</maintenance_state_expired>
<maintenance_state_closed>Closed</maintenance_state_closed>
<maintenance_state_running>Not expired</maintenance_state_running>
<maintenance_state_ending>Expiring</maintenance_state_ending>
<maintenance_table_header_counter>Counter</maintenance_table_header_counter>
<maintenance_table_header_deadline>Expires in</maintenance_table_header_deadline>
<maintenance_table_header_state>State</maintenance_table_header_state>
<maintenance_table_header_title>Title</maintenance_table_header_title>
<maintenance_card_label_date_timestamp>Added in %s at %s</maintenance_card_label_date_timestamp>
<maintenance_card_btn_cancel_modify_note>Cancel</maintenance_card_btn_cancel_modify_note>
<maintenance_card_btn_save_modify_note>Save</maintenance_card_btn_save_modify_note>
<maintenance_date_neverdone>Maintenance never registered</maintenance_date_neverdone>
<maintenance_date_justdone>Last maintenance registered few minutes ago, from: %s</maintenance_date_justdone>
<maintenance_date_hours>Last maintenance registered %d hours ago, from: %s</maintenance_date_hours>
<maintenance_date_days>Last maintenance registered %d days ago, from: %s</maintenance_date_days>
<maintenance_date_fixeddate>Last maintenance registered in: %s, from: %s</maintenance_date_fixeddate>
<maintenance_card_created_timestamp>Maintenance created in %s at %s</maintenance_card_created_timestamp>
<maintenance_card_attachments>Attachments</maintenance_card_attachments>
<maintenance_card_notes>Notes</maintenance_card_notes>
<create_maintenance_lbl_title_window>Maintenance-event creation</create_maintenance_lbl_title_window>
<create_maintenance_lbl_title>Title</create_maintenance_lbl_title>
<create_maintenance_btn_cancel>Cancel</create_maintenance_btn_cancel>
<create_maintenance_lbl_date>Date</create_maintenance_lbl_date>
<create_maintenance_lbl_description>Description</create_maintenance_lbl_description>
<create_maintenance_lbl_end_time>Time</create_maintenance_lbl_end_time>
<create_maintenance_lbl_typology>Type</create_maintenance_lbl_typology>
<create_maintenance_lbl_repeat>Repeat every</create_maintenance_lbl_repeat>
<create_maintenance_repeat_day>Days</create_maintenance_repeat_day>
<create_maintenance_repeat_hour>Hours</create_maintenance_repeat_hour>
<create_maintenance_repeat_minutes>Minutes</create_maintenance_repeat_minutes>
<create_maintenance_repeat_months>Months</create_maintenance_repeat_months>
<create_maintenance_lbl_fixeddate>Fixed date</create_maintenance_lbl_fixeddate>
<create_maintenance_lbl_temporal>Repeating event</create_maintenance_lbl_temporal>
<create_maintenance_btn_add_confirm>Create Maintenance</create_maintenance_btn_add_confirm>
<create_maintenance_btn_edit_confirm>Edit Maintenance</create_maintenance_btn_edit_confirm>
<modal_load_program_lbl_title_window>Recipe-Loader</modal_load_program_lbl_title_window>
<modal_load_program_search_placeholder>Find a recipe by name</modal_load_program_search_placeholder>
<modal_load_program_creation_date>Creation Date:</modal_load_program_creation_date>
<modal_load_program_last_change_date>Last change Date:</modal_load_program_last_change_date>
<modal_load_program_lbl_img_not_found>Preview not available</modal_load_program_lbl_img_not_found>
<alarm_history_filter_nc>NC</alarm_history_filter_nc>
<alarm_history_filter_plc>PLC</alarm_history_filter_plc>
<alarm_history_header_title>Alarm history manager</alarm_history_header_title>
<alarm_history_body_filter>Filter alarm By Title</alarm_history_body_filter>
<alarm_history_body_filter_placeholder>Title...</alarm_history_body_filter_placeholder>
<alarm_history_body_filter_source>Source</alarm_history_body_filter_source>
<alarm_history_body_date_range>Date range</alarm_history_body_date_range>
<alarm_history_body_user>Users</alarm_history_body_user>
<alarms_history_table_source>Source</alarms_history_table_source>
<alarms_history_table_title>Title</alarms_history_table_title>
<alarms_history_table_date>Date</alarms_history_table_date>
<alarms_history_table_user>User</alarms_history_table_user>
<alarm_history_label_select_alarms>Select an alarm...</alarm_history_label_select_alarms>
<alarm_history_users_not_user>No-users</alarm_history_users_not_user>
<create_user_lbl_title_window>User Editor</create_user_lbl_title_window>
<create_user_lbl_firstname>First Name</create_user_lbl_firstname>
<create_user_lbl_lastname>Last Name</create_user_lbl_lastname>
<create_user_lbl_password>Password</create_user_lbl_password>
<create_user_lbl_username>Username</create_user_lbl_username>
<create_user_btn_add_confirm>Add</create_user_btn_add_confirm>
<create_user_btn_edit_confirm>Edit</create_user_btn_edit_confirm>
<create_user_btn_cancel>Cancel</create_user_btn_cancel>
<password_user_lbl_actpassword>Actual password</password_user_lbl_actpassword>
<password_user_lbl_newpassword>New password</password_user_lbl_newpassword>
<password_user_lbl_title_window>Password Editor: %s</password_user_lbl_title_window>
<role_user_lbl_title_window>Role Editor: %s</role_user_lbl_title_window>
<modal_confirm_delete_user>Are you sure to delete the user?</modal_confirm_delete_user>
<users_label_create_users>Add new user</users_label_create_users>
<users_header_title>Users Manager</users_header_title>
<users_header_label_userfilter>Filter users by Username</users_header_label_userfilter>
<users_header_label_userfilter_placeholder>Username...</users_header_label_userfilter_placeholder>
<users_table_header_avatar>Avatar</users_table_header_avatar>
<users_table_header_username>Username</users_table_header_username>
<users_table_header_firstname>First Name</users_table_header_firstname>
<users_table_header_lastname>Last Name</users_table_header_lastname>
<users_table_header_language>Language</users_table_header_language>
<users_table_header_role>Role</users_table_header_role>
<footer_tooltip_production>Production Manager</footer_tooltip_production>
<footer_tooltip_maintenance>Maintenance Manager</footer_tooltip_maintenance>
<footer_tooltip_alarms>Alarm History</footer_tooltip_alarms>
<footer_tooltip_report>Reports &#38; Machine State</footer_tooltip_report>
<footer_tooltip_utilities>Utilities &#38; External softwares</footer_tooltip_utilities>
<footer_tooltip_users>Users Manager</footer_tooltip_users>
<header_tooltip_btn_close>Close CMS-Active</header_tooltip_btn_close>
<header_tooltip_btn_minimize>Minimize CMS-Active</header_tooltip_btn_minimize>
<header_tooltip_btn_mchinfo>Show machine info</header_tooltip_btn_mchinfo>
<header_tooltip_btn_usrinfo>Show user info</header_tooltip_btn_usrinfo>
<header_tooltip_btn_nc_maintenance>Open/Close list of expired maintenances</header_tooltip_btn_nc_maintenance>
<header_tooltip_nc_error>NC in Error-state. Open/Close list of active alarms</header_tooltip_nc_error>
<header_tooltip_nc_idle>NC in Idle-state</header_tooltip_nc_idle>
<header_tooltip_Nc_Process>Nc-process info</header_tooltip_Nc_Process>
<header_tooltip_mainstat_ko>Machine devices not ok</header_tooltip_mainstat_ko>
<header_tooltip_mainstat_ok>Machine operational</header_tooltip_mainstat_ok>
<header_tooltip_powstat_ko>Machine not ready to work</header_tooltip_powstat_ko>
<header_tooltip_powstat_ok>Machine can work</header_tooltip_powstat_ok>
<header_tooltip_emergency>Emergency buttons pressed</header_tooltip_emergency>
<header_tooltip_key>Security key not inserted</header_tooltip_key>
<header_tooltip_power-on>Axes not in power-state</header_tooltip_power-on>
<header_tooltip_protections>Safety protections not ok</header_tooltip_protections>
<header_tooltip_settings-mode>Setting-mode active</header_tooltip_settings-mode>
<header_tooltip_air-flow>Airflow pressure not ok</header_tooltip_air-flow>
<header_tooltip_zeroing>Axes zeroing needed</header_tooltip_zeroing>
<modal_load_program_empty_folder>Empty Folder</modal_load_program_empty_folder>
<alarm_history_label_date_timestamp>Added in %s at %s</alarm_history_label_date_timestamp>
<alarm_history_btn_save_note>Save</alarm_history_btn_save_note>
<contactinfo_lbl_assistance_name>Customer Care Info:</contactinfo_lbl_assistance_name>
<contactinfo_lbl_qrdescription>For more information click on the symbol below or scan it the code with your phone:</contactinfo_lbl_qrdescription>
<contactinfo_btn_reloadfile>Reload from file</contactinfo_btn_reloadfile>
<contactinfo_btn_showcmsdata>Show CMS data</contactinfo_btn_showcmsdata>
<contactinfo_btn_openinbrowser>Open In Browser</contactinfo_btn_openinbrowser>
<contactinfo_error_customer_configfile>Error in file &#34;C:\CMS\ContactInfo.xml&#34;</contactinfo_error_customer_configfile>
<create_maintenance_lbl_machine>Machine</create_maintenance_lbl_machine>
<maintenance_machine_timer>Machine-timer</maintenance_machine_timer>
<maintenance_remaining>Remaining time</maintenance_remaining>
<maintenance_interval_timer>Interval</maintenance_interval_timer>
<maintenance_status>Status</maintenance_status>
<maintenance_btn_showhistory>Show History</maintenance_btn_showhistory>
<history_maintenance_lbl_title_window>History of performed-maintenances</history_maintenance_lbl_title_window>
<history_maintenance_table_header_date>Data</history_maintenance_table_header_date>
<history_maintenance_table_header_user>User</history_maintenance_table_header_user>
<history_maintenance_table_header_counter>Counter</history_maintenance_table_header_counter>
<maintenance_exp_date>Expires</maintenance_exp_date>
<label_no_recipe>No recipe loaded</label_no_recipe>
<modal_title_edit_note>Recipe notes</modal_title_edit_note>
<modal_recipe_note>Notes of the recipe</modal_recipe_note>
<recipe_save>Save</recipe_save>
<recipe_saveas_button>Save as</recipe_saveas_button>
<recipe_saveas>Save as new recipe</recipe_saveas>
<recipe_change_note>Edit recipe notes</recipe_change_note>
<modal_title_save_as>Save as new recipe</modal_title_save_as>
<modal_confirm_save_recipe>Do you confirm that you want to overwrite the recipe?</modal_confirm_save_recipe>
<modal_title_duplicate_recipe>Duplicate recipe</modal_title_duplicate_recipe>
<folder_name>Folder name</folder_name>
<recipe_name>Recipe name</recipe_name>
<cancel>Cancel</cancel>
<confirm>Confirm</confirm>
<modal_load_program_lbl_sheet_x>Sheet size X:</modal_load_program_lbl_sheet_x>
<modal_load_program_lbl_sheet_y>Sheet size Y:</modal_load_program_lbl_sheet_y>
<modal_load_program_lbl_sheet_z>Sheet tickness:</modal_load_program_lbl_sheet_z>
<modal_load_program_lbl_notes>Notes:</modal_load_program_lbl_notes>
<modal_confirm_delete_recipe>Do you confirm that you want to delete the recipe?</modal_confirm_delete_recipe>
<modal_load_program_lbl_box_selected_folder>Selected folder:</modal_load_program_lbl_box_selected_folder>
<modal_load_program_lbl_box_operations>Allowed actions:</modal_load_program_lbl_box_operations>
<modal_load_program_btn_upload_recipe>Load and activate recipe</modal_load_program_btn_upload_recipe>
<setup_lbl_title>Setup</setup_lbl_title>
<lbl_recipe_overview_general>Dimensions</lbl_recipe_overview_general>
<lbl_recipe_overview_positions>Position &#38; Speed</lbl_recipe_overview_positions>
<lbl_recipe_overview_cycle>Cycle</lbl_recipe_overview_cycle>
<lbl_recipe_overview_heats>Heaters</lbl_recipe_overview_heats>
<lbl_recipe_overview_pyrometer>Pyrometer</lbl_recipe_overview_pyrometer>
<lbl_recipe_overview_drawing>Drawing</lbl_recipe_overview_drawing>
<lbl_recipe_overview_upperplate>Upperplate</lbl_recipe_overview_upperplate>
<lbl_recipe_overview_cooling>Cooling</lbl_recipe_overview_cooling>
<lbl_recipe_overview_vacuum>Vacuum</lbl_recipe_overview_vacuum>
<lbl_recipe_overview_extraction>Extraction</lbl_recipe_overview_extraction>
<lbl_recipe_overview_options>Options</lbl_recipe_overview_options>
<process-heating>heating</process-heating>
<process-forming>Forming</process-forming>
<process-extraction>Extraction</process-extraction>
<preferred-softkeys>Preferred softkeys</preferred-softkeys>
<progr-preriscaldo_lbl_title>Pre-heating programming</progr-preriscaldo_lbl_title>
<history-item_warmup>Heating time</history-item_warmup>
<history-item_vacuum>Vacuum</history-item_vacuum>
<history-item_cycletime>Net cycle time</history-item_cycletime>
<dashboard-timing-start>Start</dashboard-timing-start>
<dashboard-timing-elapsed>Elapsed time</dashboard-timing-elapsed>
<dashboard-timing-end>End</dashboard-timing-end>
<remainging_days>dd</remainging_days>
<dashboard-setpoint>Set point</dashboard-setpoint>
<dashboard-remaining-time>Remaining Time</dashboard-remaining-time>
<dashboard-piece-hours>Piece/Hours</dashboard-piece-hours>
<dashboard-time-cycle>Time/Cycle</dashboard-time-cycle>
<run_auto>Auto</run_auto>
<run_manual>Manual</run_manual>
<mould>Mould</mould>
<sheet>Sheet</sheet>
<plate>Plate</plate>
<upperplate>Upperplate</upperplate>
<Frame>Frame</Frame>
<formatoinfo_lbl_title>Dimensions</formatoinfo_lbl_title>
<position_upperplate>Upperplate lowering</position_upperplate>
<position_frame>Frame lowering</position_frame>
<position_mould>Mould rising</position_mould>
<cycle>Thermoforming cycle</cycle>
<loader>Loader</loader>
<cycle_crystallisation>Crystallization</cycle_crystallisation>
<acrilic_frame>Frame for acrylic cycle</acrilic_frame>
<additional_heating>Additional upper heating</additional_heating>
<upperheaters>Upper heaters</upperheaters>
<lowerheaters>Lower heaters</lowerheaters>
<decomsustain>Sustenance / Decompression</decomsustain>
<warmers_select_all>All</warmers_select_all>
<warmers_select_none>None</warmers_select_none>
<warmers_power>Power Management</warmers_power>
<warmers_select_power>Select....</warmers_select_power>
<warmers_autocomposition>Auto-composition</warmers_autocomposition>
<upperthermoregulator>Upper heating thermoregulation</upperthermoregulator>
<lowerthermoregulator>Lower heating thermoregulation</lowerthermoregulator>
<pyrometer>Pyrometer</pyrometer>
<drawinginfo_lbl_title>Drawing</drawinginfo_lbl_title>
<upperplate_cycle>Upperplate Cycle</upperplate_cycle>
<upperplate_air>Upperplate Air</upperplate_air>
<upperplate_vacuum>Upperplate vacuum</upperplate_vacuum>
<upperplate_extraction>Upperplate extraction</upperplate_extraction>
<blowers>Blowers</blowers>
<nebulizers>Nebulizers</nebulizers>
<telescopic>Telescopics</telescopic>
<shutters>Shutters</shutters>
<main_vacuum>Main vacuum</main_vacuum>
<direct_vacuum>Direct vacuum</direct_vacuum>
<aux_vacuum>Aux vacuum</aux_vacuum>
<pre_vacuum>Pre vacuum</pre_vacuum>
<main_extraction>Main extraction</main_extraction>
<aux_extraction>Aux extraction</aux_extraction>
<modal_options_no_more_parameters>No more parameters to edit</modal_options_no_more_parameters>
<thermoregulators>Thermoregulators</thermoregulators>
<undercut_mould>Mould undercuts</undercut_mould>
<udercut_uppermould>Upperplate undercuts</udercut_uppermould>
<warmers_selection>Heater selecion</warmers_selection>
<opzioniinfo_lbl_title>Options</opzioniinfo_lbl_title>
<history_item_venttime>Cooling time</history_item_venttime>
<history_item_cycletimegross>Gross cycle time</history_item_cycletimegross>
<history_item_tempstampo>Mould T.</history_item_tempstampo>
<history_item_materialtempendwarm>Material T. End-heating</history_item_materialtempendwarm>
<history_item_materialtempendvent>Material T. End-cooling</history_item_materialtempendvent>
<history_item_vacuumtime>Vacuum time</history_item_vacuumtime>
<history_item_mouldenergyin>Net cycle energy</history_item_mouldenergyin>
<history_item_mouldenergyout>Gross cycle energy</history_item_mouldenergyout>
<footer_tooltip_ricetta>Load recype</footer_tooltip_ricetta>
<footer_tooltip_setup>Setup recype</footer_tooltip_setup>
<footer_tooltip_progr_prerisc>Pre-Heating</footer_tooltip_progr_prerisc>
<footer_tooltip_dashboard>Dashboard</footer_tooltip_dashboard>
<gauge_potenza>Power</gauge_potenza>
<gauge_vuoto>Vacuum</gauge_vuoto>
<gauge_aria>Air</gauge_aria>
<lbl_btn_preheating_all>Select All Days</lbl_btn_preheating_all>
<lbl_btn_preheating_non>Deselect All Days</lbl_btn_preheating_non>
<softkey_confirm>Are you sure?</softkey_confirm>
<confirm_request_confirm>Confirm</confirm_request_confirm>
<confirm_request_cancel>Cancel</confirm_request_cancel>
<lbl_loader_load_area>Loading area</lbl_loader_load_area>
<avvio_prod_lbl_title>Start Production</avvio_prod_lbl_title>
<new_production>New production lot</new_production>
<warmup_cycles>Warmup cycles</warmup_cycles>
<warmup_cycles_pieces>Number of cycles:</warmup_cycles_pieces>
<modal_start_button>Start</modal_start_button>
<edit_prod_lbl_title>Edit Production</edit_prod_lbl_title>
<production_management>Production lot</production_management>
<production_enabling>Set the max number of pieces</production_enabling>
<mock_pieces>Number of pieces:</mock_pieces>
<heats_alert_thermocamera_not_enabled>Thermoprophet not enabled</heats_alert_thermocamera_not_enabled>
<thermoprophet>Thermoprophet</thermoprophet>
<thermocamera_mode>Thermoprophet mode</thermocamera_mode>
<warmers_showcamera>Show Camera Image</warmers_showcamera>
<warmers_enable>Enable/Disable Management</warmers_enable>
<warmers_enabletemp>Enable selected</warmers_enabletemp>
<warmers_disabletemp>Disable selected</warmers_disabletemp>
<warmers_temperature>Temps Management</warmers_temperature>
<warmers_set_temperature>Set all temperatures</warmers_set_temperature>
<thermocamera_on_off>Thermoprophet run</thermocamera_on_off>
<modal_title_backup>Recipes backup</modal_title_backup>
<select_devices>Select devices</select_devices>
<warmers_clear_temperature>Clear all temperatures</warmers_clear_temperature>
<heats_alert_thermocamera_enabled>Thermoprophet enabled</heats_alert_thermocamera_enabled>
<language_it>English</language_it>
<header_maintainance_request>Maintenance request</header_maintainance_request>
<support_summary>Expiration:</support_summary>
<header_maintainance_request_explanation>There is a procedure to be performed</header_maintainance_request_explanation>
<alarm_ribbon_title_more_items>There are %d active alarms</alarm_ribbon_title_more_items>
<warning_ribbon_title_more_items>There are %d active warnings</warning_ribbon_title_more_items>
<userinfo_lbl_title>User Settings</userinfo_lbl_title>
<userinfo_btn_logout>Log out</userinfo_btn_logout>
<userinfo_lbl_language>Language</userinfo_lbl_language>
<userinfo_btn_cancel>Cancel</userinfo_btn_cancel>
<userinfo_btn_save>Save</userinfo_btn_save>
<login_lbl_title>User login</login_lbl_title>
<login_lbl_username>User name</login_lbl_username>
<login_lbl_password>Password</login_lbl_password>
<login_btn_login>Log in</login_btn_login>
<login_lbl_invalidusername>Invalid user name</login_lbl_invalidusername>
<login_lbl_invalidpassword>Invalid password</login_lbl_invalidpassword>
<alarms_btn_history_show>Show alarms history</alarms_btn_history_show>
<alarms_refresh_all>Refresh all</alarms_refresh_all>
<alarm_item_btn_show>Show</alarm_item_btn_show>
<alarm_ribbon_title_1_item>Alarm</alarm_ribbon_title_1_item>
<warning_ribbon_title_1_item>Warning</warning_ribbon_title_1_item>
<alarm_detail_lbl_status>Status</alarm_detail_lbl_status>
<alarm_manual_lbl_title>Restore procedure</alarm_manual_lbl_title>
<alarm_manual_lbl_description>Alarm resolution</alarm_manual_lbl_description>
<alarm_manual_btn_start>Start</alarm_manual_btn_start>
<alarm_detail_btn_show_manual>Show Manual</alarm_detail_btn_show_manual>
<alarm_detail_btn_ask_help>Ask Help</alarm_detail_btn_ask_help>
<alarm_detail_btn_refresh>Refresh</alarm_detail_btn_refresh>
<alarm_btn_back_to_list>Back to alarm list</alarm_btn_back_to_list>
<alarm_status_active>Active</alarm_status_active>
<alarm_status_deleted>Deleted</alarm_status_deleted>
<alarm_btn_add_attach>Add an attachment</alarm_btn_add_attach>
<machineinfo_lbl_title>Machine Info</machineinfo_lbl_title>
<machine_serial_number>Machine Id:</machine_serial_number>
<machine_installation_date>Installation date:</machine_installation_date>
<machineinfo_model_nc>Nc Model:</machineinfo_model_nc>
<machineinfo_serial_nc>Nc Serial Num:</machineinfo_serial_nc>
<machineinfo_firmware_version>Nc Firmware Version:</machineinfo_firmware_version>
<machineinfo_plc_version>Plc Version:</machineinfo_plc_version>
<machineinfo_current_language>Nc Selected Language:</machineinfo_current_language>
<machineinfo_processes>Nc Configured Processes:</machineinfo_processes>
<machineinfo_datetime>Nc Time-Stamp:</machineinfo_datetime>
<machineinfo_umeas>Nc Unit measure:</machineinfo_umeas>
<machineinfo_server_cms_version>CMS-Active Server Version:</machineinfo_server_cms_version>
<machineinfo_core_cms_version>CMS-Active Core Version:</machineinfo_core_cms_version>
<machineinfo_cms_client_version>CMS-Active Client Version:</machineinfo_cms_client_version>
<machineinfo_cms_dateformat>CMS-Active Data Format:</machineinfo_cms_dateformat>
<contactinfo_lbl_title>Contact Info</contactinfo_lbl_title>
<contactinfo_lbl_company>Contact Name:</contactinfo_lbl_company>
<contactinfo_lbl_email>Email:</contactinfo_lbl_email>
<contactinfo_lbl_phoneNumber>Phone Number:</contactinfo_lbl_phoneNumber>
<utilities_header_label>Utilities &#38; External Softwares</utilities_header_label>
<modal_nochangepage_title>Operation not allowed</modal_nochangepage_title>
<modal_confirm_close_application>Are you sure you want to close Active?</modal_confirm_close_application>
<modal_nocloseapp_title>Action not allowed</modal_nocloseapp_title>
<modal_confirm_title>Confirm Operation</modal_confirm_title>
<modal_ok_button>Ok</modal_ok_button>
<modal_cancel_button>Cancel</modal_cancel_button>
<maintenance_header_title>Maintenance manager</maintenance_header_title>
<maintenance_card_btn_save_note>Save</maintenance_card_btn_save_note>
<maintenance_card_btn_view_all_attach>Show all files</maintenance_card_btn_view_all_attach>
<maintenance_card_btn_hide_all_attach>Show only last files</maintenance_card_btn_hide_all_attach>
<maintenance_card_btn_add_attach>Add a file</maintenance_card_btn_add_attach>
<maintenance_card_btn_view_all_note>Show all notes</maintenance_card_btn_view_all_note>
<maintenance_card_btn_hide_all_note>Show olny last notes</maintenance_card_btn_hide_all_note>
<maintenance_card_label_btn_footer>Mark as performed</maintenance_card_label_btn_footer>
<maintenance_header_label_procedure>Find a maintenance by name</maintenance_header_label_procedure>
<maintenance_header_label_procedure_placeholder>Maintenance name...</maintenance_header_label_procedure_placeholder>
<maintenance_header_label_state>State</maintenance_header_label_state>
<maintenance_label_create_intervention>Create a new maintenance-event</maintenance_label_create_intervention>
<maintenance_label_disable-maintenance>Select a maintenance...</maintenance_label_disable-maintenance>
<maintenance_state_expired>Expired</maintenance_state_expired>
<maintenance_state_closed>Closed</maintenance_state_closed>
<maintenance_state_running>Not expired</maintenance_state_running>
<maintenance_state_ending>Expiring</maintenance_state_ending>
<maintenance_table_header_counter>Counter</maintenance_table_header_counter>
<maintenance_table_header_deadline>Expires in</maintenance_table_header_deadline>
<maintenance_table_header_state>State</maintenance_table_header_state>
<maintenance_table_header_title>Title</maintenance_table_header_title>
<maintenance_card_label_date_timestamp>Added in %s at %s</maintenance_card_label_date_timestamp>
<maintenance_card_btn_cancel_modify_note>Cancel</maintenance_card_btn_cancel_modify_note>
<maintenance_card_btn_save_modify_note>Save</maintenance_card_btn_save_modify_note>
<maintenance_date_neverdone>Maintenance never registered</maintenance_date_neverdone>
<maintenance_date_justdone>Last maintenance registered few minutes ago, from: %s</maintenance_date_justdone>
<maintenance_date_hours>Last maintenance registered %d hours ago, from: %s</maintenance_date_hours>
<maintenance_date_days>Last maintenance registered %d days ago, from: %s</maintenance_date_days>
<maintenance_date_fixeddate>Last maintenance registered in: %s, from: %s</maintenance_date_fixeddate>
<maintenance_card_created_timestamp>Maintenance created in %s at %s</maintenance_card_created_timestamp>
<maintenance_card_attachments>Attachments</maintenance_card_attachments>
<maintenance_card_notes>Notes</maintenance_card_notes>
<create_maintenance_lbl_title_window>Maintenance-event creation</create_maintenance_lbl_title_window>
<create_maintenance_lbl_title>Title</create_maintenance_lbl_title>
<create_maintenance_btn_cancel>Cancel</create_maintenance_btn_cancel>
<create_maintenance_lbl_date>Date</create_maintenance_lbl_date>
<create_maintenance_lbl_description>Description</create_maintenance_lbl_description>
<create_maintenance_lbl_end_time>Time</create_maintenance_lbl_end_time>
<create_maintenance_lbl_typology>Type</create_maintenance_lbl_typology>
<create_maintenance_lbl_repeat>Repeat every</create_maintenance_lbl_repeat>
<create_maintenance_repeat_day>Days</create_maintenance_repeat_day>
<create_maintenance_repeat_hour>Hours</create_maintenance_repeat_hour>
<create_maintenance_repeat_minutes>Minutes</create_maintenance_repeat_minutes>
<create_maintenance_repeat_months>Months</create_maintenance_repeat_months>
<create_maintenance_lbl_fixeddate>Fixed date</create_maintenance_lbl_fixeddate>
<create_maintenance_lbl_temporal>Repeating event</create_maintenance_lbl_temporal>
<create_maintenance_btn_add_confirm>Create Maintenance</create_maintenance_btn_add_confirm>
<create_maintenance_btn_edit_confirm>Edit Maintenance</create_maintenance_btn_edit_confirm>
<modal_load_program_lbl_title_window>Recipe-Loader</modal_load_program_lbl_title_window>
<modal_load_program_search_placeholder>Find a recipe by name</modal_load_program_search_placeholder>
<modal_load_program_creation_date>Creation Date:</modal_load_program_creation_date>
<modal_load_program_last_change_date>Last change Date:</modal_load_program_last_change_date>
<modal_load_program_lbl_img_not_found>Preview not available</modal_load_program_lbl_img_not_found>
<alarm_history_filter_nc>NC</alarm_history_filter_nc>
<alarm_history_filter_plc>PLC</alarm_history_filter_plc>
<alarm_history_header_title>Alarm history manager</alarm_history_header_title>
<alarm_history_body_filter>Filter alarm By Title</alarm_history_body_filter>
<alarm_history_body_filter_placeholder>Title...</alarm_history_body_filter_placeholder>
<alarm_history_body_filter_source>Source</alarm_history_body_filter_source>
<alarm_history_body_date_range>Date range</alarm_history_body_date_range>
<alarm_history_body_user>Users</alarm_history_body_user>
<alarms_history_table_source>Source</alarms_history_table_source>
<alarms_history_table_title>Title</alarms_history_table_title>
<alarms_history_table_date>Date</alarms_history_table_date>
<alarms_history_table_user>User</alarms_history_table_user>
<alarm_history_label_select_alarms>Select an alarm...</alarm_history_label_select_alarms>
<alarm_history_users_not_user>No-users</alarm_history_users_not_user>
<create_user_lbl_title_window>User Editor</create_user_lbl_title_window>
<create_user_lbl_firstname>First Name</create_user_lbl_firstname>
<create_user_lbl_lastname>Last Name</create_user_lbl_lastname>
<create_user_lbl_password>Password</create_user_lbl_password>
<create_user_lbl_username>Username</create_user_lbl_username>
<create_user_btn_add_confirm>Add</create_user_btn_add_confirm>
<create_user_btn_edit_confirm>Edit</create_user_btn_edit_confirm>
<create_user_btn_cancel>Cancel</create_user_btn_cancel>
<password_user_lbl_actpassword>Actual password</password_user_lbl_actpassword>
<password_user_lbl_newpassword>New password</password_user_lbl_newpassword>
<password_user_lbl_title_window>Password Editor: %s</password_user_lbl_title_window>
<role_user_lbl_title_window>Role Editor: %s</role_user_lbl_title_window>
<modal_confirm_delete_user>Are you sure to delete the user?</modal_confirm_delete_user>
<users_label_create_users>Add new user</users_label_create_users>
<users_header_title>Users Manager</users_header_title>
<users_header_label_userfilter>Filter users by Username</users_header_label_userfilter>
<users_header_label_userfilter_placeholder>Username...</users_header_label_userfilter_placeholder>
<users_table_header_avatar>Avatar</users_table_header_avatar>
<users_table_header_username>Username</users_table_header_username>
<users_table_header_firstname>First Name</users_table_header_firstname>
<users_table_header_lastname>Last Name</users_table_header_lastname>
<users_table_header_language>Language</users_table_header_language>
<users_table_header_role>Role</users_table_header_role>
<footer_tooltip_production>Production Manager</footer_tooltip_production>
<footer_tooltip_maintenance>Maintenance Manager</footer_tooltip_maintenance>
<footer_tooltip_alarms>Alarm History</footer_tooltip_alarms>
<footer_tooltip_report>Reports &#38; Machine State</footer_tooltip_report>
<footer_tooltip_utilities>Utilities &#38; External softwares</footer_tooltip_utilities>
<footer_tooltip_users>Users Manager</footer_tooltip_users>
<header_tooltip_btn_close>Close CMS-Active</header_tooltip_btn_close>
<header_tooltip_btn_minimize>Minimize CMS-Active</header_tooltip_btn_minimize>
<header_tooltip_btn_mchinfo>Show machine info</header_tooltip_btn_mchinfo>
<header_tooltip_btn_usrinfo>Show user info</header_tooltip_btn_usrinfo>
<header_tooltip_btn_nc_maintenance>Open/Close list of expired maintenances</header_tooltip_btn_nc_maintenance>
<header_tooltip_nc_error>NC in Error-state. Open/Close list of active alarms</header_tooltip_nc_error>
<header_tooltip_nc_idle>NC in Idle-state</header_tooltip_nc_idle>
<header_tooltip_Nc_Process>Nc-process info</header_tooltip_Nc_Process>
<header_tooltip_mainstat_ko>Machine devices not ok</header_tooltip_mainstat_ko>
<header_tooltip_mainstat_ok>Machine operational</header_tooltip_mainstat_ok>
<header_tooltip_powstat_ko>Machine not ready to work</header_tooltip_powstat_ko>
<header_tooltip_powstat_ok>Machine can work</header_tooltip_powstat_ok>
<header_tooltip_emergency>Emergency buttons pressed</header_tooltip_emergency>
<header_tooltip_key>Security key not inserted</header_tooltip_key>
<header_tooltip_power-on>Axes not in power-state</header_tooltip_power-on>
<header_tooltip_protections>Safety protections not ok</header_tooltip_protections>
<header_tooltip_settings-mode>Setting-mode active</header_tooltip_settings-mode>
<header_tooltip_air-flow>Airflow pressure not ok</header_tooltip_air-flow>
<header_tooltip_zeroing>Axes zeroing needed</header_tooltip_zeroing>
<modal_load_program_empty_folder>Empty Folder</modal_load_program_empty_folder>
<alarm_history_label_date_timestamp>Added in %s at %s</alarm_history_label_date_timestamp>
<alarm_history_btn_save_note>Save</alarm_history_btn_save_note>
<contactinfo_lbl_assistance_name>Customer Care Info:</contactinfo_lbl_assistance_name>
<contactinfo_lbl_qrdescription>For more information click on the symbol below or scan it the code with your phone:</contactinfo_lbl_qrdescription>
<contactinfo_btn_reloadfile>Reload from file</contactinfo_btn_reloadfile>
<contactinfo_btn_showcmsdata>Show CMS data</contactinfo_btn_showcmsdata>
<contactinfo_btn_openinbrowser>Open In Browser</contactinfo_btn_openinbrowser>
<contactinfo_error_customer_configfile>Error in file &#34;C:\CMS\ContactInfo.xml&#34;</contactinfo_error_customer_configfile>
<create_maintenance_lbl_machine>Machine</create_maintenance_lbl_machine>
<maintenance_machine_timer>Machine-timer</maintenance_machine_timer>
<maintenance_remaining>Remaining time</maintenance_remaining>
<maintenance_interval_timer>Interval</maintenance_interval_timer>
<maintenance_status>Status</maintenance_status>
<maintenance_btn_showhistory>Show History</maintenance_btn_showhistory>
<history_maintenance_lbl_title_window>History of performed-maintenances</history_maintenance_lbl_title_window>
<history_maintenance_table_header_date>Data</history_maintenance_table_header_date>
<history_maintenance_table_header_user>User</history_maintenance_table_header_user>
<history_maintenance_table_header_counter>Counter</history_maintenance_table_header_counter>
<maintenance_exp_date>Expires</maintenance_exp_date>
<label_no_recipe>No recipe loaded</label_no_recipe>
<modal_title_edit_note>Recipe notes</modal_title_edit_note>
<modal_recipe_note>Notes of the recipe</modal_recipe_note>
<recipe_save>Save</recipe_save>
<recipe_saveas_button>Save as</recipe_saveas_button>
<recipe_saveas>Save as new recipe</recipe_saveas>
<recipe_change_note>Edit recipe notes</recipe_change_note>
<modal_title_save_as>Save as new recipe</modal_title_save_as>
<modal_confirm_save_recipe>Do you confirm that you want to overwrite the recipe?</modal_confirm_save_recipe>
<modal_title_duplicate_recipe>Duplicate recipe</modal_title_duplicate_recipe>
<folder_name>Folder name</folder_name>
<recipe_name>Recipe name</recipe_name>
<cancel>Cancel</cancel>
<confirm>Confirm</confirm>
<modal_load_program_lbl_sheet_x>Sheet size X:</modal_load_program_lbl_sheet_x>
<modal_load_program_lbl_sheet_y>Sheet size Y:</modal_load_program_lbl_sheet_y>
<modal_load_program_lbl_sheet_z>Sheet tickness:</modal_load_program_lbl_sheet_z>
<modal_load_program_lbl_notes>Notes:</modal_load_program_lbl_notes>
<modal_confirm_delete_recipe>Do you confirm that you want to delete the recipe?</modal_confirm_delete_recipe>
<modal_load_program_lbl_box_selected_folder>Selected folder:</modal_load_program_lbl_box_selected_folder>
<modal_load_program_lbl_box_operations>Allowed actions:</modal_load_program_lbl_box_operations>
<modal_load_program_btn_upload_recipe>Load and activate recipe</modal_load_program_btn_upload_recipe>
<setup_lbl_title>Setup</setup_lbl_title>
<lbl_recipe_overview_general>Dimensions</lbl_recipe_overview_general>
<lbl_recipe_overview_positions>Position &#38; Speed</lbl_recipe_overview_positions>
<lbl_recipe_overview_cycle>Cycle</lbl_recipe_overview_cycle>
<lbl_recipe_overview_heats>Heaters</lbl_recipe_overview_heats>
<lbl_recipe_overview_pyrometer>Pyrometer</lbl_recipe_overview_pyrometer>
<lbl_recipe_overview_drawing>Drawing</lbl_recipe_overview_drawing>
<lbl_recipe_overview_upperplate>Upperplate</lbl_recipe_overview_upperplate>
<lbl_recipe_overview_cooling>Cooling</lbl_recipe_overview_cooling>
<lbl_recipe_overview_vacuum>Vacuum</lbl_recipe_overview_vacuum>
<lbl_recipe_overview_extraction>Extraction</lbl_recipe_overview_extraction>
<lbl_recipe_overview_options>Options</lbl_recipe_overview_options>
<process-heating>heating</process-heating>
<process-forming>Forming</process-forming>
<process-extraction>Extraction</process-extraction>
<preferred-softkeys>Preferred softkeys</preferred-softkeys>
<progr-preriscaldo_lbl_title>Pre-heating programming</progr-preriscaldo_lbl_title>
<history-item_warmup>Heating time</history-item_warmup>
<history-item_vacuum>Vacuum</history-item_vacuum>
<history-item_cycletime>Net cycle time</history-item_cycletime>
<dashboard-timing-start>Start</dashboard-timing-start>
<dashboard-timing-elapsed>Elapsed time</dashboard-timing-elapsed>
<dashboard-timing-end>End</dashboard-timing-end>
<remainging_days>dd</remainging_days>
<dashboard-setpoint>Set point</dashboard-setpoint>
<dashboard-remaining-time>Remaining Time</dashboard-remaining-time>
<dashboard-piece-hours>Piece/Hours</dashboard-piece-hours>
<dashboard-time-cycle>Time/Cycle</dashboard-time-cycle>
<run_auto>Auto</run_auto>
<run_manual>Manual</run_manual>
<mould>Mould</mould>
<sheet>Sheet</sheet>
<plate>Plate</plate>
<upperplate>Upperplate</upperplate>
<Frame>Frame</Frame>
<formatoinfo_lbl_title>Dimensions</formatoinfo_lbl_title>
<position_upperplate>Upperplate lowering</position_upperplate>
<position_frame>Frame lowering</position_frame>
<position_mould>Mould rising</position_mould>
<cycle>Thermoforming cycle</cycle>
<loader>Loader</loader>
<cycle_crystallisation>Crystallization</cycle_crystallisation>
<acrilic_frame>Frame for acrylic cycle</acrilic_frame>
<additional_heating>Additional upper heating</additional_heating>
<upperheaters>Upper heaters</upperheaters>
<lowerheaters>Lower heaters</lowerheaters>
<decomsustain>Sustenance / Decompression</decomsustain>
<warmers_select_all>All</warmers_select_all>
<warmers_select_none>None</warmers_select_none>
<warmers_power>Power Management</warmers_power>
<warmers_select_power>Select....</warmers_select_power>
<warmers_autocomposition>Auto-composition</warmers_autocomposition>
<upperthermoregulator>Upper heating thermoregulation</upperthermoregulator>
<lowerthermoregulator>Lower heating thermoregulation</lowerthermoregulator>
<pyrometer>Pyrometer</pyrometer>
<drawinginfo_lbl_title>Drawing</drawinginfo_lbl_title>
<upperplate_cycle>Upperplate Cycle</upperplate_cycle>
<upperplate_air>Upperplate Air</upperplate_air>
<upperplate_vacuum>Upperplate vacuum</upperplate_vacuum>
<upperplate_extraction>Upperplate extraction</upperplate_extraction>
<blowers>Blowers</blowers>
<nebulizers>Nebulizers</nebulizers>
<telescopic>Telescopics</telescopic>
<shutters>Shutters</shutters>
<main_vacuum>Main vacuum</main_vacuum>
<direct_vacuum>Direct vacuum</direct_vacuum>
<aux_vacuum>Aux vacuum</aux_vacuum>
<pre_vacuum>Pre vacuum</pre_vacuum>
<main_extraction>Main extraction</main_extraction>
<aux_extraction>Aux extraction</aux_extraction>
<modal_options_no_more_parameters>No more parameters to edit</modal_options_no_more_parameters>
<thermoregulators>Thermoregulators</thermoregulators>
<undercut_mould>Mould undercuts</undercut_mould>
<udercut_uppermould>Upperplate undercuts</udercut_uppermould>
<warmers_selection>Heater selecion</warmers_selection>
<opzioniinfo_lbl_title>Options</opzioniinfo_lbl_title>
<history_item_venttime>Cooling time</history_item_venttime>
<history_item_cycletimegross>Gross cycle time</history_item_cycletimegross>
<history_item_tempstampo>Mould T.</history_item_tempstampo>
<history_item_materialtempendwarm>Material T. End-heating</history_item_materialtempendwarm>
<history_item_materialtempendvent>Material T. End-cooling</history_item_materialtempendvent>
<history_item_vacuumtime>Vacuum time</history_item_vacuumtime>
<history_item_mouldenergyin>Net cycle energy</history_item_mouldenergyin>
<history_item_mouldenergyout>Gross cycle energy</history_item_mouldenergyout>
<footer_tooltip_ricetta>Load recype</footer_tooltip_ricetta>
<footer_tooltip_setup>Setup recype</footer_tooltip_setup>
<footer_tooltip_progr_prerisc>Pre-Heating</footer_tooltip_progr_prerisc>
<footer_tooltip_dashboard>Dashboard</footer_tooltip_dashboard>
<gauge_potenza>Power</gauge_potenza>
<gauge_vuoto>Vacuum</gauge_vuoto>
<gauge_aria>Air</gauge_aria>
<lbl_btn_preheating_all>Select All Days</lbl_btn_preheating_all>
<lbl_btn_preheating_non>Deselect All Days</lbl_btn_preheating_non>
<softkey_confirm>Are you sure?</softkey_confirm>
<confirm_request_confirm>Confirm</confirm_request_confirm>
<confirm_request_cancel>Cancel</confirm_request_cancel>
<lbl_loader_load_area>Loading area</lbl_loader_load_area>
<avvio_prod_lbl_title>Start Production</avvio_prod_lbl_title>
<new_production>New production lot</new_production>
<warmup_cycles>Warmup cycles</warmup_cycles>
<warmup_cycles_pieces>Number of cycles:</warmup_cycles_pieces>
<modal_start_button>Start</modal_start_button>
<edit_prod_lbl_title>Edit Production</edit_prod_lbl_title>
<production_management>Production lot</production_management>
<production_enabling>Set the max number of pieces</production_enabling>
<mock_pieces>Number of pieces:</mock_pieces>
<heats_alert_thermocamera_not_enabled>Thermoprophet not enabled</heats_alert_thermocamera_not_enabled>
<thermoprophet>Thermoprophet</thermoprophet>
<thermocamera_mode>Thermoprophet mode</thermocamera_mode>
<warmers_showcamera>Show Camera Image</warmers_showcamera>
<warmers_enable>Enable/Disable Management</warmers_enable>
<warmers_enabletemp>Enable selected</warmers_enabletemp>
<warmers_disabletemp>Disable selected</warmers_disabletemp>
<warmers_temperature>Temps Management</warmers_temperature>
<warmers_set_temperature>Set all temperatures</warmers_set_temperature>
<thermocamera_on_off>Thermoprophet run</thermocamera_on_off>
<modal_title_backup>Recipes backup</modal_title_backup>
<select_devices>Select devices</select_devices>
<warmers_clear_temperature>Clear all temperatures</warmers_clear_temperature>
<heats_alert_thermocamera_enabled>Thermoprophet enabled</heats_alert_thermocamera_enabled>
<modal_resistance_info>Warmer Info</modal_resistance_info>
<resistance_info_id_group>Group ID:</resistance_info_id_group>
<resistance_info_id_reflector>Reflector ID:</resistance_info_id_reflector>
<resistance_info_id_output>Output ID:</resistance_info_id_output>
<resistance_info_wire_broken>Heater / Wire broken:</resistance_info_wire_broken>
<resistance_info_fuse_blown>Fuse Blown:</resistance_info_fuse_blown>
<resistance_info_short_triac>Shortest Triac:</resistance_info_short_triac>
<resistance_info_amp_low>Amp too low:</resistance_info_amp_low>
<resistance_info_phase_missing>One or more phase are missing:</resistance_info_phase_missing>
<resistance_info_ssr_overload>SSR overload:</resistance_info_ssr_overload>
<resistance_info_frequency_not_ok>Frequency not 49..51 or 59..61 Hz:</resistance_info_frequency_not_ok>
<underthehood_label_input>Input</underthehood_label_input>
<underthehood_label_output>Output</underthehood_label_output>
<underthehood_label_pinned>Pinned</underthehood_label_pinned>
<underthehood_label_page>Page</underthehood_label_page>
<underthehood_label_wire>Wire</underthehood_label_wire>
<underthehood_label_profinet>Profinet</underthehood_label_profinet>
<underthehood_label_desc>Description</underthehood_label_desc>
<underthehood_label_val>Value</underthehood_label_val>
<underthehood_label_force>Force</underthehood_label_force>
<underthehood_label_io>IO Manager</underthehood_label_io>
<underthehood_label_loga>Log - Automatic cycle</underthehood_label_loga>
<underthehood_label_logm>Log - Sheets</underthehood_label_logm>
<underthehood_label_assi>Axes Manager</underthehood_label_assi>
<underthehood_label_riscaldi>Warmers Manager</underthehood_label_riscaldi>
<underthehood_btn_details>Details</underthehood_btn_details>
<underthehood_label_cell>Cell</underthehood_label_cell>
<underthehood_label_reflector>Reflector</underthehood_label_reflector>
<underthehood_label_channel>Channel</underthehood_label_channel>
<underthehood_label_board>Board</underthehood_label_board>
<underthehood_label_currenta>Current [A]</underthehood_label_currenta>
<underthehood_label_currentp>Power [%%]</underthehood_label_currentp>
<underthehood_label_status>Status</underthehood_label_status>
<underthehood_label_date>Date</underthehood_label_date>
<underthehood_label_message>Message</underthehood_label_message>
<underthehood_btn_zero>Zero</underthehood_btn_zero>
<underthehood_label_axis_enabled>Enabled</underthehood_label_axis_enabled>
<underthehood_label_axes>Axes</underthehood_label_axes>
<underthehood_label_position>Position</underthehood_label_position>
<underthehood_label_speed>Speed</underthehood_label_speed>
<underthehood_label_torque>Torque</underthehood_label_torque>
<underthehood_label_errorcode>Error Code</underthehood_label_errorcode>
<underthehood_label_motion>Motion Ph.</underthehood_label_motion>
<underthehood_btn_align>Align</underthehood_btn_align>
<underthehood_btn_probe>Probe</underthehood_btn_probe>
<underthehood_btn_setslaves>Set slaves position</underthehood_btn_setslaves>
<cmsconnect_info_lbl_title>CMS-Connect Manager</cmsconnect_info_lbl_title>
<cmsconnect_info_menu_conn_status>Connection status</cmsconnect_info_menu_conn_status>
<cmsconnect_info_menu_networkconfig>Network configuration</cmsconnect_info_menu_networkconfig>
<cmsconnect_info_menu_proxyconfig>Proxy configuration</cmsconnect_info_menu_proxyconfig>
<cmsconnect_info_menu_activation>Activation</cmsconnect_info_menu_activation>
<cmsconnect_info_menu_messages>Messages</cmsconnect_info_menu_messages>
<cmsconnect_info_menu_reboot>Reboot</cmsconnect_info_menu_reboot>
<cmsconnect_info_lbl_url>Url</cmsconnect_info_lbl_url>
<cmsconnect_info_lbl_port>Port</cmsconnect_info_lbl_port>
<cmsconnect_info_btn_run_conn_test>Run test</cmsconnect_info_btn_run_conn_test>
<star_keyboard_softkeys>Softkey in console</star_keyboard_softkeys>
<footer_tooltip_under_hood>Unther the Hood</footer_tooltip_under_hood>
<underthehood_btn_move>Move</underthehood_btn_move>
<modal_confirm_mode_manual>Are you sure you want to switch to manual mode?</modal_confirm_mode_manual>
<cmsconnect_info_lbl_dhcp>Dhcp</cmsconnect_info_lbl_dhcp>
<cmsconnect_info_lbl_netmask>Netmask</cmsconnect_info_lbl_netmask>
<cmsconnect_info_lbl_dgateway>Default Gateway</cmsconnect_info_lbl_dgateway>
<cmsconnect_info_lbl_dns>Dns</cmsconnect_info_lbl_dns>
<cmsconnect_info_lbl_pref>Prefixes</cmsconnect_info_lbl_pref>
<cmsconnect_info_lbl_pref_placeholder>add a prefix in a new line</cmsconnect_info_lbl_pref_placeholder>
<cmsconnect_info_lbl_proxy>Proxy</cmsconnect_info_lbl_proxy>
<cmsconnect_info_lbl_ip>Ip</cmsconnect_info_lbl_ip>
<cmsconnect_info_lbl_username>Username</cmsconnect_info_lbl_username>
<cmsconnect_info_lbl_password>Password</cmsconnect_info_lbl_password>
<cmsconnect_info_lbl_proxy_filters>Proxy filters</cmsconnect_info_lbl_proxy_filters>
<cmsconnect_info_lbl_dns_placeholder>add an address in a new line</cmsconnect_info_lbl_dns_placeholder>
<cmsconnect_info_btn_load>Load</cmsconnect_info_btn_load>
<cmsconnect_info_btn_save>Save</cmsconnect_info_btn_save>
<connect_qrcode_activation_title>Scan the QRCode</connect_qrcode_activation_title>
<connect_link_activation_title>and type the code:</connect_link_activation_title>
<messages_lbl_create_message>Message</messages_lbl_create_message>
<cmsconnect_info_messages_duration>Duration</cmsconnect_info_messages_duration>
<cmsconnect_info_messages_department>Department</cmsconnect_info_messages_department>
<cmsconnect_info_messages_department_maintenance>Maintenance</cmsconnect_info_messages_department_maintenance>
<cmsconnect_info_messages_department_production>Production</cmsconnect_info_messages_department_production>
<cmsconnect_info_btn_send_message>Send Message</cmsconnect_info_btn_send_message>
<cmsconnect_info_btn_reboot>Reboot</cmsconnect_info_btn_reboot>
<modal_axis_info>Axis Info</modal_axis_info>
<axis_info_id>Id:</axis_info_id>
<axis_info_name>Name:</axis_info_name>
<axis_info_torque>In Torque:</axis_info_torque>
<axis_info_gantry>Gantry:</axis_info_gantry>
<axis_info_moving>Is Moving:</axis_info_moving>
<axis_info_zero>Zeroed:</axis_info_zero>
<axis_info_position>In Position:</axis_info_position>
<axis_info_error>In Error:</axis_info_error>
<axis_info_brakealm>Brake Test Alarm:</axis_info_brakealm>
</root>
+15
View File
@@ -100,6 +100,21 @@ namespace Thermo.Active.Utils
return answ;
}
/// <summary>
/// Conversion string --> TACT_IO_TYPE
/// </summary>
/// <param name="strValue"></param>
/// <returns></returns>
public static TACT_IO_TYPE GetTActIO_Type(string strValue)
{
TACT_IO_TYPE answ = TACT_IO_TYPE.ND;
try
{
answ = (TACT_IO_TYPE)Enum.Parse(typeof(TACT_IO_TYPE), strValue);
}
catch { }
return answ;
}
/// <summary>
/// Conversion string --> TACT_MBLOCK_SECTION
/// </summary>
/// <param name="strValue"></param>
+20 -5
View File
@@ -44,7 +44,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CMS_CORE_Library", "..\cms_
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client2020", "Client2020\Client2020.csproj", "{0780047F-12E4-4FCC-9748-6B23F0FD3711}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thermo.Active.Thermocamera", "THermo.Active.Thermocamera\Thermo.Active.Thermocamera.csproj", "{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thermo.Active.Thermocamera", "Thermo.Active.Thermocamera\Thermo.Active.Thermocamera.csproj", "{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thermo.Cam.Utils", "Thermo.Cam.Utils\Thermo.Cam.Utils.csproj", "{E4587942-498B-4AA7-9CC9-9304EB2D05C8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -202,14 +204,14 @@ Global
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Release|x86.Build.0 = Release|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x64.ActiveCfg = Debug|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x64.Build.0 = Debug|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x64.ActiveCfg = Debug|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x64.Build.0 = Debug|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x86.ActiveCfg = Debug|x86
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x86.Build.0 = Debug|x86
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|Any CPU.Build.0 = Release|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x64.ActiveCfg = Release|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x64.Build.0 = Release|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x64.ActiveCfg = Release|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x64.Build.0 = Release|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x86.ActiveCfg = Release|x86
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x86.Build.0 = Release|x86
{0780047F-12E4-4FCC-9748-6B23F0FD3711}.Debug|Any CPU.ActiveCfg = Debug|x64
@@ -236,6 +238,18 @@ Global
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Release|x64.Build.0 = Release|Any CPU
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Release|x86.ActiveCfg = Release|Any CPU
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Release|x86.Build.0 = Release|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Debug|x64.ActiveCfg = Debug|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Debug|x64.Build.0 = Debug|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Debug|x86.ActiveCfg = Debug|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Debug|x86.Build.0 = Debug|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Release|Any CPU.Build.0 = Release|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Release|x64.ActiveCfg = Release|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Release|x64.Build.0 = Release|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Release|x86.ActiveCfg = Release|Any CPU
{E4587942-498B-4AA7-9CC9-9304EB2D05C8}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -255,6 +269,7 @@ Global
{49B04D99-0ECD-4900-86D3-7098D61314D7} = {0769EE3C-4259-4C72-97B4-0CCAEBFA7724}
{0780047F-12E4-4FCC-9748-6B23F0FD3711} = {2F873243-A483-40B6-A0F7-65FC3541A269}
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD} = {0769EE3C-4259-4C72-97B4-0CCAEBFA7724}
{E4587942-498B-4AA7-9CC9-9304EB2D05C8} = {0769EE3C-4259-4C72-97B4-0CCAEBFA7724}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {51D459FB-B45B-4A47-984E-46C35F933A82}
+12 -2
View File
@@ -85,7 +85,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
@@ -115,6 +115,10 @@
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="S7.Net" publicKeyToken="d5812d469e84c693" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<connectionStrings>
@@ -195,4 +199,10 @@
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
</configuration>
<system.codedom>
<compilers>
<compiler extension=".cs" language="c#;cs;csharp" warningLevel="4" compilerOptions="/langversion:7.0 /nowarn:1659;1699;1701;612;618" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<compiler extension=".vb" language="vb;vbs;visualbasic;vbscript" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008,40000,40008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</compilers>
</system.codedom>
</configuration>
+117 -110
View File
@@ -1,6 +1,9 @@
using Swashbuckle.Application;
using Swashbuckle.Swagger;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Web.Http;
using System.Web.Http.Description;
@@ -33,129 +36,133 @@ namespace Thermo.Active
//
c.SingleApiVersion("v1", "ThermoActive");
// If you want the output Swagger docs to be indented properly, enable the "PrettyPrint" option.
//
//c.PrettyPrint();
// If you want the output Swagger docs to be indented properly, enable the "PrettyPrint" option.
//
//c.PrettyPrint();
// If your API has multiple versions, use "MultipleApiVersions" instead of "SingleApiVersion".
// In this case, you must provide a lambda that tells Swashbuckle which actions should be
// included in the docs for a given API version. Like "SingleApiVersion", each call to "Version"
// returns an "Info" builder so you can provide additional metadata per API version.
//
//c.MultipleApiVersions(
// (apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion),
// (vc) =>
// {
// vc.Version("v2", "Swashbuckle Dummy API V2");
// vc.Version("v1", "Swashbuckle Dummy API V1");
// });
// If your API has multiple versions, use "MultipleApiVersions" instead of "SingleApiVersion".
// In this case, you must provide a lambda that tells Swashbuckle which actions should be
// included in the docs for a given API version. Like "SingleApiVersion", each call to "Version"
// returns an "Info" builder so you can provide additional metadata per API version.
//
//c.MultipleApiVersions(
// (apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion),
// (vc) =>
// {
// vc.Version("v2", "Swashbuckle Dummy API V2");
// vc.Version("v1", "Swashbuckle Dummy API V1");
// });
// You can use "BasicAuth", "ApiKey" or "OAuth2" options to describe security schemes for the API.
// See https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md for more details.
// NOTE: These only define the schemes and need to be coupled with a corresponding "security" property
// at the document or operation level to indicate which schemes are required for an operation. To do this,
// you'll need to implement a custom IDocumentFilter and/or IOperationFilter to set these properties
// according to your specific authorization implementation
//
//c.BasicAuth("basic")
// .Description("Basic HTTP Authentication");
//
// NOTE: You must also configure 'EnableApiKeySupport' below in the SwaggerUI section
//c.ApiKey("apiKey")
// .Description("API Key Authentication")
// .Name("apiKey")
// .In("header");
//
//c.OAuth2("oauth2")
// .Description("OAuth2 Implicit Grant")
// .Flow("implicit")
// .AuthorizationUrl("http://localhost:9000/token")
// .TokenUrl("http://localhost:9000/token")
// .Scopes(scopes =>
// {
// scopes.Add("read", "Read access to protected resources");
// scopes.Add("write", "Write access to protected resources");
// });
// You can use "BasicAuth", "ApiKey" or "OAuth2" options to describe security schemes for the API.
// See https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md for more details.
// NOTE: These only define the schemes and need to be coupled with a corresponding "security" property
// at the document or operation level to indicate which schemes are required for an operation. To do this,
// you'll need to implement a custom IDocumentFilter and/or IOperationFilter to set these properties
// according to your specific authorization implementation
//
//c.BasicAuth("basic")
// .Description("Basic HTTP Authentication");
//
// NOTE: You must also configure 'EnableApiKeySupport' below in the SwaggerUI section
//c.ApiKey("apiKey")
// .Description("API Key Authentication")
// .Name("apiKey")
// .In("header");
//
//c.OAuth2("oauth2")
// .Description("OAuth2 Implicit Grant")
// .Flow("implicit")
// .AuthorizationUrl("http://localhost:9000/token")
// .TokenUrl("http://localhost:9000/token")
// .Scopes(scopes =>
// {
// scopes.Add("read", "Read access to protected resources");
// scopes.Add("write", "Write access to protected resources");
// });
// Set this flag to omit descriptions for any actions decorated with the Obsolete attribute
//c.IgnoreObsoleteActions();
// Set this flag to omit descriptions for any actions decorated with the Obsolete attribute
//c.IgnoreObsoleteActions();
// Each operation be assigned one or more tags which are then used by consumers for various reasons.
// For example, the swagger-ui groups operations according to the first tag of each operation.
// By default, this will be controller name but you can use the "GroupActionsBy" option to
// override with any value.
//
//c.GroupActionsBy(apiDesc => apiDesc.HttpMethod.ToString());
// Each operation be assigned one or more tags which are then used by consumers for various reasons.
// For example, the swagger-ui groups operations according to the first tag of each operation.
// By default, this will be controller name but you can use the "GroupActionsBy" option to
// override with any value.
//
//c.GroupActionsBy(apiDesc => apiDesc.HttpMethod.ToString());
// You can also specify a custom sort order for groups (as defined by "GroupActionsBy") to dictate
// the order in which operations are listed. For example, if the default grouping is in place
// (controller name) and you specify a descending alphabetic sort order, then actions from a
// ProductsController will be listed before those from a CustomersController. This is typically
// used to customize the order of groupings in the swagger-ui.
//
//c.OrderActionGroupsBy(new DescendingAlphabeticComparer());
// You can also specify a custom sort order for groups (as defined by "GroupActionsBy") to dictate
// the order in which operations are listed. For example, if the default grouping is in place
// (controller name) and you specify a descending alphabetic sort order, then actions from a
// ProductsController will be listed before those from a CustomersController. This is typically
// used to customize the order of groupings in the swagger-ui.
//
//c.OrderActionGroupsBy(new DescendingAlphabeticComparer());
// If you annotate Controllers and API Types with
// Xml comments (http://msdn.microsoft.com/en-us/library/b2s063f7(v=vs.110).aspx), you can incorporate
// those comments into the generated docs and UI. You can enable this by providing the path to one or
// more Xml comment files.
//
//c.IncludeXmlComments(GetXmlCommentsPath());
// If you annotate Controllers and API Types with
// Xml comments (http://msdn.microsoft.com/en-us/library/b2s063f7(v=vs.110).aspx), you can incorporate
// those comments into the generated docs and UI. You can enable this by providing the path to one or
// more Xml comment files.
//
//c.IncludeXmlComments(GetXmlCommentsPath());
//var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
//var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
//c.IncludeXmlComments(xmlPath);
// Swashbuckle makes a best attempt at generating Swagger compliant JSON schemas for the various types
// exposed in your API. However, there may be occasions when more control of the output is needed.
// This is supported through the "MapType" and "SchemaFilter" options:
//
// Use the "MapType" option to override the Schema generation for a specific type.
// It should be noted that the resulting Schema will be placed "inline" for any applicable Operations.
// While Swagger 2.0 supports inline definitions for "all" Schema types, the swagger-ui tool does not.
// It expects "complex" Schemas to be defined separately and referenced. For this reason, you should only
// use the "MapType" option when the resulting Schema is a primitive or array type. If you need to alter a
// complex Schema, use a Schema filter.
//
//c.MapType<ProductType>(() => new Schema { type = "integer", format = "int32" });
// Swashbuckle makes a best attempt at generating Swagger compliant JSON schemas for the various types
// exposed in your API. However, there may be occasions when more control of the output is needed.
// This is supported through the "MapType" and "SchemaFilter" options:
//
// Use the "MapType" option to override the Schema generation for a specific type.
// It should be noted that the resulting Schema will be placed "inline" for any applicable Operations.
// While Swagger 2.0 supports inline definitions for "all" Schema types, the swagger-ui tool does not.
// It expects "complex" Schemas to be defined separately and referenced. For this reason, you should only
// use the "MapType" option when the resulting Schema is a primitive or array type. If you need to alter a
// complex Schema, use a Schema filter.
//
//c.MapType<ProductType>(() => new Schema { type = "integer", format = "int32" });
// If you want to post-modify "complex" Schemas once they've been generated, across the board or for a
// specific type, you can wire up one or more Schema filters.
//
//c.SchemaFilter<ApplySchemaVendorExtensions>();
// If you want to post-modify "complex" Schemas once they've been generated, across the board or for a
// specific type, you can wire up one or more Schema filters.
//
//c.SchemaFilter<ApplySchemaVendorExtensions>();
// In a Swagger 2.0 document, complex types are typically declared globally and referenced by unique
// Schema Id. By default, Swashbuckle does NOT use the full type name in Schema Ids. In most cases, this
// works well because it prevents the "implementation detail" of type namespaces from leaking into your
// Swagger docs and UI. However, if you have multiple types in your API with the same class name, you'll
// need to opt out of this behavior to avoid Schema Id conflicts.
//
//c.UseFullTypeNameInSchemaIds();
// In a Swagger 2.0 document, complex types are typically declared globally and referenced by unique
// Schema Id. By default, Swashbuckle does NOT use the full type name in Schema Ids. In most cases, this
// works well because it prevents the "implementation detail" of type namespaces from leaking into your
// Swagger docs and UI. However, if you have multiple types in your API with the same class name, you'll
// need to opt out of this behavior to avoid Schema Id conflicts.
//
//c.UseFullTypeNameInSchemaIds();
// Alternatively, you can provide your own custom strategy for inferring SchemaId's for
// describing "complex" types in your API.
//
//c.SchemaId(t => t.FullName.Contains('`') ? t.FullName.Substring(0, t.FullName.IndexOf('`')) : t.FullName);
// Alternatively, you can provide your own custom strategy for inferring SchemaId's for
// describing "complex" types in your API.
//
//c.SchemaId(t => t.FullName.Contains('`') ? t.FullName.Substring(0, t.FullName.IndexOf('`')) : t.FullName);
// Set this flag to omit schema property descriptions for any type properties decorated with the
// Obsolete attribute
//c.IgnoreObsoleteProperties();
// Set this flag to omit schema property descriptions for any type properties decorated with the
// Obsolete attribute
//c.IgnoreObsoleteProperties();
// In accordance with the built in JsonSerializer, Swashbuckle will, by default, describe enums as integers.
// You can change the serializer behavior by configuring the StringToEnumConverter globally or for a given
// enum type. Swashbuckle will honor this change out-of-the-box. However, if you use a different
// approach to serialize enums as strings, you can also force Swashbuckle to describe them as strings.
//
//c.DescribeAllEnumsAsStrings();
// In accordance with the built in JsonSerializer, Swashbuckle will, by default, describe enums as integers.
// You can change the serializer behavior by configuring the StringToEnumConverter globally or for a given
// enum type. Swashbuckle will honor this change out-of-the-box. However, if you use a different
// approach to serialize enums as strings, you can also force Swashbuckle to describe them as strings.
//
//c.DescribeAllEnumsAsStrings();
c.DescribeAllEnumsAsStrings();
// Similar to Schema filters, Swashbuckle also supports Operation and Document filters:
//
// Post-modify Operation descriptions once they've been generated by wiring up one or more
// Operation filters.
//
//c.OperationFilter<AddDefaultResponse>();
//
// If you've defined an OAuth2 flow as described above, you could use a custom filter
// to inspect some attribute on each action and infer which (if any) OAuth2 scopes are required
// to execute the operation
//
c.OperationFilter(() => new AddRequiredHeaderParameter());
// Similar to Schema filters, Swashbuckle also supports Operation and Document filters:
//
// Post-modify Operation descriptions once they've been generated by wiring up one or more
// Operation filters.
//
//c.OperationFilter<AddDefaultResponse>();
//
// If you've defined an OAuth2 flow as described above, you could use a custom filter
// to inspect some attribute on each action and infer which (if any) OAuth2 scopes are required
// to execute the operation
//
c.OperationFilter(() => new AddRequiredHeaderParameter());
// Post-modify the entire Swagger document by wiring up one or more Document filters.
// This gives full control to modify the final SwaggerDocument. You should have a good understanding of
@@ -5,6 +5,7 @@ using Thermo.Active.Database.Controllers;
using Thermo.Active.Model.ConfigModels;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.AlarmModels;
using Thermo.Active.Model.DTOModels.ThIO;
using Thermo.Active.Model.DTOModels.ThProd;
using Thermo.Active.Model.DTOModels.ThRecipe;
using static Thermo.Active.Config.ServerConfig;
@@ -26,7 +27,8 @@ namespace Thermo.Active.Controllers.WebApi
ReportConfig = ReportConfig,
UtilitiesConfig = UtilitiesConfig,
JobEditorConfig = JobEditorConfig,
UsersConfig = UsersConfig
UsersConfig = UsersConfig,
ThermoHoodConfig = ThermoHoodConfig
};
return Ok(startupConfiguration);
@@ -124,6 +126,27 @@ namespace Thermo.Active.Controllers.WebApi
return Ok(recipeConfig);
}
[Route("configIO"), HttpGet]
public IHttpActionResult GetIOConfig()
{
// restituisce la configurazione come item dei banchi DI/DO/AI/AO
DTOChannelsSetup configIO = new DTOChannelsSetup();
// leggo i 4 tipi di oggetti e popolo
List<string> listDI = IOConfig.Where(x => x.Category == Model.Constants.TACT_IO_TYPE.DI).GroupBy(x => x.Bank).Select(x => x.Key).ToList();
List<string> listDO = IOConfig.Where(x => x.Category == Model.Constants.TACT_IO_TYPE.DO).GroupBy(x => x.Bank).Select(x => x.Key).ToList();
List<string> listAI = IOConfig.Where(x => x.Category == Model.Constants.TACT_IO_TYPE.AI).GroupBy(x => x.Bank).Select(x => x.Key).ToList();
List<string> listAO = IOConfig.Where(x => x.Category == Model.Constants.TACT_IO_TYPE.AO).GroupBy(x => x.Bank).Select(x => x.Key).ToList();
// assegno!
configIO.DI = listDI;
configIO.DO = listDO;
configIO.AI = listAI;
configIO.AO = listAO;
// restituisco
return Ok(configIO);
}
[Route("thermoProd"), HttpGet]
public IHttpActionResult GetThermoProdConfig()
{
@@ -1,45 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Listeners;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels.AlarmModels;
using Thermo.Active.Provider;
using Thermo.Active.Thermocamera;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Controllers.WebApi
{
[RoutePrefix("api/thermocamera")]
public class ThermocameraController : ApiController
{
[Route("show"), HttpPost]
public IHttpActionResult GetDataPaginated()
{
String ThermoCameraXpos = AdditionalParametersConfig["ThermoCameraXpos"];
String ThermoCameraYpos = AdditionalParametersConfig["ThermoCameraYpos"];
String ThermoCameraXdim = AdditionalParametersConfig["ThermoCameraXdim"];
String ThermoCameraYdim = AdditionalParametersConfig["ThermoCameraYdim"];
if(ThermoCameraXpos != null && ThermoCameraYpos != null && ThermoCameraXdim != null && ThermoCameraYdim != null)
{
if (ThermocameraComunicator.getInstance().showWindow(Int32.Parse(ThermoCameraXpos), Int32.Parse(ThermoCameraYpos), Int32.Parse(ThermoCameraXdim), Int32.Parse(ThermoCameraYdim), 3000))
return Ok();
else
return BadRequest();
}
return BadRequest();
}
}
}
@@ -0,0 +1,368 @@
using CMS_CORE_Library.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Claims;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using System.Web.Http.Description;
using System.Windows.Media.Animation;
using TeamDev.SDK.MVVM;
using Thermo.Active.Config;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.ThIO;
using Thermo.Active.Model.DTOModels.ThRecipe;
using Thermo.Active.Model.DTOModels.ThWarmers;
using Thermo.Active.NC;
using Thermo.Active.Utils;
using static CMS_CORE_Library.Models.DataStructures;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Controllers.WebApi
{
[RoutePrefix("api/underthehood")]
public class UnderTheHoodController : ApiController
{
/// <summary>
/// Oggetto adapter condiviso da WebAPI
/// </summary>
protected static NcAdapter ncAdapter = new NcAdapter();
[ResponseType(typeof(DTOCycleLog))]
[Route("CycleLogRefresh"), HttpGet]
public IHttpActionResult RefreshCycleLog()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ncAdapter Not connected! | RefreshCycleLog | {libraryError.exception}");
}
libraryError = ncAdapter.RefreshCycleLog(out int numRec);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"RefreshCycleLog error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(numRec);
}
[ResponseType(typeof(DTOCycleLog))]
[Route("CycleLog"), HttpGet]
public IHttpActionResult GetCycleLog(int from, int to)
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
DTOCycleLog currCycleLog = new DTOCycleLog();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ncAdapter Not connected! | GetCycleLog | {libraryError.exception}");
}
// recupero dati paginati
libraryError = ncAdapter.GetCycleLog(from, to, out currCycleLog);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetCycleLog error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currCycleLog);
}
[ResponseType(typeof(bool))]
[Route("GetAxesAdvMode"), HttpGet]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult GetAxesAdvMode()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | ForceChAO | {libraryError.exception}");
return InternalServerError();
}
// chiamo scrittura
bool advMode = false;
libraryError = ncAdapter.GetAxesAdvMode(out advMode);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetCycleLog error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok(advMode);
}
[ResponseType(typeof(DTOChannelsIO))]
[Route("channels_io"), HttpGet]
public IHttpActionResult GetChannelsIO()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | GetChannelsIO | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// leggo dati gauges
libraryError = ncAdapter.ReadFullIO(out DTOChannelsIO ChannelsIO);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetChannelsIO error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno!
return Ok(ChannelsIO);
}
[ResponseType(typeof(DTOChannelsIOVal))]
[Route("channels_io_val"), HttpGet]
public IHttpActionResult GetChannelsIoVal()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | GetChannelsIoVal | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// leggo dati gauges
libraryError = ncAdapter.ReadValIO(out DTOChannelsIOVal ChannelsIOVal);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetChannelsIoVal error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno!
return Ok(ChannelsIOVal);
}
[Route("io_force_ch_do"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult ForceChDO(List<IoItemDigi> updVal)
{
if (updVal != null)
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | ForceChDO | {libraryError.exception}");
return InternalServerError();
}
if (updVal.Count > 0)
{
// converto
Dictionary<int, bool> parametersList = new Dictionary<int, bool>();
foreach (var item in updVal)
{
parametersList.Add(item.Id, item.value);
}
// scrivo sul PLC con i parametri specificati
ncAdapter.Write_IO_DO_ToPLC(parametersList);
}
// ritorno solo fatto!
return Ok();
}
else
{
ThermoActiveLogger.LogError($"ForceChDO updatedVal null | Empty Parameters");
return BadRequest();
}
}
[Route("io_force_ch_ao"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult ForceChAO(List<IoItemAnal> updVal)
{
if (updVal != null)
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | ForceChAO | {libraryError.exception}");
return InternalServerError();
}
if (updVal.Count > 0)
{
Dictionary<int, int> parametersList = new Dictionary<int, int>();
foreach (var item in updVal)
{
parametersList.Add(item.Id, item.value);
}
// scrivo sul PLC con i parametri specificati
ncAdapter.Write_IO_AO_ToPLC(parametersList);
}
// ritorno solo fatto!
return Ok();
}
else
{
ThermoActiveLogger.LogError($"ForceChAO parametersList null | Empty Parameters");
return BadRequest();
}
}
[Route("io_reset_ch_do"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult ResetChDO(List<int> parametersList)
{
if (parametersList != null)
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | ResetChDO | {libraryError.exception}");
return InternalServerError();
}
if (parametersList.Count > 0)
{
// scrivo sul PLC con i parametri specificati x ritardo/raggruppamento
ncAdapter.WriteReset_IO_DO_ToPLC(parametersList);
}
// ritorno solo fatto!
return Ok();
}
else
{
ThermoActiveLogger.LogError($"ResetChDO parametersList null | Empty Parameters");
return BadRequest();
}
}
/// <summary>
/// Reset "force bit" on selected channels
/// </summary>
/// <param name="parametersList">List of channels index, zero based</param>
/// <returns></returns>
[Route("io_reset_ch_ao"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult ResetChAO(List<int> parametersList)
{
if (parametersList != null)
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | ResetChAO | {libraryError.exception}");
return InternalServerError();
}
if (parametersList.Count > 0)
{
// scrivo sul PLC con i parametri specificati x ritardo/raggruppamento
ncAdapter.WriteReset_IO_AO_ToPLC(parametersList);
}
// ritorno solo fatto!
return Ok();
}
else
{
ThermoActiveLogger.LogError($"ResetChAO parametersList null | Empty Parameters");
return BadRequest();
}
}
[Route("io_reset_all_ch"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult ResetAllCh()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | ResetAllCh | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC con i parametri specificati x ritardo/raggruppamento
ncAdapter.WriteReset_IO_ALL_ToPLC();//parametersList);
// ritorno solo fatto!
return Ok();
}
[Route("SendAxisCommand"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult SendAxisCommand(int AxisId, Model.DTOModels.ThAxes.AxisCommand currCommand, double TargetPos)
{
if (AxisId > 0)
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | ForceChAO | {libraryError.exception}");
return InternalServerError();
}
// chiamo scrittura
ncAdapter.SendAxisCommand(AxisId, currCommand, TargetPos);
// ritorno solo fatto!
return Ok();
}
else
{
ThermoActiveLogger.LogError($"SendAxisCommand axis 0");
return BadRequest();
}
}
[Route("SetAxesAdvMode"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult SetAxesAdvMode(bool value)
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | ForceChAO | {libraryError.exception}");
return InternalServerError();
}
// chiamo scrittura
ncAdapter.SetAxesAdvMode(value);
// ritorno solo fatto!
return Ok();
}
[Route("io_sample_fast"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)]
public IHttpActionResult SetFastSample(bool value)
{
// imposta (su redis) campionamento RAPIDO/lento x IO...
var expires = RedisController.SetFastIoSample(value);
// ritorno solo fatto!
return Ok(expires);
}
}
}
@@ -11,23 +11,111 @@ using Thermo.Active.Utils;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using static CMS_CORE_Library.Models.DataStructures;
using System.Web.Http.Description;
using Thermo.Active.Thermocamera;
using System.Linq;
namespace Thermo.Active.Controllers.WebApi
{
[RoutePrefix("api/warmers")]
public class WarmersController : ApiController
{
#region Fields
#region Protected Fields
/// <summary>
/// Oggetto adapter condiviso da WebAPI
/// </summary>
protected static NcAdapter ncAdapter = new NcAdapter();
#endregion Fields
protected static Dictionary<int, ThermoPoint> MeasurePoints = new Dictionary<int, ThermoPoint>();
#region Methods
/// <summary>
/// Libreria x gestione dati thermocamera
/// </summary>
protected ThermoCamComunicator TCCom = new ThermoCamComunicator(false);
#endregion Protected Fields
#region Private Methods
/// <summary>
/// Do actual recipe warmers SetpointHMI File-Save
/// </summary>
/// <param name="chSetpoints"></param>
private static void saveCurrentRecipeWarmersData(Dictionary<int, int> chSetpoints, Dictionary<int, double> chTCamTempReq, Dictionary<int, bool> chTCamEnab)
{
try
{
// ora salvo ANCHE i dati live...
NcAdapter.RecipeLiveData.ChannelSetpoints = chSetpoints;
NcAdapter.RecipeLiveData.ChannelTCamTempReq = chTCamTempReq;
NcAdapter.RecipeLiveData.ChannelTCamEnab = chTCamEnab;
// e salvo su disco
NcFileAdapter.SaveRecipeCurrent();
}
catch (Exception exc)
{
ThermoActiveLogger.LogError($"Warmers | saveCurrentRecipeWarmersData exception | {exc}");
}
notifyHmi();
}
#endregion Private Methods
#region Protected Methods
/// <summary>
/// Esegue notifica HMI delle modifiche sulla ricetta/riscaldi
/// </summary>
/// <returns></returns>
protected static CmsError notifyHmi()
{
CmsError libraryError = NO_ERROR;
// invio dati NUOVA ricetta (DOPO aver sistemato PLC)
DTORecipeStatus message = new DTORecipeStatus()
{
recipeName = NcAdapter.RecipeLiveData.RecipeName,
hasChanged = NcAdapter.RecipeLiveData.hasChanged,
forceSend = true
};
MessageServices.Current.Publish(SEND_THERMO_RECIPE_CHANGED, null, message);
// invio dati warmers aggiornati...
// Get new data from PLC
libraryError = ncAdapter.ReadWarmers(false, out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Load error | ReadWarmers | {libraryError.errorCode} | {libraryError.exception} | {libraryError.localizationKey}");
return libraryError;
}
// pubblico
MessageServices.Current.Publish(SEND_THERMO_WARMERS_DATA, null, currWarmers);
return libraryError;
}
#endregion Protected Methods
#region Public Methods
/// <summary>
/// Add point to list for thermo data acquisition
/// </summary>
/// <returns></returns>
[Route("addMeasurePoint"), HttpPut]
public IHttpActionResult AddMeasurePoint(int posX, int posY)
{
int nextId = MeasurePoints.Count;
// aggiungo punto
ThermoPoint result = new ThermoPoint()
{
X = posX,
Y = posY
};
MeasurePoints.Add(nextId, result);
// ritorno!
return Ok();
}
/// <summary>
/// Cancel recipe modification (parameters: PLC --> HMI)
@@ -53,8 +141,6 @@ namespace Thermo.Active.Controllers.WebApi
return BadRequest(libraryError.localizationKey);
}
// recupero i dati LIVE dei parametri HMI dei riscaldi...
libraryError = ncAdapter.ReadWarmers(false, out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
@@ -86,7 +172,7 @@ namespace Thermo.Active.Controllers.WebApi
// salvo!
saveCurrentRecipeWarmersData(currSetpointHMI, currTCamTempReq, currTCamEnab);
// ritorno solo fatto!
return Ok();
}
@@ -192,6 +278,7 @@ namespace Thermo.Active.Controllers.WebApi
/// Current status related to ThermoCamera
/// </summary>
/// <returns></returns>
[ResponseType(typeof(DTOThermoCam))]
[Route("TCamData"), HttpGet]
public IHttpActionResult GetCurrentTCamData()
{
@@ -237,6 +324,7 @@ namespace Thermo.Active.Controllers.WebApi
return Ok(currWarmers);
}
/// <summary>
/// Resistance setup info
/// </summary>
@@ -262,6 +350,30 @@ namespace Thermo.Active.Controllers.WebApi
return Ok(currWarmers);
}
[ResponseType(typeof(List<Thermo.Cam.Utils.MeasurePoint>))]
[Route("getMeasurePoints"), HttpGet]
public IHttpActionResult GetMeasurePoints(string setName)
{
// init punti...
List<Thermo.Cam.Utils.MeasurePoint> resultPoints = new List<Cam.Utils.MeasurePoint>();
// Chiamo l'oggetto thermocam x il set richiesto...
TCCom.readMultiTemperatures(setName, MeasurePoints, out resultPoints);
// ritorno!
return Ok(resultPoints);
}
/// <summary>
/// Force reset point list for thermo data acquisition
/// </summary>
/// <returns></returns>
[Route("resetMeasurePoint"), HttpPut]
public IHttpActionResult ResetMeasurePoints()
{
MeasurePoints = new Dictionary<int, ThermoPoint>();
// ritorno solo fatto!
return Ok();
}
/// <summary>
/// Force write risk setup + others warmers data (ex ThermoCam)
/// </summary>
@@ -350,61 +462,22 @@ namespace Thermo.Active.Controllers.WebApi
}
/// <summary>
/// Simulate Flir image req from PLC
/// Force take photo
/// </summary>
/// <param name="enableTCam"></param>
/// <returns></returns>
[Route("simReqFlirImg"), HttpPut]
[Route("takePicture"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
public IHttpActionResult SimReqFlirImg()
public IHttpActionResult TakePicture()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | SimReqFlirImg | {libraryError.exception}");
ThermoActiveLogger.LogError($"NC Not connected! | Warmers ConfirmEdit | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupero valori attuali
libraryError = ncAdapter.ReadWarmers(false, out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"SimReqFlirImg | GetRecipeOverview error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// scrivo sul PLC i dati SIMULATI di una lettura Flir
Dictionary<int, double> chSimTemp = new Dictionary<int, double>();
Random rnd = new Random();
double simVal = 0;
foreach (var item in currWarmers)
{
if (item.Value.TCamTempSet > 100)
{
simVal = item.Value.TCamTempSet + (rnd.NextDouble() * 10 - 5);
}
else
{
simVal = rnd.NextDouble() * 200 + 100;
}
// accodo!
chSimTemp.Add(item.Key, simVal);
}
libraryError = ncAdapter.WriteRecipeWarmChTCamTempAct(chSimTemp);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"SimReqFlirImg error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupero valori attuali post update
libraryError = ncAdapter.ReadWarmers(false, out Dictionary<int, DTOWarmers> newWarmers);
// pubblico
MessageServices.Current.Publish(SEND_THERMO_WARMERS_DATA, null, newWarmers);
TCCom.takePicture();
// ritorno solo fatto!
return Ok();
@@ -516,58 +589,7 @@ namespace Thermo.Active.Controllers.WebApi
return NotFound();
}
}
/// <summary>
/// Esegue notifica HMI delle modifiche sulla ricetta/riscaldi
/// </summary>
/// <returns></returns>
protected static CmsError notifyHmi()
{
CmsError libraryError = NO_ERROR;
// invio dati NUOVA ricetta (DOPO aver sistemato PLC)
DTORecipeStatus message = new DTORecipeStatus()
{
recipeName = NcAdapter.RecipeLiveData.RecipeName,
hasChanged = NcAdapter.RecipeLiveData.hasChanged,
forceSend = true
};
MessageServices.Current.Publish(SEND_THERMO_RECIPE_CHANGED, null, message);
// invio dati warmers aggiornati...
// Get new data from PLC
libraryError = ncAdapter.ReadWarmers(false, out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Load error | ReadWarmers | {libraryError.errorCode} | {libraryError.exception} | {libraryError.localizationKey}");
return libraryError;
}
// pubblico
MessageServices.Current.Publish(SEND_THERMO_WARMERS_DATA, null, currWarmers);
return libraryError;
}
/// <summary>
/// Do actual recipe warmers SetpointHMI File-Save
/// </summary>
/// <param name="chSetpoints"></param>
private static void saveCurrentRecipeWarmersData(Dictionary<int, int> chSetpoints, Dictionary<int, double> chTCamTempReq, Dictionary<int, bool> chTCamEnab)
{
try
{
// ora salvo ANCHE i dati live...
NcAdapter.RecipeLiveData.ChannelSetpoints = chSetpoints;
NcAdapter.RecipeLiveData.ChannelTCamTempReq = chTCamTempReq;
NcAdapter.RecipeLiveData.ChannelTCamEnab = chTCamEnab;
// e salvo su disco
NcFileAdapter.SaveRecipeCurrent();
}
catch (Exception exc)
{
ThermoActiveLogger.LogError($"Warmers | saveCurrentRecipeWarmersData exception | {exc}");
}
notifyHmi();
}
#endregion Methods
#endregion Public Methods
}
}
+2
View File
@@ -0,0 +1,2 @@
@echo of
xcopy "%FLIR_Atlas6%bin\x64\*.dll" %1 /Y /E /D
+2
View File
@@ -0,0 +1,2 @@
@echo of
xcopy "%FLIR_Atlas6%bin\x86\*.dll" %1 /Y /E /D
@@ -64,6 +64,10 @@ namespace Thermo.Active.Listeners
{
SignalRListener.SendThermoAxisInfoData(a);
}));
infos.Add(MessageServices.Current.Subscribe(SEND_CHANNELS_IO_DATA, (a, b) =>
{
SignalRListener.SendThermoChannelsIoData(a);
}));
infos.Add(MessageServices.Current.Subscribe(SEND_ACTIVE_PROGRAM_DATA, (a, b) =>
{
SignalRListener.SendActiveProgramData(a);
@@ -13,6 +13,7 @@ using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.AlarmModels;
using Thermo.Active.Model.DTOModels.Scada;
using Thermo.Active.Model.DTOModels.ThAxes;
using Thermo.Active.Model.DTOModels.ThIO;
using Thermo.Active.Model.DTOModels.ThModules;
using Thermo.Active.Model.DTOModels.ThProd;
using Thermo.Active.Model.DTOModels.ThRecipe;
@@ -59,7 +60,7 @@ namespace Thermo.Active.Listeners.SignalR
{
RedisController.WriteCurrentMachineEmergencyPath(LastPowerOnData.PrePowerOn.EmergencyButtons.Active);
}
}
}
@@ -456,8 +457,8 @@ namespace Thermo.Active.Listeners.SignalR
LastProdPanelData = currProdPanel;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").prodPanelData(currProdPanel);
context.Clients.Group("ncData").prodPanelData(currProdPanel);
if (Config.ServerConfig.ServerStartupConfig.CmsConnectReady)
{
if (newPiece)
@@ -508,8 +509,8 @@ namespace Thermo.Active.Listeners.SignalR
RedisController.WriteCurrentMachineStatus(CMSConnectConstants.ConvertThermoToConnectStatus(currProdCycle.Status));
RedisController.WriteCurrentMachinePowerPath(CMSConnectConstants.ConvertThermoToConnectPower(currProdCycle.Status));
RedisController.WriteCurrentProcessStatus(1,CMSConnectConstants.ConvertThermoToConnectProcessStatus(currProdCycle.Status));
RedisController.WriteCurrentProcessMode(1,CMSConnectConstants.ConvertThermoToConnectProcessMode(currProdCycle.Mode));
RedisController.WriteCurrentProcessStatus(1, CMSConnectConstants.ConvertThermoToConnectProcessStatus(currProdCycle.Status));
RedisController.WriteCurrentProcessMode(1, CMSConnectConstants.ConvertThermoToConnectProcessMode(currProdCycle.Mode));
}
@@ -551,6 +552,65 @@ namespace Thermo.Active.Listeners.SignalR
}
}
public static void SendThermoChannelsIoData(object channelsIoData)
{
DTOChannelsIOVal currChannelsIoData = channelsIoData as DTOChannelsIOVal;
DTOChannelsIOVal diffChannelsData = new DTOChannelsIOVal();
// processing differenze DI
foreach (var item in currChannelsIoData.DI)
{
// recupero
var element = LastChannelsIoData.DI.Find(x => x.Id == item.Id);
if ((element == null) || (!item.Equals(element)))
{
diffChannelsData.DI.Add(item);
}
}
// processing differenze DO
foreach (var item in currChannelsIoData.DO)
{
// recupero
var element = LastChannelsIoData.DO.Find(x => x.Id == item.Id);
if ((element == null) || (!item.Equals(element)))
{
diffChannelsData.DO.Add(item);
}
}
// processing differenze AI
foreach (var item in currChannelsIoData.AI)
{
// recupero
var element = LastChannelsIoData.AI.Find(x => x.Id == item.Id);
if ((element == null) || (!item.Value.Equals(element.Value)))
{
diffChannelsData.AI.Add(item);
}
}
// processing differenze AO
foreach (var item in currChannelsIoData.AO)
{
// recupero
var element = LastChannelsIoData.AO.Find(x => x.Id == item.Id);
if ((element == null) || (!item.Value.Equals(element.Value)))
{
diffChannelsData.AO.Add(item);
}
}
// se ho differenze invio!
if (diffChannelsData.DI.Count + diffChannelsData.DO.Count + diffChannelsData.AI.Count + diffChannelsData.AO.Count > 0)
{
// salvo update CLONANDO
LastChannelsIoData.DI = currChannelsIoData.DI;
LastChannelsIoData.DO = currChannelsIoData.DO;
LastChannelsIoData.AI = currChannelsIoData.AI;
LastChannelsIoData.AO = currChannelsIoData.AO;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").channelsIoVal(diffChannelsData);
}
}
public static void SetGatewayRebootStatus(object status)
{
string msg = status.ToString();
@@ -602,6 +662,8 @@ namespace Thermo.Active.Listeners.SignalR
group.headsData(LastHeadsData);
// Send Axis Info data
group.axisInfo(LastAxisInfoData);
// Send Axis Info data
group.SendThermoChannelsIoData(LastChannelsIoData);
// Send active program data
group.activeProgramData(LastProgramData);
// Send magazine is active data
@@ -1,9 +1,11 @@
using CMS_CORE_Library.Models;
using System;
using System.Collections.Generic;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.AlarmModels;
using Thermo.Active.Model.DTOModels.Scada;
using Thermo.Active.Model.DTOModels.ThAxes;
using Thermo.Active.Model.DTOModels.ThIO;
using Thermo.Active.Model.DTOModels.ThModules;
using Thermo.Active.Model.DTOModels.ThProd;
using Thermo.Active.Model.DTOModels.ThRecipe;
@@ -46,6 +48,8 @@ namespace Thermo.Active.Listeners
public static DTOThermoPanelProd LastProdPanelData = new DTOThermoPanelProd();
// Oggetti per assi THERMO
public static Dictionary<int, DTOAxisInfoModel> LastAxisInfoData = new Dictionary<int, DTOAxisInfoModel>();
// Oggetti x Valori Channels IO
public static DTOChannelsIOVal LastChannelsIoData = new DTOChannelsIOVal();
public static bool LastIsNcConnected = false;
}
+2 -2
View File
@@ -9,7 +9,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("CMS S.P.A.")]
[assembly: AssemblyProduct("Thermo Active Server")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyCopyright("Copyright 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -30,4 +30,4 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("0.110.146")]
[assembly: AssemblyVersion("1.1.179")]
@@ -68,6 +68,9 @@ namespace Thermo.Active.Provider
await base.GrantResourceOwnerCredentials(context);
// in attesa di sistemare l'area di memoria della tastiera fisica esce...
return;
// Try connection
CmsError libraryError = ncAdapter.Connect();
+23 -23
View File
@@ -5,21 +5,21 @@
; Inno Setup Compiler version 5.6.0
;==================================================
#define AppName "CMS Active"
#define SCMAppName "Maestro Active cnc"
#define FolderName "Active"
#define SCMIcoName "SCM.ico"
#define MyAppVersion "1.4.1"
#define AppName "CMS Active"
#define SCMAppName "Maestro Active cnc"
#define FolderName "Active"
#define SCMIcoName "SCM.ico"
#define MyAppVersion "1.5.5"
#define MyAppPublisher "CMS"
#define MyAppURL "https://www.scmgroup.com/it/cms"
#define MyAppExeName "Active.exe"
#define ProjectPath "C:\Workspace\CMS_STEP\Step\"
#define MySourcePath "C:\Workspace\CMS_STEP\Step\bin"
#define WwwRootPath "C:\Workspace\CMS_STEP\Step\wwwroot"
#define IconsPath "C:\Workspace\CMS_STEP\Step\Desktop_Link\"
#define InvDialPath "C:\Workspace\CMS_INVERTER_DIAGNOSIS\CMSInverterDiagnosis\bin\Release\"
#define ProjectPath "C:\Users\ext_lmascherone\Documents\cms_step\Step\"
#define MySourcePath "C:\Users\ext_lmascherone\Documents\cms_step\Step\bin"
#define WwwRootPath "C:\Users\ext_lmascherone\Documents\cms_step\Step\wwwroot"
#define IconsPath "C:\Users\ext_lmascherone\Documents\cms_step\Step\Desktop_Link\"
#define InvDialPath "C:\Users\ext_lmascherone\Documents\cms_inverterdiagnosis\CMSInverterDiagnosis\bin\Release\"
#define SinumerikPath1 "{pf}\Siemens\Sinumerik\HMIsl\siemens\sinumerik\hmi\autostart\"
#define SinumerikPath2 "C:\Siemens\Sinumerik\HMIsl\siemens\sinumerik\hmi\autostart\"
@@ -28,16 +28,16 @@
#define SinumerikAppExeName "run_hmi.exe"
; Support installers
; .Net
#define DotNetInstallerPath "C:\Users\marantalu\Desktop\Per installazioni Active\"
#define DotNetInstallerPath "C:\Users\ext_lmascherone\Documents\Per installazioni Active\"
#define DotNetInstallerName "NDP462-KB3151800-x86-x64-AllOS-ENU.exe"
; MariaDb
#define MariaDBInstallerPath "C:\Users\marantalu\Desktop\Per installazioni Active\"
#define MariaDBInstallerName "mariadb-10.3.13-winx64.msi"
#define MariaDBInstallerPath "C:\Users\ext_lmascherone\Documents\Per installazioni Active\"
#define MariaDBInstallerName "mariadb-10.3.13-winx64.msi"
[Setup]
AppName={#AppName}
AppVersion={#MyAppVersion}
AppVersion={#MyAppVersion}
AppVerName={#AppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
@@ -66,7 +66,7 @@ Name: Fanuc; Description: {#AppName} {cm:ForFanucNC}; Types: custom; Flags: excl
Name: Osai; Description: {#AppName} {cm:ForOsaiNC}; Types: custom; Flags: exclusive
Name: Siemens; Description: {#AppName} {cm:ForSiemensNC}; Types: custom; Flags: exclusive
[Languages]
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
@@ -81,7 +81,7 @@ italian.CreateStartupIcon = Crea il collegamento in &Esecuzione Automatica
italian.CreateSinumerikIcons = Crea le icone di &Sinumerik HMI
italian.ForDemoNC=per CN DEMO
italian.ForFanucNC=per CN FANUC
italian.ForOsaiNC=per CN OSAI
italian.ForOsaiNC=per CN OSAI
italian.ForSiemensNC=per CN SIEMENS
english.InstallDotNet = Install .Net 4.6.2
@@ -89,7 +89,7 @@ english.InstallMariaDB = Install MariaDB
italian.InstallDotNet = Installa .Net 4.6.2
italian.InstallMariaDB = Installa MariaDB
italian.InstallingMariaDB = Installando MariaDB
english.InstallingMariaDB = Installing MariaDB
@@ -100,10 +100,10 @@ english.InstallingDotNet = Installing .Net
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone; Components: Fanuc Osai Siemens
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone; Components: Fanuc Osai Siemens
Name: startupicon; Description: {cm:CreateStartupIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone; Components: Fanuc Osai Siemens
Name: sinumerikicons; Description: {cm:CreateSinumerikIcons}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone; Components: Siemens
Name: sinumerikicons; Description: {cm:CreateSinumerikIcons}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone; Components: Siemens
[Files]
Source: "{#MySourcePath}\Active.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#MySourcePath}\Thermo.Active.exe"; DestDir: "{app}"; Flags: ignoreversion
; Path to exe resources (dll, xml, config)
Source: "{#MySourcePath}\*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: Fanuc Osai Siemens
@@ -134,7 +134,7 @@ Source: {#IconsPath}{#SCMIcoName}; DestDir: "{app}"; Flags: ignoreversion; Compo
Source: {#DotNetInstallerPath}\{#DotNetInstallerName}; DestDir: {tmp}; Flags: deleteafterinstall;
;Check: FrameworkIsNotInstalled
Source: {#MariaDBInstallerPath}\{#MariaDBInstallerName}; DestDir: {tmp}; Flags: deleteafterinstall;
; --- UTILS
; Fanuc scripts - TEAMVIEWER
Source: "{#ProjectPath}\Utility\*"; DestDir: "{app}\..\Utility\"; Flags: recursesubdirs ignoreversion; Components: Fanuc Osai Siemens
@@ -261,7 +261,7 @@ var
begin
if DirExists(ExpandConstant('C:\CMS\Active\Active\Config')) then begin
// Ask the user a Yes/No question, defaulting to No
if not (MsgBox('La cartella "Config" esiste già. Vuoi sovrascriverla?', mbConfirmation, MB_YESNO) = IDYES) then
if not (MsgBox('La cartella "Config" esiste già. Vuoi sovrascriverla?', mbConfirmation, MB_YESNO) = IDYES) then
begin
// user clicked NO
Result:= false;
@@ -296,7 +296,7 @@ var
if CustomInputOptionCMSorSCM.Values[0]
then IsSCM := false
else
IsSCM := true
IsSCM := true;
if CurStep = ssPostInstall then
begin
+217
View File
@@ -0,0 +1,217 @@
;================================= 01.02.21 =====
; CMS S.p.A. - UX-HMI Office
;
; Setup for Active
; Inno Setup Compiler version 5.6.0
;==================================================
#define AppName "CMS Active"
#define FolderName "Thermo.Active"
#define MyAppPublisher "CMS"
#define MyAppURL "https://www.scmgroup.com/it/cms"
#define MyAppExeName "Thermo.Active.exe"
#define ProjectPath ""
#define MySourcePath ProjectPath + "bin"
#define WwwRootPath ProjectPath + "wwwroot"
#define IconsPath ProjectPath + "Desktop_Link"
#define ToolInstallerPath "SetupTools"
#define MyAppVersion GetFileVersion( MySourcePath + '\Thermo.Active.exe')
#define OutBaseDir "C:\CMS\AutoBuild"
#define OutDir OutBaseDir + "\" + MyAppVersion
; Support installers
; .Net
; MariaDb
; cms_inv_diag
#define DotNetInstallerName "NDP462-KB3151800-x86-x64-AllOS-ENU.exe"
#define MariaDBInstallerName "mariadb-10.3.13-winx64.msi"
#define CmsInvDiagPath "cms_inv_diag"
[Setup]
AppName={#AppName}
AppVersion={#MyAppVersion}
AppVerName={#AppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DisableDirPage=true
DisableProgramGroupPage=yes
Compression=lzma
SolidCompression=true
OutputDir={#OutDir}
UsePreviousAppDir=no
OutputBaseFilename=ActiveSetup_{#MyAppVersion}
VersionInfoVersion={#MyAppVersion}
VersionInfoCompany={#MyAppPublisher}
VersionInfoTextVersion={#MyAppVersion}
VersionInfoCopyright={#MyAppPublisher}
DefaultDirName = C:\CMS\{#FolderName}\{#FolderName}
WindowVisible=false
PrivilegesRequired=admin
; Setup installation type
[Types]
Name: custom; Description: CMS installation; Flags: iscustom
; Set NC types, this types are used to configure server config file
[Components]
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
[CustomMessages]
english.CreateStartupIcon=Create Startup &icon
italian.CreateStartupIcon = Crea il collegamento in &Esecuzione Automatica
english.InstallDotNet = Install .Net 4.6.2
english.InstallMariaDB = Install MariaDB
italian.InstallDotNet = Installa .Net 4.6.2
italian.InstallMariaDB = Installa MariaDB
italian.InstallingMariaDB = Installando MariaDB
english.InstallingMariaDB = Installing MariaDB
italian.InstallingDotNet = Installando .Net
english.InstallingDotNet = Installing .Net
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone;
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone;
Name: startupicon; Description: {cm:CreateStartupIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone;
[Files]
Source: "{#MySourcePath}\Thermo.Active.exe"; DestDir: "{app}"; Flags: ignoreversion
; Path to exe resources (dll, xml, config)
Source: "{#MySourcePath}\*.config"; DestDir: "{app}"; Flags: ignoreversion;
; Configuration files
Source: "{#MySourcePath}\Config\*.xml"; DestDir: "{app}\Config\"; Flags: ignoreversion;
; Languages
Source: "{#MySourcePath}\languages\*.*"; DestDir: "{app}\languages\"; Flags: ignoreversion;
; dll
Source: "{#MySourcePath}\dll\*.*"; DestDir: "{app}\dll\"; Flags: ignoreversion recursesubdirs;
; Client copy
Source: "{#MySourcePath}\Client\*.*"; DestDir: "{app}\Client\"; Flags: recursesubdirs ignoreversion; AfterInstall: DeleteLocalStorage
; WWWRoot Files
Source: "{#WwwRootPath}\favicon.ico"; DestDir: "{app}\view\"; Flags: ignoreversion;
Source: "{#WwwRootPath}\index.html"; DestDir: "{app}\view\"; Flags: ignoreversion;
; WWWRoot Directories
Source: "{#WwwRootPath}\dist\*"; DestDir: "{app}\view\dist\"; Flags: recursesubdirs ignoreversion;
Source: "{#WwwRootPath}\libs\*"; DestDir: "{app}\view\libs\"; Flags: recursesubdirs ignoreversion;
Source: "{#WwwRootPath}\assets\*"; DestDir: "{app}\view\assets\"; Flags: recursesubdirs ignoreversion;
Source: "{#WwwRootPath}\scripts\*"; DestDir: "{app}\view\scripts\"; Flags: recursesubdirs ignoreversion;
;.Net Installer
Source: {#ToolInstallerPath}\{#DotNetInstallerName}; DestDir: {tmp}; Flags: deleteafterinstall;
;Check: FrameworkIsNotInstalled
Source: {#ToolInstallerPath}\{#MariaDBInstallerName}; DestDir: {tmp}; Flags: deleteafterinstall;
; --- UTILS
; Fanuc scripts - TEAMVIEWER
Source: "{#ProjectPath}Utility\*"; DestDir: "{app}\..\Utility\"; Flags: recursesubdirs ignoreversion;
[Icons]
; Default icons
Name: {group}\{#AppName}; Filename: {app}\{#MyAppExeName};
Name: {userdesktop}\{#AppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon;
Name: {userstartup}\{#AppName}; Filename: {app}\{#MyAppExeName}; Tasks: startupicon;
[Run]
; Install .net
Filename: {tmp}\{#DotNetInstallerName}; Description: {cm:InstallDotNet}; WorkingDir:{tmp}; StatusMsg: {cm:InstallingDotNet}; Check: NetFrameworkNeedInstall
;Check: NetFrameworkIsMissing
; Install MariaDb
Filename: "msiexec.exe"; Description: {cm:InstallDotNet}; WorkingDir:{tmp}; StatusMsg: {cm:InstallingMariaDB}; Parameters: "/i {tmp}\{#MariaDBInstallerName}"; Check: CheckHeidiSQLNeedInstall;
/// MinVersion: 10
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "Active"; ValueData: "C:\CMS\ACTIVE\Active\Active.exe"; MinVersion: 10;
[Code]
///////////// SiemensPath ///////////////////////////////
var
CheckBoxIni: TCheckBox;
OverwriteConfig: Boolean;
///////////////// Check .NET Framework 4.6.2 ////////////////////////////////////
function NetFrameworkNeedInstall(): Boolean;
var
bSuccess: Boolean;
regVersion: Cardinal;
begin
Result := True;
bSuccess := RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release', regVersion);
if (True = bSuccess) and (regVersion >= 394802) then begin
Result := False;
end;
end;
///////////// Check heidiSQL /////////////////
function CheckHeidiSQLNeedInstall: Boolean;
begin
if FileExists(ExpandConstant('C:\Program Files (x86)\Common Files\MariaDBShared\HeidiSQL\heidisql.exe'))
then Result:= false
else
begin
Result:= True
end;
end;
/////////////////// CheckConfigExistence /////////////////////////////
function OverwriteConfigModal: Boolean;
begin
if DirExists(ExpandConstant('C:\CMS\Thermo.Active\Thermo.Active\Config')) then begin
// Ask the user a Yes/No question, defaulting to No
if not (MsgBox('La cartella "Config" esiste già. Vuoi sovrascriverla?', mbConfirmation, MB_YESNO) = IDYES) then
begin
// user clicked NO
Result:= false;
Exit;
end;
end;
Result:= True;
end;
function GetOverwriteConfig: Boolean;
begin
Result:= OverwriteConfig;
end;
/////////////////// DeleteLocalStorage //////////////////////
procedure DeleteLocalStorage;
begin
DelTree(ExpandConstant('{app}\Client\LocalStorage'), True, True, True);
end;
///////////// InitializeWizard //////////////////////////
procedure InitializeWizard();
begin
OverwriteConfig := OverwriteConfigModal;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
DeleteLocalStorage;
end;
end;
Binary file not shown.
+49 -13
View File
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Net.Compilers.3.8.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.8.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -36,6 +35,7 @@
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -79,8 +79,8 @@
<Reference Include="Microsoft.AspNet.SignalR.SystemWeb, Version=2.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.SignalR.SystemWeb.2.2.2\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@@ -223,11 +223,11 @@
<Compile Include="Attributes\SignalRAuthorizeAttribute.cs" />
<Compile Include="Controllers\SignalR\NcHub.cs" />
<Compile Include="Controllers\WebApi\ApiAlarmController.cs" />
<Compile Include="Controllers\WebApi\UnderTheHoodController.cs" />
<Compile Include="Controllers\WebApi\SchedTaskController.cs" />
<Compile Include="Controllers\WebApi\ModulesController.cs" />
<Compile Include="Controllers\WebApi\ProdController.cs" />
<Compile Include="Controllers\WebApi\StarredUserSoftKeyController.cs" />
<Compile Include="Controllers\WebApi\ThermocameraController.cs" />
<Compile Include="Controllers\WebApi\WarmersController.cs" />
<Compile Include="Controllers\WebApi\RecipeController.cs" />
<Compile Include="Controllers\WebApi\AuthorizationController.cs" />
@@ -11756,6 +11756,8 @@
<Content Include="wwwroot\src\modules\heads\index.js" />
<Content Include="wwwroot\src\_base\gestures.js" />
<Content Include="wwwroot\src\_base\index.js" />
<Content Include="wwwroot\thermoprophet\colored\_last.jpg" />
<Content Include="wwwroot\thermoprophet\original\_last.jpg" />
<Content Include="wwwroot\webpack.config.js" />
<None Include="Desktop_Link\CMS.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
@@ -11776,6 +11778,8 @@
<None Include="Desktop_Link\Maestro Active.lnk">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="FLIR.Atlas.x64.bat" />
<None Include="FLIR.Atlas.x86.bat" />
<None Include="wwwroot\.babelrc" />
<None Include="wwwroot\.bowerrc" />
<None Include="wwwroot\.editorconfig" />
@@ -16150,6 +16154,7 @@
<None Include="wwwroot\src\modules\heads\head.vue" />
<None Include="wwwroot\src\modules\mheads.vue" />
<None Include="wwwroot\src\modules\program-management.vue" />
<None Include="wwwroot\thermoprophet\data\_last.dat" />
<None Include="wwwroot\tsconfig.json" />
</ItemGroup>
<ItemGroup>
@@ -16208,6 +16213,10 @@
<Project>{cbeb631b-abfa-4042-9779-c0060b0dfefe}</Project>
<Name>Thermo.Active.Utils</Name>
</ProjectReference>
<ProjectReference Include="..\Thermo.Cam.Utils\Thermo.Cam.Utils.csproj">
<Project>{e4587942-498b-4aa7-9cc9-9304eb2d05c8}</Project>
<Name>Thermo.Cam.Utils</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Service Include="{4A0DDDB5-7A95-4FBF-97CC-616D07737A77}" />
@@ -16496,6 +16505,29 @@
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets')" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
@@ -16504,23 +16536,27 @@
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
<ProjectExtensions />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target> -->
<Target Name="AfterBuild">
<!-- <Target Name="AfterBuild">
<ItemGroup>
<MoveToLibFolder Include="$(OutputPath)*.dll ; $(OutputPath)*.pdb ; $(OutputPath)*.xml" />
</ItemGroup>
<Move SourceFiles="@(MoveToLibFolder)" DestinationFolder="$(OutputPath)lib" OverwriteReadOnlyFiles="true" />
</Target> -->
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.3.8.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.3.8.0\build\Microsoft.Net.Compilers.props'))" />
</Target>
<PropertyGroup>
<PostBuildEvent>call "$(ProjectDir)\FLIR.Atlas.x86.bat" "$(TargetDir)"</PostBuildEvent>
</PropertyGroup>
</Project>
+2 -2
View File
@@ -18,8 +18,8 @@
<package id="Microsoft.AspNet.WebPages" version="2.0.20505.0" targetFramework="net462" />
<package id="Microsoft.AspNet.WebPages.Data" version="2.0.20505.0" targetFramework="net462" />
<package id="Microsoft.AspNet.WebPages.WebData" version="2.0.20505.0" targetFramework="net462" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.8" targetFramework="net462" />
<package id="Microsoft.Net.Compilers" version="2.4.0" targetFramework="net462" developmentDependency="true" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="3.6.0" targetFramework="net462" />
<package id="Microsoft.Net.Compilers" version="3.8.0" targetFramework="net462" developmentDependency="true" />
<package id="Microsoft.Owin" version="3.1.0" targetFramework="net462" />
<package id="Microsoft.Owin.Cors" version="3.1.0" targetFramework="net462" />
<package id="Microsoft.Owin.FileSystems" version="3.1.0" targetFramework="net462" />
+2 -2
View File
@@ -35,7 +35,7 @@ namespace Thermo.Active
string AppName = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
if (System.Diagnostics.Process.GetProcessesByName(AppName).Length > 1)
{
MessageBox.Show("Only one istance of " + AppName + " can be executed!", AppName, MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show("Only one istance of "+ AppName +" can be executed!", AppName, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
@@ -75,7 +75,7 @@ namespace Thermo.Active
// Start server services
if (!ValidateAddress(ServerStartupConfig.ServerAddress))
ExceptionManager.ManageError(ERROR_LEVEL.FATAL, "IP Address not valid (must be one configured in Windows-OS)!");
ExceptionManager.ManageError(ERROR_LEVEL.FATAL, "IP Address not valid (must be one configured in Windows-OS)!",true);
StartOptions opt = new StartOptions();
opt.Urls.Add("http://localhost:" + ServerStartupConfig.ServerPort.ToString());
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Some files were not shown because too many files have changed in this diff Show More