Compare commits

...

459 Commits

Author SHA1 Message Date
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
394 changed files with 23262 additions and 6650 deletions
@@ -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>
+1 -1
View File
@@ -10,7 +10,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; }
+2 -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>
+15
View File
@@ -1283,6 +1283,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;
}
}
+2
View File
@@ -257,6 +257,8 @@ namespace Active_Client.View
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");
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.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,185 @@
<?xml version="1.0" encoding="UTF-8"?>
<modules>
<block>
<id>1</id>
<localizedLabels>
<lang langKey="en">DiscesaCZ ENG</lang>
<lang langKey="it">DiscesaCZ ITA</lang>
</localizedLabels>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<showStatus>false</showStatus>
<priority>1</priority>
</block>
<block>
<id>2</id>
<localizedLabels>
<lang langKey="en">MembDiscesaZ ENG</lang>
<lang langKey="it">MembDiscesaZ ITA</lang>
</localizedLabels>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<showStatus>false</showStatus>
<priority>1</priority>
</block>
<block>
<id>3</id>
<localizedLabels>
<lang langKey="en">MembZ ENG</lang>
<lang langKey="it">MembZ ITA</lang>
</localizedLabels>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<showStatus>false</showStatus>
<priority>1</priority>
</block>
<block>
<id>4</id>
<localizedLabels>
<lang langKey="en">Mod_MembSalitaZ ENG</lang>
<lang langKey="it">Mod_MembSalitaZ ITA</lang>
</localizedLabels>
<type>MOVEMENT</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<showStatus>false</showStatus>
<priority>1</priority>
</block>
<block>
<id>6</id>
<localizedLabels>
<lang langKey="en">Mod_RiscaldoInf ENG</lang>
<lang langKey="it">Mod_RiscaldoInf ITA</lang>
</localizedLabels>
<type>HEATING</type>
<section>HEATING</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<showStatus>false</showStatus>
<priority>1</priority>
</block>
<block>
<id>7</id>
<localizedLabels>
<lang langKey="en">Mod_RiscaldoSup ENG</lang>
<lang langKey="it">Mod_RiscaldoSup ITA</lang>
</localizedLabels>
<type>HEATING</type>
<section>HEATING</section>
<idParam>0</idParam>
<showDelay>false</showDelay>
<showStatus>false</showStatus>
<priority>2</priority>
</block>
<block>
<id>8</id>
<localizedLabels>
<lang langKey="en">Mod_PirometroRisc ENG</lang>
<lang langKey="it">Mod_PirometroRisc ITA</lang>
</localizedLabels>
<type>HEATING</type>
<section>HEATING</section>
<idParam>80</idParam>
<showDelay>true</showDelay>
<showStatus>true</showStatus>
<priority>3</priority>
</block>
<block>
<id>13</id>
<localizedLabels>
<lang langKey="en">Mod_Imbutitura ENG</lang>
<lang langKey="it">Mod_Imbutitura ITA</lang>
</localizedLabels>
<type>DRAWING</type>
<section>FORMING</section>
<idParam>99</idParam>
<showDelay>true</showDelay>
<showStatus>true</showStatus>
<priority>2</priority>
</block>
<block>
<id>16</id>
<localizedLabels>
<lang langKey="en">Mod_Raffreddamento ENG</lang>
<lang langKey="it">Mod_Raffreddamento ITA</lang>
</localizedLabels>
<type>COOLING</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<showStatus>false</showStatus>
<priority>2</priority>
</block>
<block>
<id>17</id>
<localizedLabels>
<lang langKey="en">Mod_PirometroRaffr ENG</lang>
<lang langKey="it">Mod_PirometroRaffr ITA</lang>
</localizedLabels>
<type>COOLING</type>
<section>FORMING</section>
<idParam>139</idParam>
<showDelay>true</showDelay>
<showStatus>true</showStatus>
<priority>3</priority>
</block>
<block>
<id>19</id>
<localizedLabels>
<lang langKey="en">Mod_Vuoto ENG</lang>
<lang langKey="it">Mod_Vuoto ITA</lang>
</localizedLabels>
<type>VACUUM</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<showStatus>false</showStatus>
<priority>4</priority>
</block>
<block>
<id>21</id>
<localizedLabels>
<lang langKey="en">Mod_VuotoDiretto ENG</lang>
<lang langKey="it">Mod_VuotoDiretto ITA</lang>
</localizedLabels>
<type>VACUUM</type>
<section>FORMING</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<showStatus>false</showStatus>
<priority>5</priority>
</block>
<block>
<id>36</id>
<localizedLabels>
<lang langKey="en">Mod_EstrazioneZ ENG</lang>
<lang langKey="it">Mod_EstrazioneZ ITA</lang>
</localizedLabels>
<type>EXTRACTION</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>true</showDelay>
<showStatus>false</showStatus>
<priority>2</priority>
</block>
<block>
<id>42</id>
<localizedLabels>
<lang langKey="en">Mod_SalitaCZ ENG</lang>
<lang langKey="it">Mod_SalitaCZ ITA</lang>
</localizedLabels>
<type>MOVEMENT</type>
<section>EXTRACTION</section>
<idParam>-1</idParam>
<showDelay>false</showDelay>
<showStatus>false</showStatus>
<priority>1</priority>
</block>
</modules>
@@ -0,0 +1,60 @@
<?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="localizedLabels">
<xs:complexType>
<xs:sequence>
<xs:element name="lang" type="langType" minOccurs="0" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<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="showStatus" 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,41 @@
<?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: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>
+4 -4
View File
@@ -1,10 +1,10 @@
<?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>
<ncVendor>S7NET</ncVendor> <!-- NO_NC/DEMO/FANUC/SIEMENS/OSAI/S7NET -->
<showNcHMI>false</showNcHMI>
<ncIpAddress>192.168.0.102</ncIpAddress>
<ncPort>102</ncPort>
<machineModel>Ares 37 OF</machineModel>
<sharedPath>C:\PartPrg\</sharedPath>
<sharedName>//PARTPRG:/</sharedName>
@@ -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>
+28
View File
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Config
{
/// <summary>
/// Live data for Thermo Active
/// </summary>
public class LiveData
{
/// <summary>
/// Current loaded recipe
/// </summary>
public string RecipeName = "current.json";
/// <summary>
/// Dictionary of all parameters and values
/// </summary>
public Dictionary<string, double> RecipeParameters;
/// <summary>
/// Dictionary of all channels and relative setpoints
/// </summary>
public Dictionary<int, int> ChannelSetpoints;
}
}
@@ -0,0 +1 @@

