Compare commits

...

594 Commits

Author SHA1 Message Date
Samuele Locatelli b51c9f897c Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-07-03 08:16:18 +02:00
Samuele Locatelli a9c16963b1 Update vers numb + update lang translations 2020-07-03 08:16:08 +02:00
= 42be145f0e fix gestione booleani in ricetta 2020-07-02 17:24:25 +02:00
= 6b34c5f590 fix visibilità dei blocchi di processo. 2020-07-02 17:11:20 +02:00
= d9512f73cc fix gauges 2020-07-02 16:02:10 +02:00
= d8f523c497 Merge remote-tracking branch 'CMS/develop' into develop 2020-07-02 15:27:37 +02:00
= acdf473fe4 gantt zoom in-out 2020-07-02 15:27:17 +02:00
Samuele Locatelli 811e0b0bd1 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-07-02 15:06:32 +02:00
Samuele Locatelli 536112ef48 Updated structure for gauges & time 2020-07-02 15:06:20 +02:00
= 9f167377df fix posizionamento verticale dei blocchi del gantt 2020-07-02 14:23:53 +02:00
Samuele Locatelli 2d3869ddae Refresh config + translations 2020-07-02 12:40:38 +02:00
Samuele Locatelli 2261bec8da Added ThermoProd config XML management 2020-07-02 12:40:03 +02:00
Samuele Locatelli 920d4fcdb2 start new release 2020-07-02 10:04:05 +02:00
= 4c7f12466d fix pan orizzontale con header fisso 2020-07-01 18:22:49 +02:00
= 76d0593f4d Merge remote-tracking branch 'CMS/develop' into develop 2020-07-01 18:09:06 +02:00
= e25e861224 gantt pan actions 2020-07-01 18:08:48 +02:00
= 6b420387e3 gantt padding.. 2020-07-01 18:08:21 +02:00
= 459ba7875c fix max valore assi 2020-07-01 17:43:00 +02:00
= 5290c9e208 fix inversione assi grafici durata portata 2020-07-01 17:29:02 +02:00
= f1e52ed3c6 gantt pan & zoom 2020-07-01 17:14:20 +02:00
Samuele Locatelli cd6d0b9e38 update vers number 2020-06-30 18:45:39 +02:00
= 992b7b8df2 fix grafici 2020-06-30 16:56:48 +02:00
paolo b150f5bcfe fix fonts 2020-06-30 16:35:24 +02:00
Samuele Locatelli a0d4e0e2e1 refresh localhost 4 prod pack 2020-06-30 15:46:35 +02:00
Samuele Locatelli cc9f87d079 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into feature/recipe 2020-06-30 15:30:43 +02:00
= 4f6f5ab867 light orange 2020-06-30 15:29:16 +02:00
= d272ff5e02 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-30 15:25:42 +02:00
= 8c48b2c714 fix alarms 2020-06-30 15:25:05 +02:00
Samuele Locatelli ee924dce19 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-30 15:24:38 +02:00
Samuele Locatelli 79874f92c1 update language controller 2020-06-30 15:23:04 +02:00
= 846ae78de7 fix date picker 2020-06-30 15:12:48 +02:00
= bc51324ed0 fix grafici 2020-06-30 15:00:00 +02:00
= d92d0e8b3e Merge remote-tracking branch 'CMS/develop' into develop 2020-06-30 14:02:31 +02:00
= a98de74f19 options.. 2020-06-30 14:01:47 +02:00
Samuele Locatelli df0532dbed moved messaggi position (inside project) 2020-06-30 13:56:39 +02:00
Samuele Locatelli d7fc81b460 fix localhost stack 2020-06-30 12:06:05 +02:00
= 65543fc44d inserimento combo in luogo delle select 2020-06-30 11:45:54 +02:00
Samuele Locatelli e77f4f2900 Merge branch 'feature/alarms' into develop 2020-06-30 11:34:34 +02:00
Samuele Locatelli 1b0432babe Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-30 11:34:16 +02:00
Samuele Locatelli 8579511e95 FixAdded strobe/ack for start/end prod pz 2020-06-30 11:33:57 +02:00
Samuele Locatelli 9a4bb57ddb ranaming translation files 2020-06-30 11:33:25 +02:00
= 9e08721ebc Merge remote-tracking branch 'CMS/develop' into develop 2020-06-30 10:22:51 +02:00
= a48c986086 fix binding scheda 2020-06-30 10:22:27 +02:00
= c820e98403 fix portata durata su vuoto 2020-06-30 10:17:09 +02:00
= 8c9c2614ff fix modifica riscaldi 2020-06-30 10:12:12 +02:00
Samuele Locatelli 8798a2a00f Merge branch 'feature/alarms' into develop 2020-06-29 19:42:25 +02:00
Samuele Locatelli f5d9ef2dd9 Completed review of translations file 2020-06-29 19:40:54 +02:00
Samuele Locatelli 3c29a47fc9 start new language translators 2020-06-29 18:58:13 +02:00
Samuele Locatelli 488add201e Review of recipe config models and xml/xsd valid 2020-06-29 18:57:49 +02:00
Samuele Locatelli a552ab5cae Added translation files for modules & recipe param 2020-06-29 18:57:19 +02:00
Samuele Locatelli fad81cfb47 added json animations on wwwroot 2020-06-29 18:56:57 +02:00
Samuele Locatelli ce150ed3c7 Start alarm decoding 2020-06-29 15:02:15 +02:00
= 5831936b24 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-29 13:53:28 +02:00
= 1b31f05fb2 selezione riscaldi con touch 2020-06-29 13:53:16 +02:00
Samuele Locatelli e2b07ff9ca Merge branch 'feature/recipe' into develop 2020-06-29 13:05:30 +02:00
Samuele Locatelli 6066c7155b Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-29 13:05:19 +02:00
Samuele Locatelli 07719b3fde force rewrite od osd files 2020-06-29 13:04:03 +02:00
= 59051dc908 primo binding dati dashboard.. 2020-06-26 18:18:09 +02:00
= a3b73742c2 fix selezione riscaldi 2020-06-26 17:32:03 +02:00
Samuele Locatelli b732d1d024 Fix for local deploy 2020-06-26 16:15:48 +02:00
= 71955744f6 rimozione pieces dalla dashboard.. vanno rifattorizzati 2020-06-26 16:09:44 +02:00
Samuele Locatelli 807e225de8 Confirm recipe post PLC request 2020-06-26 12:19:30 +02:00
= 26000cffd1 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-26 11:46:57 +02:00
= 99a6af2491 pulizia dal vecchio progetto 2020-06-26 11:45:17 +02:00
Samuele Locatelli 251795ad19 Merge branch 'feature/recipe' into develop 2020-06-26 11:38:35 +02:00
Samuele Locatelli 002310dcb4 FIx visible/enabled/error status from PLC 2020-06-26 11:37:31 +02:00
= 8db88e9ca6 fix annulla ricetta 2020-06-26 10:13:24 +02:00
Samuele Locatelli 956b9ad191 started vers 0.9.14 with XML cleanup for ModBlock 2020-06-26 08:56:43 +02:00
Samuele Locatelli 02cf47426c Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-25 18:12:51 +02:00
Samuele Locatelli e2e190cf8f Merge branch 'develop' into feature/recipe 2020-06-25 18:08:51 +02:00
Samuele Locatelli 23f2299de2 Fix XML from M.Carissoni in modBlock 2020-06-25 18:08:40 +02:00
= e3f376bf51 fix finte eccezioni della direttiva di focus. 2020-06-25 17:04:50 +02:00
= 06e3345d2b Merge remote-tracking branch 'CMS/develop' into develop 2020-06-25 16:47:27 +02:00
= cf6fdeaa79 commenti 2020-06-25 16:47:11 +02:00
Samuele Locatelli 3b823cec89 Removed pattern of using (ncAdapter) from WebAPI 2020-06-25 16:46:01 +02:00
= b0684fa03f algoritmo di posizionamento verticale gantt con ottimizzazione delle posizioni in riga. 2020-06-25 16:44:32 +02:00
Samuele Locatelli b48c18ac12 Merge branch 'develop' into feature/recipe 2020-06-25 16:08:32 +02:00
Samuele Locatelli d452e69a52 update vers number! 2020-06-25 16:08:04 +02:00
Samuele Locatelli f9c354acf5 Fix NC info (static data) retrieval 2020-06-25 16:07:13 +02:00
Samuele Locatelli d0ee6d33d1 fix develop conf for local testing 2020-06-25 14:04:14 +02:00
Samuele Locatelli 91df9b99d4 fix vers 0.9.11 on testing overview 2020-06-25 13:49:31 +02:00
Samuele Locatelli 6cd224d6ce Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-25 12:48:45 +02:00
Samuele Locatelli 192722d10e Merge branch 'feature/recipe' into develop 2020-06-25 12:47:36 +02:00
Samuele Locatelli 6095f02b2a Forced send on recipeOverview 2020-06-25 12:47:23 +02:00
Samuele Locatelli eae5ecdf31 more fix on XML example 2020-06-25 12:47:11 +02:00
Samuele Locatelli ceccfca48a Fixed recipe config (validator & example) 2020-06-25 12:45:24 +02:00
= 2dc5ca8ebe fix footer menu size & buttons 2020-06-25 12:29:17 +02:00
= f71c03186e primo dimensionamento corretto delle barre gantt 2020-06-25 12:12:47 +02:00
Samuele Locatelli 9f7b60234a Merge branch 'feature/recipe' into develop 2020-06-25 11:59:34 +02:00
Samuele Locatelli 5a209dc1ff Merge branch 'develop' into feature/recipe 2020-06-25 11:59:24 +02:00
Samuele Locatelli 0a47e22987 Change model for recipe config (enums parameters) 2020-06-25 11:58:47 +02:00
= 6811c29f01 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-25 11:54:09 +02:00
= f168f6a9d0 layout 2020-06-25 11:52:09 +02:00
= 4343386cce fix overview & confirm 2020-06-25 11:49:32 +02:00
Samuele Locatelli 1a97ad094f Merge branch 'feature/recipe' into develop 2020-06-25 10:56:36 +02:00
Samuele Locatelli e550a386ec removed forced sends... 2020-06-25 10:56:23 +02:00
Samuele Locatelli 66865d8e98 forced send of overview data 2020-06-25 10:54:39 +02:00
= 245844a243 processo primo commit 2020-06-25 10:42:33 +02:00
Samuele Locatelli de48382f3d Merge branch 'feature/recipe' into develop 2020-06-25 10:09:45 +02:00
Samuele Locatelli bc75c29f80 Fix overview for recipe template/init 2020-06-25 10:09:31 +02:00
Samuele Locatelli e7e2601a8d updated ModBLock controllers for new datamodel 2020-06-25 09:58:10 +02:00
Samuele Locatelli 4ea2cebfeb Draft for new overview calculation (to be checked) 2020-06-24 19:14:59 +02:00
Samuele Locatelli 1dd83f4e17 Refactoring methods for File persistance 2020-06-24 18:45:22 +02:00
= ab2abc7c2e Merge remote-tracking branch 'CMS/develop' into develop 2020-06-24 11:26:08 +02:00
= 8ac729f9bf Merge remote-tracking branch 'refs/remotes/teamdev/develop'
Conflicts:
	Thermo.Active/wwwroot/src/app_modules_thermo/processo/components/processo.ts
	Thermo.Active/wwwroot/src/app_modules_thermo/processo/components/processo.vue