+13
View File
@@ -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;
@@ -51,5 +53,16 @@ namespace Thermo.Active.Config
public static List<string> MacrosConfig;
public static string CMSMainProgramContent;
// Thermo
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;
public static LiveData RecipeLiveData = new LiveData();
}
}
+419 -36
View File
@@ -13,14 +13,15 @@ using System.Xml.Linq;
using System.Xml.Schema;
using System.Xml.Serialization;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Utils.SupportFunctions;
using Newtonsoft.Json;
namespace Thermo.Active.Config
{
public static class ServerConfigController
{
private static string actualFileName;
private static string actualFileName;
public static void ReadStartupConfig()
{
@@ -33,15 +34,17 @@ namespace Thermo.Active.Config
ReadUserSoftKeysConfig();
ReadAlarmsConfig();
ReadHeadsConfig();
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 +53,29 @@ 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);
}
}
public static void ReadLastRecipe()
{
try
{
ReadLiveData();
}
catch (XmlException ex)
{
ExceptionManager.ManageError(ERROR_LEVEL.FATAL,
"Error while reading file: " + ex.SourceUri +
"\n Error: " + ex.Message,
true
);
}
catch (Exception ex)
{
var message = ex.Message;
if (ex.InnerException != null)
message += "\n" + ex.InnerException.Message;
ExceptionManager.ManageError(ERROR_LEVEL.FATAL, message, true);
}
}
@@ -59,7 +84,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 +94,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 +154,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 +182,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 +230,7 @@ namespace Thermo.Active.Config
}
private static void ReadScadaFile()
{
{
DirectoryInfo d = new DirectoryInfo(SCADA_DIRECTORY);
FileInfo[] files = d.GetFiles("*.xml");
@@ -217,7 +242,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 +255,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 +281,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 +300,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 +309,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 +325,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 +368,7 @@ namespace Thermo.Active.Config
XDocument xmlConfigFile = GetXmlHandlerWithValidator(MAINTENANCES_CONFIG_SCHEMA_PATH, MAINTENANCES_CONFIG_PATH);
ReadAssistanceConfig();
MaintenancesConfig = xmlConfigFile
.Descendants("maintenances")
.Elements("maintenance")
@@ -373,11 +397,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 +568,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 +595,202 @@ 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)
})
.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),
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 +822,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,14 +846,178 @@ namespace Thermo.Active.Config
.Select(x => x.Value)
.ToList();
}
public static void ReadMainProgram()
/// <summary>
/// Try to load live data from json persistence file
/// </summary>
public static bool ReadLiveData()
{
if (File.Exists(MAIN_PROGRAM_CONFIG_PATH))
bool answ = false;
if (File.Exists(LIVE_RECIPE_PATH))
{
CMSMainProgramContent = File.ReadAllText(MAIN_PROGRAM_CONFIG_PATH);
// load all text data
var rawData = File.ReadAllText(LIVE_RECIPE_PATH);
try
{
// deserialize to object
RecipeLiveData = JsonConvert.DeserializeObject<LiveData>(rawData);
}
catch
{ }
answ = true;
}
else
{
// reload from template...
var rawData = File.ReadAllText(RECIPE_TEMPLATE_PATH);
try
{
// deserialize to object
RecipeLiveData = JsonConvert.DeserializeObject<LiveData>(rawData);
}
catch
{ }
// salva current
SaveRecipeCurrent();
answ = true;
}
// rendo se fatto
return answ;
}
/// <summary>
/// Try to load selected recipe to live data (memory and json persistence file)
/// </summary>
public static bool LoadRecipe(string filePath)
{
bool answ = false;
// check file extension
string fileName = Path.GetFileName(filePath);
if (!fileName.EndsWith(".json"))
{
fileName += ".json";
filePath += ".json";
}
// check filePath...
if (!filePath.Contains(RECIPE_DIRECTORY) && filePath != RECIPE_TEMPLATE_PATH)
{
// aggiungo base path!
filePath = RECIPE_DIRECTORY + filePath;
}
if (File.Exists(filePath))
{
answ = true;
// load all text data
var rawData = File.ReadAllText(filePath);
try
{
// deserialize to object
RecipeLiveData = JsonConvert.DeserializeObject<LiveData>(rawData);
}
catch
{ }
// update current live data!
SaveRecipeCurrent();
}
// rendo se fatto
return answ;
}
/// <summary>
/// Try to load template recipe
/// </summary>
public static bool LoadTemplate()
{
bool answ = false;
// check filePath...
if (File.Exists(RECIPE_TEMPLATE_PATH))
{
answ = true;
// load all text data
var rawData = File.ReadAllText(RECIPE_TEMPLATE_PATH);
try
{
// deserialize to object
RecipeLiveData = JsonConvert.DeserializeObject<LiveData>(rawData);
// update NAME
RecipeLiveData.RecipeName = $"{DateTime.Now:yyyyMMss_HHmmss}.json";
}
catch
{ }
// update current live data!
SaveRecipeCurrent();
}
// rendo se fatto
return answ;
}
/// <summary>
/// Try to write live data to json persistence file
/// </summary>
public static bool SaveRecipeCurrent()
{
bool answ = false;
try
{
answ = true;
// serialize
string rawData = JsonConvert.SerializeObject(RecipeLiveData);
// save live!
var dir = Path.GetDirectoryName(LIVE_RECIPE_PATH);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
File.WriteAllText(LIVE_RECIPE_PATH, rawData);
}
catch
{ }
// rendo se fatto
return answ;
}
/// <summary>
/// Try to save live recipe as NEW template
/// </summary>
public static bool SaveRecipeTemplate()
{
RecipeLiveData.RecipeName = "template.json";
return SaveRecipe(RECIPE_TEMPLATE_PATH);
}
/// <summary>
/// Try to save live recipe to selected filePath
/// </summary>
public static bool SaveRecipe(string filePath)
{
bool answ = false;
try
{
answ = true;
string fileName = Path.GetFileName(filePath);
if (!fileName.EndsWith(".json"))
{
fileName += ".json";
filePath += ".json";
}
// fix name!
RecipeLiveData.RecipeName = fileName;
// serialize
string rawData = JsonConvert.SerializeObject(RecipeLiveData);
// save live!
File.WriteAllText(LIVE_RECIPE_PATH, rawData);
// check filePath...
if (!filePath.Contains(RECIPE_DIRECTORY) && filePath != RECIPE_TEMPLATE_PATH)
{
// aggiungo base path!
filePath = RECIPE_DIRECTORY + filePath;
}
// save!
File.WriteAllText(filePath, rawData);
}
catch
{ }
// rendo se fatto
return answ;
}
public static string CalculateHash(string filename)
@@ -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" />
@@ -52,9 +55,13 @@
<SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Compile Include="LiveData.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ServerConfig.cs" />
<Compile Include="ServerConfigController.cs" />
<Content Include="Recipes\.placeholder.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<EmbeddedResource Include="Report\Programs.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
@@ -69,6 +76,15 @@
<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>
@@ -83,7 +99,7 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<SubType>Designer</SubType>
</Content>
<EmbeddedResource Include="Config\headsConfigValidator.xsd">
<EmbeddedResource Include="Config\recipeConfigValidator.xsd">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Config\maintenancesConfigValidator.xsd">
@@ -151,5 +167,27 @@
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\headsConfigValidator.xsd">
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\moduleBlockConfigValidator.xsd">
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Config\risk2007Validator.xsd">
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Content Include="Config\Recipes\template.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<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>
+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>
+473 -183
View File
@@ -21,20 +21,26 @@ using TeamDev.SDK.MVVM;
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;
using Thermo.Active.Model.DTOModels.ThModules;
using Thermo.Active.Model.DTOModels.ThProd;
using Thermo.Active.Model.DTOModels.ThRecipe;
using Thermo.Active.Model.DTOModels.ThWarmers;
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 +53,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 +66,7 @@ public static class ThreadsFunctions
errorCounter++;
}
else if (libraryError == NO_ERROR)
errorCounter = 0;
errorCounter = 0;
}
else
RestoreConnection();
@@ -85,6 +86,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 +431,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 +505,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 +593,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 +637,303 @@ 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 ThermoModels.GaugeModel gaugeData);
if (libraryError.IsError())
ManageLibraryError(libraryError);
MessageServices.Current.Publish(SEND_THERMO_GAUGE_DATA, null, gaugeData);
}
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);
}
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 +988,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 +1117,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 +1137,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 +1151,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 +1161,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 +1180,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 +1202,7 @@ public static class ThreadsFunctions
Thread.Sleep(1000);
}
if (!cmsError.IsError())
if (!libraryError.IsError())
{
if (ServerStartupConfig.AutoOpenCmsClient)
StartCMSClient();
@@ -944,12 +1234,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 +1249,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 +1257,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 +1284,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 +1397,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);
@@ -0,0 +1,163 @@
using Thermo.Active.Model.DatabaseModels;
using System;
using System.Linq;
using static Thermo.Active.Config.ServerConfig;
using System.Collections.Generic;
using CMS_CORE_Library.Models;
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;
}
}
}
@@ -42,6 +42,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 + ";";
@@ -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,38 @@
namespace Thermo.Active.Database.Migrations
{
using System;
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
@@ -30,7 +30,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 },
@@ -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>
@@ -0,0 +1,16 @@
using System.Collections.Generic;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Model.ConfigModels
{
public class ModBlockConfigModel
{
public int Id;
public Dictionary<string,string> LocalizedLabels { get; set; }
public TACT_MBLOCK_TYPE Type { get; set; }
public TACT_MBLOCK_SECTION Section { get; set; }
public int IdParam{ get; set; }
public bool ShowDelay { get; set; }
public int Priority { get; set; }
}
}
@@ -0,0 +1,17 @@
using System.Collections.Generic;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Model.ConfigModels
{
public class RecipeConfigModel
{
public int Id;
public TACT_PARAM_TYPE Category { get; set; }
public string SubCategory_1 { get; set; }
public string SubCategory_2 { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Format { get; set; }
public int ScaleFactor { get; set; }
}
}
@@ -0,0 +1,47 @@
using System.Collections.Generic;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Model.ConfigModels
{
public class RiskRiflettore
{
public int Tipo;
public List<RiskResistenza> Resistenze;
}
public class RiskResistenza
{
public int Tipo;
public int Riga;
public int Canale;
}
public class RiskRiferimenti
{
public int Id;
public int Potenza;
public int Dimensione;
public string Modello;
}
public class RiskResistModel
{
public int Id;
public int IdChannel;
public int Column;
public int Row;
public int Dimension;
}
public class RiskChannelModel
{
public int IdChannel;
public int IdReflector;
public int SetpointRecipe;
public int SetpointThermo;
public int MaxPower;
public int NumResist;
public bool CalcIchMin;
}
public class RiskBoardModel
{
public int IdBoard;
public int NumChannels;
}
}
+75 -17
View File
@@ -5,7 +5,7 @@ namespace Thermo.Active.Model
{
public static class Constants
{
public static bool IS_BETA = false;
public static bool IS_BETA = false;
public static string NOT_FOUND_ALARM_MESSAGE = "Alarm_id_{0} : Message not found";
public static string NOT_CONFIGURATED_ALARM_MESSAGE = "Alarm_id_{0} : Message not configurated";
public static string CMS_CONNECT_SETUP_ALARM_MESSAGE = "Error during CMS-Connect setup: Redis Db Not Found";
@@ -20,7 +20,7 @@ namespace Thermo.Active.Model
public enum SCADA_ELEMENT_TYPE
{
BUTTON = 0,
IMAGE = 1,
IMAGE = 1,
INPUT = 2,
PROGRESS_BAR = 3,
LABEL = 4,
@@ -32,12 +32,12 @@ namespace Thermo.Active.Model
public static string READ = "read";
public static string WRITE = "write";
}
public const int MIN_CMS_ROLE = 100;
public const int MIN_ADMIN_ROLE = 30;
public enum ROLE_IDS
{
{
CMS_SERVICE = 1,
CMS_UT = 2,
CUSTOMER_ADMIN = 3,
@@ -74,6 +74,41 @@ namespace Thermo.Active.Model
LASER = 3
}
public enum TACT_PARAM_TYPE
{
ND = 0,
General,
Positions,
Cycle,
Heats,
Pyrometer,
Drawing,
UpperPlate,
Cooling,
Vacuum,
Extraction,
Options
}
public enum TACT_MBLOCK_TYPE
{
ND = 0,
HEATING,
DRAWING,
MOVEMENT,
VACUUM,
COOLING,
EXTRACTION
}
public enum TACT_MBLOCK_SECTION
{
ND = 0,
HEATING,
FORMING,
EXTRACTION
}
public enum MAINTENANCE_UNIT_OF_MEASURE
{
mm = 0,
@@ -118,7 +153,7 @@ namespace Thermo.Active.Model
public const string FANUC = "FANUC";
public const string SIEMENS = "SIEMENS";
public const string OSAI = "OSAI";
public const string SIEMENS_S7 = "SIEMENS_S7";
public const string S7NET = "S7NET";
}
// Database config
@@ -163,10 +198,11 @@ namespace Thermo.Active.Model
}
// Config File Names
public static readonly string BASE_PATH = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
public static readonly string BASE_PATH = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
//public static readonly string BASE_PATH = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).Replace("\\lib", "");
#if DEBUG
public static readonly string CLIENT_PATH_64 = BASE_PATH + @"\Client_Debug\x64\" + CLIENT_EXE_NAME;
public static readonly string CLIENT_PATH_64 = BASE_PATH + @"\Client_Debug\x64\" + CLIENT_EXE_NAME;
public static readonly string CLIENT_PATH_86 = BASE_PATH + @"\Client_Debug\x84\" + CLIENT_EXE_NAME;
public static string WEBSITE_DIRECTORY = Path.Combine(BASE_PATH, "..", "wwwroot");
#else
@@ -175,6 +211,9 @@ namespace Thermo.Active.Model
public static string WEBSITE_DIRECTORY = BASE_PATH + "\\view";
#endif
public const string CONFIG_DIRECTORY = "Config\\";
public const string RECIPE_DIRECTORY = "Recipes\\";
public const string RECIPE_TEMPLATE_PATH = CONFIG_DIRECTORY + RECIPE_DIRECTORY + "template.json";
public const string LIVE_RECIPE_PATH = TEMP_FOLDER + RECIPE_DIRECTORY + "current.json";
public const string RESOURCE_DIRECTORY = @"Thermo.Active.Config.Config.";
public const string SERVER_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + @"serverConfigValidator.xsd";
public const string SERVER_CONFIG_PATH = CONFIG_DIRECTORY + "serverConfig.xml";
@@ -182,7 +221,7 @@ namespace Thermo.Active.Model
public const string AREAS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "areasConfigValidator.xsd";
public const string AREAS_CONFIG_PATH = CONFIG_DIRECTORY + "areasConfig.xml";
public const string MAINTENANCES_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "maintenancesConfigValidator.xsd";
public const string MAINTENANCES_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "maintenancesConfigValidator.xsd";
public const string CUSTOMER_CONTACTS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "customerContactConfigValidator.xsd";
public const string MAINTENANCES_CONFIG_PATH = CONFIG_DIRECTORY + "maintenancesConfig.xml";
public const string CUSTOMER_CONTACTS = CMS_FOLDER_PATH + "ContactInfo.xml";
@@ -190,13 +229,22 @@ namespace Thermo.Active.Model
public const string USER_SOFTKEYS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "userSoftKeyConfigValidator.xsd";
public const string USER_SOFTKEYS_CONFIG_PATH = CONFIG_DIRECTORY + "userSoftKeyConfig.xml";
public const string ALARMS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "alarmsConfigValidator.xsd";
public const string ALARMS_CONFIG_PATH = CONFIG_DIRECTORY + "alarmsConfig.xml";
public const string HEADS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "headsConfigValidator.xsd";
public const string HEADS_CONFIG_PATH = CONFIG_DIRECTORY + "headsConfig.xml";
public const string RECIPE_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "recipeConfigValidator.xsd";
public const string RECIPE_CONFIG_PATH = CONFIG_DIRECTORY + "recipeConfig.xml";
public const string MODBLOCK_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "moduleBlockConfigValidator.xsd";
public const string MODBLOCK_CONFIG_PATH = CONFIG_DIRECTORY + "moduleBlockConfig.xml";
public const string RISK_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "risk2007Validator.xsd";
public const string RISK_CONFIG_PATH = CONFIG_DIRECTORY + "risk2007.xml";
public const string NC_SOFTKEYS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "ncSoftKeyConfigValidator.xsd";
public const string NC_SOFTKEYS_CONFIG_PATH = CONFIG_DIRECTORY + "ncSoftKeyConfig.xml";
@@ -208,6 +256,7 @@ namespace Thermo.Active.Model
public const string MAIN_PROGRAM_CONFIG_PATH = CONFIG_DIRECTORY + "customMainProgram.txt";
public static string LANGUAGE_PACK_DIRECTORY = BASE_PATH + "\\languages\\";
public static string LANGUAGE_SCHEMA_PATH = BASE_PATH + "\\LanguageValidator.xsd";
@@ -244,7 +293,16 @@ namespace Thermo.Active.Model
public const string SEND_QUEUE_DATA = "SEND_QUEUE_DATA";
public const string SEND_M155_DATA = "SEND_M155_DATA";
public const string SEND_SCADA_DATA = "SEND_SCADA_DATA";
public const string SEND_RECIPE_STATUS = "SEND_RECIPE_STATUS";
// MVVM Messages for Thermo active specs
public const string SEND_THERMO_RECIPE_FULL = "SEND_THERMO_RECIPE_FULL";
public const string SEND_THERMO_RECIPE_OVERWIEW = "SEND_THERMO_RECIPE_OVERWIEW";
public const string SEND_THERMO_MODULE_DATA = "SEND_THERMO_MODULE_DATA";
public const string SEND_THERMO_WARMERS_DATA = "SEND_THERMO_WARMERS_DATA";
public const string SEND_THERMO_AREA_DATA = "SEND_THERMO_AREA_DATA";
public const string SEND_THERMO_GAUGE_DATA = "SEND_THERMO_GAUGE_DATA";
public const string SEND_THERMO_PROD_INFO_DATA = "SEND_THERMO_PROD_INFO_DATA";
public const string SEND_THERMO_PROD_CYCLE_DATA = "SEND_THERMO_PROD_CYCLE_DATA";
public const string BROADCAST_DATA = "BROADCAST_DATA";
@@ -281,22 +339,22 @@ namespace Thermo.Active.Model
public const string PASSWORD_IS_INVALID = "error_password_is_invalid";
public const string IMPORT_FILE_NOT_VALID = "error_import_file_not_valid";
public const string DUPLICATED_USERNAME = "error_duplicated_username";
public const string CUSTOMER_FILE_INVALID = "contactinfo_error_customer_configfile";
public const string CUSTOMER_FILE_INVALID = "contactinfo_error_customer_configfile";
}
// File paths
public const string CLIENT_EXE_NAME = @"Active_Client.exe";
public const string CLIENT_EXE_NAME_NOEXT = @"Active_Client";
public const string CLIENT_EXE_NAME_NOEXT = @"Active_Client";
public const string MAINTENANCE_ATTACHMENT_PATH = @"C:\CMS\Active\attachment\maintenance\";
public const string CMS_FOLDER_PATH = @"C:\CMS\";
public const string ALARM_ATTACHMENT_PATH = @"C:\CMS\Active\attachment\alarm\";
public const string TEMP_FOLDER = @"C:\CMS\Active\TMP\";
public const string TEMP_FOLDER = @"C:\CMS\ThermoActive\TMP\";
public const string TEMP_PP_FOLDER = TEMP_FOLDER + @"pp\";
public const string JOB_TMP_DIRECTORY = TEMP_PP_FOLDER + @"job\";
public const string JOB_TMP_DIRECTORY = TEMP_PP_FOLDER + @"job\";
public const string QUEUE_TMP_FOLDER = TEMP_PP_FOLDER + @"queue\";
public const string PART_PRG_IMAGES = TEMP_FOLDER + @"pp_img\";
public const string PART_PRG_IMAGES = TEMP_FOLDER + @"pp_img\";
public const string SCADA_DIRECTORY = @"C:\CMS\Active\scada\";
public static readonly string[] VALID_FILE_EXTENSIONS = { "", ".txt", ".cnc", ".ini", ".mpf", ".spf" };
@@ -324,7 +382,7 @@ namespace Thermo.Active.Model
"dd/MM/yyyy",
"MM/dd/yyyy",
"dd.MM.yyyy",
"MM.dd.yyyy"
"MM.dd.yyyy"
};
}
}
@@ -0,0 +1,33 @@
using CMS_CORE_Library.Models;
using System.Linq;
using static CMS_CORE_Library.Models.DataStructures;
using static CMS_CORE_Library.Models.ThermoModels;
namespace Thermo.Active.Model.DTOModels
{
public class DTOGaugeDataModel : GaugeModel
{
public override bool Equals(object obj)
{
if (!(obj is DTOGaugeDataModel item))
return false;
if (TimeAdv != item.TimeAdv)
return false;
if (Power != item.Power)
return false;
if (Vacuum != item.Vacuum)
return false;
if (Air != item.Air)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
@@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThModules
{
public class DTOModule
{
public int Id { get; set; } = 0;
public int ActualDuration { get; set; } = 0;
public int ActualDelay { get; set; } = 0;
public int EstimDuration { get; set; } = 0;
public int EstimDelay { get; set; } = 0;
public List<int> PrevModId { get; set; } = new List<int>();
public RBStatus Status { get; set; }
public override bool Equals(object obj)
{
if (!(obj is DTOModule item))
return false;
if (Id!= item.Id)
return false;
if (ActualDuration != item.ActualDuration)
return false;
if (ActualDelay != item.ActualDelay)
return false;
if (PrevModId != item.PrevModId)
return false;
if (EstimDelay != item.EstimDelay)
return false;
if (!Status.Equals(item.Status))
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public struct RBStatus
{
public bool Visible { get; set; }
public bool Executing { get; set; }
public bool HasError { get; set; }
public override bool Equals(object obj)
{
if (!(obj is RBStatus item))
return false;
if (Visible != item.Visible)
return false;
if (Executing != item.Executing)
return false;
if (HasError != item.HasError)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThModules
{
public class DTOModuleConfigModel
{
public int Id;
public string Label;
public BlockType Type;
public BlockSection Section;
public int IdMainParam = -1; // -1 = non visibile
public bool DelayVisible;
public int VisualPriority;
}
public enum BlockType
{
HEATING,
DRAWING,
MOVEMENT,
VACUUM,
COOLING,
EXTRACTION
}
public enum BlockSection
{
HEATING,
FORMING,
EXTRACTION
}
}
@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Model.DTOModels.ThModules
{
public class DTOModulesBlock
{
public int Id { get; set; } = 0;
public string LocalizedLabel { get; set; } = "";
public TACT_MBLOCK_TYPE Type { get; set; } = TACT_MBLOCK_TYPE.ND;
public TACT_MBLOCK_SECTION Section { get; set; } = TACT_MBLOCK_SECTION.ND;
public int IdParam { get; set; } = 0;
public bool ShowDelay { get; set; } = false;
public int Priority { get; set; } = 0;
public int ActualDelay { get; set; } = 0;
public int ActualDuration { get; set; } = 0;
public int EstimatedDelay { get; set; } = 0;
public int EstimatedDuration { get; set; } = 0;
public List<short> PrecedingId { get; set; } = new List<short>();
public bool Visible { get; set; } = false;
public bool Running { get; set; } = false;
public bool HasError { get; set; } = false;
public override bool Equals(object obj)
{
if (!(obj is DTOModulesBlock item))
return false;
if (Id!= item.Id)
return false;
if (LocalizedLabel != item.LocalizedLabel)
return false;
if (Type != item.Type)
return false;
if (Section != item.Section)
return false;
if (IdParam != item.IdParam)
return false;
if (ShowDelay != item.ShowDelay)
return false;
if (Priority != item.Priority)
return false;
if (ActualDelay != item.ActualDelay)
return false;
if (ActualDuration != item.ActualDuration)
return false;
if (EstimatedDelay != item.EstimatedDelay)
return false;
if (EstimatedDuration != item.EstimatedDuration)
return false;
if (!Enumerable.SequenceEqual(PrecedingId,item.PrecedingId))
return false;
if (Visible != item.Visible)
return false;
if (Running != item.Running)
return false;
if (HasError != item.HasError)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThProd
{
public enum Status
{
ND = 0,
IDLE,
RUNNING,
HOLD,
ALARM
}
public enum Mode
{
ND = -1,
NOT_READY,
MANUAL,
AUTO,
SETUP
}
public enum SubMode
{
ND = 0,
SHEET,
CYCLE_EMPTY,
PRE_WARM
}
public class DTOProdCycle
{
}
}
@@ -0,0 +1,18 @@
using System.Collections.Generic;
using Thermo.Active.Model.ConfigModels;
namespace Thermo.Active.Model.DTOModels.ThRecipe
{
public class DTORecipeConfigModel
{
public int Id;
public string Category;
public string SubCategory_1;
public string SubCategory_2;
public string Name;
public string Description;
public string Format;
public string Label;
public int ScaleFactor;
}
}
@@ -0,0 +1,19 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThRecipe
{
[JsonConverter(typeof(StringEnumConverter))]
public enum RecipeCatStatus
{
Unchanged = 0,
ChangedOk,
HasError
}
}
@@ -0,0 +1,98 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThRecipe
{
public class DTORecipeParam
{
public int Id { get; set; } = 0;
public double SetpointHMI { get; set; } = 0;
public double SetpointPLC { get; set; } = 0;
public RPRange Range { get; set; }
public RPStatus Status { get; set; }
public string UnitMeasure { get; set; }
public double ValueAct { get; set; }
public int ScaleFactor { get; set; }
public override bool Equals(object obj)
{
if (!(obj is DTORecipeParam item))
return false;
if (Id!= item.Id)
return false;
if (SetpointHMI != item.SetpointHMI)
return false;
if (SetpointPLC != item.SetpointPLC)
return false;
if (!Range.Equals(item.Range))
return false;
if (!Status.Equals(item.Status))
return false;
if (UnitMeasure != item.UnitMeasure)
return false;
if (ValueAct != item.ValueAct)
return false;
if (ScaleFactor != item.ScaleFactor)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public struct RPRange
{
public double Min { get; set; }
public double Max { get; set; }
public override bool Equals(object obj)
{
if (!(obj is RPRange item))
return false;
if (Min != item.Min)
return false;
if (Max != item.Max)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public struct RPStatus
{
public bool Visible { get; set; }
public bool Enabled { get; set; }
public bool HasError { get; set; }
public override bool Equals(object obj)
{
if (!(obj is RPStatus item))
return false;
if (Visible != item.Visible)
return false;
if (Enabled != item.Enabled)
return false;
if (HasError != item.HasError)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DTOModels.ThWarmers
{
public class DTOWarmers
{
public int IdChannel { get; set; } = 0;
public int IdReflector { get; set; } = 0;
public int SetpointHMI { get; set; } = 0;
public int SetpointTermocam { get; set; } = 0;
public int SetpointPLC { get; set; } = 0;
public int ChannelStatus { get; set; } = 0;
public double ActualCurrent { get; set; } = 0;
public int ActualPerc { get; set; } = 0;
public int MaxPower { get; set; } = 0;
public override bool Equals(object obj)
{
if (!(obj is DTOWarmers item))
return false;
if (IdChannel != item.IdChannel)
return false;
if (IdReflector != item.IdReflector)
return false;
if (SetpointHMI != item.SetpointHMI)
return false;
if (SetpointTermocam != item.SetpointTermocam)
return false;
if (SetpointPLC != item.SetpointPLC)
return false;
if (ChannelStatus != item.ChannelStatus)
return false;
if (ActualCurrent != item.ActualCurrent)
return false;
if (ActualPerc != item.ActualPerc)
return false;
if (MaxPower != item.MaxPower)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}
@@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Thermo.Active.Model.DatabaseModels
{
[Table("ProdInfo")]
public class ProdInfoModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Column("DtEvent", Order = 0)]
public DateTime DtEvent { get; set; }
[Column("NumTarget")]
public short NumTarget { get; set; }
[Column("NumDone")]
public short NumDone { get; set; }
[Column("TimeWarm")]
public int TimeWarm { get; set; }
[Column("TimeVent")]
public int TimeVent { get; set; }
[Column("TimeVacuum")]
public int TimeVacuum { get; set; }
[Column("TimeCycleGross")]
public int TimeCycleGross { get; set; }
[Column("TimeCycleNet")]
public int TimeCycleNet { get; set; }
[Column("MaterialTempEndWarm")]
public double MaterialTempEndWarm { get; set; }
[Column("MaterialTempEndVent")]
public double MaterialTempEndVent { get; set; }
[Column("MoldTemp")]
public double MoldTemp { get; set; }
[Column("VacuumReadVal")]
public double VacuumReadVal { get; set; }
[Column("MouldEnergyOUT")]
public double MouldEnergyOUT { get; set; }
[Column("MouldEnergyIN")]
public double MouldEnergyIN { get; set; }
}
}
+22 -3
View File
@@ -33,9 +33,6 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CMS_CORE_Library">
<HintPath>..\Libs\CMS_CORE_Library.dll</HintPath>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath>
</Reference>
@@ -66,6 +63,9 @@
<Compile Include="ConfigModels\AlarmsConfigModel.cs" />
<Compile Include="ConfigModels\CmsConnectConfigModel.cs" />
<Compile Include="ConfigModels\ExtSoftwareModel.cs" />
<Compile Include="ConfigModels\ModBlockConfigModel.cs" />
<Compile Include="ConfigModels\RiskConfigModel.cs" />
<Compile Include="ConfigModels\RecipeConfigModel.cs" />
<Compile Include="ConfigModels\HeadsConfigModel.cs" />
<Compile Include="ConfigModels\MaintenanceConfigModel.cs" />
<Compile Include="ConfigModels\NcSoftKeysModel.cs" />
@@ -89,6 +89,7 @@
<Compile Include="DatabaseModels\NcOffsetModel.cs" />
<Compile Include="DatabaseModels\NcFamilyModel.cs" />
<Compile Include="DatabaseModels\PerformedMaintenanceModel.cs" />
<Compile Include="DatabaseModels\ProdInfoModel.cs" />
<Compile Include="DatabaseModels\QueueItemsModel.cs" />
<Compile Include="DatabaseModels\RoleModel.cs">
<Generator>DtsGenerator</Generator>
@@ -97,12 +98,19 @@
<Compile Include="DatabaseModels\MachineUserModel.cs" />
<Compile Include="DatabaseModels\SessionModel.cs" />
<Compile Include="DTOModels\AlarmModels\DTONewAlarmNoteModel.cs" />
<Compile Include="DTOModels\DTOGaugeDataModel.cs" />
<Compile Include="DTOModels\DTOActiveProgramInfoModel.cs" />
<Compile Include="DTOModels\AlarmModels\DTOAlarmHistoricModel.cs" />
<Compile Include="DTOModels\AlarmModels\DTOAlarmsModel.cs" />
<Compile Include="DTOModels\DTOAxesModel.cs" />
<Compile Include="DTOModels\DTOAxisNameModel.cs" />
<Compile Include="DTOModels\DTOClientConfigurationModel.cs" />
<Compile Include="DTOModels\ThModules\DTOModule.cs" />
<Compile Include="DTOModels\ThModules\DTOModuleConfigModel.cs" />
<Compile Include="DTOModels\ThModules\DTOModulesBlock.cs" />
<Compile Include="DTOModels\ThWarmers\DTOWarmers.cs" />
<Compile Include="DTOModels\ThRecipe\DTORecipeParam.cs" />
<Compile Include="DTOModels\ThRecipe\DTORecipeConfigModel .cs" />
<Compile Include="DTOModels\DTONetworkMonitor.cs" />
<Compile Include="DTOModels\DTOCmsConnectGateway.cs" />
<Compile Include="DTOModels\JobModels\DTOGenericParamModel.cs" />
@@ -112,6 +120,7 @@
<Compile Include="DTOModels\DTOQueueModel.cs" />
<Compile Include="DTOModels\JobModels\DTOMetadataFieldsModel.cs" />
<Compile Include="DTOModels\JobModels\DTOMetadataModel.cs" />
<Compile Include="DTOModels\ThRecipe\DTORecipeOverview.cs" />
<Compile Include="DTOModels\Scada\DTOScadaModel.cs" />
<Compile Include="DTOModels\Scada\ScadaSchemaModel.cs" />
<Compile Include="DTOModels\MaintenanceModels\DTOExpiredMaintenanceModel.cs" />
@@ -134,6 +143,7 @@
<Compile Include="DTOModels\MaintenanceModels\DTOMaintenanceNoteModel.cs" />
<Compile Include="DTOModels\MaintenanceModels\DTONewMaintenanceModel.cs" />
<Compile Include="DatabaseModels\MaintenanceNoteModel.cs" />
<Compile Include="DTOModels\ThProd\DTOProdCycle.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="DatabaseModels\UserModel.cs">
<Generator>DtsGenerator</Generator>
@@ -152,6 +162,15 @@
<None Include="App.config" />
<None Include="packages.config" />
</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>
</ItemGroup>
<ItemGroup>
<Folder Include="DTOModels\Recipe\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>
File diff suppressed because it is too large Load Diff
+107 -53
View File
@@ -19,6 +19,61 @@ namespace Thermo.Active.NC
{
public class NcFileAdapter : NcAdapter
{
/// <summary>
/// Read file from local devices ad give back string content
/// </summary>
/// <param name="path"></param>
/// <param name="fileContent"></param>
/// <returns></returns>
public CmsError ReadFileContent(string path, out string fileContent)
{
// init
fileContent = "";
if (!string.IsNullOrEmpty(path))
{
// check existing
if (File.Exists(path))
{
// read all lines as string
fileContent = File.ReadAllText(path);
}
else
{
return FILE_NOT_FOUND_ERROR;
}
}
else
{
return FILE_NOT_FOUND_ERROR;
}
return NO_ERROR;
}
/// <summary>
/// Save string content to file
/// </summary>
/// <param name="path"></param>
/// <param name="fileContent"></param>
/// <returns></returns>
public CmsError WriteFileContent(string path, string fileContent)
{
if (!string.IsNullOrEmpty(path))
{
if (!string.IsNullOrEmpty(fileContent))
{
File.WriteAllText(path, fileContent);
}
}
else
{
return FILE_NOT_FOUND_ERROR;
}
return NO_ERROR;
}
public CmsError GetFileList(string path, out List<PreviewFileModel> fileList)
{
fileList = new List<PreviewFileModel>();
@@ -28,21 +83,20 @@ namespace Thermo.Active.NC
public CmsError GetFileInfo(string path, out InfoFile fileInfo)
{
fileInfo = new InfoFile();
// CmsError cmsError = NO_ERROR;
// if (FileExistWithNc(path))
// cmsError = LocalPartProgramFileInfo(path, out fileInfo);
// libraryError = LocalPartProgramFileInfo(path, out fileInfo);
// else
// cmsError = numericalControl.FILES_RGetFileInfo(path, ref fileInfo);
// libraryError = numericalControl.FILES_RGetFileInfo(path, ref fileInfo);
CmsError cmsError = numericalControl.FILES_RGetFileInfo(path, ref fileInfo);
CmsError libraryError = numericalControl.FILES_RGetFileInfo(path, ref fileInfo);
if (cmsError.IsError())
return cmsError;
if (libraryError.IsError())
return libraryError;
string [] names = fileInfo.Name.Split('/');
if(names.Length > 0)
string[] names = fileInfo.Name.Split('/');
if (names.Length > 0)
{
string name = names.Last();
if (!String.IsNullOrWhiteSpace(name))
@@ -73,15 +127,15 @@ namespace Thermo.Active.NC
fileInfo = new DTOActiveImageAndNameDataModel();
PROGRAM_TYPE_ENUM program = PROGRAM_TYPE_ENUM.NONE;
CmsError cmsError = numericalControl.FILES_RGetProgramType(ref program);
if (cmsError.IsError())
return cmsError;
CmsError libraryError = numericalControl.FILES_RGetProgramType(ref program);
if (libraryError.IsError())
return libraryError;
// Get selected process
ushort selectedProcess = 0;
cmsError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (cmsError.IsError())
return cmsError;
libraryError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (libraryError.IsError())
return libraryError;
// JOB CASE
if (program == PROGRAM_TYPE_ENUM.JOB)
@@ -107,9 +161,9 @@ namespace Thermo.Active.NC
else
{
string name = "";
cmsError = numericalControl.PROC_RSelectedPPName(selectedProcess, ref name);
if (cmsError.IsError())
return cmsError;
libraryError = numericalControl.PROC_RSelectedPPName(selectedProcess, ref name);
if (libraryError.IsError())
return libraryError;
fileInfo = new DTOActiveImageAndNameDataModel()
{
@@ -164,13 +218,13 @@ namespace Thermo.Active.NC
dtoData = new DTOActiveProgramDataModel();
// Get selectedProcess process id
ushort selectedProcess = 0;
CmsError cmsError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (cmsError.IsError())
return cmsError;
CmsError libraryError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (libraryError.IsError())
return libraryError;
// Read active program data
ActiveProgramDataModel data = new ActiveProgramDataModel();
cmsError = numericalControl.FILES_RActiveProgramData(selectedProcess, ref data);
libraryError = numericalControl.FILES_RActiveProgramData(selectedProcess, ref data);
dtoData = new DTOActiveProgramDataModel()
{
@@ -179,7 +233,7 @@ namespace Thermo.Active.NC
TimeLeft = data.TimeLeft
};
return cmsError; // TODO FIX OSAI
return libraryError; // TODO FIX OSAI
}
public CmsError SetActiveProgramInfo(string path, out DTOActiveProgramDataModel dtoData)
@@ -187,12 +241,12 @@ namespace Thermo.Active.NC
dtoData = new DTOActiveProgramDataModel();
// Get selectedProcess process id
ushort selectedProcess = 1;
CmsError cmsError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
//if (cmsError.IsError())
// return cmsError;
CmsError libraryError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
//if (libraryError.IsError())
// return libraryError;
ActiveProgramDataModel data = new ActiveProgramDataModel();
cmsError = numericalControl.FILES_WSetActiveProgram(selectedProcess, path, ref data);
libraryError = numericalControl.FILES_WSetActiveProgram(selectedProcess, path, ref data);
dtoData = new DTOActiveProgramDataModel()
{
@@ -201,7 +255,7 @@ namespace Thermo.Active.NC
TimeLeft = data.TimeLeft
};
return cmsError;
return libraryError;
}
public CmsError DeactivateProgram(out DTOActiveProgramDataModel dtoData)
@@ -209,12 +263,12 @@ namespace Thermo.Active.NC
dtoData = new DTOActiveProgramDataModel();
// Get selectedProcess process id
ushort selectedProcess = 0;
CmsError cmsError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (cmsError.IsError())
return cmsError;
CmsError libraryError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (libraryError.IsError())
return libraryError;
ActiveProgramDataModel data = new ActiveProgramDataModel();
cmsError = numericalControl.FILES_WDeactivateProgram(selectedProcess);
libraryError = numericalControl.FILES_WDeactivateProgram(selectedProcess);
dtoData = new DTOActiveProgramDataModel()
{
@@ -223,21 +277,21 @@ namespace Thermo.Active.NC
TimeLeft = data.TimeLeft
};
return cmsError;
return libraryError;
}
public CmsError UploadPartProgram(string localPath, string fileName, out string newFilePath)
{
// Upload to NC
newFilePath = "";
CmsError cmsError = numericalControl.FILES_UploadPartProgram(localPath, fileName, ref newFilePath);
if (cmsError.IsError())
return cmsError;
CmsError libraryError = numericalControl.FILES_UploadPartProgram(localPath, fileName, ref newFilePath);
if (libraryError.IsError())
return libraryError;
// Delete local file
File.Delete(localPath + "\\" + fileName);
return cmsError;
return libraryError;
}
public CmsError UploadPartProgramAndActivate(string localPath, string fileName, out ActiveProgramDataModel programData)
@@ -246,16 +300,16 @@ namespace Thermo.Active.NC
// Get selectedProcess id
ushort selectedProcess = 0;
CmsError cmsError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (cmsError.IsError())
return cmsError;
CmsError libraryError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (libraryError.IsError())
return libraryError;
if (!JOB_EXTENSIONS.Contains(Path.GetExtension(fileName)))
{
// Upload to NC
cmsError = UploadPartProgram(localPath, fileName, out string newFilePath);
if (cmsError.IsError())
return cmsError;
libraryError = UploadPartProgram(localPath, fileName, out string newFilePath);
if (libraryError.IsError())
return libraryError;
// Custom part program management
//if(String.IsNullOrEmpty(CMSMainProgramContent))
@@ -280,9 +334,9 @@ namespace Thermo.Active.NC
// Get selectedProcess id
ushort selectedProcess = 0;
CmsError cmsError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (cmsError.IsError())
return cmsError;
CmsError libraryError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (libraryError.IsError())
return libraryError;
queueItem = new DTOQueueModel()
{
@@ -307,7 +361,7 @@ namespace Thermo.Active.NC
queueController.UpdateQueue();
}
return cmsError;
return libraryError;
}
public CmsError UpdateQueue()
@@ -315,7 +369,7 @@ namespace Thermo.Active.NC
// Get queue data
List<QueueStatusModel> queueData = new List<QueueStatusModel>();
CmsError cmsError = numericalControl.FILES_RQueueData(ref queueData);
CmsError libraryError = numericalControl.FILES_RQueueData(ref queueData);
foreach (var item in queueData)
{
@@ -360,14 +414,14 @@ namespace Thermo.Active.NC
}
else
// Upload & activate new part program
cmsError = numericalControl
libraryError = numericalControl
.FILES_WLoadNextPartProgram(
PartProgramQueue[item.ProcessId][QueueRunningIndexes[item.ProcessId]].AbsolutePath,
QUEUE_FILE_NAME
);
if (cmsError.IsError())
return cmsError;
if (libraryError.IsError())
return libraryError;
}
}
}
@@ -396,9 +450,9 @@ namespace Thermo.Active.NC
queueList = new List<DTOQueueModel>();
// Get selected process
ushort selectedProcess = 0;
CmsError cmsError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (cmsError.IsError())
return cmsError;
CmsError libraryError = numericalControl.PROC_RSelectedProcess(ref selectedProcess);
if (libraryError.IsError())
return libraryError;
queueList = new List<DTOQueueModel>();
// Check if there is already a pp queue
+4 -4
View File
@@ -32,10 +32,6 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CMS_CORE_Library, Version=1.1.0.0, Culture=neutral, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libs\CMS_CORE_Library.dll</HintPath>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<Reference Include="System" />
<Reference Include="System.Core" />
@@ -70,6 +66,10 @@
</None>
</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>
+13 -13
View File
@@ -40,6 +40,7 @@ namespace Thermo.Active.UI
this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator();
this.resetSpindleHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.resetCountersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.resetMachineWorkingHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.StopServerItem = new System.Windows.Forms.ToolStripMenuItem();
this.TXTstatus = new System.Windows.Forms.TextBox();
@@ -67,7 +68,6 @@ namespace Thermo.Active.UI
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.resetSpindleHoursToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.resetCountersToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.resetMachineWorkingHoursToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.resetMachineWorkingHoursToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.NotifyIconMenu.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
@@ -146,6 +146,14 @@ namespace Thermo.Active.UI
this.resetCountersToolStripMenuItem.Visible = false;
this.resetCountersToolStripMenuItem.Click += new System.EventHandler(this.resetCountersToolStripMenuItem_Click);
//
// resetMachineWorkingHoursToolStripMenuItem
//
this.resetMachineWorkingHoursToolStripMenuItem.Name = "resetMachineWorkingHoursToolStripMenuItem";
this.resetMachineWorkingHoursToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.resetMachineWorkingHoursToolStripMenuItem.Text = "Reset Machine Working Hours";
this.resetMachineWorkingHoursToolStripMenuItem.Visible = false;
this.resetMachineWorkingHoursToolStripMenuItem.Click += new System.EventHandler(this.resetMachineWorkingHoursToolStripMenuItem_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
@@ -315,6 +323,7 @@ namespace Thermo.Active.UI
this.columnHeader2});
this.tableLayoutPanel1.SetColumnSpan(this.LISTThreadStatus, 2);
this.LISTThreadStatus.Dock = System.Windows.Forms.DockStyle.Fill;
this.LISTThreadStatus.HideSelection = false;
this.LISTThreadStatus.Location = new System.Drawing.Point(3, 3);
this.LISTThreadStatus.Name = "LISTThreadStatus";
this.LISTThreadStatus.Size = new System.Drawing.Size(438, 283);
@@ -355,14 +364,14 @@ namespace Thermo.Active.UI
// closeCMSServerToolStripMenuItem
//
this.closeCMSServerToolStripMenuItem.Name = "closeCMSServerToolStripMenuItem";
this.closeCMSServerToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.closeCMSServerToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
this.closeCMSServerToolStripMenuItem.Text = "Close Active Server";
this.closeCMSServerToolStripMenuItem.Click += new System.EventHandler(this.closeCMSServerToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(177, 6);
this.toolStripSeparator2.Size = new System.Drawing.Size(171, 6);
//
// serviceToolStripMenuItem
//
@@ -374,7 +383,7 @@ namespace Thermo.Active.UI
this.resetCountersToolStripMenuItem1,
this.resetMachineWorkingHoursToolStripMenuItem1});
this.serviceToolStripMenuItem.Name = "serviceToolStripMenuItem";
this.serviceToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.serviceToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
this.serviceToolStripMenuItem.Text = "Service";
//
// passwordToolStripMenuItem1
@@ -416,14 +425,6 @@ namespace Thermo.Active.UI
this.resetCountersToolStripMenuItem1.Visible = false;
this.resetCountersToolStripMenuItem1.Click += new System.EventHandler(this.resetCountersToolStripMenuItem1_Click);
//
// resetMachineWorkingHoursToolStripMenuItem
//
this.resetMachineWorkingHoursToolStripMenuItem.Name = "resetMachineWorkingHoursToolStripMenuItem";
this.resetMachineWorkingHoursToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
this.resetMachineWorkingHoursToolStripMenuItem.Text = "Reset Machine Working Hours";
this.resetMachineWorkingHoursToolStripMenuItem.Visible = false;
this.resetMachineWorkingHoursToolStripMenuItem.Click += new System.EventHandler(this.resetMachineWorkingHoursToolStripMenuItem_Click);
//
// resetMachineWorkingHoursToolStripMenuItem1
//
this.resetMachineWorkingHoursToolStripMenuItem1.Name = "resetMachineWorkingHoursToolStripMenuItem1";
@@ -440,7 +441,6 @@ namespace Thermo.Active.UI
this.Controls.Add(this.menuStrip1);
this.Controls.Add(this.tableLayoutPanel1);
this.ForeColor = System.Drawing.SystemColors.ControlText;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.menuStrip1;
this.Margin = new System.Windows.Forms.Padding(2);
+4 -4
View File
@@ -34,10 +34,6 @@
<ApplicationIcon>Resources\CMS_Icon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="CMS_CORE_Library, Version=1.1.0.0, Culture=neutral, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libs\CMS_CORE_Library.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
@@ -139,6 +135,10 @@
</EmbeddedResource>
</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>
+1 -1
View File
@@ -6,7 +6,7 @@ using System.Windows.Forms;
using Thermo.Active.Model;
using TeamDev.SDK.MVVM;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Utils.StepLogger;
using static Thermo.Active.Utils.ThermoActiveLogger;
namespace Thermo.Active.Utils
{
@@ -32,10 +32,6 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CMS_CORE_Library, Version=1.1.0.0, Culture=neutral, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Libs\CMS_CORE_Library.dll</HintPath>
</Reference>
<Reference Include="MySql.Data, Version=6.10.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.6.10.4\lib\net452\MySql.Data.dll</HintPath>
</Reference>
@@ -73,7 +69,7 @@
<Compile Include="ExceptionManager.cs" />
<Compile Include="LanguageController.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="StepLogger.cs" />
<Compile Include="ThermoActiveLogger.cs" />
<Compile Include="SupportFunctions.cs" />
</ItemGroup>
<ItemGroup>
@@ -146,6 +142,10 @@
<None Include="packages.config" />
</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.Model\Thermo.Active.Model.csproj">
<Project>{631375DD-06D3-49BB-8130-D9DDB34C429D}</Project>
<Name>Thermo.Active.Model</Name>
@@ -4,7 +4,7 @@ using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Utils
{
public static class StepLogger
public static class ThermoActiveLogger
{
private static Logger Log = LogManager.GetCurrentClassLogger();
+58 -10
View File
@@ -20,7 +20,7 @@ namespace Thermo.Active.Utils
{
private static readonly string CMSCONNECT_TOKEN = "59f1qik5PYfiJLiXZ4xZ05pjzx5E9FscQWtj4lmfLKXaF1OAxkvu7ziBzXFBuuVQ";
public static SOFTKEY_TYPE GetSoftKeyType(string type)
public static SOFTKEY_TYPE GetSoftKeyType(string type)
{
switch (type)
{
@@ -39,6 +39,51 @@ namespace Thermo.Active.Utils
default: return HEAD_TYPE.WJ;
}
}
/// <summary>
/// Conversion string --> TACT_PARAM_TYPE
/// </summary>
/// <param name="strValue"></param>
/// <returns></returns>
public static TACT_PARAM_TYPE GetTActParamType(string strValue)
{
TACT_PARAM_TYPE answ = TACT_PARAM_TYPE.ND;
try
{
answ = (TACT_PARAM_TYPE)Enum.Parse(typeof(TACT_PARAM_TYPE), strValue);
}
catch { }
return answ;
}
/// <summary>
/// Conversion string --> TACT_MBLOCK_TYPE
/// </summary>
/// <param name="strValue"></param>
/// <returns></returns>
public static TACT_MBLOCK_TYPE GetTActMB_Type(string strValue)
{
TACT_MBLOCK_TYPE answ = TACT_MBLOCK_TYPE.ND;
try
{
answ = (TACT_MBLOCK_TYPE)Enum.Parse(typeof(TACT_MBLOCK_TYPE), strValue);
}
catch { }
return answ;
}
/// <summary>
/// Conversion string --> TACT_MBLOCK_SECTION
/// </summary>
/// <param name="strValue"></param>
/// <returns></returns>
public static TACT_MBLOCK_SECTION GetTActMB_Section(string strValue)
{
TACT_MBLOCK_SECTION answ = TACT_MBLOCK_SECTION.ND;
try
{
answ = (TACT_MBLOCK_SECTION)Enum.Parse(typeof(TACT_MBLOCK_SECTION), strValue);
}
catch { }
return answ;
}
public static int GetPlcIdFromNcSoftKey(string softKey)
{
@@ -72,7 +117,7 @@ namespace Thermo.Active.Utils
case "xTen": return 26;
case "xHundred": return 27;
case "xThousand": return 28;
case "overstroke": return 30;
case "overstroke": return 30;
case "feedByPass": return 31;
default: return -1;
}
@@ -153,7 +198,7 @@ namespace Thermo.Active.Utils
List<short> listOfPossibleIds = Enumerable.Range(1, objIds.Max() + 1).Select(x => (short)x).ToList();
IEnumerable<short> res = listOfPossibleIds.Except(objIds).ToList();
IEnumerable<short> res = listOfPossibleIds.Except(objIds).ToList();
if (res.Count() > 0)
return res.First();
@@ -162,7 +207,7 @@ namespace Thermo.Active.Utils
}
public static string GetImageBase64String(string directoryPath, string imageName)
{
{
string fileName = Path.GetFileNameWithoutExtension(imageName);
foreach (string ext in VALID_IMAGE_EXTENSIONS)
{
@@ -199,7 +244,7 @@ namespace Thermo.Active.Utils
return null;
EmptyFolder(jobFolderPath);
using (ZipArchive zipExtractor = ZipFile.OpenRead(filePath))
{
// Setup main job fields
@@ -307,7 +352,7 @@ namespace Thermo.Active.Utils
string filePath = JOB_TMP_DIRECTORY + "\\" + processId + "\\";
if (!Directory.Exists(filePath))
return null;
// Setup main Fields
DTOJobModel jobData = new DTOJobModel()
{
@@ -372,7 +417,7 @@ namespace Thermo.Active.Utils
return SCADA_MEM_TYPE.WORD;
case "INT":
return SCADA_MEM_TYPE.INT;
return SCADA_MEM_TYPE.INT;
case "REAL":
return SCADA_MEM_TYPE.REAL;
@@ -407,7 +452,7 @@ namespace Thermo.Active.Utils
public static string GetSoftwareVersionAndBuildDate()
{
Version v = Assembly.GetEntryAssembly()?.GetName().Version;
Version v = Assembly.GetEntryAssembly()?.GetName().Version;
if (v != null)
{
// Get first 2 number of the version
@@ -424,7 +469,7 @@ namespace Thermo.Active.Utils
return "";
}
public static Boolean DecodeCMSConnectGatewayLogin(string encryptedString, out string login, out string password)
{
@@ -496,7 +541,10 @@ namespace Thermo.Active.Utils
{
intMachineVal = 0;
containsLetters = Regex.IsMatch(machineNumber, @".*?[a-zA-Z].*?");
if (string.IsNullOrEmpty(machineNumber))
{
machineNumber = "0000";
}
if (containsLetters)
// Convert ASCII string to a single INT
intMachineVal = SupportFunctions.ConvertAsciiStringToInt(machineNumber);
+101
View File
@@ -39,11 +39,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client.Chromium", "Client.C
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thermo.Active.CmsConnectGateway", "Thermo.Active.CmsConnectGateway\Thermo.Active.CmsConnectGateway.csproj", "{49B04D99-0ECD-4900-86D3-7098D61314D7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CMS_CORE_Library", "..\cms_core_library\CMS_CORE_Library\CMS_CORE_Library.csproj", "{4ABF8EEF-2B23-483E-ACDC-53214FE28681}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Debug2|Any CPU = Debug2|Any CPU
Debug2|x64 = Debug2|x64
Debug2|x86 = Debug2|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
@@ -55,6 +60,12 @@ Global
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Debug|x64.Build.0 = Debug|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Debug|x86.ActiveCfg = Debug|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Debug|x86.Build.0 = Debug|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Debug2|x64.ActiveCfg = Debug|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Debug2|x64.Build.0 = Debug|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Debug2|x86.ActiveCfg = Debug|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Debug2|x86.Build.0 = Debug|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Release|Any CPU.Build.0 = Release|Any CPU
{AFED34E1-77DB-4D81-830A-A8D0A190573D}.Release|x64.ActiveCfg = Release|Any CPU
@@ -67,6 +78,12 @@ Global
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Debug|x64.Build.0 = Debug|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Debug|x86.ActiveCfg = Debug|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Debug|x86.Build.0 = Debug|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Debug2|x64.ActiveCfg = Debug|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Debug2|x64.Build.0 = Debug|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Debug2|x86.ActiveCfg = Debug|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Debug2|x86.Build.0 = Debug|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Release|Any CPU.Build.0 = Release|Any CPU
{631375DD-06D3-49BB-8130-D9DDB34C429D}.Release|x64.ActiveCfg = Release|Any CPU
@@ -79,6 +96,12 @@ Global
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Debug|x64.Build.0 = Debug|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Debug|x86.ActiveCfg = Debug|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Debug|x86.Build.0 = Debug|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Debug2|x64.ActiveCfg = Debug|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Debug2|x64.Build.0 = Debug|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Debug2|x86.ActiveCfg = Debug|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Debug2|x86.Build.0 = Debug|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Release|Any CPU.Build.0 = Release|Any CPU
{20FC0937-E7CA-4693-95F9-7A948EFD173B}.Release|x64.ActiveCfg = Release|Any CPU
@@ -91,6 +114,12 @@ Global
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Debug|x64.Build.0 = Debug|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Debug|x86.ActiveCfg = Debug|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Debug|x86.Build.0 = Debug|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Debug2|x64.ActiveCfg = Debug|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Debug2|x64.Build.0 = Debug|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Debug2|x86.ActiveCfg = Debug|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Debug2|x86.Build.0 = Debug|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Release|Any CPU.Build.0 = Release|Any CPU
{357D5EE1-FFC8-489B-9232-22CF474D9A6F}.Release|x64.ActiveCfg = Release|Any CPU
@@ -103,6 +132,12 @@ Global
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Debug|x64.Build.0 = Debug|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Debug|x86.ActiveCfg = Debug|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Debug|x86.Build.0 = Debug|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Debug2|x64.ActiveCfg = Debug|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Debug2|x64.Build.0 = Debug|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Debug2|x86.ActiveCfg = Debug|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Debug2|x86.Build.0 = Debug|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Release|Any CPU.Build.0 = Release|Any CPU
{3F5C2483-FC87-43EF-92A8-66FF7D0E440F}.Release|x64.ActiveCfg = Release|Any CPU
@@ -115,6 +150,12 @@ Global
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Debug|x64.Build.0 = Debug|x64
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Debug|x86.ActiveCfg = Debug|x86
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Debug|x86.Build.0 = Debug|x86
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Debug2|x64.ActiveCfg = Debug|x64
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Debug2|x64.Build.0 = Debug|x64
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Debug2|x86.ActiveCfg = Debug|x86
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Debug2|x86.Build.0 = Debug|x86
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Release|Any CPU.Build.0 = Release|Any CPU
{66FA29DB-925A-402B-A4C7-D3D780FB1BC3}.Release|x64.ActiveCfg = Release|x64
@@ -127,6 +168,12 @@ Global
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Debug|x64.Build.0 = Debug|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Debug|x86.ActiveCfg = Debug|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Debug|x86.Build.0 = Debug|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Debug2|x64.ActiveCfg = Debug|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Debug2|x64.Build.0 = Debug|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Debug2|x86.ActiveCfg = Debug|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Debug2|x86.Build.0 = Debug|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Release|Any CPU.Build.0 = Release|Any CPU
{CBEB631B-ABFA-4042-9779-C0060B0DFEFE}.Release|x64.ActiveCfg = Release|Any CPU
@@ -139,6 +186,12 @@ Global
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Debug|x64.Build.0 = Debug|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Debug|x86.ActiveCfg = Debug|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Debug|x86.Build.0 = Debug|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Debug2|x64.ActiveCfg = Debug|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Debug2|x64.Build.0 = Debug|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Debug2|x86.ActiveCfg = Debug|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Debug2|x86.Build.0 = Debug|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Release|Any CPU.ActiveCfg = Release|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Release|Any CPU.Build.0 = Release|Any CPU
{205A6ADE-FB5A-45CB-9C51-9817E7BB8939}.Release|x64.ActiveCfg = Release|Any CPU
@@ -151,6 +204,12 @@ Global
{34434B22-D546-4A5C-B575-49720C77643A}.Debug|x64.Build.0 = Debug|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Debug|x86.ActiveCfg = Debug|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Debug|x86.Build.0 = Debug|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Debug2|x64.ActiveCfg = Debug|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Debug2|x64.Build.0 = Debug|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Debug2|x86.ActiveCfg = Debug|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Debug2|x86.Build.0 = Debug|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Release|Any CPU.Build.0 = Release|Any CPU
{34434B22-D546-4A5C-B575-49720C77643A}.Release|x64.ActiveCfg = Release|Any CPU
@@ -163,6 +222,12 @@ Global
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Debug|x64.Build.0 = Debug|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Debug|x86.ActiveCfg = Debug|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Debug|x86.Build.0 = Debug|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Debug2|x64.ActiveCfg = Debug|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Debug2|x64.Build.0 = Debug|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Debug2|x86.ActiveCfg = Debug|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Debug2|x86.Build.0 = Debug|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Release|Any CPU.Build.0 = Release|Any CPU
{DE54FF4C-8390-4489-882A-1BC7D99EF185}.Release|x64.ActiveCfg = Release|Any CPU
@@ -175,6 +240,12 @@ Global
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Debug|x64.Build.0 = Debug|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Debug|x86.ActiveCfg = Debug|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Debug|x86.Build.0 = Debug|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Debug2|x64.ActiveCfg = Debug|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Debug2|x64.Build.0 = Debug|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Debug2|x86.ActiveCfg = Debug|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Debug2|x86.Build.0 = Debug|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Release|Any CPU.Build.0 = Release|Any CPU
{B2366B08-96BD-4F6B-B748-B45089B87A14}.Release|x64.ActiveCfg = Release|Any CPU
@@ -187,6 +258,12 @@ Global
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Debug|x64.Build.0 = Debug|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Debug|x86.ActiveCfg = Debug|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Debug|x86.Build.0 = Debug|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Debug2|x64.ActiveCfg = Debug|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Debug2|x64.Build.0 = Debug|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Debug2|x86.ActiveCfg = Debug|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Debug2|x86.Build.0 = Debug|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Release|Any CPU.Build.0 = Release|Any CPU
{F9F17F23-660E-488C-A7FA-6A5B35D64313}.Release|x64.ActiveCfg = Release|Any CPU
@@ -199,12 +276,36 @@ Global
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Debug|x64.Build.0 = Debug|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Debug|x86.ActiveCfg = Debug|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Debug|x86.Build.0 = Debug|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Debug2|Any CPU.ActiveCfg = Debug|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Debug2|Any CPU.Build.0 = Debug|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Debug2|x64.ActiveCfg = Debug|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Debug2|x64.Build.0 = Debug|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Debug2|x86.ActiveCfg = Debug|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Debug2|x86.Build.0 = Debug|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Release|Any CPU.Build.0 = Release|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Release|x64.ActiveCfg = Release|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Release|x64.Build.0 = Release|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Release|x86.ActiveCfg = Release|Any CPU
{49B04D99-0ECD-4900-86D3-7098D61314D7}.Release|x86.Build.0 = Release|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x64.ActiveCfg = Debug|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x64.Build.0 = Debug|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x86.ActiveCfg = Debug|x86
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug|x86.Build.0 = Debug|x86
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug2|Any CPU.ActiveCfg = Debug2|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug2|Any CPU.Build.0 = Debug2|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug2|x64.ActiveCfg = Debug2|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug2|x64.Build.0 = Debug2|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug2|x86.ActiveCfg = Debug2|x86
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Debug2|x86.Build.0 = Debug2|x86
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|Any CPU.Build.0 = Release|Any CPU
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x64.ActiveCfg = Release|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x64.Build.0 = Release|x64
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x86.ActiveCfg = Release|x86
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+74 -1
View File
@@ -13,7 +13,7 @@
<appSettings>
<add key="enableDirectoryBrowsing" value="true" />
<add key="ClientSettingsProvider.ServiceUri" value="" />
<add key="ServerServiceName" value="MariaDB"/>
<add key="ServerServiceName" value="MariaDB" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.6.2" />
@@ -69,6 +69,11 @@
<assemblyIdentity name="System.Web.Cors" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
<probing privatePath="lib;libs" />
</assemblyBinding>
</runtime>
<connectionStrings>
@@ -81,4 +86,72 @@
</provider>
</providers>
</entityFramework>
<system.diagnostics>
<sources>
<source name="SignalR.SqlMessageBus">
<listeners>
<add name="SignalR-Bus" />
</listeners>
</source>
<source name="SignalR.ServiceBusMessageBus">
<listeners>
<add name="SignalR-Bus" />
</listeners>
</source>
<source name="SignalR.RedisMessageBus">
<listeners>
<add name="SignalR-Bus" />
</listeners>
</source>
<source name="SignalR.ScaleoutMessageBus">
<listeners>
<add name="SignalR-Bus" />
</listeners>
</source>
<source name="SignalR.Transports.WebSocketTransport">
<listeners>
<add name="SignalR-Transports" />
</listeners>
</source>
<source name="SignalR.Transports.ServerSentEventsTransport">
<listeners>
<add name="SignalR-Transports" />
</listeners>
</source>
<source name="SignalR.Transports.ForeverFrameTransport">
<listeners>
<add name="SignalR-Transports" />
</listeners>
</source>
<source name="SignalR.Transports.LongPollingTransport">
<listeners>
<add name="SignalR-Transports" />
</listeners>
</source>
<source name="SignalR.Transports.TransportHeartBeat">
<listeners>
<add name="SignalR-Transports" />
</listeners>
</source>
<source name="SignalR.ReflectedHubDescriptorProvider">
<listeners>
<add name="SignalR-Init" />
</listeners>
</source>
</sources>
<!-- Sets the trace verbosity level -->
<switches>
<add name="SignalRSwitch" value="Verbose" />
</switches>
<!-- Specifies the trace writer for output -->
<sharedListeners>
<!-- Listener for transport events -->
<add name="SignalR-Transports" type="System.Diagnostics.TextWriterTraceListener" initializeData="logs/transports.log" />
<!-- Listener for scaleout provider events -->
<add name="SignalR-Bus" type="System.Diagnostics.TextWriterTraceListener" initializeData="logs/bus.log" />
<!-- Listener for hub discovery events -->
<add name="SignalR-Init" type="System.Diagnostics.TextWriterTraceListener" initializeData="logs/init.log" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
</configuration>
+2 -2
View File
@@ -64,7 +64,7 @@ namespace Thermo.Active.App_Start
RequestPath = PathString.Empty,
FileSystem = new PhysicalFileSystem(WEBSITE_DIRECTORY)
};
app.UseFileServer(options);
if (!ServerPortIsAvailable(ServerStartupConfig.ServerPort))
{
@@ -106,7 +106,7 @@ namespace Thermo.Active.App_Start
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
map.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
Provider = new SignalROAuthBearerProvider(),
+1 -1
View File
@@ -33,7 +33,7 @@ namespace Thermo.Active
// hold additional metadata for an API. Version and title are required but you can also provide
// additional fields by chaining methods off SingleApiVersion.
//
c.SingleApiVersion("v1", "Step");
c.SingleApiVersion("v1", "ThermoActive");
// If you want the output Swagger docs to be indented properly, enable the "PrettyPrint" option.
//
+6 -6
View File
@@ -218,9 +218,9 @@ namespace Thermo.Active.Controllers.SignalR
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.WriteM155Data(process, responseVal);
if (cmsError.IsError())
throw new HubException(cmsError.localizationKey);
CmsError libraryError = ncAdapter.WriteM155Data(process, responseVal);
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
}
@@ -230,9 +230,9 @@ namespace Thermo.Active.Controllers.SignalR
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.WriteScada(memIndex, memType, value);
if (cmsError.IsError())
throw new HubException(cmsError.localizationKey);
CmsError libraryError = ncAdapter.WriteScada(memIndex, memType, value);
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
}
@@ -37,9 +37,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
// Get list of maintenances with user's permission
CmsError cmsError = ncAdapter.GetMaintenancesWithPermissions(out List<DTOMaintenanceModel> maintenances, Convert.ToInt32(userId.Value));
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.GetMaintenancesWithPermissions(out List<DTOMaintenanceModel> maintenances, Convert.ToInt32(userId.Value));
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(maintenances);
}
@@ -67,11 +67,11 @@ namespace Thermo.Active.Controllers.WebApi
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.GetMaintenanceDataById(dbMaint.MaintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel maintenance);
if (cmsError.IsError())
CmsError libraryError = ncAdapter.GetMaintenanceDataById(dbMaint.MaintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel maintenance);
if (libraryError.IsError())
{
maintenancesController.Delete(dbMaint);
return BadRequest(cmsError.localizationKey);
return BadRequest(libraryError.localizationKey);
}
PerformedMaintenanceModel performed = maintenancesController.PerformeMaintenance(maintenance.OriginalPlcCounter / 60, dbMaint.MaintenanceId, Convert.ToInt32(userId.Value), -2);
@@ -81,9 +81,9 @@ namespace Thermo.Active.Controllers.WebApi
return NotFound();
}
cmsError = ncAdapter.GetMaintenanceDataById(dbMaint.MaintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel endMaintenance);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
libraryError = ncAdapter.GetMaintenanceDataById(dbMaint.MaintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel endMaintenance);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(endMaintenance);
@@ -94,9 +94,9 @@ namespace Thermo.Active.Controllers.WebApi
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.GetMaintenanceDataById(dbMaint.MaintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel maintenance);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.GetMaintenanceDataById(dbMaint.MaintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel maintenance);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(maintenance);
}
@@ -139,9 +139,9 @@ namespace Thermo.Active.Controllers.WebApi
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.GetMaintenanceDataById(dbMaint.MaintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel maintenance);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.GetMaintenanceDataById(dbMaint.MaintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel maintenance);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(maintenance);
}
@@ -198,18 +198,18 @@ namespace Thermo.Active.Controllers.WebApi
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.GetMaintenanceDataById(maintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel maintData);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.GetMaintenanceDataById(maintenanceId, Convert.ToInt32(userId.Value), out DTOMaintenanceModel maintData);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
if (!maintData.CanPerform)
return Unauthorized();
using (MaintenancesController maintenancesController = new MaintenancesController())
{
cmsError = ncAdapter.GetNcGenericData(out DTONcGenericDataModel data);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
libraryError = ncAdapter.GetNcGenericData(out DTONcGenericDataModel data);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
int controlWord = -1;
if (maintData.CreatedByCms)
@@ -225,9 +225,9 @@ namespace Thermo.Active.Controllers.WebApi
if (performed == null)
return NotFound();
cmsError = ncAdapter.GetMaintenanceDataById(maintenanceId, Convert.ToInt32(userId.Value), out maintData);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
libraryError = ncAdapter.GetMaintenanceDataById(maintenanceId, Convert.ToInt32(userId.Value), out maintData);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(maintData);
}
@@ -8,6 +8,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using static Thermo.Active.Config.ServerConfig;
using Thermo.Active.Model.DTOModels.ThRecipe;
namespace Thermo.Active.Controllers.WebApi
{
@@ -102,6 +103,25 @@ namespace Thermo.Active.Controllers.WebApi
return Ok(heads);
}
[Route("recipe"), HttpGet]
public IHttpActionResult GetRecipeConfig()
{
List<DTORecipeConfigModel> recipeConfig = RecipeConfig.Select(x => new DTORecipeConfigModel()
{
Id = x.Id,
ScaleFactor = x.ScaleFactor,
Category = x.Category.ToString(),
SubCategory_1 = x.SubCategory_1,
SubCategory_2 = x.SubCategory_2,
Name = x.Name,
Description = x.Description,
Format = x.Format,
Label = $"{x.Category}_{x.SubCategory_1}_{x.SubCategory_2}_{x.Name}".Replace("__", "_").Replace("__", "_").ToLower()
}).ToList();
return Ok(recipeConfig);
}
[Route("alarms"), HttpGet]
public IHttpActionResult GetAlarmsConfig()
{
@@ -27,9 +27,9 @@ namespace Thermo.Active.Controllers.WebApi
ICollection<CultureInfo> cultureInfos = new List<CultureInfo>();
// Get nc available language
CmsError cmsError = ncAdapter.numericalControl.NC_GetAvailableLanguages(ref cultureInfos);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.numericalControl.NC_GetAvailableLanguages(ref cultureInfos);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
// Filter available language with
availableLanguages = availableLanguages.Where(x => cultureInfos.Any(y => y.TwoLetterISOLanguageName == x.IsoId)).ToList();
}
@@ -114,6 +114,7 @@ namespace Thermo.Active.Controllers.WebApi
);
}
private static string GetValueFromLocalizationList(Dictionary<string, string> localizedNames, string language, string defaultString)
{
// Find text from names by language id
@@ -0,0 +1,48 @@
using CMS_CORE_Library.Models;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.NC;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using static CMS_CORE_Library.Models.DataStructures;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using Thermo.Active.Model.DTOModels.ThModules;
using Thermo.Active.Utils;
namespace Thermo.Active.Controllers.WebApi
{
[RoutePrefix("api/ModBlock")]
public class ModulesController : ApiController
{
[Route("current"), HttpGet]
public IHttpActionResult GetCurrentModules()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentModules | {libraryError.exception}");
return InternalServerError();
}
libraryError = ncAdapter.ReadModulesBlock(out Dictionary<int, DTOModulesBlock> currModules);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetRecipeOverview error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currModules);
}
}
}
}
@@ -25,9 +25,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.GetFileList(filePath, out List<PreviewFileModel> fileList);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.GetFileList(filePath, out List<PreviewFileModel> fileList);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(fileList);
}
@@ -40,9 +40,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.GetFileInfo(filePath, out InfoFile fileInfo);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.GetFileInfo(filePath, out InfoFile fileInfo);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(fileInfo);
}
@@ -55,9 +55,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.GetActiveFileInfo(filePath, out DTOActiveImageAndNameDataModel fileInfo);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.GetActiveFileInfo(filePath, out DTOActiveImageAndNameDataModel fileInfo);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(fileInfo);
}
@@ -70,9 +70,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.SetActiveProgramInfo(filePath, out DTOActiveProgramDataModel fileInfo);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.SetActiveProgramInfo(filePath, out DTOActiveProgramDataModel fileInfo);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(fileInfo);
}
@@ -85,9 +85,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.DeactivateProgram(out DTOActiveProgramDataModel fileInfo);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.DeactivateProgram(out DTOActiveProgramDataModel fileInfo);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(fileInfo);
}
@@ -114,9 +114,9 @@ namespace Thermo.Active.Controllers.WebApi
if (NcConfig.NcVendor == NC_VENDOR.OSAI)
{
// Clean upload folder only OSAI
CmsError cmsError = ncFileHandler.CleanUploadFolder();
if (cmsError.IsError() && cmsError.errorCode != CMS_ERROR_CODES.FILE_NOT_FOUND)
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncFileHandler.CleanUploadFolder();
if (libraryError.IsError() && libraryError.errorCode != CMS_ERROR_CODES.FILE_NOT_FOUND)
return BadRequest(libraryError.localizationKey);
}
ActiveProgramDataModel programData = new ActiveProgramDataModel();
@@ -130,9 +130,9 @@ namespace Thermo.Active.Controllers.WebApi
programs.Add(item.FileName);
// Upload main program
CmsError cmsError = ncFileHandler.UploadPartProgramAndActivate(TEMP_PP_FOLDER, item.FileName, out programData);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncFileHandler.UploadPartProgramAndActivate(TEMP_PP_FOLDER, item.FileName, out programData);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
mainPPName = Path.GetFileNameWithoutExtension(programData.Path);
}
@@ -142,9 +142,9 @@ namespace Thermo.Active.Controllers.WebApi
programs.Add(item.FileName);
// Upload files
CmsError cmsError = ncFileHandler.UploadPartProgram(TEMP_PP_FOLDER, item.FileName, out string programPath);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncFileHandler.UploadPartProgram(TEMP_PP_FOLDER, item.FileName, out string programPath);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
}
else if (item.ParameterName == "image")
{
@@ -348,9 +348,9 @@ namespace Thermo.Active.Controllers.WebApi
if (repsParam == null || !int.TryParse(repsParam.Value, out int reps))
return BadRequest();
// Upload
CmsError cmsError = ncAdapter.UploadPartProgramAndAddToQueue(QUEUE_TMP_FOLDER, item.FileName, reps, out queueItem);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.UploadPartProgramAndAddToQueue(QUEUE_TMP_FOLDER, item.FileName, reps, out queueItem);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
}
}
else if (item.ParameterName == "image")
@@ -370,9 +370,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.RemoveFromQueue(processId, itemId);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.RemoveFromQueue(processId, itemId);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
}
return Ok();
@@ -383,9 +383,9 @@ namespace Thermo.Active.Controllers.WebApi
{
using (NcFileAdapter ncAdapter = new NcFileAdapter())
{
CmsError cmsError = ncAdapter.MoveQueueItems(processId, itemsPositions.ObjectId, itemsPositions.NewPosition, out List<DTOQueueModel> queue);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.MoveQueueItems(processId, itemsPositions.ObjectId, itemsPositions.NewPosition, out List<DTOQueueModel> queue);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(queue);
}
@@ -399,9 +399,9 @@ namespace Thermo.Active.Controllers.WebApi
if (reps.Reps < 1)
return BadRequest(INCORRECT_PARAMETERS_ERROR.localizationKey);
CmsError cmsError = ncAdapter.EditQueueItemReps(processId, itemId, reps.Reps, out DTOQueueModel queueItem);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.EditQueueItemReps(processId, itemId, reps.Reps, out DTOQueueModel queueItem);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(queueItem);
}
@@ -412,9 +412,9 @@ namespace Thermo.Active.Controllers.WebApi
{
using (NcFileAdapter ncAdapter = new NcFileAdapter())
{
CmsError cmsError = ncAdapter.EmptyQueue(processId);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.EmptyQueue(processId);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok();
}
@@ -427,9 +427,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.StartWorkingQueue(processId);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.StartWorkingQueue(processId);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok();
}
@@ -442,9 +442,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.StopWorkingQueue(processId);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.StopWorkingQueue(processId);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok();
}
@@ -0,0 +1,202 @@
using CMS_CORE_Library.Models;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.NC;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using static CMS_CORE_Library.Models.DataStructures;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using Thermo.Active.Model.DTOModels.ThRecipe;
using Thermo.Active.Config;
using Thermo.Active.Utils;
namespace Thermo.Active.Controllers.WebApi
{
[RoutePrefix("api/prod")]
public class ProdController : ApiController
{
/// <summary>
/// Request mode SETUP
/// </summary>
/// <returns></returns>
[Route("mode/manual"), HttpPut]
public IHttpActionResult RequestManual()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | RequestManual | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando strobe richiesta AUTO!
libraryError = ncAdapter.StrobeMode(Model.DTOModels.ThProd.Mode.MANUAL);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"RequestManual error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Request mode AUTO
/// </summary>
/// <returns></returns>
[Route("mode/auto"), HttpPut]
public IHttpActionResult RequestAuto()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | RequestAuto | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando strobe richiesta AUTO!
libraryError = ncAdapter.StrobeMode(Model.DTOModels.ThProd.Mode.AUTO);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"RequestAuto error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Request mode SETUP
/// </summary>
/// <returns></returns>
[Route("mode/setup"), HttpPut]
public IHttpActionResult RequestSetup()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | RequestSetup | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando strobe richiesta AUTO!
libraryError = ncAdapter.StrobeMode(Model.DTOModels.ThProd.Mode.SETUP);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"RequestSetup error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Request start production
/// </summary>
/// <returns></returns>
[Route("prod/start"), HttpPut]
public IHttpActionResult StartProd(int requestQty, bool newWorkOrder)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | StartProd | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando strobe richiesta AUTO!
libraryError = ncAdapter.UpdateProdInfoData((short)requestQty, newWorkOrder);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"StartProd error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Request production current data
/// </summary>
/// <returns></returns>
[Route("prod/get"), HttpPut]
public IHttpActionResult GetProd()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | StartProd | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando strobe richiesta AUTO!
libraryError = ncAdapter.ReadProdInfoData(out ThermoModels.ProdInfoModel prodInfoDat);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetProd error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok(prodInfoDat);
}
}
/// <summary>
/// Request production data from indexStart record for numRecord items (DESCENDING)
/// </summary>
/// <returns></returns>
[Route("prod/history"), HttpPut]
public IHttpActionResult GetHistory(int indexStart, int numRecord)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | StartProd | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando strobe richiesta AUTO!
libraryError = ncAdapter.GetHistProdInfoData(out List<ThermoModels.ProdInfoModel> prodInfoDataList, indexStart, numRecord);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetHistory error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok(prodInfoDataList);
}
}
}
}
@@ -0,0 +1,525 @@
using CMS_CORE_Library.Models;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.NC;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using static CMS_CORE_Library.Models.DataStructures;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using Thermo.Active.Model.DTOModels.ThRecipe;
using Thermo.Active.Model.DTOModels.ThWarmers;
using Thermo.Active.Config;
using Thermo.Active.Utils;
namespace Thermo.Active.Controllers.WebApi
{
[RoutePrefix("api/recipe")]
public class RecipeController : ApiController
{
[Route("overview"), HttpGet]
public IHttpActionResult GetOverview()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | GetOverview | {libraryError.exception}");
return InternalServerError();
}
libraryError = ncAdapter.GetRecipeOverview(out Dictionary<string, RecipeCatStatus> currOverview);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetRecipeOverview error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currOverview);
}
}
[Route("current"), HttpGet]
public IHttpActionResult GetCurrentParameters()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentParameters | {libraryError.exception}");
return InternalServerError();
}
libraryError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetRecipeOverview error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currRecipe);
}
}
[Route("update"), HttpPut]
public IHttpActionResult WriteParameters(Dictionary<string, double> parametersList)
{
if (parametersList != null)
{
if (RecipeLiveData != null)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | WriteParameters | {libraryError.exception}");
return InternalServerError();
}
// read recipe!
libraryError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> prevRecipe);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetRecipeOverview error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
Dictionary<string, DTORecipeParam> updtRecipe = new Dictionary<string, DTORecipeParam>();
foreach (var item in parametersList)
{
if (prevRecipe.ContainsKey(item.Key))
{
// aggiorno il valore HMI nel parametro
var currParam = prevRecipe[item.Key];
currParam.SetpointHMI = item.Value;
// salvo (1 parametro, potrei fare N...)
updtRecipe.Add(item.Key, currParam);
}
else
{
ThermoActiveLogger.LogError($"WriteParameters error | key not found: {item.Key}");
return NotFound();
}
}
// scrivo sul PLC
ncAdapter.WriteRecipeParams(updtRecipe);
// ritorno solo fatto!
return Ok();
}
}
else
{
// non pronto!
ThermoActiveLogger.LogError($"RecipeLiveData null | WriteParameters");
return InternalServerError();
}
}
else
{
ThermoActiveLogger.LogError($"RecipeLiveData null | Empty Parameters");
return BadRequest();
}
}
/// <summary>
/// Confirm recipe modification (parameters: HMI --> PLC)
/// </summary>
/// <returns></returns>
[Route("confirm"), HttpPut]
public IHttpActionResult ConfirmEdit()
{
if (RecipeLiveData != null)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | Recipe ConfirmEdit | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando conferma!
libraryError = ncAdapter.ConfirmRecipeData(true);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ConfirmEdit error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupero i dati LIVE dei parametri HMI della ricetta...
libraryError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ConfirmEdit error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// rileggo la ricetta
var currParams = new Dictionary<string, double>();
foreach (var item in currRecipe)
{
currParams.Add(item.Key, item.Value.SetpointHMI);
}
SaveCurrentRecipeParams(currParams);
// ritorno solo fatto!
return Ok();
}
}
else
{
// non pronto!
ThermoActiveLogger.LogError($"RecipeLiveData null | Empty");
return InternalServerError();
}
}
/// <summary>
/// Cancel recipe modification (parameters: PLC --> HMI)
/// </summary>
/// <returns></returns>
[Route("cancel"), HttpPut]
public IHttpActionResult CancelEdit()
{
if (RecipeLiveData != null)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | Recipe CancelEdit | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando annula!
libraryError = ncAdapter.ConfirmRecipeData(false);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ConfirmEdit error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupero i dati LIVE dei parametri HMI della ricetta...
libraryError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ConfirmEdit error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
var currParams = new Dictionary<string, double>();
foreach (var item in currRecipe)
{
currParams.Add(item.Key, item.Value.SetpointPLC);
}
// ora salvo ANCHE i dati live...
SaveCurrentRecipeParams(currParams);
// ritorno solo fatto!
return Ok();
}
}
else
{
// non pronto!
ThermoActiveLogger.LogError($"RecipeLiveData null | Empty");
return InternalServerError();
}
}
/// <summary>
/// load recipe from file and send to PLC
/// </summary>
/// <returns></returns>
[Route("load"), HttpPut]
public IHttpActionResult Load(string newName)
{
using (NcFileAdapter ncAdapter = new NcFileAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | Load | {libraryError.exception}");
return InternalServerError();
}
// chiamo metodo di lettura...
bool fatto = ServerConfigController.LoadRecipe(newName);
if (!fatto)
{
ThermoActiveLogger.LogError($"LoadRecipe error");
return NotFound();
}
libraryError = WriteCurrentRecipeToPlc();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ConfirmEdit error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Load tempalte recipe from file and save as new current...
/// </summary>
/// <returns></returns>
[Route("new"), HttpPut]
public IHttpActionResult NewRecipe()
{
using (NcFileAdapter ncAdapter = new NcFileAdapter())
{
// chiamo metodo di lettura...
bool fatto = ServerConfigController.LoadTemplate();
if (!fatto)
{
ThermoActiveLogger.LogError($"LoadRecipe error");
return NotFound();
}
CmsError libraryError = WriteCurrentRecipeToPlc();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ConfirmEdit error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
}
// ritorno solo fatto!
return Ok();
}
/// <summary>
/// Save current recipe from PLC to default
/// </summary>
/// <returns></returns>
[Route("save"), HttpPut]
public IHttpActionResult Save()
{
using (NcFileAdapter ncAdapter = new NcFileAdapter())
{
// recupero i dati LIVE dei parametri HMI della ricetta...
CmsError libraryError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
var currParams = new Dictionary<string, double>();
foreach (var item in currRecipe)
{
currParams.Add(item.Key, item.Value.SetpointPLC);
}
// ora salvo ANCHE i dati live...
SaveCurrentRecipeParams(currParams);
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Save current recipe from PLC with new name
/// </summary>
/// <returns></returns>
[Route("saveAs"), HttpPut]
public IHttpActionResult SaveAs(string newName)
{
using (NcFileAdapter ncAdapter = new NcFileAdapter())
{
// recupero i dati LIVE dei parametri HMI della ricetta...
CmsError libraryError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"SaveAs error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
var currParams = new Dictionary<string, double>();
foreach (var item in currRecipe)
{
currParams.Add(item.Key, item.Value.SetpointPLC);
}
// ora salvo ANCHE i dati live...
RecipeLiveData.RecipeParameters = currParams;
// e salvo su disco
ServerConfigController.SaveRecipe(newName);
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Save current recipe from PLC to Template
/// </summary>
/// <returns></returns>
[Route("saveTemplate"), HttpPut]
public IHttpActionResult SaveTemplate()
{
using (NcFileAdapter ncAdapter = new NcFileAdapter())
{
// recupero i dati LIVE dei parametri HMI della ricetta...
CmsError libraryError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> currRecipe);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"SaveTemplate error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupero i dati LIVE dei carichi load dei cahnnels di riscaldo...
libraryError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ReadWarmers error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// uso i valopri HMI...
var currParams = new Dictionary<string, double>();
foreach (var item in currRecipe)
{
currParams.Add(item.Key, item.Value.SetpointHMI);
}
// ora salvo nei dati live...
RecipeLiveData.RecipeParameters = currParams;
// carico i dati dei riscaldi...
var currChSet = new Dictionary<int, int>();
foreach (var item in currWarmers)
{
currChSet.Add(item.Key, item.Value.SetpointHMI);
}
RecipeLiveData.ChannelSetpoints = currChSet;
// e salvo su disco
ServerConfigController.SaveRecipeTemplate();
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Do actual recipe parameters FileSave
/// </summary>
/// <param name="currParams"></param>
private static void SaveCurrentRecipeParams(Dictionary<string, double> currParams)
{
try
{
// ora salvo ANCHE i dati live...
RecipeLiveData.RecipeParameters = currParams;
// e salvo su disco
ServerConfigController.SaveRecipeCurrent();
}
catch(Exception exc)
{
ThermoActiveLogger.LogError($"Recipe | SaveCurrentRecipeParams exception | {exc}");
}
}
public static CmsError WriteCurrentRecipeToPlc()
{
CmsError checkError = NO_ERROR;
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | Load | {libraryError.exception}");
return libraryError;
}
// copy data to PLC
checkError = ncAdapter.ReadFullRecipe(out Dictionary<string, DTORecipeParam> prevRecipe);
if (checkError.IsError())
{
ThermoActiveLogger.LogError($"WriteCurrentRecipeToPlc | ReadFullRecipe error | {checkError.exception}");
return checkError;
}
// save parameters to PLC!!!
Dictionary<string, DTORecipeParam> updtRecipe = new Dictionary<string, DTORecipeParam>();
foreach (var item in RecipeLiveData.RecipeParameters)
{
if (prevRecipe.ContainsKey(item.Key))
{
// aggiorno il valore HMI nel parametro
var currParam = prevRecipe[item.Key];
currParam.SetpointHMI = item.Value;
// salvo (1 parametro, potrei fare N...)
updtRecipe.Add(item.Key, currParam);
}
else
{
ThermoActiveLogger.LogError($"prevRecipe not found | key: {item.Key}");
return NOT_FOUND_ERROR;
}
}
// write to PLC
checkError = ncAdapter.WriteRecipeParams(updtRecipe);
if (checkError.IsError())
{
ThermoActiveLogger.LogError($"WriteCurrentRecipeToPlc | WriteRecipeParams error | {checkError.exception}");
return checkError;
}
// process ch load setup...
Dictionary<int, int> newRisk = new Dictionary<int, int>();
foreach (var item in RecipeLiveData.ChannelSetpoints)
{
newRisk.Add(item.Key, item.Value);
}
// write to PLC
checkError = ncAdapter.WriteRecipeWarmChSetpHMI(newRisk);
if (checkError.IsError())
{
ThermoActiveLogger.LogError($"WriteCurrentRecipeToPlc | WriteRecipeWarmChSetpHMI error | {checkError.exception}");
return checkError;
}
// enable recipe! scrivo sul PLC il comando conferma!
libraryError = ncAdapter.ConfirmRecipeData(true);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"ReadWarmers error | {libraryError.exception}");
return checkError;
}
}
return checkError;
}
}
}
@@ -41,9 +41,9 @@ namespace Thermo.Active.Controllers.WebApi
{
ncAdapter.Connect();
// Read the selected scada data
CmsError cmsError = ncAdapter.ReadScadaData(selectedScadaSchema, out DTOScadaModel values);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.ReadScadaData(selectedScadaSchema, out DTOScadaModel values);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
// Add to the subscriber list
SubscribedScada.Add(selectedScadaSchema);
@@ -77,9 +77,9 @@ namespace Thermo.Active.Controllers.WebApi
using(NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
CmsError cmsError = ncAdapter.ReadScadasData(ProductionScadaSchema, out List<DTOScadaModel> values);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.ReadScadasData(ProductionScadaSchema, out List<DTOScadaModel> values);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
ScadaDataAndSchema data = new ScadaDataAndSchema()
@@ -150,9 +150,9 @@ namespace Thermo.Active.Controllers.WebApi
if (memIndex == "")
return BadRequest(INCORRECT_PARAMETERS_ERROR.localizationKey);
CmsError cmsError = ncAdapter.WriteScada(memIndex, memType, value);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
CmsError libraryError = ncAdapter.WriteScada(memIndex, memType, value);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
}
return Ok();
@@ -42,7 +42,7 @@ namespace Thermo.Active.Controllers.WebApi
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.All.logout(new { id = userId.Value });
StepLogger.LogMessage("Logout: " + userId.Value + "Date:" + DateTime.Now, ERROR_LEVEL.INFO);
ThermoActiveLogger.LogMessage("Logout: " + userId.Value + "Date:" + DateTime.Now, ERROR_LEVEL.INFO);
return Ok();
}
@@ -0,0 +1,272 @@
using CMS_CORE_Library.Models;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.NC;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using static CMS_CORE_Library.Models.DataStructures;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using Thermo.Active.Model.DTOModels.ThWarmers;
using Thermo.Active.Config;
using Thermo.Active.Utils;
namespace Thermo.Active.Controllers.WebApi
{
[RoutePrefix("api/warmers")]
public class WarmersController : ApiController
{
[Route("channels"), HttpGet]
public IHttpActionResult GetCurrentWarmersChannels()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentWarmersChannels | {libraryError.exception}");
return InternalServerError();
}
libraryError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetRecipeOverview error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currWarmers);
}
}
[Route("resistances"), HttpGet]
public IHttpActionResult GetCurrentWarmersResistances()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentWarmersResistances | {libraryError.exception}");
return InternalServerError();
}
libraryError = ncAdapter.GetWarmersResistances(out Dictionary<int, Model.ConfigModels.RiskResistModel> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetCurrentWarmersResistances error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currWarmers);
}
}
[Route("area"), HttpGet]
public IHttpActionResult GetCurrentAreaPerc()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentAreaPerc | {libraryError.exception}");
return InternalServerError();
}
// recupera aree % X / Y
libraryError = ncAdapter.GetWarmMaterialArea(out Dictionary<string, double> currAreaPerc);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetCurrentAreaPerc error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currAreaPerc);
}
}
[Route("update"), HttpPut]
public IHttpActionResult WriteSetpoints(Dictionary<int, int> channelsLoad)
{
// scrive su CHp da ricetta oppure da override x parametri utente...
if (channelsLoad != null)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | WriteSetpoints | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC
libraryError = ncAdapter.WriteRecipeWarmChSetpHMI(channelsLoad);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"WriteSetpoints error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
}
else
{
return NotFound();
}
}
/// <summary>
/// Confirm recipe modification (parameters: HMI --> PLC)
/// </summary>
/// <returns></returns>
[Route("confirm"), HttpPut]
public IHttpActionResult ConfirmEdit()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | Warmers ConfirmEdit | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando conferma!
libraryError = ncAdapter.ConfirmRecipeData(true);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers ConfirmEdit error | ConfirmRecipeData | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupero i dati LIVE dei parametri HMI dei riscaldi...
libraryError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers ConfirmEdit error | ReadWarmers | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// rileggo la ricetta
var currParams = new Dictionary<int, int>();
foreach (var item in currWarmers)
{
currParams.Add(item.Key, item.Value.SetpointHMI);
}
saveCurrentRecipeWarmers(currParams);
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Cancel recipe modification (parameters: PLC --> HMI)
/// </summary>
/// <returns></returns>
[Route("cancel"), HttpPut]
public IHttpActionResult CancelEdit()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | Recipe CancelEdit | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC il comando annula!
libraryError = ncAdapter.ConfirmRecipeData(false);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers CancelEdit error | ConfirmRecipeData | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupero i dati LIVE dei parametri HMI dei riscaldi...
libraryError = ncAdapter.ReadWarmers(out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers ConfirmEdit error | ReadWarmers | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// rileggo la ricetta
var currParams = new Dictionary<int, int>();
foreach (var item in currWarmers)
{
currParams.Add(item.Key, item.Value.SetpointHMI);
}
saveCurrentRecipeWarmers(currParams);
// ritorno solo fatto!
return Ok();
}
}
[Route("setConfig"), HttpPut]
public IHttpActionResult SetConfig()
{
// scrive configurazioni RISK
using (NcAdapter ncAdapter = new NcAdapter())
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.errorCode != 0)
{
ThermoActiveLogger.LogError($"NC Not connected! | SetConfig | {libraryError.exception}");
return InternalServerError();
}
// scrivo sul PLC
libraryError = ncAdapter.WriteRecipeWarmConfig();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers SetConfig error | WriteRecipeWarmConfig | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
}
/// <summary>
/// Do actual recipe warmers setpoints FileSave
/// </summary>
/// <param name="chSetpoints"></param>
private static void saveCurrentRecipeWarmers(Dictionary<int, int> chSetpoints)
{
try
{
// ora salvo ANCHE i dati live...
RecipeLiveData.ChannelSetpoints = chSetpoints;
// e salvo su disco
ServerConfigController.SaveRecipeCurrent();
}
catch (Exception exc)
{
ThermoActiveLogger.LogError($"Warmers | SaveCurrentRecipeParams exception | {exc}");
}
}
}
}
+35 -4
View File
@@ -90,10 +90,41 @@ namespace Thermo.Active.Listeners
infos.Add(MessageServices.Current.Subscribe(SEND_CMSCONNECT_GW_REBOOT_STATUS, (a, b) =>
{
SignalRListener.SetGatewayRebootStatus(a);
}));
}));
//////////////////////////// Database
///// erano tooling...
// add specific modules for THERMO
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_RECIPE_FULL, (a, b) =>
{
SignalRListener.SendThermoRecipeFullData(a);
}));
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_RECIPE_OVERWIEW, (a, b) =>
{
SignalRListener.SendThermoRecipeOverviewData(a);
}));
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_MODULE_DATA, (a, b) =>
{
SignalRListener.SendThermoModulesData(a);
}));
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_WARMERS_DATA, (a, b) =>
{
SignalRListener.SendThermoWarmersData(a);
}));
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_AREA_DATA, (a, b) =>
{
SignalRListener.SendThermoAreaData(a);
}));
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_GAUGE_DATA, (a, b) =>
{
SignalRListener.SendThermoGaugeData(a);
}));
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_PROD_INFO_DATA, (a, b) =>
{
SignalRListener.SendThermoProdInfoData(a);
}));
infos.Add(MessageServices.Current.Subscribe(SEND_THERMO_PROD_CYCLE_DATA, (a, b) =>
{
SignalRListener.SendThermoProdCycleData(a);
}));
// Broadcast
infos.Add(MessageServices.Current.Subscribe(BROADCAST_DATA, (a, b) =>
@@ -103,7 +134,7 @@ namespace Thermo.Active.Listeners
SignalRListener.BroadcastData();
}));
}
public static void Stop()
{
MessageServices.Current.UnSubscribe(infos.ToArray());
@@ -14,6 +14,13 @@ using System.Threading;
using static Thermo.Active.Listeners.SignalRStaticObjects;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Config.ServerConfig;
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 CMS_CORE_Library.Models;
using static CMS_CORE_Library.Models.ThermoModels;
using System.Threading.Tasks;
namespace Thermo.Active.Listeners.SignalR
{
@@ -246,7 +253,179 @@ namespace Thermo.Active.Listeners.SignalR
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").scadaData(scadaVal);
}
}
}
public static void SendThermoRecipeFullData(object recipeFull)
{
Dictionary<string, DTORecipeParam> currRecipeFull = recipeFull as Dictionary<string, DTORecipeParam>;
Dictionary<string, DTORecipeParam> diffData = new Dictionary<string, DTORecipeParam>();
foreach (var item in currRecipeFull)
{
if (!LastRecipeFullData.ContainsKey(item.Key))
{
diffData.Add(item.Key, item.Value);
}
else
{
// comparazione
if (!item.Value.Equals(LastRecipeFullData[item.Key]))
{
//diffData[item.Key] = item.Value;
diffData.Add(item.Key, item.Value);
}
}
}
if (diffData.Count > 0)
{
// salvo update
LastRecipeFullData = currRecipeFull;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").recipeFullData(diffData);
}
}
public static void SendThermoRecipeOverviewData(object recipeOver)
{
Dictionary<string, RecipeCatStatus> currRecipeOver = recipeOver as Dictionary<string, RecipeCatStatus>;
if (!LastRecipeOverData.SequenceEqual(currRecipeOver))
{
LastRecipeOverData = currRecipeOver;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").recipeOverData(currRecipeOver);
}
}
public static void SendThermoModulesData(object modules)
{
Dictionary<int, DTOModulesBlock> currModules = modules as Dictionary<int, DTOModulesBlock>;
Dictionary<int, DTOModulesBlock> diffData = new Dictionary<int, DTOModulesBlock>();
foreach (var item in currModules)
{
if (!LastModulesData.ContainsKey(item.Key))
{
diffData.Add(item.Key, item.Value);
}
else
{
// comparazione
if (!item.Value.Equals(LastModulesData[item.Key]))
{
diffData[item.Key] = item.Value;
}
}
}
if (diffData.Count > 0)
{
LastModulesData = currModules;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").modulesData(currModules);
}
}
public static void SendThermoWarmersData(object warmers)
{
Dictionary<int, DTOWarmers> currWarmers = warmers as Dictionary<int, DTOWarmers>;
Dictionary<int, DTOWarmers> diffData = new Dictionary<int, DTOWarmers>();
foreach (var item in currWarmers)
{
if (!LastWarmersData.ContainsKey(item.Key))
{
diffData.Add(item.Key, item.Value);
}
else
{
// comparazione
if (!item.Value.Equals(LastWarmersData[item.Key]))
{
diffData[item.Key] = item.Value;
}
}
}
if (diffData.Count > 0)
{
LastWarmersData = currWarmers;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").warmersData(currWarmers);
}
}
public static void SendThermoAreaData(object area)
{
Dictionary<string, double> currArea = area as Dictionary<string, double>;
Dictionary<string, double> diffData = new Dictionary<string, double>();
foreach (var item in currArea)
{
if (!LastAreaData.ContainsKey(item.Key))
{
diffData.Add(item.Key, item.Value);
}
else
{
// comparazione
if (!item.Value.Equals(LastAreaData[item.Key]))
{
diffData[item.Key] = item.Value;
}
}
}
if (diffData.Count > 0)
{
LastAreaData = currArea;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").areaData(currArea);
}
}
public static void SendThermoGaugeData(object gaugeData)
{
GaugeModel currGauge = gaugeData as GaugeModel;
if (!LastGaugeData.Equals(currGauge))
{
LastGaugeData = currGauge;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").gaugeData(currGauge);
}
}
public static void SendThermoProdInfoData(object prodInfoData)
{
ProdInfoModel currProdInfo = prodInfoData as ProdInfoModel;
if (!LastProdInfoData.Equals(currProdInfo))
{
LastProdInfoData = currProdInfo;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").prodInfoData(currProdInfo);
}
}
public static void SendThermoProdCycleData(object prodCycleData)
{
ProdCycleModel currProdCycle = prodCycleData as ProdCycleModel;
if (!LastProdCycleData.Equals(currProdCycle))
{
LastProdCycleData = currProdCycle;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.Group("ncData").prodCycleData(currProdCycle);
}
}
public static void SetGatewayRebootStatus(object status)
@@ -286,32 +465,47 @@ namespace Thermo.Active.Listeners.SignalR
group.expiredMaintenances(LastExpiredMaintenances);
// Send nc status
context.Clients.Group("ncData").ncNetworkStatus(
group.ncNetworkStatus(
new
{
connected = LastIsNcConnected
});
// Send softkeys Nc
context.Clients.Group("ncData").ncSoftKeys(LastNcSoftKeysData);
group.ncSoftKeys(LastNcSoftKeysData);
// Send user softKeys
context.Clients.Group("ncData").userSoftKeys(LastUserSoftKeysData);
group.userSoftKeys(LastUserSoftKeysData);
// Send heads data
context.Clients.Group("ncData").headsData(LastHeadsData);
group.headsData(LastHeadsData);
// Send axesNames data
context.Clients.Group("ncData").axesNames(LastAxesNamesData);
group.axesNames(LastAxesNamesData);
// Send positions
context.Clients.Group("ncData").axesPositions(LastAxesPositions);
group.axesPositions(LastAxesPositions);
// Send active program data
context.Clients.Group("ncData").activeProgramData(LastProgramData);
group.activeProgramData(LastProgramData);
// Send magazine is active data
context.Clients.Group("ncData").magazineIsActive(LastNcMagazineIsActive);
group.magazineIsActive(LastNcMagazineIsActive);
// Send PP Queue
context.Clients.Group("ncData").partProgramQueue(LastPartProgramQueue);
group.partProgramQueue(LastPartProgramQueue);
// Send m155 data
context.Clients.Group("ncData").m155Data(LastM155Data);
group.m155Data(LastM155Data);
// Send Scada
context.Clients.Group("ncData").scadaData(LastScadaData);
group.scadaData(LastScadaData);
// Send THERMO Recipe data
group.recipeFullData(LastRecipeFullData);
group.recipeOverData(LastRecipeOverData);
// Send THERMO Modules data
group.modulesData(LastModulesData);
// Send THERMO Warmers data
group.warmersData(LastWarmersData);
group.areaData(LastAreaData);
// THERMO Gauges
group.gaugeData(LastGaugeData);
// THERMO prod info data
group.prodInfoData(LastProdInfoData);
// THERMO prod cycle data
group.prodCycleData(LastProdCycleData);
Debug.WriteLine(string.Format("{0} {1} Broadcast..completed", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), DateTime.Now.Millisecond));
Monitor.Exit(_broadcastlock);
@@ -2,6 +2,10 @@
using Thermo.Active.Model.DTOModels.AlarmModels;
using Thermo.Active.Model.DTOModels.Scada;
using System.Collections.Generic;
using Thermo.Active.Model.DTOModels.ThModules;
using Thermo.Active.Model.DTOModels.ThRecipe;
using Thermo.Active.Model.DTOModels.ThWarmers;
using CMS_CORE_Library.Models;
namespace Thermo.Active.Listeners
{
@@ -23,11 +27,21 @@ namespace Thermo.Active.Listeners
public static Dictionary<int, bool> LastNcMagazineIsActive = new Dictionary<int, bool>();
public static List<DTOQueueModel> LastPartProgramQueue = new List<DTOQueueModel>();
public static List<DTOM155InputModel> LastM155Data = new List<DTOM155InputModel>();
public static List<DTOScadaModel> LastScadaData = new List<DTOScadaModel>();
public static List<DTOScadaModel> LastScadaData = new List<DTOScadaModel>();
// FIXME TODO inserire oggetti corretti per THERMO
public static Dictionary<string, DTORecipeParam> LastRecipeFullData = new Dictionary<string, DTORecipeParam>();
public static Dictionary<string, RecipeCatStatus> LastRecipeOverData = new Dictionary<string, RecipeCatStatus>();
public static Dictionary<int, DTOModulesBlock> LastModulesData = new Dictionary<int, DTOModulesBlock>();
public static Dictionary<int, DTOWarmers> LastWarmersData = new Dictionary<int, DTOWarmers>();
public static Dictionary<string, double> LastAreaData = new Dictionary<string, double>();
public static ThermoModels.GaugeModel LastGaugeData = new ThermoModels.GaugeModel();
public static ThermoModels.ProdCycleModel LastProdCycleData = new ThermoModels.ProdCycleModel();
public static ThermoModels.ProdInfoModel LastProdInfoData = new ThermoModels.ProdInfoModel();
public static bool LastIsNcConnected = false;
// aggiugere oggetti nuovi e levare quelli che non servono +...
}
}
+1 -1
View File
@@ -31,4 +31,4 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("0.1.1")]
[assembly: AssemblyVersion("0.9.5")]
+22 -3
View File
@@ -58,9 +58,6 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CMS_CORE_Library">
<HintPath>..\Libs\CMS_CORE_Library.dll</HintPath>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath>
</Reference>
@@ -122,6 +119,8 @@
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="Swashbuckle.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd1bb07a5ac7c7bc, processorArchitecture=MSIL">
<HintPath>..\packages\Swashbuckle.Core.5.6.0\lib\net40\Swashbuckle.Core.dll</HintPath>
</Reference>
@@ -166,6 +165,10 @@
<HintPath>..\packages\Microsoft.AspNet.WebPages.2.0.20505.0\lib\net40\System.Web.WebPages.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Windows.Interactivity">
<HintPath>..\Libs\System.Windows.Interactivity.dll</HintPath>
</Reference>
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Abstractions" />
@@ -207,6 +210,7 @@
<Reference Include="WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.WebData.2.0.20505.0\lib\net40\WebMatrix.WebData.dll</HintPath>
</Reference>
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="App_Start\SignalRContractResolver.cs" />
@@ -218,6 +222,10 @@
<Compile Include="Attributes\SignalRAuthorizeAttribute.cs" />
<Compile Include="Controllers\SignalR\NcHub.cs" />
<Compile Include="Controllers\WebApi\ApiAlarmController.cs" />
<Compile Include="Controllers\WebApi\ModulesController.cs" />
<Compile Include="Controllers\WebApi\ProdController.cs" />
<Compile Include="Controllers\WebApi\WarmersController.cs" />
<Compile Include="Controllers\WebApi\RecipeController.cs" />
<Compile Include="Controllers\WebApi\AuthorizationController.cs" />
<Compile Include="Controllers\WebApi\CmsConnectController.cs" />
<Compile Include="Controllers\WebApi\ConfigurationController.cs" />
@@ -16121,6 +16129,10 @@
<None Include="packages.config" />
</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.CmsConnectGateway\Thermo.Active.CmsConnectGateway.csproj">
<Project>{49b04d99-0ecd-4900-86d3-7098d61314d7}</Project>
<Name>Thermo.Active.CmsConnectGateway</Name>
@@ -16425,6 +16437,7 @@
<TypeScriptCompile Include="wwwroot\src\_base\utils.ts" />
</ItemGroup>
<ItemGroup>
<Folder Include="logs\" />
<Folder Include="wwwroot\src\router\" />
</ItemGroup>
<PropertyGroup>
@@ -16461,4 +16474,10 @@
</Target>
<Target Name="AfterBuild">
</Target> -->
<Target Name="AfterBuild">
<ItemGroup>
<MoveToLibFolder Include="$(OutputPath)*.dll ; $(OutputPath)*.pdb ; $(OutputPath)*.xml" />
</ItemGroup>
<Move SourceFiles="@(MoveToLibFolder)" DestinationFolder="$(OutputPath)lib" OverwriteReadOnlyFiles="true" />
</Target>
</Project>
+1
View File
@@ -33,6 +33,7 @@
<package id="microsoft-web-helpers" version="2.1.20710.2" targetFramework="net462" />
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net462" />
<package id="Owin" version="1.0" targetFramework="net462" />
<package id="PrettyBin" version="1.1.0" targetFramework="net462" />
<package id="Swashbuckle" version="5.6.0" targetFramework="net462" />
<package id="Swashbuckle.Core" version="5.6.0" targetFramework="net462" />
<package id="System.Security.Claims" version="4.0.1" targetFramework="net462" />
+7 -1
View File
@@ -16,8 +16,9 @@ using System.Windows.Forms;
using TeamDev.SDK.MVVM;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Utils.StepLogger;
using static Thermo.Active.Utils.ThermoActiveLogger;
using static Thermo.Active.Utils.ExceptionManager;
using Thermo.Active.Controllers.WebApi;
namespace Thermo.Active
{
@@ -84,6 +85,11 @@ namespace Thermo.Active
if (!string.IsNullOrWhiteSpace(ServerStartupConfig.ServerAddress.ToString()))
opt.Urls.Add("http://" + ServerStartupConfig.ServerAddress.ToString() + ":" + ServerStartupConfig.ServerPort.ToString());
// read and save last CURRENT RECIPE data...
ServerConfigController.ReadLastRecipe();
RecipeController.WriteCurrentRecipeToPlc();
//starts threads
using (WebApp.Start<App_Start.Startup>(opt))
{
if (databaseStatus)
Binary file not shown.

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