2020-06-24 11:25:37 +02:00
= 6cabb05270 fix produzione e selezione riscaldi 2020-06-24 11:23:55 +02:00
Samuele Locatelli 9515269f39 Fix contention on ncAdapter (high level) maybe? 2020-06-23 18:46:49 +02:00
Samuele Locatelli 821f91b318 Merge branch 'feature/check/alarms' into cleanup 2020-06-23 18:22:38 +02:00
Samuele Locatelli 6c96d8f259 update vers number 2020-06-23 18:18:17 +02:00
Samuele Locatelli ed946dcd33 forced visible for status bit on recipe parameters 2020-06-23 18:18:07 +02:00
Samuele Locatelli 684ccab8a0 Fix path for Active CLient in Release 2020-06-23 18:17:44 +02:00
Samuele Locatelli d88f3f3d47 Prod controller: single NC object + fix naming prod/prod 2020-06-23 18:17:27 +02:00
Samuele Locatelli ce02165197 Warmers controller: single NC object 2020-06-23 18:17:12 +02:00
Samuele Locatelli e53f233f42 Recipe controller: single NC object 2020-06-23 18:17:04 +02:00
Alessio 6789f9162b fix gantt component 2020-06-23 16:44:11 +02:00
Samuele Locatelli aa78101506 change config prod x vue.js UI 2020-06-23 16:09:18 +02:00
Samuele Locatelli fe4f91d4ae only siemens HMI doesn't really disconnect 2020-06-23 15:08:13 +02:00
Samuele Locatelli fcc404f048 fix connect return value 2020-06-23 15:07:30 +02:00
Alessio aefad3422c fix component for the gantt graphic 2020-06-22 17:08:39 +02:00
Alessio 04f67ac97c fix component for the gantt graphic 2020-06-22 17:00:39 +02:00
Alessio 9eefbe43cc fix processo modal 2020-06-22 15:50:43 +02:00
Samuele Locatelli c5bb2f5658 Merge branch 'feature/check/alarms' into develop 2020-06-22 15:22:44 +02:00
Samuele Locatelli 7424af263f Server: with Paolo Possanzini for fixing stsatic json/ttf 2020-06-22 15:22:09 +02:00
Alessio 8e5d1f82cb add component for the gantt graphic 2020-06-22 15:14:31 +02:00
Samuele Locatelli 3bd3c5e516 change on wwwroot data for ActiveClient 2020-06-22 14:20:42 +02:00
Samuele Locatelli f6182aa622 fix path for active client & prettybin 2020-06-22 13:19:58 +02:00
Samuele Locatelli d7590f46fe developer mode for testing client 2020-06-22 13:19:13 +02:00
Samuele Locatelli ed8f87c6d3 Pretty bin for active client! 2020-06-22 13:19:01 +02:00
Alessio d315eaeca2 fix clock 2020-06-22 11:48:17 +02:00
Alessio ee4356105a fix preriscaldo dashboard 2020-06-22 11:19:42 +02:00
Alessio e921177b38 fix preriscaldo dashboard 2020-06-22 11:11:15 +02:00
Alessio a133b5d49a fix preriscaldo dashboard 2020-06-22 10:53:08 +02:00
Alessio de271c10af fix point 7 and 12 2020-06-22 10:20:18 +02:00
Samuele Locatelli a82fc98348 Merge branch 'cleanup' into develop 2020-06-19 19:28:22 +02:00
Samuele Locatelli 5b2841c01b Executed code-cleanup on solution 2020-06-19 19:28:07 +02:00
Samuele Locatelli 5d3edf46c6 Refactoring: MODELS 2020-06-19 19:06:02 +02:00
Samuele Locatelli 50c4d72464 Merge branch 'feature/add/ProdInfo' into develop 2020-06-19 18:39:06 +02:00
Samuele Locatelli 870d525c41 Code cleanup from #if false 2020-06-19 18:36:44 +02:00
= 0b0523cb28 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-19 18:13:38 +02:00
= 34ab4d7adb Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-19 18:08:16 +02:00
= b5d1bc37cf riscaldi inferiore 2020-06-19 18:07:34 +02:00
= fdeb79c7e2 riscaldi con selezioni a lazo :) 2020-06-19 18:00:33 +02:00
Samuele Locatelli cdc7b49387 fixed seed duplicating data for features 2020-06-19 17:22:37 +02:00
Samuele Locatelli c5cd0b1c92 Merge branch 'develop' into feature/add/ProdInfo 2020-06-19 16:38:59 +02:00
Samuele Locatelli a48ca84178 Removed duplicated task for prodInfo check 2020-06-19 16:38:36 +02:00
Samuele Locatelli fa9325c504 Fix DB persistence methods 2020-06-19 16:37:32 +02:00
Alessio 9a7c40e020 fix style programmazione preriscaldo 2020-06-19 15:52:09 +02:00
Alessio 25444bf1a3 fix dashboard 2020-06-19 15:43:10 +02:00
Samuele Locatelli 7a73cc4b08 Merge branch 'develop' into feature/add/ProdInfo 2020-06-19 15:32:38 +02:00
Samuele Locatelli dc17731a5c Completed update of errors istance name 2020-06-19 15:32:29 +02:00
Alessio 32510556d6 add usage of prodService 2020-06-19 15:20:46 +02:00
Samuele Locatelli be747c7e39 UPdate CmsError istance name 2020-06-19 15:17:21 +02:00
Samuele Locatelli 7a48f34fb9 Start vers 0.9.5 2020-06-19 15:04:15 +02:00
Samuele Locatelli 1fe26026b6 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into feature/add/ProdInfo 2020-06-19 14:53:25 +02:00
Alessio 65ee4154f1 fix style buttons opzioni 2020-06-19 14:53:19 +02:00
Samuele Locatelli 18bc2da627 Merge branch 'develop' into feature/add/ProdInfo 2020-06-19 14:50:43 +02:00
Samuele Locatelli 20a829b50b Fix server startup for TMP file creation 2020-06-19 14:50:29 +02:00
Samuele Locatelli b287da9b95 Fix TMP folder ThermoActive 2020-06-19 14:50:07 +02:00
Samuele Locatelli 688420c42b Reading of Warming data: thread delayed 2020-06-19 14:49:42 +02:00
Alessio 279dfb6bb0 fix opzioni 2020-06-19 14:34:35 +02:00
= e6dcbf11ac fix style 2020-06-19 14:07:49 +02:00
= 5e4fecdc6f fix 2020-06-19 14:00:40 +02:00
= c55f0eddcd Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-19 13:55:06 +02:00
= 92b9cea7d8 fix opzioni 2020-06-19 13:54:18 +02:00
Alessio 86370282ed fix point 12 2020-06-19 12:53:24 +02:00
Alessio 6dcffeb72b fix dashboard 2020-06-19 12:43:22 +02:00
Alessio e17d5c25de Merge remote-tracking branch 'origin/develop' into develop 2020-06-19 12:33:30 +02:00
Alessio ad589992f3 add prodService and fix dashboard 2020-06-19 12:33:23 +02:00
= de4dfdcbb0 fix grafici 2020-06-19 12:03:19 +02:00
= 49e3242f3f Merge remote-tracking branch 'CMS/develop' into develop 2020-06-19 11:04:20 +02:00
= dafafbca13 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-19 10:47:48 +02:00
= daf9c93309 fix pirometro inferiore 2020-06-19 10:45:48 +02:00
= eedd1bee1f fix termo superiore 2020-06-19 10:41:47 +02:00
Alessio 5aa519ea72 add list of components and arch-interface to the dashboard 2020-06-19 10:26:55 +02:00
Samuele Locatelli a2efd0d3f3 Merge branch 'develop' into feature/add/ProdInfo 2020-06-18 17:14:37 +02:00
Samuele Locatelli 62b0a6d481 forced recipe param error false in debug for UI 2020-06-18 17:14:24 +02:00
= 20013ef3e4 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-18 17:10:29 +02:00
= 4a4223957d fix 2020-06-18 17:10:17 +02:00
Samuele Locatelli bbc5d131ad New risk data (actual) from Marco Carissoni, new version 2020-06-18 17:02:05 +02:00
Samuele Locatelli 2741c56a22 commented actual visible/enabled for recipe for UI 2020-06-18 17:01:26 +02:00
Alessio e12c5e6b62 fix point 8 and 6 2020-06-18 16:50:47 +02:00
= 1329b7d91f fix dashboard grid size 2020-06-18 16:47:04 +02:00
Alessio 062aa0ad27 Merge remote-tracking branch 'origin/develop' into develop 2020-06-18 16:36:24 +02:00
Alessio 997f8fdfb4 Auto stash before merge of "develop" and "origin/develop" 2020-06-18 16:36:13 +02:00
= 6134047b61 fix 2020-06-18 16:36:06 +02:00
= eb4ad92f3e fix dashboard layout 2020-06-18 16:31:16 +02:00
= f54f96a42f Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-18 15:40:02 +02:00
= 8fcd50d47b disattivazione sliders and numeric 2020-06-18 15:39:27 +02:00
Alessio 23e8767604 add bottom line 2020-06-18 14:40:57 +02:00
Alessio c11f9028db fix font family 2020-06-18 14:08:46 +02:00
Alessio ad196ad788 fix dashboard 2020-06-18 12:00:04 +02:00
Alessio f906a05969 add component to dashboard 2020-06-18 10:31:17 +02:00
Samuele Locatelli 8742cbee18 ver 0.9.3 for testing, prettybin lib management 2020-06-18 08:22:52 +02:00
Samuele Locatelli 7ed56b3a68 Merge branch 'feature/add/ProdInfo' into develop 2020-06-17 18:35:56 +02:00
Samuele Locatelli 54685853bb Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-17 18:35:49 +02:00
Samuele Locatelli fa060cb839 updated for prodInfo setup and pz target 2020-06-17 18:34:56 +02:00
= 91872776f0 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-17 17:42:08 +02:00
= 77d8a6dbac Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-17 17:41:19 +02:00
= d030f09709 fix clock 2020-06-17 17:41:00 +02:00
= 8858602f9c fix gauge and dashboard layout 2020-06-17 17:36:11 +02:00
Samuele Locatelli 3574dffaa6 Fix strobe/ack for new prodInfo data 2020-06-17 17:20:38 +02:00
Samuele Locatelli ed74fb9b37 Fix compilation path for client 2020-06-17 16:58:16 +02:00
Alessio c0fdf9668b fix layout processo 2020-06-17 15:31:25 +02:00
Samuele Locatelli 97c4ce8c26 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-17 14:52:04 +02:00
Samuele Locatelli 12dc55ef8c Completed prodInfo initial integration, beta test 2020-06-17 14:48:53 +02:00
Samuele Locatelli cc68908084 Added DB migration 2020-06-17 14:48:32 +02:00
Alessio 99279824ef fix buttons 2020-06-17 11:51:06 +02:00
Alessio 36c5ff8def fix paddle 2020-06-17 11:37:38 +02:00
= d32f00bde6 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-17 09:55:05 +02:00
= 8eed4ec2eb fix chart 2020-06-17 09:53:40 +02:00
= c249d7a9be Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-17 09:49:56 +02:00
= 0b8f0adb96 fix chart 2020-06-17 09:49:43 +02:00
Alessio aae6aa8c09 fix layout avvio produzione modal 2020-06-17 09:33:57 +02:00
Alessio 3d9458002b apply shrink 2020-06-17 08:59:33 +02:00
Alessio b84ca57735 Merge branch 'newfeature/paddle' into develop 2020-06-17 08:32:19 +02:00
Samuele Locatelli a6cdf864ae FIrst version of prodInfo DB persistence 2020-06-16 19:28:27 +02:00
Samuele Locatelli 125532639a Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-16 18:04:43 +02:00
Samuele Locatelli fac2b5fa8d Merge branch 'develop' into feature/add/risk 2020-06-16 18:03:45 +02:00
Samuele Locatelli 928c0d20f9 Fixed method for WebAPI + signal-r interference 2020-06-16 18:02:42 +02:00
Alessio d74f886a06 add labels to svgchart 2020-06-16 16:44:31 +02:00
= 685c77e721 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-16 15:59:14 +02:00
= 808e3f1223 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-16 15:58:52 +02:00
Alessio 3c2bc0a48e fix a slider 2020-06-16 15:33:24 +02:00
Alessio ef98320bdc fixing colors 2020-06-16 15:20:01 +02:00
Alessio 9094d3eb50 other add and fix for svgchart 2020-06-16 15:08:15 +02:00
Alessio a4c704fad6 add svgchart to other modals 2020-06-16 14:42:53 +02:00
= 7915adfc3c fix prevuoto 2020-06-16 14:13:45 +02:00
= be7f268d2f fix layout 2020-06-16 14:04:58 +02:00
= 5064d30221 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-16 13:52:40 +02:00
= f0ceb42b92 svgchart 2020-06-16 13:52:32 +02:00
Alessio a135ad689a fix chart 2020-06-16 12:13:11 +02:00
Alessio 29020bb948 add chart 2020-06-16 11:44:36 +02:00
Alessio e0bd76d0b7 fix unit of measure 2020-06-16 11:44:25 +02:00
Alessio 3a18b0e5d3 fix avvio-produzione 2020-06-16 08:55:44 +02:00
Samuele Locatelli 87703058ac Merge branch 'develop' into feature/add/risk 2020-06-16 08:29:44 +02:00
Samuele Locatelli 6776a4894d Added readout for area + fix others 2020-06-16 08:29:27 +02:00
Alessio cd478f16e4 autoscroll and focus 2020-06-16 08:27:56 +02:00
Samuele Locatelli 695d6841f0 Merge branch 'develop' into feature/add/risk 2020-06-15 19:31:25 +02:00
Samuele Locatelli 6f81be6ebe Removed old method + fix startup 2020-06-15 19:29:17 +02:00
Samuele Locatelli 41563cc332 Removed old single param write method 2020-06-15 19:12:22 +02:00
= 2493f0117e Merge remote-tracking branch 'CMS/develop' into develop 2020-06-15 17:13:28 +02:00
= 8370141583 fix 2020-06-15 17:13:05 +02:00
= 7fe7539fe8 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-15 17:12:57 +02:00
= 8f7c780edd fix binding 2020-06-15 17:12:07 +02:00
Alessio 040eed1fcd autoscroll and focus on formato and pirometro 2020-06-15 16:55:36 +02:00
Samuele E. Locatelli f5f41e4c65 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-15 16:46:34 +02:00
Samuele E. Locatelli 2043417668 changed thread period (250->500) for recipe 2020-06-15 16:44:46 +02:00
= 579fa79bb6 autoscroll and focus 2020-06-15 16:37:40 +02:00
= d482a7551b Merge remote-tracking branch 'CMS/develop' into develop 2020-06-15 16:20:34 +02:00
= d3a9de2a3b Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-15 16:10:40 +02:00
= 9347ed95b7 fix recipe confirm & signarl comunications 2020-06-15 16:10:32 +02:00
Alessio 0be93533d7 fix positioning of the paddle butotn 2020-06-15 16:10:09 +02:00
Alessio 90e03e2160 add data bounding on the svg images 2020-06-15 15:45:35 +02:00
Samuele Locatelli ec6ba38e8b Merge branch 'feature/add/risk' into develop 2020-06-15 14:47:50 +02:00
Samuele Locatelli 6de2453bb4 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-15 14:47:40 +02:00
Samuele Locatelli 935d7879e7 Added signal-r send for data 2020-06-15 14:46:25 +02:00
Alessio 4c907a2474 fix positioning paddle 2020-06-15 13:50:08 +02:00
= c0306d9644 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-15 13:30:28 +02:00
= 80e67bb793 fix scritture signalr... 2020-06-15 13:30:04 +02:00
Alessio ebd0921753 writing data server side (other modals) 2020-06-15 12:38:15 +02:00
Samuele Locatelli fa54e5d1e9 Merge branch 'feature/add/risk' into develop 2020-06-15 11:40:48 +02:00
Samuele Locatelli 55e1961cf2 Added methods for mode selection 2020-06-15 11:40:30 +02:00
Alessio fe82ea006b Merge branch 'develop' into newfeature/paddle 2020-06-15 10:49:53 +02:00
Samuele Locatelli 1f110b009b fixed ScaleFactor mgmt 2020-06-15 10:25:55 +02:00
Samuele Locatelli 6fafed419f INitial ScaleFactor setup 2020-06-15 10:19:51 +02:00
Alessio 4c5a61d69f Merge remote-tracking branch 'origin/develop' into develop 2020-06-15 10:03:23 +02:00
Alessio cd18c6a9d3 adding and fix positioning of labels in the svg 2020-06-15 10:03:06 +02:00
Alessio 23df0dbc24 adding and fix positioning of label for the data 2020-06-15 10:01:23 +02:00
Samuele Locatelli fbe3f68397 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-15 09:05:06 +02:00
Samuele E. Locatelli 0a1400389f update try-catch on NcAdapter for status strb/ack 2020-06-15 09:03:40 +02:00
Samuele E. Locatelli ae6767a89d Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-06-12 22:26:59 +02:00
Samuele E. Locatelli d3f48fdcdd added try/catch on str decode 2020-06-12 22:26:35 +02:00
Samuele Locatelli 903f1a9638 ok MsgBlock setup, not ok type/section serializ 2020-06-12 21:01:03 +02:00
Samuele Locatelli 1155cf1680 Merge branch 'feature/add/risk' into develop 2020-06-12 19:17:41 +02:00
Samuele Locatelli 6f51ff274a note on error on reading 2020-06-12 19:16:44 +02:00
Samuele Locatelli 4030919f9e Preliminary add of ModBlock configurazion and load 2020-06-12 19:16:31 +02:00
Samuele Locatelli e56a5daefc added modules error msg 2020-06-12 18:42:32 +02:00
Samuele Locatelli 6d2ffff97b fix recipe error msg 2020-06-12 18:42:20 +02:00
Samuele Locatelli 134aaf31d4 refresh classname step --> thermo 2020-06-12 18:42:00 +02:00
Samuele Locatelli 7b76ea602e Fix logging in warmers WebApi 2020-06-12 18:32:21 +02:00
Samuele Locatelli 108cd688cd Added log in recipe WebApi methods 2020-06-12 18:22:53 +02:00
Samuele Locatelli 06eb1a4bc8 fix logger class name 2020-06-12 18:22:29 +02:00
Samuele Locatelli 08dd11701e Merge branch 'feature/add/risk' into develop 2020-06-12 17:50:19 +02:00
Samuele Locatelli 2f5eaed707 start new version 2020-06-12 17:49:09 +02:00
Samuele E. Locatelli 7d072f9bd6 check condition for recipeLiveData consistence 2020-06-12 17:45:15 +02:00
Samuele Locatelli cb72e13724 Merge branch 'feature/add/risk' into develop 2020-06-12 17:18:56 +02:00
Samuele Locatelli 6e5bf0888f change LiveData init 2020-06-12 17:17:33 +02:00
Samuele Locatelli 4fa253fd3b fixn recipe editing for action required too early 2020-06-12 17:17:05 +02:00
Samuele Locatelli 169c07fc1a new method for material dimension % calc 2020-06-12 17:00:15 +02:00
= fbe619e498 scrittura dati lato server (formato) 2020-06-12 16:59:03 +02:00
= e3f9a09063 layout select 2020-06-12 16:33:51 +02:00
= 097de061bf fix layout box in article 2020-06-12 16:19:19 +02:00
= 1c623cf512 Merge remote-tracking branch 'CMS/develop' into develop 2020-06-12 16:08:05 +02:00
= cbaa4bb359 fix loading stylecss 2020-06-12 16:06:05 +02:00
= 1e5fd252d4 fix layout bordered labels 2020-06-12 15:55:07 +02:00
Alessio d8580afd77 Merge remote-tracking branch 'origin/develop' into develop 2020-06-12 15:45:45 +02:00
Alessio ce5869f90a add label 2020-06-12 15:45:30 +02:00
Alessio dd8793a31d add class for the svg's labels 2020-06-12 15:44:52 +02:00
= 5c17d598bb fix import togglebutton 2020-06-12 15:29:43 +02:00
Samuele Locatelli 82a25ae070 completed test for ACK to PLC 2020-06-12 15:07:22 +02:00
= 614105c35a fix layout raffreddamento 2020-06-12 15:01:18 +02:00
= fd6648432f fix layout controstampo 2020-06-12 14:56:02 +02:00
= 4a17830c07 controstampo 2020-06-12 14:25:20 +02:00
Alessio 0b5a49122d Merge remote-tracking branch 'origin/develop' into develop 2020-06-12 14:16:08 +02:00
Alessio 407d95e8e3 add some cards in the modals 2020-06-12 14:15:55 +02:00
= 6032712414 fix imbutitura 2020-06-12 14:11:04 +02:00
= 1fb1bba657 fix layout pirometro 2020-06-12 13:59:16 +02:00
= 75b4337c75 fix riscalti rendering delay 2020-06-12 13:02:07 +02:00
= 40664d6136 fix riscaldi 2020-06-12 13:00:36 +02:00
= 73d5b93c59 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-12 12:54:13 +02:00
= bb80dc5a38 fix layout riscaldi 2020-06-12 12:52:47 +02:00
Alessio e070a6be6e add some cards in the modals 2020-06-12 12:29:06 +02:00
= 34779f5a31 fix layout ciclo 2020-06-12 12:13:51 +02:00
= c80cdb8644 fix layout quote 2020-06-12 11:48:18 +02:00
Samuele Locatelli 50d0c4a948 Added flux for recipe/risk setup conf on request 2020-06-12 11:39:26 +02:00
= a5436bb717 fix layout formato 2020-06-12 11:33:00 +02:00
Alessio 2f9dbd8111 fix 2020-06-12 11:12:02 +02:00
= 8abc6f00c0 fix modal height 2020-06-12 10:55:58 +02:00
= a282429e3c Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-12 10:46:46 +02:00
Alessio 49c85f347a delete previous buttons zoom 2020-06-12 10:45:24 +02:00
Alessio f58068b4f7 Merge remote-tracking branch 'origin/develop' into develop 2020-06-12 10:41:51 +02:00
Alessio 11fb2c2355 fix binding riscaldi 2020-06-12 10:41:29 +02:00
= ba3a340815 .keyboard layout 2020-06-12 09:58:17 +02:00
= 8a1b28020e pan & zoom su riscaldi 2020-06-12 09:51:30 +02:00
= 00dcc638fc fix footer 2020-06-12 09:37:22 +02:00
Samuele Locatelli cd2f21fe01 preliminary management of config request strb/ack 2020-06-11 19:45:31 +02:00
= ebbaa76054 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-11 18:32:17 +02:00
= 8324bcf297 riscaldi 2020-06-11 18:28:50 +02:00
Alessio f9de12a971 various fix in the modals 2020-06-11 16:38:28 +02:00
Alessio 2f8c6d643a add some property 2020-06-11 15:04:35 +02:00
Samuele Locatelli b14d506eb2 Merge branch 'feature/add/risk' into develop 2020-06-11 14:33:18 +02:00
= ccf8cd265e warmers 2020-06-11 14:31:20 +02:00
Samuele Locatelli 82e400b08d COmpleted warmers read/save data 2020-06-11 14:31:03 +02:00
= dd6f280c96 Merge remote-tracking branch 'teamdev/newfeature/Warmers' into develop 2020-06-11 14:20:47 +02:00
Alessio ade296ce56 Merge remote-tracking branch 'origin/develop' into develop 2020-06-11 14:02:50 +02:00
Alessio 8dd26f73d1 fix numerics, sliders and labels 2020-06-11 14:00:00 +02:00
Samuele Locatelli a03571793e Added partial methods for warmers sale post edit 2020-06-11 13:18:08 +02:00
Samuele Locatelli 1d77adc01c Fix recipe load / save with warmers 2020-06-11 13:17:33 +02:00
= 73be1bb58b rimozione commenti di property non più usate 2020-06-11 12:44:33 +02:00
= a5a76d35c4 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-11 12:43:50 +02:00
= 782caef28a quote 2020-06-11 12:42:39 +02:00
= 61a5c50476 formato & quote. 2020-06-11 12:29:30 +02:00
Alessio 9fac539cfd fix numerics, sliders and labels 2020-06-11 12:28:08 +02:00
= d0276438a4 fix binding formato 2020-06-11 12:01:19 +02:00
= 4f947f0b65 fix slider 2020-06-11 11:17:49 +02:00
Samuele Locatelli c7b96e4d78 Merge branch 'feature/add/risk' into develop 2020-06-11 11:11:14 +02:00
Samuele Locatelli 3a17e13224 fix div0 for VUMin and warmers config setup tested 2020-06-11 11:10:39 +02:00
Samuele Locatelli f28cbfe2ec fix board config: 16 channels 2020-06-11 11:10:15 +02:00
= 3efcfef9d8 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-11 10:56:21 +02:00
= e5961d7685 keyboard postion on focus 2020-06-11 10:54:21 +02:00
Alessio cbfd2fe3c5 Merge branch 'develop' into newfeature/paddle 2020-06-11 10:48:23 +02:00
Alessio 01ac4b071e fix get on the service 2020-06-11 10:48:03 +02:00
Alessio 06f85a3e3e fix buttons of the footer 2020-06-11 10:44:44 +02:00
Alessio 2a51a1535d add put functions to the service 2020-06-11 10:09:55 +02:00
Alessio d987cef604 add service and store for Warmers 2020-06-11 10:07:40 +02:00
Samuele Locatelli 5400408355 start new versione (to check warmers config) 2020-06-10 19:21:36 +02:00
Samuele Locatelli 78c046f117 Merge branch 'feature/add/risk' into develop 2020-06-10 19:15:31 +02:00
Samuele Locatelli 339c9e1220 Setup params write methods added 2020-06-10 19:14:32 +02:00
= c3b211fa01 layout footer bar 2020-06-10 17:52:53 +02:00
= eca0787248 fix minifooter 2020-06-10 17:31:28 +02:00
= 0bda8aa748 layout... 2020-06-10 17:26:51 +02:00
= 2f8277924a modali e fix disegno 2020-06-10 16:29:40 +02:00
Samuele Locatelli 1862fe641b Fix & test write for CH load (1..1024) 2020-06-10 16:29:27 +02:00
= fd0c51a72d pulizia 2020-06-10 16:18:27 +02:00
= 4a3dba9399 pulizia 2020-06-10 16:13:45 +02:00
= eaff5729dc Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-10 15:25:02 +02:00
= aa2bd2d1a1 fix formato 2020-06-10 15:24:54 +02:00
Alessio 6586840f27 fix some property 2020-06-10 14:48:45 +02:00
= 8b447ade4a fix footer buttons layout 2020-06-10 14:46:39 +02:00
Alessio 20a864bfb5 fix all the numeric 2020-06-10 14:19:19 +02:00
Alessio 819051002e fix formato 2020-06-10 13:44:10 +02:00
= d2e0a4eb15 fix loop modali 2020-06-10 12:53:55 +02:00
= c6a108d29a refactoring processo apertura modale 2020-06-10 12:48:05 +02:00
= 133bec82e4 fix 2020-06-10 12:22:22 +02:00
= 9aff944b49 Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-10 12:21:27 +02:00
= d51c900173 fix 2020-06-10 12:20:50 +02:00
= a87b2623e0 refactoring formato e chiamata modali 2020-06-10 12:19:27 +02:00
Alessio 6d98d185f7 cancelled showTast 2020-06-10 12:13:42 +02:00
Alessio 8743f1f924 replaced input with numeric and deleted default from the property 2020-06-10 12:10:58 +02:00
= 0d042b8698 rimozione del tastierino ovunque 2020-06-10 11:40:31 +02:00
= e29358c4ef Merge remote-tracking branch 'teamdev/develop' into develop 2020-06-10 11:28:43 +02:00
= 44bb957508 components 2020-06-10 11:28:25 +02:00
Alessio 5f7941f479 add sliders to stampo on formato modal 2020-06-10 10:37:11 +02:00
Samuele Locatelli d21efcb78f Merge branch 'feature/add/prodData' into feature/add/risk 2020-06-09 19:14:29 +02:00
Samuele Locatelli 6d52ccdc9c Continuing warmers & recipe fix & config 2020-06-09 19:13:57 +02:00
= c857cffbe5 fix modal height 2020-06-09 12:36:05 +02:00
= d71bfe36ba binding gauge header 2020-06-09 12:32:11 +02:00
= b52c2d740f fix input edit 2020-06-09 12:08:09 +02:00
= 2fd2012dd3 fix layout 2020-06-09 11:29:27 +02:00
= d7859a61fa fix layout maschera principale 2020-06-09 11:11:09 +02:00
= 835ba31638 Merge remote-tracking branch 'teamdev/newfeature/ricetta' into develop 2020-06-09 10:40:34 +02:00
= 1ea2f3182a Merge branch 'newfeature/riscaldi' into develop 2020-06-09 10:28:34 +02:00
Samuele Locatelli bdc0ce1aa5 Added method for Prod Info & Cycle data read 2020-06-08 22:30:37 +02:00
Samuele Locatelli 31519c303b Added signal-r prod data push 2020-06-08 22:07:37 +02:00
Samuele Locatelli 0cfbbe069a Fix Filesystem IO 4 recipe 2020-06-08 21:22:14 +02:00
Samuele E. Locatelli 04f9a8155e Update vers number 2020-06-08 19:46:04 +02:00
Samuele Locatelli de8daee8f9 Merge branch 'feature/add/risk' into develop 2020-06-08 19:41:22 +02:00
Samuele Locatelli 8ccd5fc06b Added load save update methods 2020-06-08 19:41:02 +02:00
Alessio d653391253 fix riscaldi modal 2020-06-08 16:37:52 +02:00
Alessio 7ba5090dd3 fix riscaldi superiori 2020-06-08 16:24:22 +02:00
Samuele Locatelli 698fd47177 Added file method for template/current/load/save 2020-06-08 15:44:59 +02:00
Alessio 08c6ca521a fix sub-menù 2020-06-08 14:38:39 +02:00
Alessio 8d661f0bda fix sub-menù 2020-06-08 12:21:15 +02:00
Alessio a44813c8a4 add the sub-menù to the components in production 2020-06-08 11:34:03 +02:00
Samuele Locatelli f48ee73ede Merge branch 'feature/add/risk' into develop 2020-06-08 11:14:39 +02:00
Samuele Locatelli 3dedafd43f update load/save call from WebApi 2020-06-08 11:02:18 +02:00
Samuele Locatelli 020d8304a5 DRAFT: Recipe local persistence file 2020-06-05 23:13:46 +02:00
Samuele Locatelli 2a66160e84 Added warmers resistances output 2020-06-05 21:28:25 +02:00
Samuele Locatelli a52d76bb5b Abbozzata gestione esterna x warmers 2020-06-05 19:54:38 +02:00
Samuele Locatelli 112f6ed697 refresh state machine status 2020-06-05 19:47:17 +02:00
Samuele Locatelli 9798b5a993 Added overview real calculation 2020-06-05 19:38:30 +02:00
Samuele Locatelli c28c77bec9 Merge branch 'feature/add/risk' into develop 2020-06-05 18:51:35 +02:00
Samuele Locatelli 9232597888 UPdate methods for recipe edit confirm/cancel 2020-06-05 18:51:15 +02:00
Samuele Locatelli db7a6c39c3 Merge branch 'feature/add/moduleBlock' into develop 2020-06-05 12:07:11 +02:00
Samuele Locatelli 3b3b6c424e Completed RISK config decoding 2020-06-05 12:06:11 +02:00
Samuele Locatelli 90ef09785c update decoding objects 2020-06-04 19:03:28 +02:00
Samuele Locatelli eba5920137 Update risk naming 2020-06-04 19:03:13 +02:00
Samuele Locatelli 3d16c4d682 Fix moduleBLock config 2020-06-04 19:02:56 +02:00
Samuele Locatelli d6ea0e7f9a Update ENUM uppercase 2020-06-04 15:52:00 +02:00
Samuele Locatelli 8bd8144294 Started config setup for new objects 2020-06-04 15:21:15 +02:00
Samuele Locatelli e5daf52bb4 Add xml/xsd for ModBlock and Risk 2020-06-04 15:21:00 +02:00
Samuele Locatelli 3120746f60 Draft DTO a classess for warmers & modules 2020-06-01 19:03:32 +02:00
Samuele Locatelli 642026eadc update x nuovi metodi CORE library 2020-06-01 18:23:37 +02:00
Samuele Locatelli e3fb330264 Preliminary models added to test 2020-05-29 19:17:59 +02:00
Samuele Locatelli edfb4c4423 Merge branch 'develop' into feature/add/testing-signalr 2020-05-29 12:20:48 +02:00
Samuele Locatelli 9294cecc15 COmpletata webApi scrittura parametri ricetta 2020-05-29 12:20:34 +02:00
Samuele Locatelli 14ed50b58d WebApi method 4 params update 2020-05-29 11:42:47 +02:00
Samuele Locatelli 3d6e711bf0 Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-05-28 18:51:00 +02:00
Samuele Locatelli 79bf736201 commented signal-r method to review... 2020-05-28 18:36:36 +02:00
Samuele Locatelli 3a39f20b5a Metodo scrittura ricetta da testare 2020-05-28 18:06:51 +02:00
Samuele Locatelli fa77cc11cb Update Adapter 2020-05-28 17:49:25 +02:00
Samuele Locatelli 1a120db9e3 Update conf recipeParams 2020-05-28 17:36:09 +02:00
= d3f6dc4a77 Merge remote-tracking branch 'CMS/develop' into develop 2020-05-28 14:16:31 +02:00
= e216f9597d Merge remote-tracking branch 'CMS/develop' into develop 2020-05-28 14:16:14 +02:00
= d06f36edbe fix signalr hub connection url 2020-05-28 14:15:58 +02:00
Samuele Locatelli b732e1514d typo 2020-05-27 10:31:43 +02:00
Samuele E. Locatelli 2e84a57cfb Added pause after thread start on init (it RUNS!) 2020-05-26 19:16:51 +02:00
Samuele Locatelli 100c030844 Merge branch 'feature/add/recipeModel' into develop 2020-05-26 13:04:21 +02:00
Samuele Locatelli c020a5588b Update vers number 2020-05-26 13:04:10 +02:00
Samuele Locatelli 1532898329 Fix client/server for Signal-r, test OK! 2020-05-26 13:01:37 +02:00
Alessio f3b3028167 fix gauge positioning and dimensions 2020-05-25 16:28:24 +02:00
Samuele Locatelli d367532d11 Merge branch 'feature/add/recipeModel' into develop 2020-05-22 18:25:11 +02:00
Samuele Locatelli 302456b21b Vari update x testing client/server 2020-05-22 18:23:25 +02:00
Damiano 6dc2678ecb Svg modifies dashboard 2020-05-22 16:29:16 +02:00
Alessio 99ea0958cd fix input tag 2020-05-22 15:47:25 +02:00
Alessio 2c578a7944 add function to tastierino 2020-05-22 15:15:44 +02:00
Alessio 2237e78dd0 fix call for tastierino and add prop for value 2020-05-22 13:01:09 +02:00
Alessio 71e16325b9 fix and add tastierino to other modals 2020-05-22 10:33:07 +02:00
Alessio 5f2540210f Merge branch 'newfeature/dashboard' into newfeature/ricetta 2020-05-22 08:31:48 +02:00
Damiano 42d162c029 Merge remote-tracking branch 'origin/newfeature/dashboard' into newfeature/dashboard 2020-05-21 16:05:47 +02:00
Damiano 3b1528fd07 fix modifies dashboard3 component 2020-05-21 16:02:54 +02:00
Alessio ef2f3d7874 fix style archinterface 2020-05-21 15:08:38 +02:00
Alessio 16782271a4 fix dashboard and archinterface 2020-05-21 13:52:10 +02:00
Damiano 955d52b977 fix position elements dashboard 2020-05-21 12:00:33 +02:00
Alessio 439c70f70d fix typing for tag input 2020-05-21 11:17:41 +02:00
Alessio d86e6b053a fix reference of recipe in the modals 2020-05-21 10:38:22 +02:00
Alessio 36099630a9 add hr to the dashboard 2020-05-21 09:58:46 +02:00
Alessio e42266ffc2 fix reference of recipe in the modals 2020-05-21 09:47:54 +02:00
Alessio d0fabaac69 add recipeService calls to main 2020-05-20 16:47:13 +02:00
Alessio 22310fa8a7 add recipeService 2020-05-20 16:19:23 +02:00
Alessio 0365bfd7b2 Merge branch 'develop' into newfeature/ricetta 2020-05-20 14:54:52 +02:00
Alessio 786a0b234d fix dashboard 2020-05-20 12:59:21 +02:00
Alessio 7a52c9ffa5 fix dashboard 2020-05-20 11:39:25 +02:00
Alessio eeded21849 Merge branch 'newfeature/programmazione-preriscaldo' into newfeature/dashboard 2020-05-20 09:38:13 +02:00
Alessio 414d8ab889 rename dashboard.less 2020-05-20 09:35:23 +02:00
Alessio a353a0f628 delete row.svg 2020-05-20 09:30:39 +02:00
Alessio 5ed8386e2b fix dashboard 2020-05-20 09:29:16 +02:00
Samuele Locatelli bc0a33cf7f refresh methods signal-r & dobug S7Net 2020-05-19 20:12:34 +02:00
Samuele Locatelli dcb65ad4f3 fix x test locale UI 2020-05-19 20:06:15 +02:00
Francesco Guerrieri 74c85acd2b fix styles svg dashboard 2020-05-19 20:02:54 +02:00
Samuele Locatelli 117a6288bb Merge branch 'develop' of https://bitbucket.org/ncarminati/cms_thermo_active into develop 2020-05-19 16:27:21 +02:00
Samuele Locatelli 95484c7ee7 Update metodi preliminari signal-r 2020-05-19 16:23:10 +02:00
Alessio a39cefbfba fix z-index 2020-05-19 15:51:25 +02:00
Alessio 328d5f618e fix button close of prerisclado dashboard 2020-05-19 15:22:38 +02:00
Alessio ada12efca2 fix preriscaldo dashboard 2020-05-19 15:19:13 +02:00
= 4db37d663f fix caricamento signalr 2020-05-19 15:19:08 +02:00
Alessio 20a271290d fix preriscaldo dashboard 2020-05-19 15:15:44 +02:00
= bbfe28edc7 log delle chiamate signalr 2020-05-19 15:13:57 +02:00
= 180334822b Merge remote-tracking branch 'teamdev/develop' into develop 2020-05-19 15:04:58 +02:00
Samuele Locatelli 63b09c1dfb OK con S7 il thermo NC!!! 2020-05-19 08:55:40 +02:00
Samuele Locatelli ea32e6b506 Debug on NC continues 2020-05-18 17:54:56 +02:00
Damiano 74a998696f optimization dashboard component 2020-05-18 17:48:45 +02:00
Samuele Locatelli e65ba32e09 Start integration for S7Net NC 2020-05-18 17:25:56 +02:00
Alessio 2e8f0f6066 fix svg dashboard 2020-05-18 15:21:58 +02:00
Alessio 2199c86229 add second dashboard 2020-05-18 15:09:06 +02:00
Damiano e93711fc96 fix background color dashboard 2020-05-18 14:55:55 +02:00
Alessio f4223d6de0 fix opening dashboard 2020-05-18 12:51:24 +02:00
Damiano 61ad9a934f Merge remote-tracking branch 'origin/newfeature/programmazione-preriscaldo' into newfeature/programmazione-preriscaldo 2020-05-18 12:24:48 +02:00
Alessio fcab3a8e3d fix dashboard gauge 2020-05-18 12:20:00 +02:00
Damiano 769699a130 add-components-dashboard 2020-05-18 11:54:52 +02:00
Alessio 02a8dc4ef7 fix positioning dashboard 2020-05-18 11:54:14 +02:00
Alessio 8efdf51863 fix background dashboard 2020-05-18 11:51:16 +02:00
Alessio bbec4b5306 fix the merge of the dashboard 2020-05-18 11:42:52 +02:00
Francesco Guerrieri 06d4dc316d Merge remote-tracking branch 'origin/newfeature/programmazione-preriscaldo' into newfeature/programmazione-preriscaldo 2020-05-18 11:30:35 +02:00
Francesco Guerrieri 1bf5534380 fix styles svg 2020-05-18 11:27:12 +02:00
Alessio 1fb1445677 Merge branch 'newfeature/paddle' into newfeature/dashboard 2020-05-18 11:16:24 +02:00
Damiano 39bd0a2eb8 modify dashboard3 drawing 2020-05-18 11:04:20 +02:00
Alessio b41417da56 fix dashboard 2020-05-18 11:03:53 +02:00
Damiano 7d496ee811 fix row svg-dashboard 2020-05-18 09:56:24 +02:00
Samuele Locatelli 426eaeea95 Start update for signal-r THERMO management 2020-05-15 18:38:49 +02:00
Francesco Guerrieri 1a3f7972a1 fixed styles dashboard header 2020-05-15 16:45:23 +02:00
Alessio 535082d311 fix svg dashboard 2020-05-15 15:49:42 +02:00
Damiano ead2383084 fix path-svg 2020-05-15 15:41:19 +02:00
Francesco Guerrieri 627fd320ae fix style dashboard 2020-05-15 15:09:11 +02:00
Francesco Guerrieri c14e24caa2 fix status dashboard 2020-05-15 10:02:24 +02:00
Francesco Guerrieri 492836c2eb fix styles dashboard 2020-05-15 09:32:54 +02:00
Alessio fe3374c16a fix dashboard 2020-05-14 16:59:29 +02:00
Alessio 69767cf627 fix dashboard 2020-05-14 16:43:25 +02:00
Damiano f46e818d18 Auto stash before merge of "newfeature/programmazione-preriscaldo" and "origin/newfeature/programmazione-preriscaldo" 2020-05-14 16:40:56 +02:00
Alessio 4b3b0b6228 fix dashboard 2020-05-14 11:13:48 +02:00
Alessio 2a030da24a fix archinterface and dashboard 2020-05-14 11:02:47 +02:00
Francesco Guerrieri 98ecbe05de fix arch interface 2020-05-14 09:48:49 +02:00
Alessio 0c48eec85c fix dashboard 2020-05-14 09:44:44 +02:00
Damiano eb631908bf svg drawings dashboard 2020-05-13 16:56:27 +02:00
Francesco Guerrieri a2fa132ee2 insert arch interface in header dashboard 2020-05-13 12:23:19 +02:00
Francesco Guerrieri 92380255a6 fix component dashboard 2020-05-13 11:57:58 +02:00
francesco.guerrieri 3532ef89f5 add dashboard component 2020-05-11 14:11:17 +02:00
Alessio 9a21aae816 fix dashboard 2020-05-08 15:24:21 +02:00
Damiano 4830160763 fix "circle-dashboard" 2020-05-08 12:31:31 +02:00
Alessio 821f0276c7 fix style dashboard 2020-05-08 12:00:12 +02:00
Alessio 4b2553056c add dashboard 2020-05-07 16:25:36 +02:00
Alessio 026a85e5ff Merge branch 'newfeature/processo' into develop 2020-05-07 12:22:32 +02:00
Alessio 85a387cc86 fix merge 2020-05-07 12:22:12 +02:00
Alessio dfcaac23ba Merge branch 'newfeature/paddle' into newfeature/processo 2020-05-07 12:08:08 +02:00
francesco.guerrieri 9c1928c7ae fix button modal and binding for modal options 2020-05-07 11:55:31 +02:00
Alessio 506c14f82a Merge branch 'newfeature/programmazione-preriscaldo' into newfeature/processo 2020-05-07 10:59:09 +02:00
Alessio 10835c555e fix footer buttons 2020-05-07 10:58:56 +02:00
Damiano c1adb138e7 Fix binding 2020-05-07 10:52:21 +02:00
Damiano f06dac3a7b Auto stash before merge of "newfeature/programmazione-preriscaldo" and "origin/newfeature/programmazione-preriscaldo" 2020-05-07 09:37:13 +02:00
Alessio 6545727c2f fix binding and footer buttons 2020-05-07 09:20:29 +02:00
francesco.guerrieri cf240405a5 fix binding for options and vacuum modal 2020-05-06 17:14:52 +02:00
Alessio e377d7ece7 fix prop 2020-05-06 15:36:54 +02:00
Alessio 70011ed571 Merge branch 'newfeature/programmazione-preriscaldo' into newfeature/processo 2020-05-06 15:29:21 +02:00
Alessio e4d3c5559a fix binding 2020-05-06 15:23:42 +02:00
Alessio 7232f63094 Auto stash before merge of "newfeature/programmazione-preriscaldo" and "origin/newfeature/programmazione-preriscaldo" 2020-05-06 15:01:42 +02:00
Damiano 581dade86d add "mock-variables in formato" 2020-05-06 14:57:53 +02:00
Alessio 84033194a6 fix binding quote e velocita 2020-05-06 14:17:59 +02:00
Alessio 0cb7833480 Merge remote-tracking branch 'origin/newfeature/programmazione-preriscaldo' into newfeature/programmazione-preriscaldo 2020-05-06 11:27:35 +02:00
Alessio d9c892cb11 fix binding quote e velocita 2020-05-06 11:27:27 +02:00
Damiano f08b33ebf6 fix "General binding" 2020-05-06 11:23:56 +02:00
Alessio bdbc136638 fix Prop modale ciclo 2020-05-06 10:23:26 +02:00
Alessio 2d4ae4c0cc fix binding modale Ciclo 2020-05-06 10:12:43 +02:00
Alessio 60e8f3da34 add computed for opzioni modal 2020-05-05 16:15:01 +02:00
Damiano a1aed17621 binding "General and Cycle" 2020-05-05 15:34:30 +02:00
francesco.guerrieri add63366a3 recipe cooling, vacuum, extraction, options 2020-05-05 15:15:13 +02:00
Alessio 4f9d26c536 fix paddle 2020-05-05 11:42:03 +02:00
Alessio bfd963f8d7 fix paddle 2020-05-04 16:18:33 +02:00
Alessio 16bda5b2a9 format and binding of the data 2020-05-04 14:28:21 +02:00
francesco.guerrieri c32f50070e Auto stash before merge of "newfeature/paddle" and "origin/develop" 2020-05-04 11:35:13 +02:00
francesco.guerrieri 0c03082ff8 Merge remote-tracking branch 'origin/develop' into newfeature/paddle 2020-05-04 11:34:31 +02:00
Alessio 11928ef3bf Auto stash before merge of "newfeature/processo" and "origin/newfeature/paddle" 2020-05-04 10:08:22 +02:00
Alessio f745084d44 Merge remote-tracking branch 'origin/newfeature/paddle' into newfeature/processo 2020-05-04 10:08:00 +02:00
Alessio ec06bf016d Merge remote-tracking branch 'origin/newfeature/processo' into newfeature/processo 2020-05-04 09:32:18 +02:00
Alessio 7ed09443d9 Merge branch 'newfeature/paddle' into newfeature/processo 2020-05-04 09:31:55 +02:00
Alessio d99c7b52a6 format and binding of the data for riscaldi modal 2020-05-04 09:26:26 +02:00
francesco.guerrieri 6c0cef552c fix styles paddle 2020-05-04 09:02:04 +02:00
Damiano 87976bea45 Fix overview (general,position and cycle). 2020-04-30 17:14:26 +02:00
Alessio 93544b93a7 add format and binding of the data 2020-04-30 16:36:41 +02:00
Damiano 20a059602f Merge remote-tracking branch 'origin/develop' into newfeature/programmazione-preriscaldo 2020-04-30 11:16:32 +02:00
Samuele Locatelli f9586ce949 Fix enum json 2020-04-30 08:38:42 +02:00
Samuele Locatelli 46b715dd3c Merge branch 'feature/add/recipeModel' into develop 2020-04-29 18:33:27 +02:00
Samuele Locatelli d926a504d5 Aggiunto anche metodo x recipe overview 2020-04-29 18:31:20 +02:00
Samuele Locatelli a30e50fe53 Ok demo (SIM) x recipe/current 2020-04-29 18:07:35 +02:00
Samuele Locatelli 4fd3807875 Continuo gestione Recipe 2020-04-29 18:05:26 +02:00
Alessio 7bee0f3e91 Merge branch 'newfeature/processo' into develop 2020-04-29 15:21:12 +02:00
Alessio b55569e608 fix style for disabled components on avvio produzione modal 2020-04-29 11:41:57 +02:00
Alessio 684f595878 fix store 2020-04-29 11:08:24 +02:00
francesco.guerrieri 1ab581bd43 fix store 2020-04-29 10:39:13 +02:00
Alessio fbc6e22bf7 fix avvio produzione modal 2020-04-29 09:46:31 +02:00
francesco.guerrieri b86c338b14 fix store paddle 2020-04-28 17:04:42 +02:00
Alessio ad8681991b add avvio produzione modal 2020-04-28 16:06:36 +02:00
Alessio f018da3a5f fix cicle-gantt positioning 2020-04-28 14:54:39 +02:00
Alessio 440abb4e51 add circles-gantt component 2020-04-28 12:11:25 +02:00
Alessio 8132da127e add header to processo modal 2020-04-28 10:23:36 +02:00
Alessio 2dd6f93bd0 Merge branch 'newfeature/programmazione-preriscaldo' into newfeature/processo 2020-04-28 09:06:08 +02:00
Alessio 2be6c229d7 fix store 2020-04-27 17:08:05 +02:00
Alessio 88257068ae add store 2020-04-27 16:36:31 +02:00
Alessio d4ca3f9f1a Merge branch 'newfeature/programmazione-preriscaldo' into develop 2020-04-27 14:57:12 +02:00
Alessio c2f8441e8b general fixes 2020-04-27 14:49:56 +02:00
francesco.guerrieri 6dfee4a431 first commit paddle. create component 2020-04-27 14:30:15 +02:00
francesco.guerrieri f3c040fb1a first commit paddle. create component 2020-04-27 14:29:58 +02:00
Alessio 67644f38b9 change the inputs 2020-04-27 11:56:57 +02:00
Samuele Locatelli 49d7b45c67 Merge branch 'feature/add/recipeModel' into develop 2020-04-24 17:11:09 +02:00
Samuele Locatelli 189d5e200f Fix naming e ok test webApi x RecipeConf 2020-04-24 17:10:57 +02:00
Samuele Locatelli e99d3bdb0d Inserimento preliminare metodi Recipe 2020-04-24 16:55:02 +02:00
Samuele Locatelli 747fe636be Aggiunta XML e validazione dati Recipe 2020-04-24 16:54:45 +02:00
Samuele Locatelli 6c5d9ce68d Aggiunta preliminare modelli recipe 2020-04-24 16:54:24 +02:00
Alessio 08cecd01f5 fix svg 2020-04-24 14:43:00 +02:00
Alessio fce288f451 minor fix quote velocita modal 2020-04-24 14:22:21 +02:00
Alessio 2c8227e1c2 add controstampo to quote e velocità modal 2020-04-24 11:37:20 +02:00
Alessio f4e9a85e51 Merge branch 'newfeature/programmazione-preriscaldo' into develop 2020-04-24 09:03:06 +02:00
Alessio c8b21095a4 multiple fixes for the tags slider 2020-04-23 09:33:13 +02:00
Alessio cd20b0f117 fix css opzioni di lavorazione modal 2020-04-23 08:53:04 +02:00
francesco.guerrieri d1ddae1f61 Merge remote-tracking branch 'origin/develop' into newfeature/paddle 2020-04-22 16:07:50 +02:00
667 changed files with 29498 additions and 19974 deletions
+1
View File
@@ -20,3 +20,4 @@ Output/
*.ntvs*
*.njsproj
/ConsoleApp1
/WindowsFormsApp1
@@ -0,0 +1,57 @@
declare module Recipe{
interface IRange{
min: number;
max: number;
}
interface IStatus{
visible: boolean;
enabled: boolean;
hasError: boolean;
}
interface IValue{
range:IRange,
status:IStatus,
unitMeasure:string,
valueAct: number
}
interface IRecipe{
vacuum_main_start?:IValue,
vacuum_main_delay?:IValue,
vacuum_main_max_time?:IValue,
vacuum_main_1_chart_setpointx?:IValue,
vacuum_main_1_chart_setpointy?:IValue,
vacuum_main_2_chart_setpointx?:IValue,
vacuum_main_2_chart_setpointy?:IValue,
vacuum_main_3_chart_setpointx?:IValue,
vacuum_main_3_chart_setpointy?:IValue,
vacuum_main_manual?:IValue,
vacuum_direct_enabled?:IValue,
vacuum_direct_delay?:IValue,
vacuum_direct_time?:IValue,
vacuum_aux_enabled?:IValue,
vacuum_aux_delay?:IValue,
vacuum_aux_max_time?:IValue,
vacuum_aux_1_chart_setpointx?:IValue,
vacuum_aux_1_chart_setpointy?:IValue,
vacuum_aux_2_chart_setpointx?:IValue,
vacuum_aux_2_chart_setpointy?:IValue,
vacuum_aux_3_chart_setpointx?:IValue,
vacuum_aux_3_chart_setpointy?:IValue,
vacuum_aux_manual?:IValue,
vacuum_pre_enabled?:IValue,
vacuum_pre_delay?:IValue,
vacuum_pre_max_time?:IValue,
vacuum_pre_1_chart_setpointx?:IValue,
vacuum_pre_1_chart_setpointy?:IValue,
vacuum_pre_2_chart_setpointx?:IValue,
vacuum_pre_2_chart_setpointy?:IValue,
vacuum_pre_3_chart_setpointx?:IValue,
vacuum_pre_3_chart_setpointy?:IValue
}
}
@@ -0,0 +1,57 @@
declare module Recipe{
interface IRange{
min: number;
max: number;
}
interface IStatus{
visible: boolean;
enabled: boolean;
hasError: boolean;
}
interface IValue{
range:IRange,
status:IStatus,
unitMeasure:string,
valueAct: number
}
interface IRecipe{
vacuum_main_start?:IValue,
vacuum_main_delay?:IValue,
vacuum_main_max_time?:IValue,
vacuum_main_1_chart_setpointx?:IValue,
vacuum_main_1_chart_setpointy?:IValue,
vacuum_main_2_chart_setpointx?:IValue,
vacuum_main_2_chart_setpointy?:IValue,
vacuum_main_3_chart_setpointx?:IValue,
vacuum_main_3_chart_setpointy?:IValue,
vacuum_main_manual?:IValue,
vacuum_direct_enabled?:IValue,
vacuum_direct_delay?:IValue,
vacuum_direct_time?:IValue,
vacuum_aux_enabled?:IValue,
vacuum_aux_delay?:IValue,
vacuum_aux_max_time?:IValue,
vacuum_aux_1_chart_setpointx?:IValue,
vacuum_aux_1_chart_setpointy?:IValue,
vacuum_aux_2_chart_setpointx?:IValue,
vacuum_aux_2_chart_setpointy?:IValue,
vacuum_aux_3_chart_setpointx?:IValue,
vacuum_aux_3_chart_setpointy?:IValue,
vacuum_aux_manual?:IValue,
vacuum_pre_enabled?:IValue,
vacuum_pre_delay?:IValue,
vacuum_pre_max_time?:IValue,
vacuum_pre_1_chart_setpointx?:IValue,
vacuum_pre_1_chart_setpointy?:IValue,
vacuum_pre_2_chart_setpointx?:IValue,
vacuum_pre_2_chart_setpointy?:IValue,
vacuum_pre_3_chart_setpointx?:IValue,
vacuum_pre_3_chart_setpointy?:IValue
}
}
@@ -0,0 +1,48 @@
import Vue from 'vue';
import Component from 'vue-class-component';
import {Prop} from 'vue-property-decorator';
import Slider from "@/app_modules_thermo/components/slider.vue"
import Scheda from "@/app_modules_thermo/components/scheda.vue"
@Component({name:'vuotoprincipale', components: { slider:Slider, scheda:Scheda}})
export default class VuotoPrincipale extends Vue{
Recipe:Recipe.IRecipe={
vacuum_main_delay:{
range:{
min:8,
max:105
},
status:{
visible:true,
enabled:true,
hasError:false
},
unitMeasure:"",
valueAct:57
},
vacuum_main_max_time:{
range:{
min:9,
max:127
},
status:{
visible:true,
enabled:true,
hasError:false
},
unitMeasure:"",
valueAct:30
},
};
@Prop({default:0})
ritardo:number;
@Prop({default:0})
percentuale:number;
@Prop({default:0})
durata:number;
}
@@ -0,0 +1,50 @@
<template>
<section>
<aside class="scrollable auto">
<div class="input-area">
<label>Partenza</label>
<select>
<option value="Label partenza">Label partenza</option>
</select>
</div>
<hr />
<div class="input-area">
<img src="assets/icons/png/clessidra.png" />
<label>Ritardo</label>
<div class="rect">
{{ritardo}} s
</div>
</div>
<slider :min="0" :max="10" v-model="ritardo" unit-of-measure="s"></slider>
<hr />
<div class="input-area">
<label>Portata in manuale</label>
<div class="rect">
{{Recipe.vacuum_main_delay.valueAct}} %
</div>
</div>
<slider :min="Recipe.vacuum_main_delay.range.min" :max="Recipe.vacuum_main_delay.range.max" v-model="Recipe.vacuum_main_delay.valueAct" :unit-of-measure="Recipe.vacuum_main_delay.unitMeasure"></slider>
</aside>
<hr>
<div class="specific">
<scheda></scheda>
<scheda></scheda>
<scheda></scheda>
</div>
<div class="specific">
<div class="input-area">
<label>Durata massima</label>
<div class="rect">
{{Recipe.vacuum_main_max_time.valueAct}} s
</div>
</div>
<slider :min="Recipe.vacuum_main_max_time.range.min" :max="Recipe.vacuum_main_max_time.range.max" v-model="Recipe.vacuum_main_max_time.valueAct" :unit-of-measure="Recipe.vacuum_main_max_time.unitMeasure"></slider>
</div>
</section>
</template>
<script lang="ts" src="./vuoto-principale.ts"></script>
@@ -0,0 +1,50 @@
import Vue from 'vue';
import Component from 'vue-class-component';
import {Prop} from 'vue-property-decorator';
import Slider from "@/app_modules_thermo/components/slider.vue"
import Scheda from "@/app_modules_thermo/components/scheda.vue"
@Component({name:'vuotoprincipale', components: { slider:Slider, scheda:Scheda}})
export default class VuotoPrincipale extends Vue{
Recipe:Recipe.IRecipe={
vacuum_main_delay:{
range:{
min:8,
max:105
},
status:{
visible:true,
enabled:true,
hasError:false
},
unitMeasure:"",
valueAct:57
},
vacuum_main_max_time:{
range:{
min:9,
max:127
},
status:{
visible:true,
enabled:true,
hasError:false
},
unitMeasure:"",
valueAct:30
},
};
@Prop({default:0})
ritardo:number;
@Prop({default:0})
percentuale:number;
@Prop({default:0})
durata:number;
mock_ritardo:number=this.ritardo;
mock_percentuale:number=this.percentuale;
mock_durata:number=this.durata;
}
@@ -0,0 +1,44 @@
<template>
<section>
<aside class="scrollable auto">
<div class="input-area">
<label>Partenza</label>
<select>
<option value="Label partenza">Label partenza</option>
</select>
</div>
<hr />
<div class="input-area">
<img src="assets/icons/png/clessidra.png" />
<label>Ritardo</label>
<input class="rect" v-model="Recipe.vacuum_main_delay.valueAct">
</div>
<slider :min="Recipe.vacuum_main_delay.range.min" :max="Recipe.vacuum_main_delay.range.max" v-model="Recipe.vacuum_main_delay.valueAct" :unit-of-measure="Recipe.vacuum_main_delay.unitMeasure"></slider>
<hr />
<div class="input-area">
<label>Portata in manuale</label>
<input class="rect" v-model="mock_percentuale">
</div>
<slider :min="0" :max="100" v-model="mock_percentuale" :unit-of-measure="'%'"></slider>
</aside>
<hr>
<div class="specific">
<scheda></scheda>
<scheda></scheda>
<scheda></scheda>
</div>
<div class="specific">
<div class="input-area">
<label>Durata massima</label>
<input class="rect" v-model="Recipe.vacuum_main_max_time.valueAct">
</div>
<slider :min="Recipe.vacuum_main_max_time.range.min" :max="Recipe.vacuum_main_max_time.range.max" v-model="Recipe.vacuum_main_max_time.valueAct" :unit-of-measure="Recipe.vacuum_main_max_time.unitMeasure"></slider>
</div>
</section>
</template>
<script lang="ts" src="./vuoto-principale.ts"></script>
@@ -0,0 +1,63 @@
import Vue from 'vue';
import Component from 'vue-class-component';
import {Prop} from 'vue-property-decorator';
import Slider from "@/app_modules_thermo/components/slider.vue"
import Scheda from "@/app_modules_thermo/components/scheda.vue"
@Component({name:'vuotoprincipale', components: { slider:Slider, scheda:Scheda}})
export default class VuotoPrincipale extends Vue{
Recipe:Recipe.IRecipe={
vacuum_main_delay:{
range:{
min:8,
max:105
},
status:{
visible:true,
enabled:true,
hasError:false
},
unitMeasure:"",
valueAct:57
},
vacuum_main_max_time:{
range:{
min:9,
max:127
},
status:{
visible:true,
enabled:true,
hasError:false
},
unitMeasure:"",
valueAct:30
},
vacuum_main_manual:{
range:{
min:4,
max:115
},
status:{
visible:true,
enabled:true,
hasError:false
},
unitMeasure:"",
valueAct:8
},
};
@Prop({default:0})
ritardo:number;
@Prop({default:0})
percentuale:number;
@Prop({default:0})
durata:number;
mock_ritardo:number=this.ritardo;
mock_percentuale:number=this.percentuale;
mock_durata:number=this.durata;
}
@@ -0,0 +1,44 @@
<template>
<section>
<aside class="scrollable auto">
<div class="input-area">
<label>Partenza</label>
<select>
<option value="Label partenza">Label partenza</option>
</select>
</div>
<hr />
<div class="input-area">
<img src="assets/icons/png/clessidra.png" />
<label>Ritardo</label>
<input class="rect" v-model="Recipe.vacuum_main_delay.valueAct">
</div>
<slider :min="Recipe.vacuum_main_delay.range.min" :max="Recipe.vacuum_main_delay.range.max" v-model="Recipe.vacuum_main_delay.valueAct" :unit-of-measure="Recipe.vacuum_main_delay.unitMeasure"></slider>
<hr />
<div class="input-area">
<label>Portata in manuale</label>
<input class="rect" v-model="Recipe.vacuum_main_manual.valueAct">
</div>
<slider :min="Recipe.vacuum_main_manual.range.min" :max="Recipe.vacuum_main_manual.range.max" v-model="Recipe.vacuum_main_manual.valueAct" :unit-of-measure="Recipe.vacuum_main_manual.unitMeasure"></slider>
</aside>
<hr>
<div class="specific">
<scheda></scheda>
<scheda></scheda>
<scheda></scheda>
</div>
<div class="specific">
<div class="input-area">
<label>Durata massima</label>
<input class="rect" v-model="Recipe.vacuum_main_max_time.valueAct">
</div>
<slider :min="Recipe.vacuum_main_max_time.range.min" :max="Recipe.vacuum_main_max_time.range.max" v-model="Recipe.vacuum_main_max_time.valueAct" :unit-of-measure="Recipe.vacuum_main_max_time.unitMeasure"></slider>
</div>
</section>
</template>
<script lang="ts" src="./vuoto-principale.ts"></script>
+6 -12
View File
@@ -1,21 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Client.Config
namespace Client.Config
{
public static class Config
{
public static SubModels.Client ClientConfig;
public static SubModels.Connection ConnectionConfig;
public static SubModels.VendorHmi VendorHmiConfig;
public static SubModels.Client ClientConfig;
public static SubModels.Connection ConnectionConfig;
public static SubModels.VendorHmi VendorHmiConfig;
public static SubModels.ProdSoftware ProdSoftwareConfig { get; set; }
public static string TextEditorPath { get; set; }
public static SubModels.Software[] ExtSoftwaresConfig { get; set; }
public static SubModels.Software[] ExtSoftwaresConfig { get; set; }
}
}
+1 -1
View File
@@ -6,7 +6,7 @@
<RenderingMethod>GPU</RenderingMethod> <!-- GPU/CPU -->
<ShowVirtualKeyboard>false</ShowVirtualKeyboard>
<RunningOnSecondaryScreen>false</RunningOnSecondaryScreen>
<DeveloperMode>false</DeveloperMode>
<DeveloperMode>true</DeveloperMode>
</Client>
<Connection>
<ServerUrl>localhost</ServerUrl>
+270 -274
View File
@@ -1,280 +1,276 @@
using Client.Utils;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using System.Xml.Schema;
namespace Client.Config
{
public class ConfigController
{
const String ChromeScheme = "chrome";
public static void ReadStartupConfig()
{
// Read validation file
XmlSchemaSet readerSettings = new XmlSchemaSet();
// Add Schema
readerSettings.Add(null, Constants.STARTUP_CONFIG_SCHEMA_PATH);
// Open file reader
XDocument xmlConfigFile = XDocument.Load(Constants.STARTUP_CONFIG_PATH);
// Validate file
xmlConfigFile.Validate(readerSettings, ValidationHandler);
// Read XML Config
Config.ClientConfig = xmlConfigFile
.Descendants(Constants.CLIENT_CONFIG_KEY)
.Select(x => new SubModels.Client()
{
TranspColor = ValidateTranspColor(x.Element("TranspColor").Value),
RenderingMethod = ValidateRendering(x.Element("RenderingMethod").Value),
RunningOnSecondaryScreen = ValidateSecScreen(x.Element("RunningOnSecondaryScreen").Value),
ShowVirtualKeyboard = ValidateVirtualKeyboard(x.Element("ShowVirtualKeyboard").Value),
DeveloperMode = ValidateDeveloperMode(x.Element("DeveloperMode").Value),
IsSCM = ValidateIsSCM(x.Element("IsSCM").Value)
}).FirstOrDefault();
Config.ConnectionConfig = xmlConfigFile
.Descendants(Constants.CONNECTION_CONFIG_KEY)
.Select(x => new SubModels.Connection()
{
ServerUrl = ValidateServerUrl(x.Element("ServerUrl").Value),
ServerPort = ValidateServerPort(x.Element("ServerPort").Value),
Id = ValidateClientID(x.Element("Id").Value),
DeleteCahceFolderOnStartup = ValidateDelCache(x.Element("DeleteCahceFolderOnStartup").Value),
}).FirstOrDefault();
Config.VendorHmiConfig = xmlConfigFile
.Descendants(Constants.VENDORHMI_CONFIG_KEY)
.Select(x => new SubModels.VendorHmi()
{
FollowNcWindow = ValidateFollowNcWin(x.Element("FollowNcWindow").Value)
}).FirstOrDefault();
Config.ProdSoftwareConfig = new SubModels.ProdSoftware();
Config.ExtSoftwaresConfig = new SubModels.Software[] { };
//ReadConfig Url compositing
Config.ConnectionConfig.ReadConfigUrl = "http://" + Config.ConnectionConfig.ServerUrl + ":" + Config.ConnectionConfig.ServerPort + "/" + Constants.ConfigPage;
Config.ConnectionConfig.StartingUrl = "http://" + Config.ConnectionConfig.ServerUrl + ":" + Config.ConnectionConfig.ServerPort + "/" + Constants.StartingPage;
//ErrorPage content
if (File.Exists(Constants.errorPageFile))
Config.ConnectionConfig.ErrorPage = File.ReadAllText(Constants.errorPageFile);
else
throw new Exception(@"File Error: """ + Constants.errorPageFile + @""" not found");
}
private static void ValidationHandler(object sender, ValidationEventArgs e)
{
throw new Exception(@"Configuration Error: " + e.Message);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region PROPERTIES_VALIDATOR
private static String ValidateServerUrl(String value)
{
if (!String.IsNullOrWhiteSpace(value))
return value;
else
throw new Exception(@"Configuration Error: ""Connection - ServerUrl"" is not a valid URL");
}
private static ushort ValidateServerPort(String value)
{
if (ushort.TryParse(value, out ushort Port))
return Port;
else
throw new Exception(@"Configuration Error: ""Connection - ServerPort"" is not a valid Id of CMS-Client");
}
private static String ValidateArgumentUrl(String value)
{
Uri NewUrl;
if (Uri.TryCreate(value, UriKind.Absolute, out NewUrl) && (NewUrl.Scheme == Uri.UriSchemeHttp || NewUrl.Scheme == Uri.UriSchemeHttps || NewUrl.Scheme == Uri.UriSchemeFile || NewUrl.Scheme == ChromeScheme))
return value;
else
throw new Exception(@"Argument Url Error: is not a valid URL");
}
private static Color ValidateTranspColor(String value)
{
Color color;
try
{
color = ColorTranslator.FromHtml(value);
return color;
}
catch (Exception)
{
throw new Exception(@"Configuration Error: ""Client - TranspColor"" is not a valid Hex Color");
}
}
private static Constants.Rendering ValidateRendering(string value)
{
if (value.ToUpper().Equals("CPU"))
return Constants.Rendering.CPU;
else if (value.ToUpper().Equals("GPU"))
return Constants.Rendering.GPU;
else
throw new Exception(@"Configuration Error: ""Client - RenderingMethod"" is not a valid Rendering Method");
}
private static bool ValidateSecScreen(string value)
{
Boolean secScreen;
if (Boolean.TryParse(value, out secScreen))
return secScreen;
else
throw new Exception(@"Configuration Error: ""Client - RunningOnSecondaryScreen"" is not a valid Boolean Type");
}
private static bool ValidateIsSCM(string value)
{
Boolean IsSCM;
if (Boolean.TryParse(value, out IsSCM))
return IsSCM;
using Client.Utils;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using System.Xml.Schema;
namespace Client.Config
{
public class ConfigController
{
const String ChromeScheme = "chrome";
public static void ReadStartupConfig()
{
// Read validation file
XmlSchemaSet readerSettings = new XmlSchemaSet();
// Add Schema
readerSettings.Add(null, Constants.STARTUP_CONFIG_SCHEMA_PATH);
// Open file reader
XDocument xmlConfigFile = XDocument.Load(Constants.STARTUP_CONFIG_PATH);
// Validate file
xmlConfigFile.Validate(readerSettings, ValidationHandler);
// Read XML Config
Config.ClientConfig = xmlConfigFile
.Descendants(Constants.CLIENT_CONFIG_KEY)
.Select(x => new SubModels.Client()
{
TranspColor = ValidateTranspColor(x.Element("TranspColor").Value),
RenderingMethod = ValidateRendering(x.Element("RenderingMethod").Value),
RunningOnSecondaryScreen = ValidateSecScreen(x.Element("RunningOnSecondaryScreen").Value),
ShowVirtualKeyboard = ValidateVirtualKeyboard(x.Element("ShowVirtualKeyboard").Value),
DeveloperMode = ValidateDeveloperMode(x.Element("DeveloperMode").Value),
IsSCM = ValidateIsSCM(x.Element("IsSCM").Value)
}).FirstOrDefault();
Config.ConnectionConfig = xmlConfigFile
.Descendants(Constants.CONNECTION_CONFIG_KEY)
.Select(x => new SubModels.Connection()
{
ServerUrl = ValidateServerUrl(x.Element("ServerUrl").Value),
ServerPort = ValidateServerPort(x.Element("ServerPort").Value),
Id = ValidateClientID(x.Element("Id").Value),
DeleteCahceFolderOnStartup = ValidateDelCache(x.Element("DeleteCahceFolderOnStartup").Value),
}).FirstOrDefault();
Config.VendorHmiConfig = xmlConfigFile
.Descendants(Constants.VENDORHMI_CONFIG_KEY)
.Select(x => new SubModels.VendorHmi()
{
FollowNcWindow = ValidateFollowNcWin(x.Element("FollowNcWindow").Value)
}).FirstOrDefault();
Config.ProdSoftwareConfig = new SubModels.ProdSoftware();
Config.ExtSoftwaresConfig = new SubModels.Software[] { };
//ReadConfig Url compositing
Config.ConnectionConfig.ReadConfigUrl = "http://" + Config.ConnectionConfig.ServerUrl + ":" + Config.ConnectionConfig.ServerPort + "/" + Constants.ConfigPage;
Config.ConnectionConfig.StartingUrl = "http://" + Config.ConnectionConfig.ServerUrl + ":" + Config.ConnectionConfig.ServerPort + "/" + Constants.StartingPage;
//ErrorPage content
if (File.Exists(Constants.errorPageFile))
Config.ConnectionConfig.ErrorPage = File.ReadAllText(Constants.errorPageFile);
else
throw new Exception(@"File Error: """ + Constants.errorPageFile + @""" not found");
}
private static void ValidationHandler(object sender, ValidationEventArgs e)
{
throw new Exception(@"Configuration Error: " + e.Message);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region PROPERTIES_VALIDATOR
private static String ValidateServerUrl(String value)
{
if (!String.IsNullOrWhiteSpace(value))
return value;
else
throw new Exception(@"Configuration Error: ""Connection - ServerUrl"" is not a valid URL");
}
private static ushort ValidateServerPort(String value)
{
if (ushort.TryParse(value, out ushort Port))
return Port;
else
throw new Exception(@"Configuration Error: ""Connection - ServerPort"" is not a valid Id of CMS-Client");
}
private static String ValidateArgumentUrl(String value)
{
Uri NewUrl;
if (Uri.TryCreate(value, UriKind.Absolute, out NewUrl) && (NewUrl.Scheme == Uri.UriSchemeHttp || NewUrl.Scheme == Uri.UriSchemeHttps || NewUrl.Scheme == Uri.UriSchemeFile || NewUrl.Scheme == ChromeScheme))
return value;
else
throw new Exception(@"Argument Url Error: is not a valid URL");
}
private static Color ValidateTranspColor(String value)
{
Color color;
try
{
color = ColorTranslator.FromHtml(value);
return color;
}
catch (Exception)
{
throw new Exception(@"Configuration Error: ""Client - TranspColor"" is not a valid Hex Color");
}
}
private static Constants.Rendering ValidateRendering(string value)
{
if (value.ToUpper().Equals("CPU"))
return Constants.Rendering.CPU;
else if (value.ToUpper().Equals("GPU"))
return Constants.Rendering.GPU;
else
throw new Exception(@"Configuration Error: ""Client - RenderingMethod"" is not a valid Rendering Method");
}
private static bool ValidateSecScreen(string value)
{
Boolean secScreen;
if (Boolean.TryParse(value, out secScreen))
return secScreen;
else
throw new Exception(@"Configuration Error: ""Client - RunningOnSecondaryScreen"" is not a valid Boolean Type");
}
private static bool ValidateIsSCM(string value)
{
Boolean IsSCM;
if (Boolean.TryParse(value, out IsSCM))
return IsSCM;
else
throw new Exception(@"Configuration Error: ""Client - IsSCM"" is not a valid Boolean Type");
}
private static bool ValidateVirtualKeyboard(string value)
{
Boolean keyboard;
if (Boolean.TryParse(value, out keyboard))
return keyboard;
else
throw new Exception(@"Configuration Error: ""Client - ShowVirtualKeyboard"" is not a valid Boolean Type");
}
private static bool ValidateDeveloperMode(string value)
{
Boolean DeveloperMode;
if (Boolean.TryParse(value, out DeveloperMode))
return DeveloperMode;
else
throw new Exception(@"Configuration Error: ""Client - DeveloperMode"" is not a valid Boolean Type");
}
private static Boolean ValidateFollowNcWin(String value)
{
Boolean FollowNc;
if (Boolean.TryParse(value, out FollowNc))
return FollowNc;
else
throw new Exception(@"Configuration Error: ""VendorHmi - FollowNcWindow"" is not a valid Boolean Type");
}
private static ushort ValidateClientID(String value)
{
ushort Client;
if (ushort.TryParse(value, out Client))
return Client;
else
throw new Exception(@"Configuration Error: ""Connection - Id"" is not a valid Id of CMS-Client");
}
private static Boolean ValidateDelCache(String value)
{
Boolean DelCache;
if (Boolean.TryParse(value, out DelCache))
return DelCache;
else
throw new Exception(@"Configuration Error: ""Connection - DeleteCahceFolderOnStartup"" is not a valid Boolean Type");
}
private static String ValidateSFTPath(String value)
{
if (File.Exists(value))
return value;
else
throw new Exception(@"Configuration Error: File """ + value + @""" not found");
}
private static String ValidateSFTSName(String value)
{
if (!String.IsNullOrEmpty(value))
{
if (value.Count() <= 3)
return value;
else
throw new Exception(@"Configuration Error: Short Name """ + value + @""" cannot be over 3 Letters");
}
else
throw new Exception(@"Configuration Error: ""Client - IsSCM"" is not a valid Boolean Type");
}
private static bool ValidateVirtualKeyboard(string value)
{
Boolean keyboard;
if (Boolean.TryParse(value, out keyboard))
return keyboard;
else
throw new Exception(@"Configuration Error: ""Client - ShowVirtualKeyboard"" is not a valid Boolean Type");
}
private static bool ValidateDeveloperMode(string value)
{
Boolean DeveloperMode;
if (Boolean.TryParse(value, out DeveloperMode))
return DeveloperMode;
else
throw new Exception(@"Configuration Error: ""Client - DeveloperMode"" is not a valid Boolean Type");
}
private static Boolean ValidateFollowNcWin(String value)
{
Boolean FollowNc;
if (Boolean.TryParse(value, out FollowNc))
return FollowNc;
else
throw new Exception(@"Configuration Error: ""VendorHmi - FollowNcWindow"" is not a valid Boolean Type");
}
private static ushort ValidateClientID(String value)
{
ushort Client;
if (ushort.TryParse(value, out Client))
return Client;
else
throw new Exception(@"Configuration Error: ""Connection - Id"" is not a valid Id of CMS-Client");
}
private static Boolean ValidateDelCache(String value)
{
Boolean DelCache;
if (Boolean.TryParse(value, out DelCache))
return DelCache;
else
throw new Exception(@"Configuration Error: ""Connection - DeleteCahceFolderOnStartup"" is not a valid Boolean Type");
}
private static String ValidateSFTPath(String value)
{
if(File.Exists(value))
return value;
else
throw new Exception(@"Configuration Error: File """+ value + @""" not found");
}
private static String ValidateSFTSName(String value)
{
if (!String.IsNullOrEmpty(value))
{
if (value.Count() <= 3)
return value;
else
throw new Exception(@"Configuration Error: Short Name """ + value + @""" cannot be over 3 Letters");
}
else
throw new Exception(@"Configuration Error: Software Short Name Must be setted");
}
private static bool ValidateInMainMenuBar(String value)
{
if (!String.IsNullOrEmpty(value))
{
return Boolean.Parse(value);
}
else
}
private static bool ValidateInMainMenuBar(String value)
{
if (!String.IsNullOrEmpty(value))
{
return Boolean.Parse(value);
}
else
throw new Exception(@"Configuration Error: In-Main-Menu-Bar Must be setted");
}
private static String ValidateSFTLName(String value)
{
if (!String.IsNullOrEmpty(value))
return value;
else
throw new Exception(@"Configuration Error: Software Long Name Must be setted");
}
private static String ExtractBase64Icon(String value)
{
Image im = Icon.ExtractAssociatedIcon(value).ToBitmap();
MemoryStream m = new MemoryStream();
im.Save(m, ImageFormat.Png);
return "data:image/png;base64," + Convert.ToBase64String(m.ToArray());
}
#endregion
}
}
private static String ValidateSFTLName(String value)
{
if (!String.IsNullOrEmpty(value))
return value;
else
throw new Exception(@"Configuration Error: Software Long Name Must be setted");
}
private static String ExtractBase64Icon(String value)
{
Image im = Icon.ExtractAssociatedIcon(value).ToBitmap();
MemoryStream m = new MemoryStream();
im.Save(m, ImageFormat.Png);
return "data:image/png;base64," + Convert.ToBase64String(m.ToArray());
}
#endregion
}
}
-1
View File
@@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Le informazioni generali relative a un assembly sono controllate dal seguente
-4
View File
@@ -1,9 +1,5 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Client.Utils.Constants;
namespace Client.Config.SubModels
+1 -5
View File
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Client.Config.SubModels
{
@@ -15,6 +11,6 @@ namespace Client.Config.SubModels
public string ReadConfigUrl { get; set; }
public Boolean DeleteCahceFolderOnStartup { get; set; }
public Boolean BypassReadConfiguration { get; set; }
public string ErrorPage { get; set; }
public string ErrorPage { get; set; }
}
}
+1 -7
View File
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Client.Config.SubModels
namespace Client.Config.SubModels
{
public class ProdSoftware
{
+3 -7
View File
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace Client.Config.SubModels
{
@@ -15,8 +11,8 @@ namespace Client.Config.SubModels
public string ProdEnabled { get; set; }
public string ProdPath { get; set; }
public string Autorun { get; set; }
public string EditorPath { get; set; }
public string EditorPath { get; set; }
public List<Software> ExtSoftwares { get; set; }
}
}
+2 -7
View File
@@ -1,15 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace Client.Config.SubModels
{
[DataContract]
public class Software
{
{
[DataMember]
public string id { get; set; }
[DataMember]
+1 -5
View File
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Client.Config.SubModels
{
@@ -10,7 +6,7 @@ namespace Client.Config.SubModels
{
public Boolean Enabled { get; set; }
public Boolean FollowNcWindow { get; set; }
public ushort Type { get; set; } /* 0: Demo - 1: Fanuc - 2: Siemens - 3: Osai */
public ushort Type { get; set; } /* 0: Demo - 1: Fanuc - 2: Siemens - 3: Osai - 4: Siemens S7 */
public string IpAddress { get; set; }
public string Port { get; set; }
+25 -30
View File
@@ -1,44 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Client.Utils
namespace Client.Utils
{
public static class Constants
{
//Folders
public static string BASE_PATH = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\";
public static string BROWSER_CACHE_FOLDER = BASE_PATH + "LocalStorage";
public static string BASE_PATH = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + "\\";
//public static string BASE_PATH = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\";
public static string BROWSER_CACHE_FOLDER = BASE_PATH + "LocalStorage";
public static string STARTUP_CONFIG_SCHEMA_PATH = BASE_PATH + "ClientValidator.xsd";
public static string STARTUP_CONFIG_PATH = BASE_PATH + "Config.xml";
public static string CEF_PATH = BASE_PATH + "CEF";
public static string CEF_X86_PATH = BASE_PATH + "CEF\\Release_X86";
public static string CEF_X64_PATH = BASE_PATH + "CEF\\Release_X64";
public static string CEF_LOCALES_PATH = BASE_PATH + "CEF\\Resources\\locales";
public static string CEF_EXCEPTIONLOG_PATH = BASE_PATH + "ExceptionLog";
public static string errorPageFile = BASE_PATH + "error.pg";
public static string JOB_OPENING_PATH = "C:\\CMS\\ACTIVE\\TMP\\clientTmpJob\\";
public static string PART_PRG_FOLDER = "C:\\PartPrg";
public static string STARTUP_CONFIG_PATH = BASE_PATH + "lib\\Config.xml";
public static string CEF_PATH = BASE_PATH + "CEF";
public static string CEF_X86_PATH = BASE_PATH + "CEF\\Release_X86";
public static string CEF_X64_PATH = BASE_PATH + "CEF\\Release_X64";
public static string CEF_LOCALES_PATH = BASE_PATH + "CEF\\Resources\\locales";
public static string CEF_EXCEPTIONLOG_PATH = BASE_PATH + "ExceptionLog";
public static string errorPageFile = BASE_PATH + "error.pg";
public static string JOB_OPENING_PATH = "C:\\CMS\\ThermoActive\\TMP\\clientTmpJob\\";
public static string PART_PRG_FOLDER = "C:\\PartPrg";
//Config Names
public const string CONFIG_KEY = "Config";
public const string CLIENT_CONFIG_KEY = "Client";
public const string CONNECTION_CONFIG_KEY = "Connection";
public const string VENDORHMI_CONFIG_KEY = "VendorHmi";
public const string EXTSFT_CONFIG_KEY = "ExtSoftwares";
public const string SFT_CONFIG_KEY = "Software";
public const string JOB_MAIN_FILENAME = "main.cnc";
public const string JOB_METADATA_FILENAME = "metadata.json";
public enum Rendering {GPU = 0, CPU = 1 };
public const string CONFIG_KEY = "Config";
public const string CLIENT_CONFIG_KEY = "Client";
public const string CONNECTION_CONFIG_KEY = "Connection";
public const string VENDORHMI_CONFIG_KEY = "VendorHmi";
public const string EXTSFT_CONFIG_KEY = "ExtSoftwares";
public const string SFT_CONFIG_KEY = "Software";
public const string JOB_MAIN_FILENAME = "main.cnc";
public const string JOB_METADATA_FILENAME = "metadata.json";
public enum Rendering { GPU = 0, CPU = 1 };
//BROWSER OBJECT NAME -> The first letter must be Lower-Case (CEF Settings)
public const string BROWSER_JS_OBJ_NAME = "cmsClient";
//Nc States
public enum NcState { HIDE = 0, SHOW = 1, SHOWPROD = 2 };
@@ -68,13 +63,13 @@ namespace Client.Utils
//KEYBOARD Constants
public const int KEYB_HEIGHT = 377;
public const int KEYB_WIDTH = 1134;
public const int KEYB_WIDTH = 1134;
public const int KEYB_Y_OFFSET = 15;
public const string KEYB_EXE_NAME = "OSK.EXE";
public const string KEYB_PROC_NAME = "OSK";
public const string StartingPage = "index.html";
public const string UPLOAD_PAGE = "/api/file_manager/upload";
public const string UPLOAD_PAGE = "/api/file_manager/upload";
public const string UPLOAD_ADD_QUEUE = "/api/file_manager/queue/add";
public const string ConfigPage = "api/configuration/client";
public const string errorPageUrl = @"error://error/";
-1
View File
@@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Le informazioni generali relative a un assembly sono controllate dal seguente
+8 -3
View File
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
</configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="lib;libs" />
</assemblyBinding>
</runtime>
</configuration>
+22 -23
View File
@@ -1,13 +1,13 @@
using Chromium;
using Active_Client.Browser_Tools.Models;
using Active_Client.Browser_Tools.Models.Errors;
using Active_Client.Browser_Tools.Models.Metadata;
using Active_Client.View;
using Chromium;
using Chromium.Remote;
using Chromium.Remote.Event;
using Chromium.WebBrowser;
using Client.Config;
using Client.Config.SubModels;
using Client.Utils;
using Active_Client.Browser_Tools.Models;
using Active_Client.Browser_Tools.Models.Errors;
using Active_Client.Browser_Tools.Models.Metadata;
using Active_Client.View;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@@ -15,13 +15,12 @@ using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Management;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using static Client.Utils.Constants;
using System.Management;
using Chromium.Remote;
using System.Text;
namespace Active_Client.Browser_Tools
{
@@ -56,7 +55,7 @@ namespace Active_Client.Browser_Tools
{
mainForm = f;
AddDynamicProperty("RECENT_FOLDER_KEY").PropertyGet += getProp;
AddDynamicProperty("RECENT_FOLDER_KEY").PropertyGet += getProp;
AddFunction("minimizeForm").Execute += minimizeForm;
AddFunction("maximizeForm").Execute += maximizeForm;
@@ -383,7 +382,7 @@ namespace Active_Client.Browser_Tools
Path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\",
Type = "SPFO"
});
try
{
// Network Folders
@@ -429,7 +428,7 @@ namespace Active_Client.Browser_Tools
try
{
if(p == RECENT_FOLDER_KEY)
if (p == RECENT_FOLDER_KEY)
{
filelist = GetLastUploadedFiles();
}
@@ -556,9 +555,9 @@ namespace Active_Client.Browser_Tools
// }
//}
foreach(FileModel file in files)
foreach (FileModel file in files)
{
if(!file.IsMain)
if (!file.IsMain)
form.Add(new ByteArrayContent(File.ReadAllBytes(file.AbsolutePath)), "file", Path.GetFileName(file.AbsolutePath));
}
@@ -745,13 +744,13 @@ namespace Active_Client.Browser_Tools
func = e.Arguments[1],
file = p
};
Thread t = new Thread(startNewEditor);
t.Start();
}
public void startNewEditor()
{
{
Process proc = new Process
{
StartInfo = new ProcessStartInfo()
@@ -769,7 +768,7 @@ namespace Active_Client.Browser_Tools
public void cleanFileWatcher(object sender, CfrV8HandlerExecuteEventArgs e)
{
if(watcher != null)
if (watcher != null)
{
watcher.EnableRaisingEvents = false;
@@ -832,7 +831,7 @@ namespace Active_Client.Browser_Tools
else
isFirst = false;
stringBuilder.Append(stringVal);
stringBuilder.Append(stringVal);
}
File.WriteAllLines(RECENT_FILE_PATH, stringBuilder.ToString()
@@ -865,7 +864,7 @@ namespace Active_Client.Browser_Tools
{
if (file.FileExist && !file.IsMain)
files.Add(file);
}
}
// Check if software need to upload all the files
@@ -881,7 +880,7 @@ namespace Active_Client.Browser_Tools
files.Add(new FileModel()
{
AbsolutePath = subfileName,
FileExist = true,
FileExist = true,
IsDirectory = false,
IsMain = false,
Name = Path.GetFileName(subfileName),
@@ -969,7 +968,7 @@ namespace Active_Client.Browser_Tools
//Task to execute
var task = new CfrTask();
task.Execute += (s, e) =>
{
{
context.Enter();
var args = new CfrV8Value[] { arguments };
functionIstance.ExecuteFunction(null, args); //execute callback, nothing happens here
@@ -1176,7 +1175,7 @@ namespace Active_Client.Browser_Tools
{
// Find metadata.json file
var file = zipArchive.Entries.Where(x => x.FullName == JOB_METADATA_FILENAME).FirstOrDefault();
if(file == null)
if (file == null)
{
e.SetReturnValue(JsonConvert.SerializeObject(new ErrorContainer("error_corrupted_model")));
return;
@@ -1342,7 +1341,7 @@ namespace Active_Client.Browser_Tools
{
ZipFile.CreateFromDirectory(JOB_OPENING_PATH, jobPath);
}
catch(Exception ex)
catch (Exception ex)
{
e.SetReturnValue(JsonConvert.SerializeObject(new ErrorContainer("error_save_file")));
return;
-4
View File
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Active_Client.Browser_Tools.Models
{
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Active_Client.Browser_Tools.Models.Errors
{
+1 -7
View File
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Active_Client.Browser_Tools.Models
namespace Active_Client.Browser_Tools.Models
{
public class FileModel
{
-3
View File
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Active_Client.Browser_Tools.Models
{
-3
View File
@@ -1,9 +1,6 @@
using Active_Client.Browser_Tools.Models.Metadata;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Active_Client.Browser_Tools.Models
{
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace Active_Client.Browser_Tools.Models.Metadata
{
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Active_Client.Browser_Tools.Models.Metadata
{
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Active_Client.Browser_Tools.Models.Metadata
namespace Active_Client.Browser_Tools.Models.Metadata
{
public class ImageParam
{
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace Active_Client.Browser_Tools.Models.Metadata
{
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Active_Client.Browser_Tools.Models.Metadata
{
@@ -1,9 +1,6 @@
using Active_Client.Browser_Tools.Models.Metadata;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Active_Client.Browser_Tools.Models
{
+8 -2
View File
@@ -35,7 +35,7 @@
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<OutputPath>..\Thermo.Active\bin\Client_Debug\x64\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -44,7 +44,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<OutputPath>..\Thermo.Active\bin\Client\x64\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -288,4 +288,10 @@
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<Target Name="AfterBuild">
<ItemGroup>
<MoveToLibFolder Exclude="Config.xml" Include="$(OutputPath)*.dll ; $(OutputPath)*.pdb ; $(OutputPath)*.xml" />
</ItemGroup>
<Move SourceFiles="@(MoveToLibFolder)" DestinationFolder="$(OutputPath)lib" OverwriteReadOnlyFiles="true" />
</Target>
</Project>
+28 -31
View File
@@ -1,21 +1,17 @@
using Chromium;
using Active_Client.View;
using Chromium;
using Chromium.Event;
using Chromium.WebBrowser;
using Chromium.WebBrowser.Event;
using Client.Config;
using Client.Utils;
using Active_Client.View;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Management;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Active_Client
@@ -37,8 +33,8 @@ namespace Active_Client
//Crate General Exception Handler
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(GeneralExMethod);
//Read App Configuration
//Read App Configuration
readConfiguration();
//Initialize Chromium
@@ -66,9 +62,9 @@ namespace Active_Client
Application.SetCompatibleTextRenderingDefault(false);
//Check Graphic Card in Energy Saving mode
checkGraphicCard();
//Run the Loading Form
checkGraphicCard();
//Run the Loading Form
Application.Run(new OpeningForm());
//Run the Main-Browser Form
@@ -76,14 +72,14 @@ namespace Active_Client
//Force show Taskbar
NcWindow.ShowTaskBar();
}
}
#endregion
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region CONFIG_METHODS
//Sub-Method used to read the configuration
//Sub-Method used to read the configuration
static private void readConfiguration()
{
//Read the Config
@@ -107,7 +103,8 @@ namespace Active_Client
{
//Prepare List of Cards
String Cardlist = "";
foreach (ManagementObject card in VideoCards){
foreach (ManagementObject card in VideoCards)
{
Cardlist = Cardlist + " - " + card["Name"] + "\n";
}
@@ -121,7 +118,7 @@ namespace Active_Client
{
//code if key Not Exist add it and restart
Registry.SetValue(keyName, valueName, "GpuPreference=1;");
MessageBox.Show("Active has foundthis Graphic Cards:\n\n" + Cardlist +"\nThe graphic configuration has been setted. Press Ok to restart the Application",Application.ProductName);
MessageBox.Show("Active has foundthis Graphic Cards:\n\n" + Cardlist + "\nThe graphic configuration has been setted. Press Ok to restart the Application", Application.ProductName);
Application.Restart();
Environment.Exit(0);
}
@@ -143,10 +140,10 @@ namespace Active_Client
if (CfxRuntime.PlatformArch == CfxPlatformArch.x64)
CfxRuntime.LibCefDirPath = Constants.CEF_X64_PATH;
else
CfxRuntime.LibCefDirPath = Constants.CEF_X86_PATH;
//Add the event variables
CfxRuntime.LibCefDirPath = Constants.CEF_X86_PATH;
//Add the event variables
ChromiumWebBrowser.OnBeforeCfxInitialize += Chromium_OnBeforeCfxInitialize;
ChromiumWebBrowser.OnBeforeCommandLineProcessing += Chromium_OnBeforeCommandLineProcessing;
@@ -167,11 +164,11 @@ namespace Active_Client
static void Chromium_OnBeforeCommandLineProcessing(CfxOnBeforeCommandLineProcessingEventArgs e)
{
if (Config.ClientConfig.RenderingMethod == Constants.Rendering.CPU)
e.CommandLine.AppendSwitch("--disable-gpu");
e.CommandLine.AppendSwitch("--disable-gpu");
e.CommandLine.AppendSwitch("--enable-transparent-visuals");
e.CommandLine.AppendSwitch("--disable-pinch");
e.CommandLine.AppendSwitch("--enable-media-stream");
e.CommandLine.AppendSwitch("--enable-media-stream");
e.CommandLine.AppendSwitch("--enable-usermedia-screen-capture");
e.CommandLine.AppendSwitch("--no-proxy-server");
@@ -188,7 +185,7 @@ namespace Active_Client
e.Settings.CachePath = Constants.BROWSER_CACHE_FOLDER;
e.Settings.LocalesDirPath = Constants.CEF_LOCALES_PATH;
e.Settings.ResourcesDirPath = CfxRuntime.LibCefDirPath;
e.Settings.Locale = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName ;
e.Settings.Locale = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
}
@@ -218,10 +215,10 @@ namespace Active_Client
MessageBoxDefaultButton.Button1
);
Environment.Exit(-1);
}
}
private static void GeneralExMethod(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
-1
View File
@@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Le informazioni generali relative a un assembly sono controllate dal seguente
+5 -17
View File
@@ -1,26 +1,14 @@
using Microsoft.WindowsAPICodePack.Taskbar;
using Client.Config;
using Client.Config;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Client.Utils;
using System.IO;
namespace Active_Client.View
{
public partial class LoadingForm : MetroFramework.Forms.MetroForm
{
//Constructor
{
//Constructor
public LoadingForm()
{
InitializeComponent();
@@ -37,7 +25,7 @@ namespace Active_Client.View
}
//Set window Position
this.Location = new Point((Screen.PrimaryScreen.Bounds.Width / 2) - (this.Width / 2), (Screen.PrimaryScreen.Bounds.Height / 2) - (this.Height / 2));
this.Location = new Point((Screen.PrimaryScreen.Bounds.Width / 2) - (this.Width / 2), (Screen.PrimaryScreen.Bounds.Height / 2) - (this.Height / 2));
}
+21 -22
View File
@@ -1,16 +1,15 @@
using Chromium;
using Active_Client.Browser_Tools;
using Chromium;
using Chromium.Event;
using Chromium.Remote.Event;
using Chromium.WebBrowser;
using Client.Config;
using Client.Utils;
using Active_Client.Browser_Tools;
using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using static Client.Utils.Constants;
using System.Diagnostics;
namespace Active_Client.View
{
@@ -31,7 +30,7 @@ namespace Active_Client.View
private LoadingForm LdFrm;
private static IntPtr MainHandle;
private static IntPtr NcHandle;
private static IntPtr ProdHandle;
private static IntPtr ProdHandle;
private int X = 0, Y = 0;
private string BrokenUrl;
private Boolean closeRight = false;
@@ -54,7 +53,7 @@ namespace Active_Client.View
//Setup the Icon
if (Config.ClientConfig.IsSCM)
this.Icon = Properties.Resources.MAESTRO_ACTIVE_ICON;
//Start Client Setting
InitializeClientSettings();
@@ -83,7 +82,7 @@ namespace Active_Client.View
{
var candidate = Screen.PrimaryScreen;
// If primary screen is not full HD find another screen
if(candidate.WorkingArea.Width != 1920)
if (candidate.WorkingArea.Width != 1920)
{
foreach (var s in Screen.AllScreens)
{
@@ -125,7 +124,7 @@ namespace Active_Client.View
if (Config.VendorHmiConfig.Type == 3)
NcWindow.MinimizeNcWindow();
if (Config.VendorHmiConfig.Enabled)
NcFrm.Hide();
if (Config.ProdSoftwareConfig.Enabled)
@@ -148,7 +147,7 @@ namespace Active_Client.View
{
ShowNCWindow();
}
else if(NcWindow.State == NcState.SHOWPROD)
else if (NcWindow.State == NcState.SHOWPROD)
{
ShowProdWindow();
}
@@ -172,7 +171,7 @@ namespace Active_Client.View
//Close the NC HMI && Stop Following Nc
if (Config.VendorHmiConfig.Enabled)
NcWindow.CloseNcWindow(false);
if (Config.ProdSoftwareConfig.Enabled)
NcWindow.CloseProdWindow(false);
@@ -186,7 +185,7 @@ namespace Active_Client.View
try
{
CfxRuntime.Shutdown();
}
catch (Exception)
{
@@ -197,7 +196,7 @@ namespace Active_Client.View
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if(!closeRight)
if (!closeRight)
e.Cancel = true;
}
@@ -272,7 +271,7 @@ namespace Active_Client.View
private void BeforeDownload(object sender, CfxOnBeforeDownloadEventArgs e)
{
e.Callback.Continue("",true);
e.Callback.Continue("", true);
}
//On browser Load-Error. Event Handler called by Browser
@@ -478,7 +477,7 @@ namespace Active_Client.View
private void ShowWindow()
{
if(Config.ClientConfig.DeveloperMode && Width < 1920 && Height < 1080)
if (Config.ClientConfig.DeveloperMode && Width < 1920 && Height < 1080)
{
double ratio = (((double)Width) / 1920.0) * 100.0;
//Funzione sperimentale presa da Forum CEF
@@ -513,7 +512,7 @@ namespace Active_Client.View
w = NcFrm.Width;
h = NcFrm.Height;
}
else if(Config.ProdSoftwareConfig.Enabled)
else if (Config.ProdSoftwareConfig.Enabled)
{
w = ProdFrm.Width;
h = ProdFrm.Height;
@@ -560,8 +559,8 @@ namespace Active_Client.View
if (InvokeRequired)
Invoke((MethodInvoker)delegate ()
{
//Set Message Status
LdFrm.Show(Message);
//Set Message Status
LdFrm.Show(Message);
LdFrm.Focus();
});
else
@@ -705,7 +704,7 @@ namespace Active_Client.View
//Hide NC Method
public void HideAUXWindow()
{
if ((!Config.VendorHmiConfig.Enabled && !Config.ProdSoftwareConfig.Enabled) || (NcFrm==null && ProdFrm == null))
if ((!Config.VendorHmiConfig.Enabled && !Config.ProdSoftwareConfig.Enabled) || (NcFrm == null && ProdFrm == null))
return;
//Invoke method if is needed or call the method in STD mode
@@ -728,7 +727,7 @@ namespace Active_Client.View
else
{
if (NcFrm != null && NcFrm.Owner != null)
if (NcFrm != null && NcFrm.Owner != null)
NcFrm.Owner = null;
if (ProdFrm != null && ProdFrm.Owner != null)
ProdFrm.Owner = null;
@@ -770,7 +769,7 @@ namespace Active_Client.View
if (ss.Bounds.Width != 1920 && ss.Bounds.Height != 1080)
{
HideLoadingWindow();
if(Config.VendorHmiConfig.Enabled)
if (Config.VendorHmiConfig.Enabled)
NcWindow.CloseNcWindow(false);
if (Config.ProdSoftwareConfig.Enabled)
NcWindow.CloseProdWindow(false);
@@ -778,8 +777,8 @@ namespace Active_Client.View
}
}
}
else
{
else
{
if (Config.ClientConfig.DeveloperMode)
{
//Set the Prymary screen Size
@@ -789,7 +788,7 @@ namespace Active_Client.View
this.Height = ps.Bounds.Height;
}
}
}
else
{
if (ps.Bounds.Width != 1920 && ps.Bounds.Height != 1080)
+3 -10
View File
@@ -1,18 +1,11 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Windows.Forms;
namespace Active_Client.View
{
public partial class NcForm : Form
{
public NcForm(Color TranspColor,int PosX,int PosY)
public NcForm(Color TranspColor, int PosX, int PosY)
{
InitializeComponent();
@@ -37,7 +30,7 @@ namespace Active_Client.View
private void NcForm_FormClosing(object sender, FormClosingEventArgs e)
{
if(e.CloseReason == CloseReason.UserClosing)
if (e.CloseReason == CloseReason.UserClosing)
e.Cancel = true;
}
}
+45 -31
View File
@@ -1,9 +1,8 @@
using Chromium.Remote;
using Active_Client.Properties;
using Chromium.Remote;
using Client.Config;
using Client.Utils;
using Active_Client.Properties;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
@@ -60,7 +59,7 @@ namespace Active_Client.View
private static int LastX, LastY;
private static int LastWidth = 1024, LastHeight = 768;
private static IntPtr hhook;
private static IntPtr hhookWindow;
private static IntPtr hhookWindow;
private static IntPtr keybhook;
private static IntPtr MainViewHandle;
private static IntPtr TaskBarHandle;
@@ -70,7 +69,7 @@ namespace Active_Client.View
private static uint ProdProcessPID;
private static uint ActualPID;
private static WinEventDelegate procDelegate;
private static WinEventDelegate procDelegateWindow;
private static WinEventDelegate procDelegateWindow;
private static keyboardHookProc keybDelegate;
private static uint LastdwmsEventTime;
private static uint LastHookedPID;
@@ -102,13 +101,13 @@ namespace Active_Client.View
private static int ActiveWindowNCWindowStyle;
private static int ActiveWindowNCWindowBorder;
private static uint ActiveWindowNCPopUp;
private static uint ActiveNCWindowNCPopUp;
private static uint ActiveNCWindowNCPopUp;
public static MainForm mainFrm;
private static string prodEXEname;
private static string prodEXEname;
public static NcState State { get { return state; } }
private static NcState state;
@@ -263,8 +262,8 @@ namespace Active_Client.View
//Maximize Window if is Osai
if (Config.VendorHmiConfig.Type == 3)
ShowWindow(ncprocess.MainWindowHandle, SW_SHOWMAXIMIZED);
ShowWindow(ncprocess.MainWindowHandle, SW_SHOWMAXIMIZED);
return 0;
}
@@ -681,8 +680,8 @@ namespace Active_Client.View
//Stop following Nc Window (bring-to-font the main window) -> ONLY FOR OSAI System!
public static void StopNcFollowing()
{
//Detach the hook
{
//Detach the hook
if (hhook != IntPtr.Zero)
UnhookWinEvent(hhook);
@@ -984,9 +983,9 @@ namespace Active_Client.View
#region WINDOWS_EVENT_OVERRIDE
private static void WinEventProcWindow(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
{
//Read the actual ID of the Process
{
//Read the actual ID of the Process
GetWindowThreadProcessId(hwnd, out ActualWindowPID);
if (ActualWindowPID == NcProcessPID && NcProcessPID != 0 && hWinEventHook != ncprocess.MainWindowHandle)
{
@@ -998,7 +997,7 @@ namespace Active_Client.View
ActiveWindowNCPopUp = ((uint)ActiveWindowNCWindowStyle & WS_POPUP);
//if it has the border and a title execute focus
if (ActiveWindowNCWindowStyle != 0 && (((ActiveWindowNCWindowBorder == WS_BORDER) && ReadWindowTitle(hwnd) != "") || (ActiveWindowNCPopUp == WS_POPUP) ))
if (ActiveWindowNCWindowStyle != 0 && (((ActiveWindowNCWindowBorder == WS_BORDER) && ReadWindowTitle(hwnd) != "") || (ActiveWindowNCPopUp == WS_POPUP)))
{
if (eventType == EVENT_OBJECT_CREATE)
{
@@ -1006,8 +1005,8 @@ namespace Active_Client.View
}
else if (eventType == EVENT_OBJECT_DESTROY)
SetWindowPos(MainViewHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_SHOWWINDOW);
}
}
}
}
@@ -1036,13 +1035,13 @@ namespace Active_Client.View
//if it has the border and a title execute focus
if (ActiveNCWindowStyle != 0 && ((ActiveNCWindowBorder == WS_BORDER && ReadWindowTitle(hwnd) != "") || (ActiveNCWindowNCPopUp == WS_POPUP)) && hwnd != ncprocess.MainWindowHandle)
{
Console.WriteLine("Handle: " + hwnd + " MainWindowHandle" + ncprocess.MainWindowHandle);
SetWindowPos(ncprocess.MainWindowHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_SHOWWINDOW);
Console.WriteLine("Handle: " + hwnd + " MainWindowHandle" + ncprocess.MainWindowHandle);
SetWindowPos(ncprocess.MainWindowHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_SHOWWINDOW);
}
}
//If the PID is the STEP-HMI Process
}
//If the PID is the STEP-HMI Process
if (ActualPID == MainProcessPID)
{
if (!IsIconic(MainViewHandle))
@@ -1088,9 +1087,9 @@ namespace Active_Client.View
//Hook Keyboard Handle
private static void KeybEventProc(int nCode, IntPtr wParam, IntPtr lParam)
{
int Key = Marshal.ReadInt32(lParam);
//Elaborate Hotkey
int Key = Marshal.ReadInt32(lParam);
//Elaborate Hotkey
if (wParam == HWND_KEYDOWN || wParam == HWND_SYSKEYDOWN)
{
if (Key == 0xA4 || Key == 0xA5)
@@ -1120,7 +1119,7 @@ namespace Active_Client.View
if (wParam == HWND_SYSKEYDOWN || wParam == HWND_KEYDOWN)
mainFrm.keyPressedHandler(altPressed, ctrlPressed, shiftPressed, Key);
}
if((wParam == HWND_SYSKEYDOWN || wParam == HWND_KEYDOWN) && !altPressed && (KeybPID == MainProcessPID || KeybPID == ProdProcessPID) && state == NcState.SHOW)
if ((wParam == HWND_SYSKEYDOWN || wParam == HWND_KEYDOWN) && !altPressed && (KeybPID == MainProcessPID || KeybPID == ProdProcessPID) && state == NcState.SHOW)
{
//IF Siemens
if (Config.VendorHmiConfig.Type == 2)
@@ -1283,6 +1282,21 @@ namespace Active_Client.View
ncWindowHeight = HMI_WINDOW_HEIGHT_OSAI;
ncWindowX = HMI_WINDOW_POS_X_OSAI;
ncWindowY = HMI_WINDOW_POS_Y_OSAI;
}; break;
// 4: Siemens S7
case 4:
{
processname = DemoName;
processpath = @"C:\CMS\ACTIVE\DEMO" + DemoPath;
ncWindowWidth = 0;
ncWindowHeight = 0;
ncWindowX = 0;
ncWindowY = 0; ;
//ncWindowWidth = HMI_WINDOW_WIDTH_SIEMENS;
//ncWindowHeight = HMI_WINDOW_HEIGHT_SIEMENS;
//ncWindowX = HMI_WINDOW_POS_X_SIEMENS;
//ncWindowY = HMI_WINDOW_POS_Y_SIEMENS;
}; break;
}
}
+51 -54
View File
@@ -1,22 +1,15 @@
using Microsoft.WindowsAPICodePack.Taskbar;
using Client.Config;
using Client.Config;
using Client.Config.SubModels;
using Client.Utils;
using Microsoft.WindowsAPICodePack.Taskbar;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Linq;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Client.Utils;
using System.IO;
using MetroFramework;
using Newtonsoft.Json;
using Client.Config.SubModels;
namespace Active_Client.View
{
@@ -27,7 +20,7 @@ namespace Active_Client.View
private HttpWebResponse ConnTestResponse;
private String ConnTestError;
private Task ConnTask;
private ushort WaitDot=1;
private ushort WaitDot = 1;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region WINDOW_START_&_BEHAVIOUR_METHOD
@@ -63,9 +56,9 @@ namespace Active_Client.View
private void LoadingForm_Load(object sender, EventArgs e)
{
//Force on Desktop 1
this.DesktopLocation = new Point((Screen.PrimaryScreen.Bounds.Width / 2) - (this.Width / 2), (Screen.PrimaryScreen.Bounds.Height / 2) - (this.Height / 2));
//Start Backgroud Task
this.DesktopLocation = new Point((Screen.PrimaryScreen.Bounds.Width / 2) - (this.Width / 2), (Screen.PrimaryScreen.Bounds.Height / 2) - (this.Height / 2));
//Start Backgroud Task
ConnTask = Task.Run(() => BagroundWorker());
}
@@ -126,28 +119,29 @@ namespace Active_Client.View
setOpacity(1);
//Show the loading state on the app ICON
this.Invoke((MethodInvoker)delegate () {TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Indeterminate, this.Handle); });
//try to Request
if(!Config.ConnectionConfig.BypassReadConfiguration)
this.Invoke((MethodInvoker)delegate () { TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Indeterminate, this.Handle); });
//try to Request
if (!Config.ConnectionConfig.BypassReadConfiguration)
{
setStatus("Connecting to " + Config.ConnectionConfig.ServerUrl + ":" + Config.ConnectionConfig.ServerPort, "");
Boolean error=false;
do {
Boolean error = false;
do
{
if (error == true)
return;
} while (!testConnection(new Uri(Config.ConnectionConfig.ReadConfigUrl),out error));
} while (!testConnection(new Uri(Config.ConnectionConfig.ReadConfigUrl), out error));
}
//Set App Opacity (Only Siemens)
if(Config.VendorHmiConfig.Type == 2)
if (Config.VendorHmiConfig.Type == 2)
setOpacity(0.85);
//Open Nc Window
setStatus("Opening NC Window... ", "");
setStatus("Opening NC Window... ", "");
if (Config.VendorHmiConfig.Enabled)
if (!OpenNcWindow())
return;
@@ -160,13 +154,13 @@ namespace Active_Client.View
var exename = Path.GetFileNameWithoutExtension(Config.ProdSoftwareConfig.Path);
if (!OpenProdWindow(Config.ProdSoftwareConfig.Path, exename))
return;
}
//Set App Opacity
}
//Set App Opacity
setOpacity(1);
//Close the Window
closeWindow();
closeWindow();
}
@@ -195,7 +189,7 @@ namespace Active_Client.View
//Sub-Method used to test the connection
private bool testConnection(Uri url,out Boolean error)
private bool testConnection(Uri url, out Boolean error)
{
Boolean Connected = false;
error = false;
@@ -224,8 +218,8 @@ namespace Active_Client.View
//Check if it's connected
if (Connected)
{
// var jsonDefinition = new { ncVendor = "", showHMI = "", ncIp = "", ncPort = "", prodEnabled = "", prodPath = "", extPrograms = "" };
{
// var jsonDefinition = new { ncVendor = "", showHMI = "", ncIp = "", ncPort = "", prodEnabled = "", prodPath = "", extPrograms = "" };
var jsonDefinition = new ServerConfigModel();
setStatus("Connected!", "");
@@ -237,26 +231,28 @@ namespace Active_Client.View
{
var ConfigResponse = JsonConvert.DeserializeAnonymousType(reader.ReadToEnd(), jsonDefinition);
if(!String.IsNullOrWhiteSpace(ConfigResponse.NcVendor) && !String.IsNullOrWhiteSpace(ConfigResponse.ShowHMI))
if (!String.IsNullOrWhiteSpace(ConfigResponse.NcVendor) && !String.IsNullOrWhiteSpace(ConfigResponse.ShowHMI))
{
string ncVendorName = ConfigResponse.NcVendor.ToUpper();
string ncVendorHMI = ConfigResponse.ShowHMI.ToUpper();
Config.VendorHmiConfig.IpAddress = ConfigResponse.NcIp.ToUpper();
Config.VendorHmiConfig.Port = ConfigResponse.NcPort.ToUpper();
string ProdEnabled = ConfigResponse.ProdEnabled.ToUpper();
Config.VendorHmiConfig.IpAddress = ConfigResponse.NcIp.ToUpper();
Config.VendorHmiConfig.Port = ConfigResponse.NcPort.ToUpper();
string ProdEnabled = ConfigResponse.ProdEnabled.ToUpper();
string ProdPath = ConfigResponse.ProdPath.ToUpper();
string Autorun = ConfigResponse.Autorun.ToUpper();
//Read the Server Type
if (ncVendorName.Equals("DEMO"))
Config.VendorHmiConfig.Type = 0;
Config.VendorHmiConfig.Type = 0;
else if (ncVendorName.Equals("FANUC"))
Config.VendorHmiConfig.Type = 1;
else if (ncVendorName.Equals("SIEMENS"))
Config.VendorHmiConfig.Type = 2;
else if (ncVendorName.Equals("OSAI"))
Config.VendorHmiConfig.Type = 3;
else if (ncVendorName.Equals("S7NET"))
Config.VendorHmiConfig.Type = 4;
else
{
setStatus("Close the application!", "Errror in configuration, from server");
@@ -269,8 +265,8 @@ namespace Active_Client.View
Config.VendorHmiConfig.Enabled = true;
else
Config.VendorHmiConfig.Enabled = false;
//Autorun
//Autorun
if (Autorun.ToUpper().Equals("TRUE"))
Config.ClientConfig.Autorun = true;
else
@@ -288,9 +284,9 @@ namespace Active_Client.View
Config.TextEditorPath = ConfigResponse.EditorPath;
if (ConfigResponse.ExtSoftwares != null)
Config.ExtSoftwaresConfig = ConfigResponse.ExtSoftwares.ToArray();
return true;
Config.ExtSoftwaresConfig = ConfigResponse.ExtSoftwares.ToArray();
return true;
}
}
@@ -301,8 +297,8 @@ namespace Active_Client.View
setStatus("Error!", "Error While loading the configuration");
return false;
}
}
}
else
{
@@ -329,29 +325,30 @@ namespace Active_Client.View
//Sub-Method used to open the NC Window
private bool OpenNcWindow()
{
switch(NcWindow.StartNcWindow())
switch (NcWindow.StartNcWindow())
{
case 0: return true;
case 1: {
case 1:
{
setStatus("Close the application!", "NC Path not found: " + NcWindow.ProcessPath);
return false;
};
return false;
};
case 2:
{
setStatus("Close the application!", "Unable to start the NC application: ");
return false;
};
}
}
return false;
}
//Sub-Method used to open the NC Window
private bool OpenProdWindow(string ExePath,string ExeName)
private bool OpenProdWindow(string ExePath, string ExeName)
{
switch (NcWindow.StartProdWindow(ExePath, ExeName))
{
+1 -8
View File
@@ -1,11 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Windows.Forms;
namespace Active_Client.View
Binary file not shown.
+15
View File
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="OPENcontrol" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://192.168.20.2:8080" binding="basicHttpBinding"
bindingConfiguration="OPENcontrol" contract="OPENControl.OPENcontrolPortType"
name="OPENcontrol" />
</client>
</system.serviceModel>
</configuration>
Binary file not shown.
@@ -1,10 +1,7 @@
using Thermo.Active.CmsConnectGateway.Builders;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Thermo.Active.CmsConnectGateway.Builders;
namespace Thermo.Active.CmsConnectGateway
{
@@ -52,7 +49,7 @@ namespace Thermo.Active.CmsConnectGateway
config.dnsPrefixes = dnsPrefixes;
return this;
}
public GatewayNetworkConfiguration GenerateConfiguration()
{
@@ -93,7 +90,7 @@ namespace Thermo.Active.CmsConnectGateway
return config;
}
}
}
@@ -1,10 +1,7 @@
using Thermo.Active.CmsConnectGateway.Builders;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Thermo.Active.CmsConnectGateway.Builders;
namespace Thermo.Active.CmsConnectGateway
{
@@ -79,7 +76,7 @@ namespace Thermo.Active.CmsConnectGateway
//Controls empty spaces
CheckNoEmptySpaces(config.address, "Address");
if(config.username != null)
if (config.username != null)
CheckNoEmptySpaces(config.username, "Username");
if (config.password != null)
CheckNoEmptySpaces(config.password, "Password");
@@ -1,10 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Thermo.Active.CmsConnectGateway.Builders
{
@@ -51,13 +47,13 @@ namespace Thermo.Active.CmsConnectGateway.Builders
}
internal void CheckNoEmptySpaces(string strToCheck,string paramName)
internal void CheckNoEmptySpaces(string strToCheck, string paramName)
{
if (strToCheck.Contains(" "))
throw new FormatException("BAD FORMAT - param \"" + paramName + "\" must be without empty spaces");
}
private bool EvaluateIPV4(string stringValue, out IPAddress address)
{
@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.CmsConnectGateway.Events
{
@@ -1,14 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.CmsConnectGateway.Exceptions
{
public class GatewayException: Exception
public class GatewayException : Exception
{
public GatewayException(string message): base(message)
public GatewayException(string message) : base(message)
{
}
}
@@ -1,7 +1,5 @@
using Renci.SshNet;
using Renci.SshNet.Common;
using Thermo.Active.CmsConnectGateway.Events;
using Thermo.Active.CmsConnectGateway.Exceptions;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -11,6 +9,8 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Thermo.Active.CmsConnectGateway.Events;
using Thermo.Active.CmsConnectGateway.Exceptions;
namespace Thermo.Active.CmsConnectGateway
{
@@ -127,7 +127,7 @@ namespace Thermo.Active.CmsConnectGateway
/// <exception cref="GatewayException"></exception>
public GatewayNetworkConfiguration ReadGatewayNetworkConfiguration()
{
return ElaborateConfigFromSshNetworkCommand( SendSSHCommand(SSH_GET_NETWORK_COMMAND) );
return ElaborateConfigFromSshNetworkCommand(SendSSHCommand(SSH_GET_NETWORK_COMMAND));
}
@@ -184,9 +184,9 @@ namespace Thermo.Active.CmsConnectGateway
}
hand(this, ev);
};
// Create a task and not start it.
Task t = new Task (() => action(delay, handler));
Task t = new Task(() => action(delay, handler));
t.Start();
}
@@ -217,7 +217,7 @@ namespace Thermo.Active.CmsConnectGateway
}
#endregion
//---------------------------------------------------------------------------------------------------
#region SSH_commands_preparations_sub_methods
@@ -255,7 +255,7 @@ namespace Thermo.Active.CmsConnectGateway
return command.ToString();
}
//SSH command generator for Network setting
private string GenerateSshNetworkCommand(GatewayNetworkConfiguration configuration)
@@ -272,7 +272,7 @@ namespace Thermo.Active.CmsConnectGateway
IPNetwork tempIpNetw = IPNetwork.Parse(configuration.ipAddress, configuration.netMaskAddress);
command.Append(configuration.ipAddress).Append("/").Append(tempIpNetw.Cidr).Append(" ");
if(configuration.defaultGatewayAddress != null)
if (configuration.defaultGatewayAddress != null)
command.Append(configuration.defaultGatewayAddress);
}
@@ -298,7 +298,7 @@ namespace Thermo.Active.CmsConnectGateway
{
StringBuilder command = new StringBuilder(SSH_SET_DNSSUFFIX_COMMAND);
if(configuration.dnsPrefixes != null)
if (configuration.dnsPrefixes != null)
command.Append(string.Join(",", configuration.dnsPrefixes));
return command.ToString();
@@ -368,7 +368,7 @@ namespace Thermo.Active.CmsConnectGateway
if (!stringValue.Contains('/'))
throw new GatewayException("Internal Gateway Error during read (bad format): " + IP_ADDR_LABEL + stringValue);
string [] tempAddr = stringValue.Split('/');
string[] tempAddr = stringValue.Split('/');
//Check if has lenght == 2
if (tempAddr.Length != 2)
throw new GatewayException("Internal Gateway Error during read (bad format): " + IP_ADDR_LABEL + stringValue);
@@ -445,7 +445,7 @@ namespace Thermo.Active.CmsConnectGateway
if (tempStr.Length == 0)
configuration.dnsPrefixes = null;
else
configuration.dnsPrefixes = tempStr.Where(X=> !String.IsNullOrEmpty(X)).ToList();
configuration.dnsPrefixes = tempStr.Where(X => !String.IsNullOrEmpty(X)).ToList();
}
}
@@ -473,7 +473,7 @@ namespace Thermo.Active.CmsConnectGateway
if (!stringValue.Contains(':'))
throw new GatewayException("Internal Gateway Error during read (bad format): " + PROXY_ADDR_LABEL + stringValue);
string[] tempAddr = stringValue.Split(':');
//Check if has lenght == 2
if (tempAddr.Length != 2)
throw new GatewayException("Internal Gateway Error during read (bad format): " + PROXY_ADDR_LABEL + stringValue);
@@ -510,7 +510,7 @@ namespace Thermo.Active.CmsConnectGateway
throw new GatewayException("Internal Gateway Error during read (bad format): " + PROXY_ADDR_LABEL + stringValue);
if (tempAddr.Length != 2)
throw new GatewayException("Internal Gateway Error during read (bad format): " + PROXY_ADDR_LABEL + stringValue);
//Set the username
configuration.username = tempLogin[0];
//Set the password
@@ -524,7 +524,7 @@ namespace Thermo.Active.CmsConnectGateway
throw new GatewayException("Internal Gateway Error during read (bad format): " + PROXY_ADDR_LABEL + stringValue);
configuration.port = tempPort;
}
}
}
@@ -538,7 +538,7 @@ namespace Thermo.Active.CmsConnectGateway
{
string[] tempStr = stringValue.Trim('"').Split(',');
for (int i=0;i<tempStr.Length;i++)
for (int i = 0; i < tempStr.Length; i++)
tempStr[i] = tempStr[i].Trim();
if (tempStr.Length == 0)
@@ -562,7 +562,7 @@ namespace Thermo.Active.CmsConnectGateway
}
private bool EvaluateIPV4(string stringValue,out IPAddress address)
private bool EvaluateIPV4(string stringValue, out IPAddress address)
{
Regex rgx = new Regex(@"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");
@@ -583,7 +583,7 @@ namespace Thermo.Active.CmsConnectGateway
//Override sendCommand for single command
private List<string> SendSSHCommand(string command)
{
return SendSSHCommand(new List<string> {command});
return SendSSHCommand(new List<string> { command });
}
@@ -594,12 +594,12 @@ namespace Thermo.Active.CmsConnectGateway
List<string> returnedValues = new List<string>();
//Create the SSH Gateway
SshClient _sshGateway = new SshClient(this.host, this.username, this.password);
SshClient _sshGateway = new SshClient(this.host, this.username, this.password);
try
{
//Connect
_sshGateway.Connect();
foreach(string cmd in command)
foreach (string cmd in command)
{
//Run command
sshCmd = _sshGateway.RunCommand(cmd);
@@ -655,7 +655,7 @@ namespace Thermo.Active.CmsConnectGateway
private void SendSSHReboot(int seconds)
{
//Send SSH Command
SendSSHCommand(SSH_GW_REBOOT_COMMAND + seconds);
SendSSHCommand(SSH_GW_REBOOT_COMMAND + seconds);
//Wait the time for reboot
Thread.Sleep((seconds + 5) * 1000);
@@ -708,7 +708,7 @@ namespace Thermo.Active.CmsConnectGateway
}
} while (!disconnected);
//Phase 2 Wait Re-connection Cycle
bool connected = false;
do
@@ -716,7 +716,7 @@ namespace Thermo.Active.CmsConnectGateway
try
{
//If TimeSpan > TOT MIN -> Exception
if((DateTime.Now - nowAfterReboot) > TimeSpan.FromMinutes(REBOOT_MINUTES_MAX))
if ((DateTime.Now - nowAfterReboot) > TimeSpan.FromMinutes(REBOOT_MINUTES_MAX))
throw new GatewayException("Timeout Error during reboot - Gateway not found during reboot");
//Try Connection
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
namespace Thermo.Active.CmsConnectGateway
@@ -13,8 +10,8 @@ namespace Thermo.Active.CmsConnectGateway
public class GatewayNetworkConfiguration
{
internal GatewayNetworkConfiguration() {}
public Boolean hasDhcp { get; internal set;}
internal GatewayNetworkConfiguration() { }
public Boolean hasDhcp { get; internal set; }
public IPAddress ipAddress { get; internal set; }
public IPAddress netMaskAddress { get; internal set; }
public IPAddress defaultGatewayAddress { get; internal set; }
@@ -23,18 +20,18 @@ namespace Thermo.Active.CmsConnectGateway
public override string ToString()
{
return "hasDhcp: " + hasDhcp + Environment.NewLine +
"ipAddress: " + (ipAddress != null ? ipAddress.ToString() : "null") + Environment.NewLine +
"netMaskAddress: " + (netMaskAddress != null ? netMaskAddress.ToString() : "null") + Environment.NewLine +
"defaultGatewayAddress: " + (defaultGatewayAddress != null ? defaultGatewayAddress.ToString() : "null") + Environment.NewLine +
"dnsAddresses: " + (dnsAddresses != null ? string.Join(",", dnsAddresses) : "null") + Environment.NewLine +
"dnsPrefixes: " + (dnsPrefixes != null ? string.Join(",", dnsPrefixes) : "null");
return "hasDhcp: " + hasDhcp + Environment.NewLine +
"ipAddress: " + (ipAddress != null ? ipAddress.ToString() : "null") + Environment.NewLine +
"netMaskAddress: " + (netMaskAddress != null ? netMaskAddress.ToString() : "null") + Environment.NewLine +
"defaultGatewayAddress: " + (defaultGatewayAddress != null ? defaultGatewayAddress.ToString() : "null") + Environment.NewLine +
"dnsAddresses: " + (dnsAddresses != null ? string.Join(",", dnsAddresses) : "null") + Environment.NewLine +
"dnsPrefixes: " + (dnsPrefixes != null ? string.Join(",", dnsPrefixes) : "null");
}
}
public class GatewayProxyConfiguration
{
internal GatewayProxyConfiguration(){}
internal GatewayProxyConfiguration() { }
public Boolean hasProxy { get; internal set; }
public string address { get; internal set; }
public uint port { get; internal set; }
@@ -45,12 +42,12 @@ namespace Thermo.Active.CmsConnectGateway
public override string ToString()
{
return "hasProxy: " + hasProxy + Environment.NewLine +
"address: " + (address != null ? address.ToString() : "null") + Environment.NewLine +
"port: " + (port != 0 ? port.ToString() : "null") + Environment.NewLine +
"username: " + (username != null ? username : "null") + Environment.NewLine +
"password: " + (password != null ? password : "null") + Environment.NewLine +
"noproxyAddresses: " + (noproxyAddresses != null ? string.Join(",", noproxyAddresses) : "null");
return "hasProxy: " + hasProxy + Environment.NewLine +
"address: " + (address != null ? address.ToString() : "null") + Environment.NewLine +
"port: " + (port != 0 ? port.ToString() : "null") + Environment.NewLine +
"username: " + (username != null ? username : "null") + Environment.NewLine +
"password: " + (password != null ? password : "null") + Environment.NewLine +
"noproxyAddresses: " + (noproxyAddresses != null ? string.Join(",", noproxyAddresses) : "null");
}
}
}
@@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Le informazioni generali relative a un assembly sono controllate dal seguente
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,364 @@
<?xml version="1.0" encoding="UTF-8"?>
<modules>
<block>
<id>1</id>
<label>MB_DiscesaCZ</label>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>2</id>
<label>MB_MembDiscesaZ</label>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>3</id>
<label>MB_MembZ</label>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>4</id>
<label>MB_Mod_MembSalitaZ</label>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>5</id>
<label>MB_Mod_AppoggioDiscesaW</label>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>6</id>
<label>MB_Mod_RiscaldoInf</label>
<type>HEATING</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>7</id>
<label>MB_Mod_RiscaldoSup</label>
<type>HEATING</type>
<section>HEATING</section>
<idParam>0</idParam>
<showDelay>false</showDelay>
<priority>2</priority>
</block>
<block>
<id>8</id>
<label>MB_Mod_PirometroRisc</label>
<type>HEATING</type>
<section>HEATING</section>
<idParam>80</idParam>
<showDelay>true</showDelay>
<priority>3</priority>
</block>
<block>
<id>9</id>
<label>MB_Mod_DecompSustain</label>
<type>HEATING</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>4</priority>
</block>
<block>
<id>10</id>
<label>MB_Mod_Acrilico</label>
<type>HEATING</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>5</priority>
</block>
<block>
<id>11</id>
<label>MB_Mod_RiscaldiIndietro</label>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>12</id>
<label>MB_Mod_ExtraR</label>
<type>HEATING</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>13</id>
<label>MB_Mod_Imbutitura</label>
<type>DRAWING</type>
<section>FORMING</section>
<idParam>99</idParam>
<showDelay>true</showDelay>
<priority>2</priority>
</block>
<block>
<id>14</id>
<label>MB_Mod_SalitaW</label>
<type>MOVEMENT</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>1</priority>
</block>
<block>
<id>15</id>
<label>MB_Mod_AttesaStampo</label>
<type>MOVEMENT</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>3</priority>
</block>
<block>
<id>16</id>
<label>MB_Mod_Raffreddamento</label>
<type>COOLING</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>3</priority>
</block>
<block>
<id>17</id>
<label>MB_Mod_PirometroRaffr</label>
<type>COOLING</type>
<section>FORMING</section>
<idParam>139</idParam>
<showDelay>true</showDelay>
<priority>4</priority>
</block>
<block>
<id>19</id>
<label>MB_Mod_Vuoto</label>
<type>VACUUM</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>5</priority>
</block>
<block>
<id>21</id>
<label>MB_Mod_VuotoDiretto</label>
<type>VACUUM</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>6</priority>
</block>
<block>
<id>23</id>
<label>MB_Mod_VuotoAux</label>
<type>VACUUM</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>7</priority>
</block>
<block>
<id>25</id>
<label>MB_Mod_Nebulizz</label>
<type>COOLING</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>8</priority>
</block>
<block>
<id>26</id>
<label>MB_Mod_AttesaPartenzaZ</label>
<type>MOVEMENT</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>9</priority>
</block>
<block>
<id>28</id>
<label>MB_Mod_DiscesaZ</label>
<type>MOVEMENT</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>9</priority>
</block>
<block>
<id>29</id>
<label>MB_Mod_Z</label>
<type>MOVEMENT</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>9</priority>
</block>
<block>
<id>30</id>
<label>MB_Mod_SalitaZ</label>
<type>MOVEMENT</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>9</priority>
</block>
<block>
<id>31</id>
<label>MB_Mod_AriaZ</label>
<type>VACUUM</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>10</priority>
</block>
<block>
<id>33</id>
<label>MB_Mod_VuotoZ</label>
<type>VACUUM</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>11</priority>
</block>
<block>
<id>34</id>
<label>MB_Mod_ScaricoVuotoZ</label>
<type>VACUUM</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>9</priority>
</block>
<block>
<id>35</id>
<label>MB_Mod_ScaricoVuoto</label>
<type>VACUUM</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>9</priority>
</block>
<block>
<id>36</id>
<label>MB_Mod_EstrazioneZ</label>
<type>EXTRACTION</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>10</priority>
</block>
<block>
<id>38</id>
<label>MB_Mod_DiscesaAssistZ</label>
<type>MOVEMENT</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>4</priority>
</block>
<block>
<id>39</id>
<label>MB_Mod_Estrazione</label>
<type>EXTRACTION</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>2</priority>
</block>
<block>
<id>40</id>
<label>MB_Mod_DiscesaW</label>
<type>MOVEMENT</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>1</priority>
</block>
<block>
<id>41</id>
<label>MB_Mod_RiscaldiIndietro2</label>
<type>MOVEMENT</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>42</id>
<label>MB_Mod_SalitaCZ</label>
<type>MOVEMENT</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>43</id>
<label>MB_Mod_Riscaldi2</label>
<type>HEATING</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>1</priority>
</block>
<block>
<id>44</id>
<label>MB_Mod_Estrazione_Aux_W</label>
<type>EXTRACTION</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>3</priority>
</block>
<block>
<id>45</id>
<label>MB_Mod_Attesa_Pirometro</label>
<type>COOLING</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>4</priority>
</block>
<block>
<id>46</id>
<label>MB_Mod_Prevuoto</label>
<type>VACUUM</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<priority>6</priority>
</block>
<block>
<id>47</id>
<label>MB_Mod_SalitaAssistZ</label>
<type>MOVEMENT</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<priority>4</priority>
</block>
</modules>
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="modules">
<xs:complexType>
<xs:sequence>
<!-- Heads -->
<xs:element name="block" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element name="id" type="xs:int"/>
<xs:element name="label" type="xs:string" />
<xs:element name="type" type="mblockType" />
<xs:element name="section" type="mblockSection" />
<xs:element name="idParam" type="xs:int" />
<xs:element name="showDelay" type="xs:boolean" />
<xs:element name="priority" type="xs:int" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Language Type -->
<xs:complexType name="langType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="langKey" use="required" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- ModBlock Type -->
<xs:simpleType name="mblockType" final="restriction">
<xs:restriction base="xs:string">
<xs:enumeration value="HEATING" />
<xs:enumeration value="DRAWING" />
<xs:enumeration value="MOVEMENT"/>
<xs:enumeration value="VACUUM"/>
<xs:enumeration value="COOLING"/>
<xs:enumeration value="EXTRACTION"/>
</xs:restriction>
</xs:simpleType>
<!-- Section Type -->
<xs:simpleType name="mblockSection" final="restriction">
<xs:restriction base="xs:string">
<xs:enumeration value="HEATING" />
<xs:enumeration value="FORMING" />
<xs:enumeration value="EXTRACTION"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="recipe">
<xs:complexType>
<xs:sequence>
<!-- Heads -->
<xs:element name="parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element name="id" type="xs:int"/>
<xs:element name="category" type="param_type" />
<xs:element name="subCategory_1" type="xs:string" />
<xs:element name="subCategory_2" type="xs:string" />
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
<xs:element name="format" type="xs:string" />
<xs:element name="scaleFactor" type="xs:int" default="1"/>
<xs:element name="numDec" type="xs:int" default="0"/>
<xs:element name="enumList" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="enumVal" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element name="label" type="xs:string" />
<xs:element name="value" type="xs:string" />
<xs:element name="anim" type="xs:string" minOccurs="0" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Head Type -->
<xs:simpleType name="param_type" final="restriction">
<xs:restriction base="xs:string">
<xs:enumeration value="General" />
<xs:enumeration value="Positions" />
<xs:enumeration value="Cycle"/>
<xs:enumeration value="Heats"/>
<xs:enumeration value="Pyrometer"/>
<xs:enumeration value="Drawing"/>
<xs:enumeration value="UpperPlate"/>
<xs:enumeration value="Cooling"/>
<xs:enumeration value="Vacuum"/>
<xs:enumeration value="Extraction"/>
<xs:enumeration value="Options"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
+316
View File
@@ -0,0 +1,316 @@
<?xml version="1.0" encoding="utf-8"?>
<riscaldo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../APPOGGIO/risk2007.xsd" comPort="5" baudRate="19200" gainTc="0.5" addrTc="4D5">
<riflettore tipo="0" dimensionScale="13000" slimScale="2" offsetTc="0">
<resistenza tipo="21" riga="0" idTermocoppia="0" idGruppo="1" termocoppiaAssociata="1" canale="1" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="2" termocoppiaAssociata="1" canale="6" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="3" termocoppiaAssociata="1" canale="26" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="4" termocoppiaAssociata="1" canale="46" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="5" termocoppiaAssociata="1" canale="66" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="6" termocoppiaAssociata="1" canale="86" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="21" riga="0" idTermocoppia="0" idGruppo="7" termocoppiaAssociata="1" canale="106" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="8" termocoppiaAssociata="1" canale="7" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="9" termocoppiaAssociata="1" canale="27" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="10" termocoppiaAssociata="1" canale="47" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="11" termocoppiaAssociata="1" canale="67" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="12" termocoppiaAssociata="1" canale="87" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="13" termocoppiaAssociata="1" canale="107" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="21" riga="2" idTermocoppia="0" idGruppo="1" termocoppiaAssociata="1" canale="1" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="14" termocoppiaAssociata="1" canale="8" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="15" termocoppiaAssociata="1" canale="28" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="16" termocoppiaAssociata="1" canale="48" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="17" termocoppiaAssociata="1" canale="68" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="18" termocoppiaAssociata="1" canale="88" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="21" riga="2" idTermocoppia="0" idGruppo="7" termocoppiaAssociata="1" canale="106" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="19" termocoppiaAssociata="1" canale="9" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="20" termocoppiaAssociata="1" canale="29" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="21" termocoppiaAssociata="1" canale="49" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="22" termocoppiaAssociata="1" canale="69" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="23" termocoppiaAssociata="1" canale="89" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="24" termocoppiaAssociata="1" canale="108" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="21" riga="4" idTermocoppia="0" idGruppo="25" termocoppiaAssociata="1" canale="2" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="26" termocoppiaAssociata="1" canale="10" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="27" termocoppiaAssociata="1" canale="30" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="28" termocoppiaAssociata="1" canale="50" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="29" termocoppiaAssociata="1" canale="70" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="30" termocoppiaAssociata="1" canale="90" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="21" riga="4" idTermocoppia="0" idGruppo="31" termocoppiaAssociata="1" canale="109" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="32" termocoppiaAssociata="1" canale="11" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="33" termocoppiaAssociata="1" canale="31" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="34" termocoppiaAssociata="1" canale="51" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="35" termocoppiaAssociata="1" canale="71" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="36" termocoppiaAssociata="1" canale="91" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="37" termocoppiaAssociata="1" canale="110" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="21" riga="6" idTermocoppia="0" idGruppo="25" termocoppiaAssociata="1" canale="2" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="38" termocoppiaAssociata="1" canale="12" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="39" termocoppiaAssociata="1" canale="32" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="40" termocoppiaAssociata="1" canale="52" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="41" termocoppiaAssociata="1" canale="72" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="42" termocoppiaAssociata="1" canale="92" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="21" riga="6" idTermocoppia="0" idGruppo="31" termocoppiaAssociata="1" canale="109" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="43" termocoppiaAssociata="1" canale="13" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="44" termocoppiaAssociata="1" canale="33" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="45" termocoppiaAssociata="1" canale="53" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="46" termocoppiaAssociata="1" canale="73" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="47" termocoppiaAssociata="1" canale="93" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="48" termocoppiaAssociata="1" canale="111" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="21" riga="8" idTermocoppia="0" idGruppo="49" termocoppiaAssociata="1" canale="3" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="50" termocoppiaAssociata="1" canale="14" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="51" termocoppiaAssociata="1" canale="34" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="52" termocoppiaAssociata="1" canale="54" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="53" termocoppiaAssociata="1" canale="74" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="54" termocoppiaAssociata="1" canale="94" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="21" riga="8" idTermocoppia="0" idGruppo="55" termocoppiaAssociata="1" canale="112" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="56" termocoppiaAssociata="1" canale="15" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="57" termocoppiaAssociata="1" canale="35" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="58" termocoppiaAssociata="1" canale="55" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="59" termocoppiaAssociata="1" canale="75" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="60" termocoppiaAssociata="1" canale="95" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="61" termocoppiaAssociata="1" canale="113" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="21" riga="10" idTermocoppia="0" idGruppo="49" termocoppiaAssociata="1" canale="3" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="62" termocoppiaAssociata="1" canale="16" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="63" termocoppiaAssociata="1" canale="36" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="64" termocoppiaAssociata="1" canale="56" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="65" termocoppiaAssociata="1" canale="76" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="66" termocoppiaAssociata="1" canale="96" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="21" riga="10" idTermocoppia="0" idGruppo="55" termocoppiaAssociata="1" canale="112" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="67" termocoppiaAssociata="1" canale="17" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="68" termocoppiaAssociata="1" canale="37" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="69" termocoppiaAssociata="1" canale="57" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="70" termocoppiaAssociata="1" canale="77" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="71" termocoppiaAssociata="1" canale="97" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="72" termocoppiaAssociata="1" canale="114" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="21" riga="12" idTermocoppia="0" idGruppo="73" termocoppiaAssociata="1" canale="4" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="74" termocoppiaAssociata="1" canale="18" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="75" termocoppiaAssociata="1" canale="38" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="76" termocoppiaAssociata="1" canale="58" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="77" termocoppiaAssociata="1" canale="78" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="78" termocoppiaAssociata="1" canale="98" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="21" riga="12" idTermocoppia="0" idGruppo="79" termocoppiaAssociata="1" canale="115" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="80" termocoppiaAssociata="1" canale="19" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="81" termocoppiaAssociata="1" canale="39" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="82" termocoppiaAssociata="1" canale="59" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="83" termocoppiaAssociata="1" canale="79" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="84" termocoppiaAssociata="1" canale="99" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="85" termocoppiaAssociata="1" canale="116" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="21" riga="14" idTermocoppia="0" idGruppo="73" termocoppiaAssociata="1" canale="4" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="86" termocoppiaAssociata="1" canale="20" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="87" termocoppiaAssociata="1" canale="40" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="88" termocoppiaAssociata="1" canale="60" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="89" termocoppiaAssociata="1" canale="80" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="90" termocoppiaAssociata="1" canale="100" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="21" riga="14" idTermocoppia="0" idGruppo="79" termocoppiaAssociata="1" canale="115" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="91" termocoppiaAssociata="1" canale="21" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="92" termocoppiaAssociata="1" canale="41" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="93" termocoppiaAssociata="1" canale="61" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="94" termocoppiaAssociata="1" canale="81" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="95" termocoppiaAssociata="1" canale="101" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="96" termocoppiaAssociata="1" canale="117" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="21" riga="16" idTermocoppia="0" idGruppo="97" termocoppiaAssociata="1" canale="5" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="98" termocoppiaAssociata="1" canale="22" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="99" termocoppiaAssociata="1" canale="42" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="100" termocoppiaAssociata="1" canale="62" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="101" termocoppiaAssociata="1" canale="82" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="102" termocoppiaAssociata="1" canale="102" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="21" riga="16" idTermocoppia="0" idGruppo="103" termocoppiaAssociata="1" canale="118" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="104" termocoppiaAssociata="1" canale="23" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="105" termocoppiaAssociata="1" canale="43" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="106" termocoppiaAssociata="1" canale="63" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="107" termocoppiaAssociata="1" canale="83" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="108" termocoppiaAssociata="1" canale="103" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="109" termocoppiaAssociata="1" canale="119" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="21" riga="18" idTermocoppia="0" idGruppo="97" termocoppiaAssociata="1" canale="5" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="110" termocoppiaAssociata="1" canale="24" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="111" termocoppiaAssociata="1" canale="44" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="112" termocoppiaAssociata="1" canale="64" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="113" termocoppiaAssociata="1" canale="84" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="114" termocoppiaAssociata="1" canale="104" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="21" riga="18" idTermocoppia="0" idGruppo="103" termocoppiaAssociata="1" canale="118" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="115" termocoppiaAssociata="1" canale="25" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="116" termocoppiaAssociata="1" canale="45" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="117" termocoppiaAssociata="1" canale="65" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="118" termocoppiaAssociata="1" canale="85" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="119" termocoppiaAssociata="1" canale="105" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="120" termocoppiaAssociata="1" canale="120" fast="false" softDelay="140" sfasamImp="false" />
</riflettore>
<riflettore tipo="1" dimensionScale="13000" slimScale="2" offsetTc="0">
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="1" termocoppiaAssociata="2" canale="134" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="2" termocoppiaAssociata="2" canale="154" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="3" termocoppiaAssociata="2" canale="174" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="4" termocoppiaAssociata="2" canale="194" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="5" termocoppiaAssociata="2" canale="214" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="0" idTermocoppia="0" idGruppo="6" termocoppiaAssociata="2" canale="234" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="21" riga="1" idTermocoppia="0" idGruppo="7" termocoppiaAssociata="2" canale="129" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="8" termocoppiaAssociata="2" canale="135" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="9" termocoppiaAssociata="2" canale="155" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="10" termocoppiaAssociata="2" canale="175" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="11" termocoppiaAssociata="2" canale="195" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="1" idTermocoppia="0" idGruppo="12" termocoppiaAssociata="2" canale="215" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="21" riga="1" idTermocoppia="0" idGruppo="13" termocoppiaAssociata="2" canale="235" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="14" termocoppiaAssociata="2" canale="136" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="15" termocoppiaAssociata="2" canale="156" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="16" termocoppiaAssociata="2" canale="176" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="17" termocoppiaAssociata="2" canale="196" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="18" termocoppiaAssociata="2" canale="216" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="2" idTermocoppia="0" idGruppo="19" termocoppiaAssociata="2" canale="236" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="21" riga="3" idTermocoppia="0" idGruppo="7" termocoppiaAssociata="2" canale="129" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="20" termocoppiaAssociata="2" canale="137" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="21" termocoppiaAssociata="2" canale="157" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="22" termocoppiaAssociata="2" canale="177" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="23" termocoppiaAssociata="2" canale="197" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="3" idTermocoppia="0" idGruppo="24" termocoppiaAssociata="2" canale="217" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="21" riga="3" idTermocoppia="0" idGruppo="13" termocoppiaAssociata="2" canale="235" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="25" termocoppiaAssociata="2" canale="138" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="26" termocoppiaAssociata="2" canale="158" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="27" termocoppiaAssociata="2" canale="178" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="28" termocoppiaAssociata="2" canale="198" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="29" termocoppiaAssociata="2" canale="218" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="4" idTermocoppia="0" idGruppo="30" termocoppiaAssociata="2" canale="237" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="21" riga="5" idTermocoppia="0" idGruppo="31" termocoppiaAssociata="2" canale="130" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="32" termocoppiaAssociata="2" canale="139" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="33" termocoppiaAssociata="2" canale="159" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="34" termocoppiaAssociata="2" canale="179" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="35" termocoppiaAssociata="2" canale="199" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="5" idTermocoppia="0" idGruppo="36" termocoppiaAssociata="2" canale="219" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="21" riga="5" idTermocoppia="0" idGruppo="37" termocoppiaAssociata="2" canale="238" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="38" termocoppiaAssociata="2" canale="140" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="39" termocoppiaAssociata="2" canale="160" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="40" termocoppiaAssociata="2" canale="180" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="41" termocoppiaAssociata="2" canale="200" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="42" termocoppiaAssociata="2" canale="220" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="6" idTermocoppia="0" idGruppo="43" termocoppiaAssociata="2" canale="239" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="21" riga="7" idTermocoppia="0" idGruppo="31" termocoppiaAssociata="2" canale="130" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="44" termocoppiaAssociata="2" canale="141" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="45" termocoppiaAssociata="2" canale="161" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="46" termocoppiaAssociata="2" canale="181" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="47" termocoppiaAssociata="2" canale="201" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="7" idTermocoppia="0" idGruppo="48" termocoppiaAssociata="2" canale="221" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="21" riga="7" idTermocoppia="0" idGruppo="37" termocoppiaAssociata="2" canale="238" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="49" termocoppiaAssociata="2" canale="142" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="50" termocoppiaAssociata="2" canale="162" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="51" termocoppiaAssociata="2" canale="182" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="52" termocoppiaAssociata="2" canale="202" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="53" termocoppiaAssociata="2" canale="222" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="8" idTermocoppia="0" idGruppo="54" termocoppiaAssociata="2" canale="240" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="21" riga="9" idTermocoppia="0" idGruppo="55" termocoppiaAssociata="2" canale="131" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="56" termocoppiaAssociata="2" canale="143" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="57" termocoppiaAssociata="2" canale="163" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="58" termocoppiaAssociata="2" canale="183" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="59" termocoppiaAssociata="2" canale="203" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="9" idTermocoppia="0" idGruppo="60" termocoppiaAssociata="2" canale="223" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="21" riga="9" idTermocoppia="0" idGruppo="61" termocoppiaAssociata="2" canale="241" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="62" termocoppiaAssociata="2" canale="144" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="63" termocoppiaAssociata="2" canale="164" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="64" termocoppiaAssociata="2" canale="184" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="65" termocoppiaAssociata="2" canale="204" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="66" termocoppiaAssociata="2" canale="224" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="10" idTermocoppia="0" idGruppo="67" termocoppiaAssociata="2" canale="242" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="21" riga="11" idTermocoppia="0" idGruppo="55" termocoppiaAssociata="2" canale="131" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="68" termocoppiaAssociata="2" canale="145" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="69" termocoppiaAssociata="2" canale="165" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="70" termocoppiaAssociata="2" canale="185" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="71" termocoppiaAssociata="2" canale="205" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="11" idTermocoppia="0" idGruppo="72" termocoppiaAssociata="2" canale="225" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="21" riga="11" idTermocoppia="0" idGruppo="61" termocoppiaAssociata="2" canale="241" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="73" termocoppiaAssociata="2" canale="146" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="74" termocoppiaAssociata="2" canale="166" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="75" termocoppiaAssociata="2" canale="186" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="76" termocoppiaAssociata="2" canale="206" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="77" termocoppiaAssociata="2" canale="226" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="12" idTermocoppia="0" idGruppo="78" termocoppiaAssociata="2" canale="243" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="21" riga="13" idTermocoppia="0" idGruppo="79" termocoppiaAssociata="2" canale="132" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="80" termocoppiaAssociata="2" canale="147" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="81" termocoppiaAssociata="2" canale="167" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="82" termocoppiaAssociata="2" canale="187" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="83" termocoppiaAssociata="2" canale="207" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="13" idTermocoppia="0" idGruppo="84" termocoppiaAssociata="2" canale="227" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="21" riga="13" idTermocoppia="0" idGruppo="85" termocoppiaAssociata="2" canale="244" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="86" termocoppiaAssociata="2" canale="148" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="87" termocoppiaAssociata="2" canale="168" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="88" termocoppiaAssociata="2" canale="188" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="89" termocoppiaAssociata="2" canale="208" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="90" termocoppiaAssociata="2" canale="228" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="14" idTermocoppia="0" idGruppo="91" termocoppiaAssociata="2" canale="245" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="21" riga="15" idTermocoppia="0" idGruppo="79" termocoppiaAssociata="2" canale="132" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="92" termocoppiaAssociata="2" canale="149" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="93" termocoppiaAssociata="2" canale="169" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="94" termocoppiaAssociata="2" canale="189" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="95" termocoppiaAssociata="2" canale="209" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="15" idTermocoppia="0" idGruppo="96" termocoppiaAssociata="2" canale="229" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="21" riga="15" idTermocoppia="0" idGruppo="85" termocoppiaAssociata="2" canale="244" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="97" termocoppiaAssociata="2" canale="150" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="98" termocoppiaAssociata="2" canale="170" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="99" termocoppiaAssociata="2" canale="190" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="100" termocoppiaAssociata="2" canale="210" fast="false" softDelay="20" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="101" termocoppiaAssociata="2" canale="230" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="18" riga="16" idTermocoppia="0" idGruppo="102" termocoppiaAssociata="2" canale="246" fast="false" softDelay="100" sfasamImp="false" />
<resistenza tipo="21" riga="17" idTermocoppia="0" idGruppo="103" termocoppiaAssociata="2" canale="133" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="104" termocoppiaAssociata="2" canale="151" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="105" termocoppiaAssociata="2" canale="171" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="106" termocoppiaAssociata="2" canale="191" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="107" termocoppiaAssociata="2" canale="211" fast="false" softDelay="40" sfasamImp="true" />
<resistenza tipo="18" riga="17" idTermocoppia="0" idGruppo="108" termocoppiaAssociata="2" canale="231" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="21" riga="17" idTermocoppia="0" idGruppo="109" termocoppiaAssociata="2" canale="247" fast="false" softDelay="120" sfasamImp="true" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="110" termocoppiaAssociata="2" canale="152" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="111" termocoppiaAssociata="2" canale="172" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="112" termocoppiaAssociata="2" canale="192" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="113" termocoppiaAssociata="2" canale="212" fast="false" softDelay="60" sfasamImp="false" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="114" termocoppiaAssociata="2" canale="232" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="18" riga="18" idTermocoppia="0" idGruppo="115" termocoppiaAssociata="2" canale="248" fast="false" softDelay="140" sfasamImp="false" />
<resistenza tipo="21" riga="19" idTermocoppia="0" idGruppo="103" termocoppiaAssociata="2" canale="133" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="116" termocoppiaAssociata="2" canale="153" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="117" termocoppiaAssociata="2" canale="173" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="118" termocoppiaAssociata="2" canale="193" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="119" termocoppiaAssociata="2" canale="213" fast="false" softDelay="80" sfasamImp="true" />
<resistenza tipo="18" riga="19" idTermocoppia="0" idGruppo="120" termocoppiaAssociata="2" canale="233" fast="false" softDelay="0" sfasamImp="true" />
<resistenza tipo="21" riga="19" idTermocoppia="0" idGruppo="109" termocoppiaAssociata="2" canale="247" fast="false" softDelay="120" sfasamImp="true" />
</riflettore>
<riferimenti corrente="110" potenza="500" modello="Quarzo 500" dimensione="2">1</riferimenti>
<riferimenti corrente="0" potenza="250" modello="Quarzo 250" dimensione="1">2</riferimenti>
<riferimenti corrente="138" potenza="600" modello="HTS 600" dimensione="2">3</riferimenti>
<riferimenti corrente="105" potenza="400" modello="HTS 400" dimensione="2">4</riferimenti>
<riferimenti corrente="76" potenza="300" modello="HTS 300" dimensione="1">5</riferimenti>
<riferimenti corrente="139" potenza="650" modello="FSR 650" dimensione="2">6</riferimenti>
<riferimenti corrente="105" potenza="400" modello="FSR 400" dimensione="2">7</riferimenti>
<riferimenti corrente="49" potenza="325" modello="FSR 325" dimensione="1">8</riferimenti>
<riferimenti corrente="168" potenza="400" modello="HTS 400 coppia" dimensione="2">9</riferimenti>
<riferimenti corrente="168" potenza="400" modello="FSR 400 coppia" dimensione="2">10</riferimenti>
<riferimenti corrente="135" potenza="250" modello="Quarzo 250 coppia" dimensione="2">11</riferimenti>
<riferimenti corrente="42" potenza="200" modello="HTS 200" dimensione="1">12</riferimenti>
<riferimenti corrente="105" potenza="200" modello="HTS 200 coppia" dimensione="1">13</riferimenti>
<riferimenti corrente="42" potenza="200" modello="FSR 200" dimensione="1">14</riferimenti>
<riferimenti corrente="104" potenza="200" modello="FSR 200 coppia" dimensione="1">15</riferimenti>
<riferimenti corrente="167" potenza="400" modello="Quarzo 400 coppia" dimensione="2">16</riferimenti>
<riferimenti corrente="104" potenza="400" modello="Quarzo 400" dimensione="1">17</riferimenti>
<riferimenti corrente="169" potenza="800" modello="Alogena 800" dimensione="2" correnteMinima="4" tolleranzaCorrente="10" tolleranzaLettureON="15" softStart="2" filtCycle="2" PctMin="153">18</riferimenti>
<riferimenti corrente="232" potenza="800" modello="Alogena 800 coppia" dimensione="2" correnteMinima="4" tolleranzaCorrente="10" tolleranzaLettureON="10" softStart="2" filtCycle="2" PctMin="153">19</riferimenti>
<riferimenti corrente="78" potenza="300" modello="Alogena 300" dimensione="1" correnteMinima="4" tolleranzaCorrente="10" tolleranzaLettureON="10" softStart="2" filtCycle="2" PctMin="153">20</riferimenti>
<riferimenti corrente="141" potenza="300" modello="Alogena 300 coppia" dimensione="1" correnteMinima="4" tolleranzaCorrente="10" tolleranzaLettureON="10" softStart="2" filtCycle="2" PctMin="153">21</riferimenti>
<riferimenti corrente="141" potenza="700" modello="Quarzo 700" dimensione="2">22</riferimenti>
<riferimenti corrente="173" potenza="500" modello="Quarzo 500 coppia" dimensione="2">23</riferimenti>
<riferimenti corrente="205" potenza="300" modello="Alogena 300 gruppo da 5" dimensione="1" correnteMinima="4" tolleranzaCorrente="10" tolleranzaLettureON="10" softStart="2" filtCycle="2" PctMin="153">24</riferimenti>
<riferimenti corrente="177" potenza="400" modello="Quarzo 400 gruppo da 3" dimensione="2">25</riferimenti>
<riferimenti corrente="206" potenza="400" modello="Quarzo 400 gruppo da 4" dimensione="2">26</riferimenti>
<riferimenti corrente="201" potenza="400" modello="HTS 400 gruppo da 3" dimensione="2">27</riferimenti>
<riferimenti corrente="171" potenza="300" modello="Alogena 300 gruppo da 3" dimensione="1" correnteMinima="4" tolleranzaCorrente="10" tolleranzaLettureON="10" softStart="2" filtCycle="2" PctMin="153">28</riferimenti>
<riferimenti corrente="177" potenza="300" modello="Alogena 300 gruppo da 4" dimensione="1">29</riferimenti>
<riferimenti corrente="78" potenza="350" modello="Quarzo 350" dimensione="1">30</riferimenti>
<riferimenti corrente="100" potenza="700" modello="Quarzo 700 coppia" dimensione="2">31</riferimenti>
<riferimenti corrente="100" potenza="350" modello="Quarzo 350 coppia" dimensione="1">32</riferimenti>
<riferimenti corrente="100" potenza="250" modello="Quarzo 250 coppia" dimensione="1">33</riferimenti>
<riferimenti corrente="100" potenza="400" modello="HTS 400" dimensione="1">34</riferimenti>
<riferimenti corrente="213" potenza="500" modello="Quarzo 500 gruppo da 4" dimensione="2">35</riferimenti>
<riferimenti corrente="100" potenza="700" modello="Alogena 700" dimensione="2" correnteMinima="4" tolleranzaCorrente="10" tolleranzaLettureON="10" softStart="2" filtCycle="2" PctMin="153">36</riferimenti>
<riferimenti corrente="104" potenza="400" modello="Quarzo 400" dimensione="2">37</riferimenti>
<corrente valore="64" sens1="144" sens2="190" sens3="265" sens4="380" sens5="533" sens6="800" sens7="1187" sens8="1700">1</corrente>
<corrente valore="72" sens1="150" sens2="200" sens3="280" sens4="400" sens5="566" sens6="845" sens7="1250" sens8="1800">2</corrente>
<corrente valore="80" sens1="156" sens2="210" sens3="295" sens4="420" sens5="600" sens6="890" sens7="1312" sens8="1900">3</corrente>
<corrente valore="88" sens1="162" sens2="220" sens3="310" sens4="440" sens5="633" sens6="935" sens7="1375" sens8="2000">4</corrente>
<corrente valore="96" sens1="168" sens2="230" sens3="325" sens4="460" sens5="666" sens6="980" sens7="1437" sens8="2100">5</corrente>
<corrente valore="104" sens1="175" sens2="240" sens3="340" sens4="480" sens5="700" sens6="1025" sens7="1500" sens8="2200">6</corrente>
<corrente valore="112" sens1="181" sens2="250" sens3="355" sens4="500" sens5="733" sens6="1070" sens7="1562" sens8="2300">7</corrente>
<corrente valore="120" sens1="187" sens2="260" sens3="370" sens4="520" sens5="766" sens6="1115" sens7="1625" sens8="2400">8</corrente>
<corrente valore="128" sens1="193" sens2="270" sens3="385" sens4="540" sens5="800" sens6="1160" sens7="1687" sens8="2500">9</corrente>
<corrente valore="136" sens1="200" sens2="280" sens3="400" sens4="560" sens5="833" sens6="1205" sens7="1750" sens8="2600">10</corrente>
<corrente valore="144" sens1="206" sens2="290" sens3="415" sens4="580" sens5="866" sens6="1250" sens7="1812" sens8="2700">11</corrente>
<corrente valore="152" sens1="212" sens2="325" sens3="430" sens4="600" sens5="899" sens6="1295" sens7="1874" sens8="2800">12</corrente>
</riscaldo>
@@ -0,0 +1,304 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2006 U (http://www.altova.com) by fg (nn) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:complexType name="resistenzaType">
<xs:attribute name="tipo" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Id tipo resistenza. Corrisponde al'id riferimento</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="riga" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Numero riga di appartenenza</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="idTermocoppia" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Id della termocoppia installata. 0 = no termocoppia, altrimenti 1...</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="termocoppiaAssociata" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Id della termocoppia di riferimento</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="idGruppo" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Id del gruppo di appartenenza</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="canale" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Numero del canale assoluto</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="fast" type="xs:boolean" use="required">
<xs:annotation>
<xs:documentation>TRUE = duty cycle nuovo, altrimenti FALSE</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="leftConstraint" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Spazio da aggiungere prima della resistenza [pix]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="rightConstraint" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Spazio da aggiungere dopo la resistenza [pix]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sfasamImp" type="xs:boolean" use="optional">
<xs:annotation>
<xs:documentation>Sfasamento per pilotaggio a impulsi:
possibilità di far lavorare alcuni canali sfasati rispetto agli altri, in modo da avere un assorbimento istantaneo il più basso possibile.
Default=FALSE
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="softDelay" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Ritardo per la partenza del soft-start ad impulsi per ogni singolo canale senza che questo abbia necessariamente finito la rampa
Default=0
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="riflettoreType">
<xs:sequence>
<xs:element name="resistenza" maxOccurs="unbounded">
<xs:complexType>
<xs:complexContent>
<xs:extension base="resistenzaType"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="riferimentoType" mixed="true">
<xs:annotation>
<xs:documentation>Id tipo resistenza</xs:documentation>
</xs:annotation>
<xs:attribute name="corrente" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Corrente riferimento specifico per il tipo resistenza</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="potenza" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Potenza nominale della resistenza espressa in Watt</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="modello" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Marca e modello resistenza</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="dimensione" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>1=250mm 2=125mm</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="correnteMinima" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Soglia bassa sotto cui considerare l'assorbimento un allarme</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="tolleranzaCorrente" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Usata in collaudo. Esprime la semiampiezza dell'intorno di corrente di lettura entro cui l'assorbimento è considerato coretto</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="tolleranzaLettureON" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Usata in lavoro. Esprime il numero di letture non buone oltre cui considerare allarme</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="softStart" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Impostazioni softstart.
Bit0-4: definiscono la velocità del softstart. Il valore indica il numero di ripetizioni del singolo step della rampa. Più il valore è piccolo maggiore sarà la velocità del softstart. [default 3].
Bit5: se = 0 il softstart lavora con tabella fissa (solo 50hZ), se = 1 il softstart lavora con i valori WaveMax e IntervalWidth, anche con frequenze diverse da 50hZ.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="filtCycle" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Numero di letture dell'allarme oltre cui considerare vero l'allarme</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SoftLim" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Limite di percentuale per soft start
Default=100
Esempio: se pct target = 50% e SoftLim=35%, viene effettuato il soft start fino al 35% poi si salta alla pct target di 50%
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="PctMin" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Percentuale minima per duty a impulsi
Default=0
Esempio: se PctMin=40% per pct target da 0-39% viene usato il pilataggio a parzializzazione di fase (alogeno) da 40% a 100% viene usato il pilotaggio a impulsi (quarzo)
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="correnteType" mixed="true">
<xs:annotation>
<xs:documentation>Record di configurazione correnti per tipo resistenza</xs:documentation>
</xs:annotation>
<xs:attribute name="valore" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Boh!!!</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sens1" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Sensibilità [W]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sens2" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Sensibilità [W]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sens3" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Sensibilità [W]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sens4" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Sensibilità [W]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sens5" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Sensibilità [W]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sens6" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Sensibilità [W]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sens7" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Sensibilità [W]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sens8" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Sensibilità [W]</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:element name="riscaldo">
<xs:annotation>
<xs:documentation>Configurazione sistema di riscaldo NEW_Risk2007</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="riflettore" maxOccurs="unbounded">
<xs:complexType>
<xs:complexContent>
<xs:extension base="riflettoreType">
<xs:attribute name="tipo" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>0 = riscaldo superiore, 1 = riscaldo inferiore, 2 = preriscaldo sup., 3 = preriscaldo inf.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="dimensionScale" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Fattore di scala per disegnare il riscaldo [TwinPix]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="slimScale" type="xs:double" use="optional">
<xs:annotation>
<xs:documentation>Fattore di proporzione fra larghezza e altezza [larghezza/altezza]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="offsetTc" type="xs:integer">
<xs:annotation>
<xs:documentation>Offset di compensazione lettura termocoppia</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="rowOffset" type="xs:integer">
<xs:annotation>
<xs:documentation>Interasse fra le righe di resistenza [mm]</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="riferimenti" maxOccurs="unbounded">
<xs:complexType>
<xs:complexContent>
<xs:extension base="riferimentoType"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="corrente" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:complexContent>
<xs:extension base="correnteType"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="addrTc" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Indirizzo di memorizzazione termocoppie lato CPU: 4D5=R8TC8IO, D5=NEW_RISK2007</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="baudRate" type="xs:long" use="required">
<xs:annotation>
<xs:documentation>Velocità di trasmissione [baud] (9600,19200)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="comPort" type="xs:integer" use="required">
<xs:annotation>
<xs:documentation>Porta seriale per comunicazione con CPU riscaldo</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="gainTc" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Fattore di moltiplicazione della lettura della termocoppia: 0.5=R8TC8IO, 0.6=NEW_RISK2007</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="softStartParam" type="xs:boolean" use="optional">
<xs:annotation>
<xs:documentation>TRUE = utilizzo la parametrizzazione per il softStart, FALSE = utilizzo il softstart cablato nel firmware delle res8CH</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="waveMax" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Numero di semionde massime in un secondo (50hZ = 120, 60hZ = 140)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="intervalWidth" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Durata in tempo di 1/100 di semionda [microsec] (50hZ = 95, 60hZ = 82)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="comTimeout" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Durata timeout per spegnimento riscaldo in caso di mancanza di comunicazione con la CPU. Trascorso il timout serve rimandare un comando di ON alla CPU per la riaccensione del riscaldo. Indicando 0 la CPU ignora lo spegnimento automatico su assenza di comunicazione. [sec]</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="intervalWidthQuarzo" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Durata in tempo di 1/100 di semionda [microsec] per lampade al quarzo</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="regFramePeriodQuarzo" type="xs:integer" use="optional">
<xs:annotation>
<xs:documentation>Frequenza di invio dei frame di regolazione dalla cpu per lampade al quarzo</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
+6 -6
View File
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<serverConfig>
<ncConfig>
<ncVendor>DEMO</ncVendor> <!-- NO_NC/DEMO/FANUC/SIEMENS/OSAI -->
<showNcHMI>true</showNcHMI>
<ncIpAddress>localhost</ncIpAddress>
<ncPort>8080</ncPort>
<machineModel>Ares 37 OF</machineModel>
<ncVendor>S7NET</ncVendor> <!-- NO_NC/DEMO/FANUC/SIEMENS/OSAI/S7NET -->
<showNcHMI>false</showNcHMI>
<ncIpAddress>192.168.0.102</ncIpAddress>
<ncPort>102</ncPort>
<machineModel>Thermo 2020</machineModel>
<sharedPath>C:\PartPrg\</sharedPath>
<sharedName>//PARTPRG:/</sharedName>
<installationDate>01/01/2019</installationDate>
<installationDate>01/06/2020</installationDate>
<mgiOption>false</mgiOption>
<siemensKeyboardOption>false</siemensKeyboardOption>
<machineNumberHasLetters>false</machineNumberHasLetters>
@@ -1,78 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="serverConfig">
<xs:complexType>
<xs:all>
<xs:element name="ncConfig">
<xs:complexType>
<xs:element name="serverConfig">
<xs:complexType>
<xs:all>
<xs:element name="ncVendor" type="ncType" minOccurs='1' maxOccurs='1'/>
<xs:element name="showNcHMI" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
<xs:element name="ncIpAddress" minOccurs='1' maxOccurs='1'/>
<xs:element name="ncPort" type="xs:int" minOccurs='1' maxOccurs='1'/>
<xs:element name="machineModel" type="xs:string" minOccurs='1' maxOccurs='1'/>
<xs:element name="sharedPath" type="xs:string" minOccurs='1' maxOccurs='1'/>
<xs:element name="sharedName" type="xs:string" minOccurs='1' maxOccurs='1'/>
<xs:element name="installationDate" type="xs:string" minOccurs='1' maxOccurs='1'/>
<xs:element name="mgiOption" type="xs:boolean" minOccurs='1' maxOccurs='1'/>
<xs:element name="siemensKeyboardOption" type="xs:boolean" minOccurs='1' maxOccurs='1'/>
<xs:element name="machineNumberHasLetters" type="xs:boolean" minOccurs='1' maxOccurs='1'/>
<xs:element name="ncConfig">
<xs:complexType>
<xs:all>
<xs:element name="ncVendor" type="ncType" minOccurs='1' maxOccurs='1'/>
<xs:element name="showNcHMI" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
<xs:element name="ncIpAddress" minOccurs='1' maxOccurs='1'/>
<xs:element name="ncPort" type="xs:int" minOccurs='1' maxOccurs='1'/>
<xs:element name="machineModel" type="xs:string" minOccurs='1' maxOccurs='1'/>
<xs:element name="sharedPath" type="xs:string" minOccurs='1' maxOccurs='1'/>
<xs:element name="sharedName" type="xs:string" minOccurs='1' maxOccurs='1'/>
<xs:element name="installationDate" type="xs:string" minOccurs='1' maxOccurs='1'/>
<xs:element name="mgiOption" type="xs:boolean" minOccurs='1' maxOccurs='1'/>
<xs:element name="siemensKeyboardOption" type="xs:boolean" minOccurs='1' maxOccurs='1'/>
<xs:element name="machineNumberHasLetters" type="xs:boolean" minOccurs='1' maxOccurs='1'/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="softwareProdConfig">
<xs:complexType>
<xs:all>
<xs:element name="enabled" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
<xs:element name="path" type="xs:string" minOccurs='1' maxOccurs='1'/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="serverConfig">
<xs:complexType>
<xs:all>
<xs:element name="serverAddress" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="serverPort" type="xs:int" minOccurs='1' maxOccurs='1'/>
<xs:element name="language" type="xs:language" minOccurs='1' maxOccurs='1' default="en"/>
<xs:element name="enableDirectoryBrowsing" type="xs:boolean" default="false"/>
<xs:element name="databaseAddress" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="autoOpenCmsClient" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
<xs:element name="textEditorPath" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="MTCFolderPath" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="MTCApplicationName" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="maxAlarmsRows" type="xs:int" minOccurs="1" maxOccurs="1"/>
<xs:element name="alarmToDelete" type="xs:int" minOccurs="1" maxOccurs="1"/>
<xs:element name="CMSConnectReady" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="extSoftwares">
<xs:complexType>
<xs:sequence>
<xs:element name="software" minOccurs='0' maxOccurs='15'>
<xs:complexType>
<xs:all>
<xs:element name="path" minOccurs='1' maxOccurs='1'/>
<xs:element name="longName" minOccurs='1' maxOccurs='1'/>
<xs:element name="shortName" minOccurs='1' maxOccurs='1'/>
<xs:element name="arguments" minOccurs='1' maxOccurs='1'/>
<xs:element name="inMainMenuBar" minOccurs='1' maxOccurs='1'/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="softwareProdConfig">
<xs:complexType>
<xs:all>
<xs:element name="enabled" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
<xs:element name="path" type="xs:string" minOccurs='1' maxOccurs='1'/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="serverConfig">
<xs:complexType>
<xs:all>
<xs:element name="serverAddress" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="serverPort" type="xs:int" minOccurs='1' maxOccurs='1'/>
<xs:element name="language" type="xs:language" minOccurs='1' maxOccurs='1' default="en"/>
<xs:element name="enableDirectoryBrowsing" type="xs:boolean" default="false"/>
<xs:element name="databaseAddress" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="autoOpenCmsClient" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
<xs:element name="textEditorPath" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="MTCFolderPath" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="MTCApplicationName" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="maxAlarmsRows" type="xs:int" minOccurs="1" maxOccurs="1"/>
<xs:element name="alarmToDelete" type="xs:int" minOccurs="1" maxOccurs="1"/>
<xs:element name="CMSConnectReady" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="extSoftwares">
<xs:complexType>
<xs:sequence>
<xs:element name="software" minOccurs='0' maxOccurs='15'>
<xs:complexType>
<xs:all>
<xs:element name="path" minOccurs='1' maxOccurs='1'/>
<xs:element name="longName" minOccurs='1' maxOccurs='1'/>
<xs:element name="shortName" minOccurs='1' maxOccurs='1'/>
<xs:element name="arguments" minOccurs='1' maxOccurs='1'/>
<xs:element name="inMainMenuBar" minOccurs='1' maxOccurs='1'/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:complexType>
</xs:element>
<xs:simpleType name="ncType" final="restriction" >
<xs:restriction base="xs:string">
<xs:enumeration value="DEMO" />
<xs:enumeration value="OSAI" />
<xs:enumeration value="FANUC" />
<xs:enumeration value="SIEMENS" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ncType" final="restriction" >
<xs:restriction base="xs:string">
<xs:enumeration value="DEMO" />
<xs:enumeration value="OSAI" />
<xs:enumeration value="FANUC" />
<xs:enumeration value="SIEMENS" />
<xs:enumeration value="S7NET" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<gauges>
<parameter>
<category>LIVE</category>
<name>timeAdv</name>
<label>live_timeAdv</label>
<um>s</um>
<scaleFactor>1000</scaleFactor>
<numDec>1</numDec>
<minVal>0</minVal>
<maxVal>3600000</maxVal>
</parameter>
<parameter>
<category>GAUGE</category>
<name>power</name>
<label>gauge_potenza</label>
<um>kWatt</um>
<scaleFactor>1000</scaleFactor>
<numDec>1</numDec>
<minVal>0</minVal>
<maxVal>2000000</maxVal>
</parameter>
<parameter>
<category>GAUGE</category>
<name>vacuum</name>
<label>gauge_vuoto</label>
<um>Bar</um>
<scaleFactor>1000</scaleFactor>
<numDec>2</numDec>
<minVal>-1000</minVal>
<maxVal>0</maxVal>
</parameter>
<parameter>
<category>GAUGE</category>
<name>air</name>
<label>gauge_aria</label>
<um>Bar</um>
<scaleFactor>1000</scaleFactor>
<numDec>2</numDec>
<minVal>0</minVal>
<maxVal>10000</maxVal>
</parameter>
</gauges>
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="gauges">
<xs:complexType>
<xs:sequence>
<!-- Heads -->
<xs:element name="parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element name="category" type="param_type" />
<xs:element name="name" type="xs:string" />
<xs:element name="label" type="xs:string" />
<xs:element name="um" type="xs:string" />
<xs:element name="scaleFactor" type="xs:int" default="1"/>
<xs:element name="numDec" type="xs:int" default="0"/>
<xs:element name="minVal" type="xs:int" default="0"/>
<xs:element name="maxVal" type="xs:int" default="1000"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Head Type -->
<xs:simpleType name="param_type" final="restriction">
<xs:restriction base="xs:string">
<xs:enumeration value="GAUGE" />
<xs:enumeration value="LIVE" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
@@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Le informazioni generali relative a un assembly sono controllate dal seguente
@@ -0,0 +1 @@

+17 -4
View File
@@ -1,8 +1,8 @@
using Thermo.Active.Model.ConfigModels;
using System.Collections.Generic;
using Thermo.Active.Model.ConfigModels;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.Scada;
using System.Collections.Generic;
namespace Thermo.Active.Config
{
@@ -11,7 +11,7 @@ namespace Thermo.Active.Config
public static ServerConfigModel ServerStartupConfig;
public static NcConfigModel NcConfig;
public static List<ExtSoftwareModel> ExtSoftwaresConfig;
public static SoftwareProdConfigModel SoftwareProdConfig;
public static SoftwareProdConfigModel SoftwareProdConfig;
public static MachineModel MachineConfig;
public static List<MaintenanceConfigModel> MaintenancesConfig;
public static ContactModel CmsContactConfig;
@@ -32,6 +32,8 @@ namespace Thermo.Active.Config
public static List<NcSoftKeysModel> NcSoftKeysConfig;
public static List<AlarmsConfigModel> InitialAlarmsConfig;
public static List<HeadsConfigModel> HeadsConfig;
public static CmsConnectConfigModel CmsConnectConfig;
public static AreasConfigModel ProductionConfig;
@@ -42,7 +44,7 @@ namespace Thermo.Active.Config
public static AreasConfigModel ScadaConfig;
public static AreasConfigModel JobEditorConfig;
public static AreasConfigModel UsersConfig;
public static List<ScadaSchemaModel> ProductionScadaSchema = new List<ScadaSchemaModel>();
public static List<ScadaSchemaModel> ConfiguredScadaSchema = new List<ScadaSchemaModel>();
@@ -51,5 +53,16 @@ namespace Thermo.Active.Config
public static List<string> MacrosConfig;
public static string CMSMainProgramContent;
// Thermo
public static List<ThermoProdConfigModel> ThermoProdConfig;
public static List<RecipeConfigModel> RecipeConfig;
public static List<ModBlockConfigModel> ModBlockConfig;
public static List<RiskResistModel> RiskResistConfig;
public static List<RiskChannelModel> RiskChannelConfig;
public static List<RiskBoardModel> RiskBoardConfig;
}
}
+264 -44
View File
@@ -1,6 +1,4 @@
using Thermo.Active.Model.ConfigModels;
using Thermo.Active.Model.DTOModels.Scada;
using Thermo.Active.Utils;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -12,15 +10,18 @@ using System.Xml;
using System.Xml.Linq;
using System.Xml.Schema;
using System.Xml.Serialization;
using Thermo.Active.Model.ConfigModels;
using Thermo.Active.Model.DTOModels.Scada;
using Thermo.Active.Utils;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Utils.SupportFunctions;
namespace Thermo.Active.Config
{
public static class ServerConfigController
{
private static string actualFileName;
private static string actualFileName;
public static void ReadStartupConfig()
{
@@ -33,15 +34,18 @@ namespace Thermo.Active.Config
ReadUserSoftKeysConfig();
ReadAlarmsConfig();
ReadHeadsConfig();
ReadThermoProdConfig();
ReadRecipeConfig();
ReadModBlockConfig();
ReadRiskConfig();
// ReadCMSConnectConfig();
ReadMacros();
ReadScadaFile();
//ReadMainProgram();
}
catch (XmlException ex)
{
ExceptionManager.ManageError(ERROR_LEVEL.FATAL,
"Error while reading file: " + ex.SourceUri +
"Error while reading file: " + ex.SourceUri +
"\n Error: " + ex.Message,
true
);
@@ -50,7 +54,7 @@ namespace Thermo.Active.Config
{
var message = ex.Message;
if (ex.InnerException != null)
message += "\n"+ex.InnerException.Message;
message += "\n" + ex.InnerException.Message;
ExceptionManager.ManageError(ERROR_LEVEL.FATAL, message, true);
}
}
@@ -59,7 +63,7 @@ namespace Thermo.Active.Config
{
// Create new instance
XmlSchemaSet readerSettings = new XmlSchemaSet();
// Add Schema from Assembly
Assembly myAssembly = Assembly.GetExecutingAssembly();
using (Stream schemaStream = myAssembly.GetManifestResourceStream(configSchemaFilePath))
@@ -69,11 +73,11 @@ namespace Thermo.Active.Config
readerSettings.Add(null, schemaReader);
}
}
actualFileName = configFilePath;
// Open file reader
XDocument xmlConfigFile = XDocument.Load((!isFullPath ? BASE_PATH + "\\": "") + configFilePath);
XDocument xmlConfigFile = XDocument.Load((!isFullPath ? BASE_PATH + "\\" : "") + configFilePath);
// Validate file
xmlConfigFile.Validate(readerSettings, ValidationHandler);
@@ -129,13 +133,13 @@ namespace Thermo.Active.Config
break;
case AREAS.SCADA_KEY:
SetAreaValue(ref ScadaConfig, element);
SetAreaValue(ref ScadaConfig, element);
break;
case AREAS.JOBEDITOR_KEY:
SetAreaValue(ref JobEditorConfig, element);
break;
case AREAS.USERS_KEY:
SetAreaValue(ref UsersConfig, element);
break;
@@ -157,20 +161,20 @@ namespace Thermo.Active.Config
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
);
}
}
}
public static bool CheckAreaStatus(string areaName)
public static bool CheckAreaStatus(string areaName)
{ // Get Area status ( enabled field) by name
switch (areaName)
{
@@ -205,7 +209,7 @@ namespace Thermo.Active.Config
}
private static void ReadScadaFile()
{
{
DirectoryInfo d = new DirectoryInfo(SCADA_DIRECTORY);
FileInfo[] files = d.GetFiles("*.xml");
@@ -217,7 +221,7 @@ namespace Thermo.Active.Config
StreamReader sr = new StreamReader(SCADA_DIRECTORY + file.Name);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ScadaSchemaModel));
ScadaSchemaModel schema = xmlSerializer.Deserialize(sr) as ScadaSchemaModel;
ScadaSchemaModel schema = xmlSerializer.Deserialize(sr) as ScadaSchemaModel;
// Setup incremental ids
@@ -230,7 +234,8 @@ namespace Thermo.Active.Config
{
Id = i++,
Buttons = x.Buttons.Select(y => { y.Id = i++; return y; }).ToArray(),
Images = x.Images.Select(y => {
Images = x.Images.Select(y =>
{
y.Id = i++;
y.Name = GetImageBase64String(SCADA_DIRECTORY + name, y.Name);
return y;
@@ -255,8 +260,6 @@ namespace Thermo.Active.Config
public static void ReadServerConfig()
{
//CalculateHash(SERVER_CONFIG_PATH);
// Get server file handler
XDocument xmlConfigFile = GetXmlHandlerWithValidator(SERVER_CONFIG_SCHEMA_PATH, SERVER_CONFIG_PATH);
@@ -276,7 +279,7 @@ namespace Thermo.Active.Config
InstallationDate = x.Element("installationDate").Value,
MgiOption = Convert.ToBoolean(x.Element("mgiOption").Value),
SiemensKeyboardOption = Convert.ToBoolean(x.Element("siemensKeyboardOption").Value),
MachineNumberHasLetters = Convert.ToBoolean(x.Element("machineNumberHasLetters").Value)
MachineNumberHasLetters = Convert.ToBoolean(x.Element("machineNumberHasLetters").Value)
}).FirstOrDefault();
// Read Prod Software Config with LINQ
@@ -285,9 +288,9 @@ namespace Thermo.Active.Config
.Descendants(PROD_SFT_CONFIG_KEY)
.Select(x => new SoftwareProdConfigModel()
{
Enabled = Convert.ToBoolean(x.Element("enabled").Value),
Enabled = Convert.ToBoolean(x.Element("enabled").Value),
Path = x.Element("path").Value
}).FirstOrDefault();
}).FirstOrDefault();
// Read server config with LINQ and save into static config
ServerStartupConfig = xmlConfigFile
@@ -301,7 +304,7 @@ namespace Thermo.Active.Config
EnableDirectoryBrowsing = Convert.ToBoolean(x.Element("enableDirectoryBrowsing").Value),
DatabaseAddress = x.Element("databaseAddress").Value,
AutoOpenCmsClient = Convert.ToBoolean(x.Element("autoOpenCmsClient").Value),
TextEditorPath = x.Element("textEditorPath").Value,
TextEditorPath = x.Element("textEditorPath").Value,
MTCFolderPath = x.Element("MTCFolderPath").Value,
MTCApplicationName = x.Element("MTCApplicationName").Value,
MaxAlarmsRows = Convert.ToInt32(x.Element("maxAlarmsRows").Value),
@@ -344,7 +347,7 @@ namespace Thermo.Active.Config
XDocument xmlConfigFile = GetXmlHandlerWithValidator(MAINTENANCES_CONFIG_SCHEMA_PATH, MAINTENANCES_CONFIG_PATH);
ReadAssistanceConfig();
MaintenancesConfig = xmlConfigFile
.Descendants("maintenances")
.Elements("maintenance")
@@ -373,11 +376,11 @@ namespace Thermo.Active.Config
XDocument xmlConfigFile = GetXmlHandlerWithValidator(MAINTENANCES_CONFIG_SCHEMA_PATH, MAINTENANCES_CONFIG_PATH);
ReadAssistanceConfigFromXml(
xmlConfigFile.Root.Descendants("cmsContacts").FirstOrDefault(),
out CmsContactConfig,
out CmsAuxContact1,
out CmsContactConfig,
out CmsAuxContact1,
out CmsAuxContact2
);
xmlConfigFile = GetXmlHandlerWithValidator(MAINTENANCES_CONFIG_SCHEMA_PATH, MAINTENANCES_CONFIG_PATH);
ReadAssistanceConfigFromXml(
xmlConfigFile.Root.Descendants("scmContacts").FirstOrDefault(),
@@ -544,7 +547,7 @@ namespace Thermo.Active.Config
{
AlarmId = Convert.ToInt32(x.Element("alarmId").Value),
PlcId = Convert.ToInt32(x.Element("plcId").Value),
RestoreIsActive = Convert.ToBoolean(x.Element("restoreIsActive").Value)
RestoreIsActive = Convert.ToBoolean(x.Element("restoreIsActive").Value)
})
.ToList();
}
@@ -571,7 +574,234 @@ namespace Thermo.Active.Config
})
.ToList();
}
/// <summary>
/// Recipe Config setup from file
/// </summary>
private static void ReadRecipeConfig()
{
XDocument xmlConfigFile = GetXmlHandlerWithValidator(RECIPE_CONFIG_SCHEMA_PATH, RECIPE_CONFIG_PATH);
// Read Recipe config from XML file
RecipeConfig = xmlConfigFile
.Root
.Elements()
.Select(x => new RecipeConfigModel()
{
Id = Convert.ToInt16(x.Element("id").Value),
Category = GetTActParamType(x.Element("category").Value),
SubCategory_1 = x.Element("subCategory_1").Value,
SubCategory_2 = x.Element("subCategory_2").Value,
Name = x.Element("name").Value,
Description = x.Element("description").Value,
Format = x.Element("format").Value,
ScaleFactor = Convert.ToInt16(x.Element("scaleFactor").Value),
NumDec = Convert.ToInt16(x.Element("numDec").Value),
//EnumVal = new Dictionary<string, string>()
EnumVal = x.Element("enumList") != null ? x.Element("enumList").Elements().ToDictionary(
y => y.Element("value").Value,
y => new EnumDetail(y.Element("label").Value, y.Element("anim") != null ? y.Element("anim").Value : "")
) : new Dictionary<string, EnumDetail>()
})
.ToList();
}
/// <summary>
/// ThermoProd setup from file
/// </summary>
private static void ReadThermoProdConfig()
{
XDocument xmlConfigFile = GetXmlHandlerWithValidator(THERMO_PROD_SCHEMA_PATH, THERMO_PROD_PATH);
// Read Recipe config from XML file
ThermoProdConfig = xmlConfigFile
.Root
.Elements()
.Select(x => new ThermoProdConfigModel()
{
Category = GetTActProdCategory(x.Element("category").Value),
Name = x.Element("name").Value,
Label = x.Element("label").Value,
UM = x.Element("um").Value,
ScaleFactor = Convert.ToInt32(x.Element("scaleFactor").Value),
NumDec = Convert.ToInt32(x.Element("numDec").Value),
MinVal = Convert.ToInt32(x.Element("minVal").Value),
MaxVal = Convert.ToInt32(x.Element("maxVal").Value),
})
.ToList();
}
/// <summary>
/// Module config setup from file
/// </summary>
private static void ReadModBlockConfig()
{
XDocument xmlConfigFile = GetXmlHandlerWithValidator(MODBLOCK_CONFIG_SCHEMA_PATH, MODBLOCK_CONFIG_PATH);
// Read head config from XML file
ModBlockConfig = xmlConfigFile
.Root
.Elements()
.Select(x => new ModBlockConfigModel()
{
Id = Convert.ToInt16(x.Element("id").Value),
Label = x.Element("label").Value,
//LocalizedLabels = x.Element("localizedLabels").Elements().ToDictionary(
// y => y.Attribute("langKey").Value, y => y.Value
// ),
Type = GetTActMB_Type(x.Element("type").Value),
Section = GetTActMB_Section(x.Element("section").Value),
IdParam = Convert.ToInt16(x.Element("idParam").Value),
ShowDelay = Convert.ToBoolean(x.Element("showDelay").Value),
Priority = Convert.ToInt16(x.Element("priority").Value)
})
.ToList();
}
/// <summary>
/// Warmers config setup from file
/// </summary>
private static void ReadRiskConfig()
{
XDocument xmlConfigFile = GetXmlHandlerWithValidator(RISK_CONFIG_SCHEMA_PATH, RISK_CONFIG_PATH);
int i = 0;
List<RiskRiflettore> Riflettori = new List<RiskRiflettore>();
List<RiskResistenza> Resistenze = new List<RiskResistenza>();
List<RiskRiferimenti> Riferimenti = new List<RiskRiferimenti>();
// carico gli oggetti "nativi"
Riferimenti = xmlConfigFile
.Root
.Elements("riferimenti")
.Select(x => new RiskRiferimenti()
{
Id = Convert.ToInt16(x.Value),
Dimensione = Convert.ToInt16(x.Attribute("dimensione").Value),
Potenza = Convert.ToInt16(x.Attribute("potenza").Value),
Modello = x.Attribute("modello").Value
})
.ToList();
Riflettori = xmlConfigFile
.Root
.Elements("riflettore")
.Select(x => new RiskRiflettore()
{
Tipo = Convert.ToInt16(x.Attribute("tipo").Value),
Resistenze = x.Elements("resistenza")
.Select(y => new RiskResistenza()
{
Canale = Convert.ToInt16(y.Attribute("canale").Value),
Riga = Convert.ToInt16(y.Attribute("riga").Value),
Tipo = Convert.ToInt16(y.Attribute("tipo").Value)
}
)
.ToList()
})
.ToList();
// conversione da modelli RISK a modello Thermo...
int numCol = -1;
int ResistId = 0;
int oldRow = 0;
int currIdBoard = 0;
RiskBoardConfig = new List<RiskBoardModel>();
RiskResistConfig = new List<RiskResistModel>();
RiskChannelConfig = new List<RiskChannelModel>();
// inizializzo le 64 schede a 0 canali...
for (int idxBoard = 0; idxBoard < 64; idxBoard++)
{
RiskBoardConfig.Add(new RiskBoardModel()
{
IdBoard = idxBoard,
NumChannels = 0
});
}
// ciclo x calcolare i canali
foreach (var riflettore in Riflettori)
{
// ciclo sulle resistenze
foreach (var resistenza in riflettore.Resistenze)
{
// cerco la scheda dato il canale... 16 ch x ogni scheda
currIdBoard = (resistenza.Canale - 1) / 16;
// cerco se ho già la scheda
var boardFound = RiskBoardConfig.Find(item => item.IdBoard == currIdBoard);
if (boardFound == null)
{
RiskBoardConfig.Add(new RiskBoardModel()
{
IdBoard = currIdBoard,
NumChannels = 1
});
}
else
{
boardFound.NumChannels += 1;
}
// cerco se ho già il canale
var chanFound = RiskChannelConfig.Find(item => item.IdChannel == resistenza.Canale);
if (chanFound == null)
{
// cerco il TIPO...
var riferimento = Riferimenti.Find(x => x.Id == resistenza.Tipo);
if (riferimento != null)
{
RiskChannelConfig.Add(new RiskChannelModel()
{
IdChannel = resistenza.Canale,
IdReflector = riflettore.Tipo,
SetpointRecipe = 0,
SetpointThermo = 0,
MaxPower = riferimento.Potenza,
NumResist = 1,
CalcIchMin = riferimento.Modello.Contains("Quarzo")
});
}
else
{
chanFound.NumResist += 1;
}
}
}
}
// ciclo sui riflettori x recuperare le resistenze...
foreach (var riflettore in Riflettori)
{
// ciclo sulle resistente
foreach (var resistenza in riflettore.Resistenze)
{
if (oldRow != resistenza.Riga)
{
numCol = 0;
oldRow = resistenza.Riga;
}
else
{
numCol++;
}
// cerco il TIPO...
var riferimento = Riferimenti.Find(x => x.Id == resistenza.Tipo);
RiskResistConfig.Add(new RiskResistModel()
{
Id = ResistId++,
Row = resistenza.Riga,
Column = numCol,
IdChannel = resistenza.Canale,
Dimension = riferimento.Dimensione
}); ;
}
}
}
private static void ReadCMSConnectConfig()
{
@@ -603,14 +833,14 @@ namespace Thermo.Active.Config
Token = x.Element("token").Value
})
.FirstOrDefault();
if (DecodeCMSConnectGatewayLogin(tempGatewayConfigModel.Token, out _tempUSR, out _tempPSW))
{
tempGatewayConfigModel.Username = _tempUSR;
tempGatewayConfigModel.Password = _tempPSW;
}
else
throw new Exception("Error while reading \""+ CMS_CONNECT_CONFIG_PATH + "\": Gateway Token not valid");
throw new Exception("Error while reading \"" + CMS_CONNECT_CONFIG_PATH + "\": Gateway Token not valid");
CmsConnectConfig.Gateway = tempGatewayConfigModel;
}
@@ -627,16 +857,6 @@ namespace Thermo.Active.Config
.Select(x => x.Value)
.ToList();
}
public static void ReadMainProgram()
{
if (File.Exists(MAIN_PROGRAM_CONFIG_PATH))
{
CMSMainProgramContent = File.ReadAllText(MAIN_PROGRAM_CONFIG_PATH);
}
}
public static string CalculateHash(string filename)
{
using (var sha = SHA1.Create())
@@ -32,6 +32,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
@@ -55,6 +58,12 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ServerConfig.cs" />
<Compile Include="ServerConfigController.cs" />
<Content Include="Config\thermoProdConfig.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Recipes\.placeholder.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<EmbeddedResource Include="Report\Programs.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
@@ -69,12 +78,22 @@
<Content Include="Config\customMainProgram.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Config\moduleBlockConfig.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\recipeConfig.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\risk2007.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Config\userSoftKeyConfig.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<SubType>Designer</SubType>
</Content>
<EmbeddedResource Include="Config\userSoftKeyConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<Content Include="Config\areasConfig.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@@ -83,11 +102,13 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<SubType>Designer</SubType>
</Content>
<EmbeddedResource Include="Config\headsConfigValidator.xsd">
<EmbeddedResource Include="Config\recipeConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="Config\maintenancesConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<Content Include="Config\alarmsConfig.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@@ -102,12 +123,15 @@
</Content>
<EmbeddedResource Include="Config\serverConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="Config\alarmsConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="Config\ncSoftKeyConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
@@ -129,27 +153,61 @@
<ItemGroup>
<EmbeddedResource Include="Config\areasConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\macrosConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\scadaValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\cmsConnectConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\customerContactConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\headsConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\moduleBlockConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\risk2007Validator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Content Include="Config\Recipes\template.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<EmbeddedResource Include="Config\thermoProdConfigValidator.xsd">
<SubType>Designer</SubType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net462" />
</packages>
@@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Le informazioni generali relative a un assembly sono controllate dal seguente
+4 -3
View File
@@ -32,9 +32,6 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CMS_CORE_Library">
<HintPath>..\Libs\CMS_CORE_Library.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
@@ -63,6 +60,10 @@
<Compile Include="ThreadsSiemensHmi.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\cms_core_library\CMS_CORE_Library\CMS_CORE_Library.csproj">
<Project>{4abf8eef-2b23-483e-acdc-53214fe28681}</Project>
<Name>CMS_CORE_Library</Name>
</ProjectReference>
<ProjectReference Include="..\Thermo.Active.Config\Thermo.Active.Config.csproj">
<Project>{3f5c2483-fc87-43ef-92a8-66ff7d0e440f}</Project>
<Name>Thermo.Active.Config</Name>
+490 -191
View File
@@ -1,12 +1,4 @@
using CMS_CORE_Library.Models;
using Thermo.Active.Config;
using Thermo.Active.Core;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.AlarmModels;
using Thermo.Active.Model.DTOModels.Scada;
using Thermo.Active.NC;
using Thermo.Active.Utils;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -18,23 +10,36 @@ using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using TeamDev.SDK.MVVM;
using Thermo.Active.Core;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.AlarmModels;
using Thermo.Active.Model.DTOModels.Scada;
using Thermo.Active.Model.DTOModels.ThModules;
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.Utils;
using static CMS_CORE_Library.Models.DataStructures;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Utils.ExceptionManager;
using static Thermo.Active.Utils.ExceptionManager;
public static class ThreadsFunctions
public static class ThreadsFunctions
{
public static int recipeRtCounter = 0;
public static int modulesRtCounter = 0;
public static bool reconnectionIsRunning = false;
private static ConcurrentDictionary<string, long> Timers = new ConcurrentDictionary<string, long>();
private static ConcurrentDictionary<string, long> Counter = new ConcurrentDictionary<string, long>();
private static Thread ConnThread;
#region Functions
public static void ManageWatchdog()
public static void ManageWatchdog()
{
NcAdapter ncAdapter = new NcAdapter();
Stopwatch sw = new Stopwatch();
@@ -47,15 +52,10 @@ public static class ThreadsFunctions
while (true)
{
sw.Restart();
//if(errorCounter == MAX_NUM_OF_WATCHDOG_ERROR)
//{
//}
sw.Restart();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Manage watchdog
libraryError = ncAdapter.ManageWatchdog();
@@ -65,7 +65,7 @@ public static class ThreadsFunctions
errorCounter++;
}
else if (libraryError == NO_ERROR)
errorCounter = 0;
errorCounter = 0;
}
else
RestoreConnection();
@@ -85,6 +85,132 @@ public static class ThreadsFunctions
}
}
/// <summary>
/// Manage status/command words for actions
/// </summary>
public static void ManageStatusCommand()
{
NcAdapter ncAdapter = new NcAdapter();
Stopwatch sw = new Stopwatch();
try
{
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
while (true)
{
sw.Restart();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Manage status command
libraryError = ncAdapter.ManageStatusCommand();
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(250, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException ex)
{
ncAdapter.Dispose();
}
}
/// <summary>
/// Manage action for conf request
/// </summary>
public static void ManageConfRequest()
{
NcAdapter ncAdapter = new NcAdapter();
Stopwatch sw = new Stopwatch();
try
{
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
while (true)
{
sw.Restart();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Manage status command
libraryError = ncAdapter.ManageConfRequest();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(2000, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException ex)
{
ncAdapter.Dispose();
}
}
/// <summary>
/// Manage action for conf request
/// </summary>
public static void ManageProdUpdate()
{
NcAdapter ncAdapter = new NcAdapter();
Stopwatch sw = new Stopwatch();
try
{
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
while (true)
{
sw.Restart();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
//// Manage status command
//libraryError = ncAdapter.ManageProdUpdate();
//if (libraryError.errorCode != 0)
// ManageLibraryError(libraryError);
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(1000, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException ex)
{
ncAdapter.Dispose();
}
}
public static void ReadAlarms()
{
NcAdapter ncAdapter = new NcAdapter();
@@ -304,10 +430,13 @@ public static class ThreadsFunctions
// Send through signalR
MessageServices.Current.Publish(SEND_EXPIRED_MAINTENANCES_DATA, null, expiredMaintenances);
// 2020.06.18 commentata da indicazione di Lucio Maranta (NON dovrebbe servire ora)
#if false
//Manage Candies
libraryError = ncAdapter.ManageCandies();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
ManageLibraryError(libraryError);
#endif
}
else
RestoreConnection();
@@ -375,50 +504,6 @@ public static class ThreadsFunctions
}
}
public static void ReadHeadsData()
{
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.GetHeadsData(out List<DTOHeadModel> heads);
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
else
// Send through signalR
MessageServices.Current.Publish(SEND_HEADS_DATA, null, heads);
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadAxesNamesData()
{
NcAdapter ncAdapter = new NcAdapter();
@@ -507,99 +592,7 @@ public static class ThreadsFunctions
}
}
public static void ReadActiveProgramData()
{
NcFileAdapter ncAdapter = new NcFileAdapter();
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.GetActiveProgramInfo(out DTOActiveProgramDataModel active);
if (libraryError.IsError())
ManageLibraryError(libraryError);
else
// Send through signalR
MessageServices.Current.Publish(SEND_ACTIVE_PROGRAM_DATA, null, active);
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(400, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadPartProgramQueueData()
{
NcFileAdapter ncAdapter = new NcFileAdapter();
Stopwatch sw = new Stopwatch();
try
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
while (true)
{
sw.Restart();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Read data
libraryError = ncAdapter.UpdateQueue();
if (libraryError.IsError())
ManageLibraryError(libraryError);
libraryError = ncAdapter.GetSelectedProcessQueue(out List<DTOQueueModel> queue);
if (libraryError.IsError())
ManageLibraryError(libraryError);
MessageServices.Current.Publish(SEND_QUEUE_DATA, null, queue);
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadScadaData()
public static void ReadScadaData()
{
NcAdapter ncAdapter = new NcAdapter();
Stopwatch sw = new Stopwatch();
@@ -643,7 +636,313 @@ public static class ThreadsFunctions
ncAdapter.Dispose();
}
}
public static void ReadGaugeData()
{
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();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Get new data from PLC
libraryError = ncAdapter.ReadGaugeData(out Dictionary<string, DTOThermoProd> currentLiveProd);
if (libraryError.IsError())
ManageLibraryError(libraryError);
MessageServices.Current.Publish(SEND_THERMO_GAUGE_DATA, null, currentLiveProd);
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadProdInfoData()
{
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();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Get new data from PLC (and log if changed...)
libraryError = ncAdapter.ReadProdInfoData(out ThermoModels.ProdInfoModel prodInfoData);
if (libraryError.IsError())
ManageLibraryError(libraryError);
MessageServices.Current.Publish(SEND_THERMO_PROD_INFO_DATA, null, prodInfoData);
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadProdCycleData()
{
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();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Get new data from PLC
libraryError = ncAdapter.ReadProdCycleData(out ThermoModels.ProdCycleModel prodCycleData);
if (libraryError.IsError())
ManageLibraryError(libraryError);
MessageServices.Current.Publish(SEND_THERMO_PROD_CYCLE_DATA, null, prodCycleData);
}
else
RestoreConnection();
sw.Stop();
//Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadRecipeData()
{
NcAdapter ncAdapter = new NcAdapter();
Stopwatch sw = new Stopwatch();
try
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
while (true)
{
// ogni n counter leggo anche dati NON RT
recipeRtCounter--;
bool onlyRt = recipeRtCounter > 0;
//check reset...
recipeRtCounter = recipeRtCounter < 0 ? 4 : recipeRtCounter;
sw.Restart();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Get new data from PLC
libraryError = ncAdapter.ReadRecipeData(onlyRt, false, out Dictionary<string, DTORecipeParam> currRecipe);
if (libraryError.IsError())
ManageLibraryError(libraryError);
MessageServices.Current.Publish(SEND_THERMO_RECIPE_FULL, null, currRecipe);
// FIXME TODO verificare come ridurre chiamate
// ora gestisco la overview!
libraryError = ncAdapter.GetRecipeOverview(out Dictionary<RecipeSection, RecipeCatStatus> currOverview);
if (libraryError.IsError())
ManageLibraryError(libraryError);
MessageServices.Current.Publish(SEND_THERMO_RECIPE_OVERWIEW, null, currOverview);
}
else
RestoreConnection();
sw.Stop();
// Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadWarmersData()
{
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();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Get new data from PLC
libraryError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
ManageLibraryError(libraryError);
// pubblico
MessageServices.Current.Publish(SEND_THERMO_WARMERS_DATA, null, currWarmers);
}
else
RestoreConnection();
sw.Stop();
// Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(1800, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadAreaData()
{
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();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Get new data from PLC... info x area lastra... la % di X / Y
libraryError = ncAdapter.GetWarmMaterialArea(out Dictionary<string, double> currAreaPerc);
if (libraryError.IsError())
ManageLibraryError(libraryError);
// pubblico
MessageServices.Current.Publish(SEND_THERMO_AREA_DATA, null, currAreaPerc);
}
else
RestoreConnection();
sw.Stop();
// Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadModulesData()
{
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();
// Check if client is connected
if (ncAdapter.numericalControl.NC_IsConnected())
{
// Get new data from PLC
libraryError = ncAdapter.ReadModulesBlock(out Dictionary<int, DTOModulesBlock> currModules);
if (libraryError.IsError())
ManageLibraryError(libraryError);
MessageServices.Current.Publish(SEND_THERMO_MODULE_DATA, null, currModules);
}
else
RestoreConnection();
sw.Stop();
// Update thread timer
UpdateStat(MethodBase.GetCurrentMethod().Name, sw.ElapsedMilliseconds);
// Wait
Thread.Sleep(CalcSleepTime(250, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncAdapter.Dispose();
}
}
public static void ReadM154Data()
{
NcAdapter ncAdapter = new NcAdapter();
@@ -698,7 +997,7 @@ public static class ThreadsFunctions
foreach (M154DataModel m154 in data)
{
//if (CmsConnectConfig.Enabled)
if(ServerStartupConfig.CmsConnectReady)
if (ServerStartupConfig.CmsConnectReady)
{
if (m154.Parameters.Count() >= 2 && m154.Parameters[0] == "SOUR")
@@ -827,18 +1126,18 @@ public static class ThreadsFunctions
{
List<DTOLanguageModel> availableLanguages = LanguageController.GetLanguageListFromDirectory();
if (availableLanguages == null)
return ;
return;
ICollection<CultureInfo> cultureInfos = new List<CultureInfo>();
// Get nc available language
CmsError cmsError = ncAdapter.numericalControl.NC_GetAvailableLanguages(ref cultureInfos);
if (cmsError.IsError())
ManageLibraryError(cmsError);
CmsError libraryError = ncAdapter.numericalControl.NC_GetAvailableLanguages(ref cultureInfos);
if (libraryError.IsError())
ManageLibraryError(libraryError);
// Filter available language with
availableLanguages = availableLanguages.Where(x => cultureInfos.Any(y => y.TwoLetterISOLanguageName == x.IsoId)).ToList();
// Fill redis DB
int count = 1;
Dictionary<string, string> defAlarmsNamesEn = null;
@@ -847,10 +1146,10 @@ public static class ThreadsFunctions
{
Dictionary<string, string> alarmsNames = GetPlcAlarmsTranslations(lang.IsoId);
if(lang.IsoId.ToLower() == "en")
if (lang.IsoId.ToLower() == "en")
{
defAlarmsNamesEn = alarmsNames;
if(!RedisController.WriteAlarmsConfigEn(alarmsNames))
if (!RedisController.WriteAlarmsConfigEn(alarmsNames))
ManageError(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
}
else if (lang.IsoId.ToLower() == "it")
@@ -861,7 +1160,7 @@ public static class ThreadsFunctions
}
else
if (!RedisController.WriteAlarmsConfigCurr(alarmsNames))
ManageError(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
ManageError(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
if (count == 3)
break;
@@ -871,10 +1170,10 @@ public static class ThreadsFunctions
if (availableLanguages.Count < 3 && defAlarmsNamesEn != null)
if (!RedisController.WriteAlarmsConfigCurr(defAlarmsNamesEn))
ManageError(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
else if (availableLanguages.Count < 3 && defAlarmsNamesIt != null)
if (!RedisController.WriteAlarmsConfigCurr(defAlarmsNamesIt))
ManageError(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
else if (availableLanguages.Count < 3 && defAlarmsNamesIt != null)
if (!RedisController.WriteAlarmsConfigCurr(defAlarmsNamesIt))
ManageError(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
}
catch (ThreadAbortException)
@@ -890,18 +1189,18 @@ public static class ThreadsFunctions
private static void TryNcConnection()
{
// Stop all the NC threads
ThreadsHandler.Stop();
StatReset();
ThreadsHandler.Stop();
StatReset();
NcAdapter ncAdapter = new NcAdapter();
CmsError cmsError = NO_ERROR;
CmsError libraryError = NO_ERROR;
// Run loop until NC is connected
while (!ncAdapter.numericalControl.NC_IsConnected())
while (!ncAdapter.numericalControl.NC_IsConnected())
{
// Try reconnection
cmsError = ncAdapter.Connect();
if (cmsError.errorCode == CMS_ERROR_CODES.SIEMENS_ENVIRONMENT_NOT_FOUND || cmsError.errorCode == CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING || cmsError.errorCode == CMS_ERROR_CODES.OSAI_TT_FOLDER_NOT_FOUND)
ManageLibraryError(cmsError);
else if (cmsError.errorCode != CMS_ERROR_CODES.OK)
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();
}
@@ -912,7 +1211,7 @@ public static class ThreadsFunctions
Thread.Sleep(1000);
}
if (!cmsError.IsError())
if (!libraryError.IsError())
{
if (ServerStartupConfig.AutoOpenCmsClient)
StartCMSClient();
@@ -944,12 +1243,12 @@ public static class ThreadsFunctions
ConnThread.Abort();
}
public static void ManageLibraryError(CmsError cmsError)
public static void ManageLibraryError(CmsError libraryError)
{
switch (cmsError.errorCode)
switch (libraryError.errorCode)
{
case CMS_ERROR_CODES.NC_PROD_ERROR:
ManageError(ERROR_LEVEL.WARNING, cmsError.localizationKey);
ManageError(ERROR_LEVEL.WARNING, libraryError.localizationKey);
break;
case CMS_ERROR_CODES.NOT_CONNECTED:
@@ -959,7 +1258,7 @@ public static class ThreadsFunctions
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, cmsError.localizationKey);
ManageError(ERROR_LEVEL.FATAL, libraryError.localizationKey);
break;
case CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING:
@@ -967,15 +1266,15 @@ public static class ThreadsFunctions
break;
case CMS_ERROR_CODES.SELECTED_PROCESS:
ManageError(ERROR_LEVEL.WARNING, cmsError.localizationKey);
ManageError(ERROR_LEVEL.WARNING, libraryError.localizationKey);
break;
case CMS_ERROR_CODES.INTERNAL_ERROR:
ManageException(ERROR_LEVEL.FATAL, cmsError.exception);
ManageException(ERROR_LEVEL.FATAL, libraryError.exception);
break;
}
}
internal static void UpdateStat(string functionName, long timer)
{
if (!Timers.ContainsKey(functionName))
@@ -994,16 +1293,16 @@ public static class ThreadsFunctions
{
while (true)
{
foreach(var value in Counter)
foreach (var value in Counter)
{
if(ThreadsHandler.RunningThreadStatus.ContainsKey(value.Key) && Counter[value.Key] != 0)
if (ThreadsHandler.RunningThreadStatus.ContainsKey(value.Key) && Counter[value.Key] != 0)
{
ThreadsHandler.RunningThreadStatus[value.Key] = (Timers[value.Key] / Counter[value.Key]) + " mS";
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);
@@ -1107,7 +1406,7 @@ public static class ThreadsFunctions
message = string.Format(NOT_FOUND_ALARM_MESSAGE, i);
}
// Add to dictionary
returnValue.Add(i.ToString("D6") + "|900",message);
returnValue.Add(i.ToString("D6") + "|900", message);
}
return returnValue;
}
+19 -7
View File
@@ -11,21 +11,30 @@ namespace Thermo.Active.Core
private static List<Action> ThreadsFunctionsList = new List<Action>
{
ThreadsFunctions.ManageWatchdog,
ThreadsFunctions.ManageStatusCommand,
ThreadsFunctions.ManageConfRequest,
ThreadsFunctions.ReadAlarms,
ThreadsFunctions.ReadPowerOnData,
ThreadsFunctions.StatThread,
ThreadsFunctions.ReadProcessesPPStatus,
//ThreadsFunctions.ReadProcessesPPStatus,
ThreadsFunctions.ReadEnabledFunctionality,
ThreadsFunctions.ReadExpiredMaintenances,
ThreadsFunctions.ReadAxesPositionsData,
//ThreadsFunctions.ReadAxesPositionsData,
ThreadsFunctions.ReadUserSoftKeysData,
ThreadsFunctions.ReadHeadsData,
ThreadsFunctions.ReadAxesNamesData,
ThreadsFunctions.ReadActiveProgramData,
//ThreadsFunctions.ReadHeadsData,
//ThreadsFunctions.ReadAxesNamesData,
//ThreadsFunctions.ReadActiveProgramData,
//ThreadsFunctions.ReadPartProgramQueueData,
ThreadsFunctions.ReadScadaData,
ThreadsFunctions.ReadM154Data
// ThreadsFunctions.ReadNcSoftKeysData,
ThreadsFunctions.ReadGaugeData,
ThreadsFunctions.ReadProdInfoData,
ThreadsFunctions.ReadProdCycleData,
ThreadsFunctions.ReadRecipeData,
ThreadsFunctions.ReadWarmersData,
ThreadsFunctions.ReadAreaData,
ThreadsFunctions.ReadModulesData,
ThreadsFunctions.ReadScadaData,
ThreadsFunctions.ReadM154Data // levare?
};
private static Action ThreadSetupCmsConnect = ThreadsFunctions.SetupCmsConnect;
@@ -44,6 +53,7 @@ namespace Thermo.Active.Core
{
Thread t = new Thread(() => ThreadSetupCmsConnect());
t.Start();
Thread.Sleep(50);
}
}
@@ -60,6 +70,8 @@ namespace Thermo.Active.Core
threadFunction()
);
t.Start();
// aggiungo pausa x evitare sovrapposizioni chiamate
Thread.Sleep(50);
// Add thread to running threads list
lock (RunningThreadsList)
RunningThreadsList.Add(t);
+5 -5
View File
@@ -1,12 +1,12 @@
using Thermo.Active.Core.Properties;
using Thermo.Active.Model;
using Thermo.Active.Utils;
using System;
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using TeamDev.SDK.MVVM;
using Thermo.Active.Core.Properties;
using Thermo.Active.Model;
using Thermo.Active.Utils;
namespace Thermo.Active.Core
{
@@ -125,7 +125,7 @@ namespace Thermo.Active.Core
public static void StopThread()
{
if (SiemensHmi!= null && SiemensHmi.IsAlive)
if (SiemensHmi != null && SiemensHmi.IsAlive)
SiemensHmi.Abort();
}
@@ -1,15 +1,13 @@
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.AlarmModels;
using System;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.IO;
using System.Linq;
using static Thermo.Active.Model.Constants;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.AlarmModels;
using static Thermo.Active.Config.ServerConfig;
using System.Diagnostics;
using Thermo.Active.Config;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Database.Controllers
{
@@ -37,7 +35,7 @@ namespace Thermo.Active.Database.Controllers
var index = userIds.IndexOf(-1);
if (userIds.IndexOf(-1) != -1)
ifNoUser = true;
List<int> ncAlarmDescIds = dbCtx
.AlarmDescriptions
.Where(x => x.Title.Contains(title))
@@ -45,7 +43,7 @@ namespace Thermo.Active.Database.Controllers
.ToList();
// Get Plc messages ids
List<int> plcAlarmDescIds =
List<int> plcAlarmDescIds =
plcMessages
.Where(x => x.Value.IndexOf(title, StringComparison.OrdinalIgnoreCase) >= 0)
//.Where(x => x.Value.Contains(title))
@@ -60,8 +58,8 @@ namespace Thermo.Active.Database.Controllers
.Where(x =>
x.TimeStamp >= startDate && x.TimeStamp <= endDate // Filter by date
&& sources.Contains(x.Source) // Check source
&& ( (ifNoUser && x.Users.Count() == 0) || x.Users.Any(y => userIds.Any(z => z == y.UserId))) // Check user
&&
&& ((ifNoUser && x.Users.Count() == 0) || x.Users.Any(y => userIds.Any(z => z == y.UserId))) // Check user
&&
((x.Source == ALARM_SOURCE.NC && ncAlarmDescIds.Contains(x.AlarmDescriptionId.Value)) // Check if message is contained in NC messages
|| (x.Source == ALARM_SOURCE.PLC && plcAlarmDescIds.Contains(x.AlarmId))) // Check if message is contained in PLC messages
).OrderByDescending(t => t.AlarmOccurrenceId);
@@ -137,7 +135,7 @@ namespace Thermo.Active.Database.Controllers
{
int numberOfRows = CountRows();
if(numberOfRows >= ServerStartupConfig.MaxAlarmsRows)
if (numberOfRows >= ServerStartupConfig.MaxAlarmsRows)
{
dbCtx.Database.ExecuteSqlCommand("DELETE FROM alarm_occurrence LIMIT {0}", ServerStartupConfig.AlarmToDelete);
}
@@ -151,7 +149,7 @@ namespace Thermo.Active.Database.Controllers
public void EmptyAlarms()
{
int numberOfRows = CountRows();
dbCtx.Database.ExecuteSqlCommand("DELETE FROM alarm_occurrence LIMIT {0}", numberOfRows);
}
@@ -1,8 +1,8 @@
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using static CMS_CORE_Library.Models.DataStructures;
using static Thermo.Active.Config.ServerConfig;
@@ -59,8 +59,8 @@ namespace Thermo.Active.Database.Controllers
{
return dbCtx
.FunctionsAccess
.Select( x => new DTORuntimeFunctionalityModel()
{
.Select(x => new DTORuntimeFunctionalityModel()
{
Id = x.FunctionAccessId,
Area = x.Area,
Name = x.Name,
@@ -1,6 +1,6 @@
using Thermo.Active.Model.DatabaseModels;
using System;
using System;
using System.Linq;
using Thermo.Active.Model.DatabaseModels;
using static Thermo.Active.Config.ServerConfig;
namespace Thermo.Active.Database.Controllers
@@ -1,8 +1,8 @@
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Database.Controllers
@@ -1,13 +1,13 @@
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.MaintenanceModels;
using Thermo.Active.Utils;
using System;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Entity;
using System.IO;
using System.Linq;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.MaintenanceModels;
using Thermo.Active.Utils;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
@@ -42,7 +42,7 @@ namespace Thermo.Active.Database.Controllers
foreach (PerformedMaintenanceModel maintenance in maintList)
{
if(maintenance.ControlWord != -2)
if (maintenance.ControlWord != -2)
valRet.Add(new DTOPerformModel()
{
Date = maintenance.Date,
@@ -64,7 +64,7 @@ namespace Thermo.Active.Database.Controllers
where m1.MaintenanceId == maintenances.MaintenanceId
select m1.Date
).Max()
select maintenances)
select maintenances)
.Include("Maintainer")
.ToList();
@@ -78,7 +78,7 @@ namespace Thermo.Active.Database.Controllers
CounterValue = (int)counterValue,
Date = DateTime.Now,
MaintenanceId = maintenanceId,
MaintainerId = userId,
MaintainerId = userId,
ControlWord = controlWord
};
@@ -204,7 +204,7 @@ namespace Thermo.Active.Database.Controllers
// find maintenances to be updated into db
var old = dbCtx.Maintenances.FirstOrDefault(x => x.MaintenanceId == item.MaintenanceId);
if(old != null)
if (old != null)
// Update model
old = MaintenancesConfig.Where(x => x.Id == item.MaintenanceId).Select(x =>
{
@@ -397,14 +397,14 @@ namespace Thermo.Active.Database.Controllers
cw = -1;
SupportFunctions.ConvertStringMachineNumberIntoNumber(machineNumber, out bool containsLetters, out int intMachineVal);
if (!GetDataFromMaintenancePassword(password, containsLetters, out int pwdMachineNumber, out int pwdHours, out cw))
if (!GetDataFromMaintenancePassword(password, containsLetters, out int pwdMachineNumber, out int pwdHours, out cw))
return false;
// Check machine number
if(intMachineVal == pwdMachineNumber)
if (intMachineVal == pwdMachineNumber)
{
// Convert plcCounter in hours and check if password is expired
if(((plcCounter/3600) - pwdHours) <= 50)
if (((plcCounter / 3600) - pwdHours) <= 50)
{
return true; // Ok
}
@@ -458,10 +458,10 @@ namespace Thermo.Active.Database.Controllers
tmpPassword4 = tmpPassword5.Remove(tmpPassword5.Length - 1);
// Create tmpPassoword3
foreach(char c in tmpPassword4)
foreach (char c in tmpPassword4)
{
// If tmpPassword is empty copy the first character
if(tmpPassword3.Length == 0)
if (tmpPassword3.Length == 0)
{
tmpPassword3 = c.ToString();
}
@@ -0,0 +1,161 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Thermo.Active.Model.DatabaseModels;
namespace Thermo.Active.Database.Controllers
{
public class ProdInfoController : IDisposable
{
private DatabaseContext dbCtx;
public ProdInfoController()
{
// Initialize database context
dbCtx = new DatabaseContext();
}
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> GetPaginated(int numStart, int numRecord)
{
// cehck numEnd
int numEnd = numStart - numRecord;
if (numEnd < 0)
numEnd = 0;
// retrieve
return dbCtx
.ProdInfo
.Where(x => x.NumDone <= numStart && x.NumDone > numEnd)
.OrderByDescending(x => x.DtEvent)
.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>
/// <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)
{
// Create database machine model
ProdInfoModel prodData = new ProdInfoModel()
{
DtEvent = DateTime.UtcNow,
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
};
try
{
// Add to database
dbCtx.ProdInfo.Add(prodData);
// Commit changes
dbCtx.SaveChanges();
}
catch
{ }
return prodData;
}
/// <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 delete all record (truncate)
/// </summary>
/// <returns></returns>
public bool PurgeAll()
{
bool answ = false;
try
{
dbCtx
.Database
.ExecuteSqlCommand("TRUNCATE TABLE prodInfo");
}
catch
{ }
return answ;
}
}
}
@@ -1,10 +1,8 @@
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Database.Controllers
@@ -30,12 +28,12 @@ namespace Thermo.Active.Database.Controllers
public void UpdateQueue()
{
dbCtx.Queue.RemoveRange(dbCtx.Queue);
var dbRows = new List<QueueItemsModel>();
foreach (var item in PartProgramQueue)
{
// Create database model
dbRows =item.Value.Select(x => new QueueItemsModel()
dbRows = item.Value.Select(x => new QueueItemsModel()
{
Id = x.Id,
AbsolutePath = x.AbsolutePath,
@@ -49,7 +47,7 @@ namespace Thermo.Active.Database.Controllers
// Add to db
dbCtx.Queue.AddRange(dbRows);
}
dbCtx.SaveChanges();
}
@@ -65,14 +63,14 @@ namespace Thermo.Active.Database.Controllers
item.RemainingReps = reps;
dbCtx.SaveChanges();
}
public void DeleteItem(int processId, int id)
{
QueueItemsModel item = dbCtx.Queue.FirstOrDefault(x => x.Id == id && x.Process == processId);
if(item == null)
if (item == null)
return;
dbCtx.Queue.Remove(item);
@@ -84,7 +82,7 @@ namespace Thermo.Active.Database.Controllers
{
var dbQueue = dbCtx.Queue.ToList();
bool foundData = false;
foreach(var entity in dbQueue)
foreach (var entity in dbQueue)
{
// Check if process queue exists
if (!PartProgramQueue.ContainsKey(entity.Process))
@@ -111,13 +109,13 @@ namespace Thermo.Active.Database.Controllers
QueueRunningIndexes[entity.Process] = entity.Id - 1;
}
}
public void UpdateQueueIdsAndSave(int processId)
{
// Fix new ids
for (int i = 0; i < PartProgramQueue[processId].Count(); i++)
PartProgramQueue[processId][i].Id = i + 1;
UpdateQueue();
}
}
@@ -1,9 +1,5 @@
using Thermo.Active.Database.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using Thermo.Active.Database.Redis;
namespace Thermo.Active.Database.Controllers
{
@@ -41,7 +37,7 @@ namespace Thermo.Active.Database.Controllers
redUtil.man.setRSV(redisHash, RepsDone);
}
public static bool WriteAlarmsConfigCurr(Dictionary<string,string> alarms)
public static bool WriteAlarmsConfigCurr(Dictionary<string, string> alarms)
{
string redisHash = redUtil.man.redHash(redisAlmCurr);
return redUtil.man.redSaveHashDict(redisHash, alarms);
@@ -1,7 +1,7 @@
using Thermo.Active.Model.DatabaseModels;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Thermo.Active.Model.DatabaseModels;
namespace Thermo.Active.Database.Controllers
{
@@ -1,10 +1,10 @@
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using static Thermo.Active.Model.Constants;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Database.Controllers
{
@@ -1,10 +1,10 @@
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using System;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web.Helpers;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
@@ -34,7 +34,7 @@ namespace Thermo.Active.Database.Controllers
// Commit changes
dbCtx.SaveChanges();
using(MachinesUsersController machController = new MachinesUsersController())
using (MachinesUsersController machController = new MachinesUsersController())
{
machController.Create(MachineConfig.MachineId, user.UserId, 3);
}
@@ -166,13 +166,13 @@ namespace Thermo.Active.Database.Controllers
var tmpUser = dbCtx
.Users
.Where(x => x.Deleted == false) // Get not deleted users
.Join( dbCtx.MachinesUsers,
.Join(dbCtx.MachinesUsers,
u => u.UserId,
m => m.UserId,
m => m.UserId,
(u, m) => new { Users = u, MachinesUsers = m }
)
.Where(x => x.MachinesUsers.Role.Level < MIN_CMS_ROLE)
.ToList();
.ToList();
return tmpUser
.Select(x => new DTOMessageUserModel() // Return DTOUserModel
@@ -184,7 +184,7 @@ namespace Thermo.Active.Database.Controllers
})
.GroupBy(elem => elem.Id).Select(group => group.First())
.ToList();
}
}
}
#region User Manager
@@ -210,7 +210,7 @@ namespace Thermo.Active.Database.Controllers
Language = x.Language,
Role = machineController.GetUserRoleData(MachineConfig.MachineId, x.UserId)
}).Where(
x=> x.Role.Level < MIN_CMS_ROLE)
x => x.Role.Level < MIN_CMS_ROLE)
.ToList();
}
}
+8 -5
View File
@@ -1,16 +1,15 @@
using Microsoft.Win32;
using MySql.Data.Entity;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Database.Migrations;
using Thermo.Active.Model.DatabaseModels;
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Globalization;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Database.Migrations;
using Thermo.Active.Model.DatabaseModels;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Utils.ExceptionManager;
@@ -42,6 +41,10 @@ namespace Thermo.Active.Database
public DbSet<AlarmNoteModel> AlarmsNotes { get; set; }
public DbSet<AlarmFileModel> AlarmFiles { get; set; }
// thermo!
public DbSet<ProdInfoModel> ProdInfo { get; set; }
// Create migration string
public static string CONNECTION_STRING = "Server = " + "localhost" + "; Database=" + DATABASE_NAME + ";Uid=" + DATABASE_USER + ";Pwd=" + DATABASE_PWD + ";";
@@ -82,7 +85,7 @@ namespace Thermo.Active.Database
{
// Run migrations and seed.
migrator.Update();
}
}
FindOrCreateMachineUniqueId();
@@ -1,8 +1,7 @@
namespace Thermo.Active.Database.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class ThermoStart : DbMigration
{
public override void Up()
@@ -10,268 +9,268 @@ namespace Thermo.Active.Database.Migrations
CreateTable(
"dbo.alarm_description",
c => new
{
id = c.Int(nullable: false),
title = c.String(unicode: false),
})
{
id = c.Int(nullable: false),
title = c.String(unicode: false),
})
.PrimaryKey(t => t.id);
CreateTable(
"dbo.alarm_file",
c => new
{
id = c.Int(nullable: false, identity: true),
file_name = c.String(unicode: false),
local_file_name = c.String(unicode: false),
alarm_desc_id = c.Int(nullable: false),
source = c.Int(nullable: false),
user_id = c.Int(),
})
{
id = c.Int(nullable: false, identity: true),
file_name = c.String(unicode: false),
local_file_name = c.String(unicode: false),
alarm_desc_id = c.Int(nullable: false),
source = c.Int(nullable: false),
user_id = c.Int(),
})
.PrimaryKey(t => t.id)
.ForeignKey("dbo.user", t => t.user_id)
.Index(t => t.user_id);
CreateTable(
"dbo.user",
c => new
{
id = c.Int(nullable: false, identity: true),
username = c.String(nullable: false, unicode: false),
first_name = c.String(unicode: false),
last_name = c.String(unicode: false),
password = c.String(unicode: false),
security_stamp = c.String(unicode: false),
language = c.String(unicode: false),
deleted = c.Boolean(nullable: false),
})
{
id = c.Int(nullable: false, identity: true),
username = c.String(nullable: false, unicode: false),
first_name = c.String(unicode: false),
last_name = c.String(unicode: false),
password = c.String(unicode: false),
security_stamp = c.String(unicode: false),
language = c.String(unicode: false),
deleted = c.Boolean(nullable: false),
})
.PrimaryKey(t => t.id);
CreateTable(
"dbo.alarm_occurrence",
c => new
{
id = c.Int(nullable: false, identity: true),
alarm_id = c.Int(nullable: false),
alarm_description_id = c.Int(),
source = c.Int(nullable: false),
type = c.Int(nullable: false),
processes = c.Int(nullable: false),
timestamp = c.DateTime(nullable: false, precision: 0),
})
{
id = c.Int(nullable: false, identity: true),
alarm_id = c.Int(nullable: false),
alarm_description_id = c.Int(),
source = c.Int(nullable: false),
type = c.Int(nullable: false),
processes = c.Int(nullable: false),
timestamp = c.DateTime(nullable: false, precision: 0),
})
.PrimaryKey(t => t.id)
.ForeignKey("dbo.alarm_description", t => t.alarm_description_id)
.Index(t => t.alarm_description_id);
CreateTable(
"dbo.alarm_user",
c => new
{
user_id = c.Int(nullable: false),
alarm_occurence_id = c.Int(nullable: false),
})
{
user_id = c.Int(nullable: false),
alarm_occurence_id = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.user_id, t.alarm_occurence_id })
.ForeignKey("dbo.alarm_occurrence", t => t.alarm_occurence_id, cascadeDelete: true)
.ForeignKey("dbo.user", t => t.user_id, cascadeDelete: true)
.Index(t => t.user_id)
.Index(t => t.alarm_occurence_id);
CreateTable(
"dbo.alarm_note",
c => new
{
id = c.Int(nullable: false, identity: true),
message = c.String(unicode: false),
user_id = c.Int(nullable: false),
alarm_desc_id = c.Int(nullable: false),
source = c.Int(nullable: false),
timestamp = c.DateTime(nullable: false, precision: 0),
})
{
id = c.Int(nullable: false, identity: true),
message = c.String(unicode: false),
user_id = c.Int(nullable: false),
alarm_desc_id = c.Int(nullable: false),
source = c.Int(nullable: false),
timestamp = c.DateTime(nullable: false, precision: 0),
})
.PrimaryKey(t => t.id)
.ForeignKey("dbo.user", t => t.user_id, cascadeDelete: true)
.Index(t => t.user_id);
CreateTable(
"dbo.family",
c => new
{
id = c.Short(nullable: false),
name = c.String(unicode: false),
right_size = c.Byte(nullable: false),
left_size = c.Byte(nullable: false),
tcp_table = c.Byte(nullable: false),
gamma = c.Byte(nullable: false),
rotation_type = c.Byte(nullable: false),
cooling_byte = c.Byte(nullable: false),
max_speed = c.Int(nullable: false),
max_load = c.Byte(nullable: false),
min_load_pct_autoload = c.Byte(nullable: false),
max_load_pct_autoload = c.Byte(nullable: false),
dynamic_compensation = c.Byte(nullable: false),
min_load_dynamic_comp = c.Byte(nullable: false),
max_load_dynamic_comp = c.Byte(nullable: false),
life_type = c.Byte(nullable: false),
nominal_life = c.Int(nullable: false),
revive_delta = c.Int(nullable: false),
})
{
id = c.Short(nullable: false),
name = c.String(unicode: false),
right_size = c.Byte(nullable: false),
left_size = c.Byte(nullable: false),
tcp_table = c.Byte(nullable: false),
gamma = c.Byte(nullable: false),
rotation_type = c.Byte(nullable: false),
cooling_byte = c.Byte(nullable: false),
max_speed = c.Int(nullable: false),
max_load = c.Byte(nullable: false),
min_load_pct_autoload = c.Byte(nullable: false),
max_load_pct_autoload = c.Byte(nullable: false),
dynamic_compensation = c.Byte(nullable: false),
min_load_dynamic_comp = c.Byte(nullable: false),
max_load_dynamic_comp = c.Byte(nullable: false),
life_type = c.Byte(nullable: false),
nominal_life = c.Int(nullable: false),
revive_delta = c.Int(nullable: false),
})
.PrimaryKey(t => t.id);
CreateTable(
"dbo.favorite_user_softkey",
c => new
{
user_softkey_id = c.Int(nullable: false),
user_id = c.Int(nullable: false),
})
{
user_softkey_id = c.Int(nullable: false),
user_id = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.user_softkey_id, t.user_id });
CreateTable(
"dbo.function_access",
c => new
{
id = c.Int(nullable: false, identity: true),
name = c.String(unicode: false),
write_level_min = c.Int(nullable: false),
read_level_min = c.Int(nullable: false),
area = c.String(unicode: false),
enabled = c.Boolean(nullable: false),
plc_id = c.Int(nullable: false),
})
{
id = c.Int(nullable: false, identity: true),
name = c.String(unicode: false),
write_level_min = c.Int(nullable: false),
read_level_min = c.Int(nullable: false),
area = c.String(unicode: false),
enabled = c.Boolean(nullable: false),
plc_id = c.Int(nullable: false),
})
.PrimaryKey(t => t.id);
CreateTable(
"dbo.machine",
c => new
{
id = c.Int(nullable: false, identity: true),
name = c.String(unicode: false),
unique_id = c.String(unicode: false),
})
{
id = c.Int(nullable: false, identity: true),
name = c.String(unicode: false),
unique_id = c.String(unicode: false),
})
.PrimaryKey(t => t.id);
CreateTable(
"dbo.machine_user",
c => new
{
id = c.Int(nullable: false, identity: true),
machine_id = c.Int(nullable: false),
user_id = c.Int(nullable: false),
role_id = c.Int(nullable: false),
})
{
id = c.Int(nullable: false, identity: true),
machine_id = c.Int(nullable: false),
user_id = c.Int(nullable: false),
role_id = c.Int(nullable: false),
})
.PrimaryKey(t => t.id)
.ForeignKey("dbo.machine", t => t.machine_id, cascadeDelete: true)
.ForeignKey("dbo.role", t => t.role_id, cascadeDelete: true)
.ForeignKey("dbo.user", t => t.user_id, cascadeDelete: true)
.Index(t => new { t.machine_id, t.user_id }, unique: true, clustered: true, name: "unique_machine_user")
.Index(t => t.role_id);
CreateTable(
"dbo.role",
c => new
{
id = c.Int(nullable: false, identity: true),
name = c.String(unicode: false),
level = c.Int(nullable: false),
})
{
id = c.Int(nullable: false, identity: true),
name = c.String(unicode: false),
level = c.Int(nullable: false),
})
.PrimaryKey(t => t.id);
CreateTable(
"dbo.maintenance_file",
c => new
{
id = c.Int(nullable: false, identity: true),
file_name = c.String(unicode: false),
local_file_name = c.String(unicode: false),
maintenance_id = c.Int(nullable: false),
user_id = c.Int(),
})
{
id = c.Int(nullable: false, identity: true),
file_name = c.String(unicode: false),
local_file_name = c.String(unicode: false),
maintenance_id = c.Int(nullable: false),
user_id = c.Int(),
})
.PrimaryKey(t => t.id)
.ForeignKey("dbo.maintenance", t => t.maintenance_id, cascadeDelete: true)
.ForeignKey("dbo.user", t => t.user_id)
.Index(t => t.maintenance_id)
.Index(t => t.user_id);
CreateTable(
"dbo.maintenance",
c => new
{
id = c.Int(nullable: false),
intervall = c.Double(),
deadline = c.DateTime(nullable: false, precision: 0),
type = c.Int(nullable: false),
counter_id = c.Int(nullable: false),
title = c.String(unicode: false),
description = c.String(unicode: false),
unit_of_measure = c.Int(),
creation_date = c.DateTime(nullable: false, precision: 0),
last_expiration_date = c.DateTime(precision: 0),
user_id = c.Int(),
})
{
id = c.Int(nullable: false),
intervall = c.Double(),
deadline = c.DateTime(nullable: false, precision: 0),
type = c.Int(nullable: false),
counter_id = c.Int(nullable: false),
title = c.String(unicode: false),
description = c.String(unicode: false),
unit_of_measure = c.Int(),
creation_date = c.DateTime(nullable: false, precision: 0),
last_expiration_date = c.DateTime(precision: 0),
user_id = c.Int(),
})
.PrimaryKey(t => t.id)
.ForeignKey("dbo.user", t => t.user_id)
.Index(t => t.user_id);
CreateTable(
"dbo.maintenance_note",
c => new
{
id = c.Int(nullable: false, identity: true),
message = c.String(unicode: false),
user_id = c.Int(nullable: false),
maintenance_id = c.Int(nullable: false),
timestamp = c.DateTime(nullable: false, precision: 0),
})
{
id = c.Int(nullable: false, identity: true),
message = c.String(unicode: false),
user_id = c.Int(nullable: false),
maintenance_id = c.Int(nullable: false),
timestamp = c.DateTime(nullable: false, precision: 0),
})
.PrimaryKey(t => t.id)
.ForeignKey("dbo.maintenance", t => t.maintenance_id, cascadeDelete: true)
.ForeignKey("dbo.user", t => t.user_id, cascadeDelete: true)
.Index(t => t.user_id)
.Index(t => t.maintenance_id);
CreateTable(
"dbo.performed_maintenance",
c => new
{
id = c.Int(nullable: false, identity: true),
date = c.DateTime(nullable: false, precision: 0),
counter_value = c.Int(nullable: false),
control_word = c.Int(nullable: false),
maintenance = c.Int(nullable: false),
maintainers_id = c.Int(),
})
{
id = c.Int(nullable: false, identity: true),
date = c.DateTime(nullable: false, precision: 0),
counter_value = c.Int(nullable: false),
control_word = c.Int(nullable: false),
maintenance = c.Int(nullable: false),
maintainers_id = c.Int(),
})
.PrimaryKey(t => t.id)
.ForeignKey("dbo.user", t => t.maintainers_id)
.ForeignKey("dbo.maintenance", t => t.maintenance, cascadeDelete: true)
.Index(t => t.maintenance)
.Index(t => t.maintainers_id);
CreateTable(
"dbo.queue",
c => new
{
id = c.Int(nullable: false),
process = c.Int(nullable: false),
part_program_name = c.String(unicode: false),
reps = c.Int(nullable: false),
remaining_reps = c.Int(nullable: false),
absolute_path = c.String(unicode: false),
status = c.Int(nullable: false),
})
{
id = c.Int(nullable: false),
process = c.Int(nullable: false),
part_program_name = c.String(unicode: false),
reps = c.Int(nullable: false),
remaining_reps = c.Int(nullable: false),
absolute_path = c.String(unicode: false),
status = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.id, t.process });
CreateTable(
"dbo.session",
c => new
{
id = c.Int(nullable: false, identity: true),
token = c.String(unicode: false),
machine_user_id = c.Int(nullable: false),
first_login = c.DateTime(nullable: false, precision: 0),
})
{
id = c.Int(nullable: false, identity: true),
token = c.String(unicode: false),
machine_user_id = c.Int(nullable: false),
first_login = c.DateTime(nullable: false, precision: 0),
})
.PrimaryKey(t => t.id)
.ForeignKey("dbo.machine_user", t => t.machine_user_id, cascadeDelete: true)
.Index(t => t.machine_user_id);
}
public override void Down()
{
DropForeignKey("dbo.session", "machine_user_id", "dbo.machine_user");
@@ -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 AddedProdInfoModel : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(AddedProdInfoModel));
string IMigrationMetadata.Id
{
get { return "202006170558519_AddedProdInfoModel"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,37 @@
namespace Thermo.Active.Database.Migrations
{
using System.Data.Entity.Migrations;
public partial class AddedProdInfoModel : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.ProdInfo",
c => new
{
DtEvent = c.DateTime(nullable: false, precision: 0),
NumTarget = c.Short(nullable: false),
NumDone = c.Short(nullable: false),
TimeWarm = c.Int(nullable: false),
TimeVent = c.Int(nullable: false),
TimeVacuum = c.Int(nullable: false),
TimeCycleGross = c.Int(nullable: false),
TimeCycleNet = c.Int(nullable: false),
MaterialTempEndWarm = c.Double(nullable: false),
MaterialTempEndVent = c.Double(nullable: false),
MoldTemp = c.Double(nullable: false),
VacuumReadVal = c.Double(nullable: false),
MouldEnergyOUT = c.Double(nullable: false),
MouldEnergyIN = c.Double(nullable: false),
})
.PrimaryKey(t => t.DtEvent);
}
public override void Down()
{
DropTable("dbo.ProdInfo");
}
}
}
File diff suppressed because one or more lines are too long
@@ -1,13 +1,10 @@
namespace Thermo.Active.Database.Migrations
{
using System;
using System.Data.Entity;
using System.Linq;
using Thermo.Active.Model.DatabaseModels;
using System.Data.Entity.Migrations;
using static Thermo.Active.Model.Constants.FUNCTIONALITY_NAMES;
using static Thermo.Active.Model.Constants.AREAS;
using Thermo.Active.Model.DatabaseModels;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Model.Constants.AREAS;
using static Thermo.Active.Model.Constants.FUNCTIONALITY_NAMES;
internal sealed class Configuration : DbMigrationsConfiguration<Thermo.Active.Database.DatabaseContext>
{
@@ -30,7 +27,7 @@ namespace Thermo.Active.Database.Migrations
new RoleModel() { RoleId = (int)ROLE_IDS.CUSTOMER_MAINTAINER, Level = 10, Name = "Maintainer" }
);
context.FunctionsAccess.AddOrUpdate(
context.FunctionsAccess.AddOrUpdate(x => x.Name,
// General Function, if plcId is 0 then the functionality is not connected to the NC
new FunctionAccessModel() { Name = GENERAL, Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = USER_FUNCTIONS, Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 0 },
@@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Le informazioni generali relative a un assembly sono controllate dal seguente
File diff suppressed because it is too large Load Diff
@@ -34,7 +34,8 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CMS_CORE_Library">
<Reference Include="CMS_CORE_Library, Version=1.1.1.0, Culture=neutral, processorArchitecture=AMD64">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libs\CMS_CORE_Library.dll</HintPath>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
@@ -112,6 +113,7 @@
<ItemGroup>
<Compile Include="Controllers\AlarmsController.cs" />
<Compile Include="Controllers\FunctionsAccessController.cs" />
<Compile Include="Controllers\ProdInfoController.cs" />
<Compile Include="Controllers\MachinesController.cs" />
<Compile Include="Controllers\MaintenancesController.cs" />
<Compile Include="Controllers\QueueController.cs" />
@@ -125,6 +127,10 @@
<Compile Include="Migrations\202004241109233_Thermo-Start.Designer.cs">
<DependentUpon>202004241109233_Thermo-Start.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202006170558519_AddedProdInfoModel.cs" />
<Compile Include="Migrations\202006170558519_AddedProdInfoModel.Designer.cs">
<DependentUpon>202006170558519_AddedProdInfoModel.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\Configuration.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Redis\redUtil.cs" />
@@ -164,6 +170,9 @@
<EmbeddedResource Include="Migrations\202004241109233_Thermo-Start.resx">
<DependentUpon>202004241109233_Thermo-Start.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202006170558519_AddedProdInfoModel.resx">
<DependentUpon>202006170558519_AddedProdInfoModel.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.ConfigModels
namespace Thermo.Active.Model.ConfigModels
{
public class AlarmsConfigModel
{
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.ConfigModels
namespace Thermo.Active.Model.ConfigModels
{
public class AreasConfigModel
{
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.ConfigModels
namespace Thermo.Active.Model.ConfigModels
{
public class CmsConnectConfigModel
{
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace Thermo.Active.Model.ConfigModels
{

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