From 6ac7d85c823a8275bee611cff517fd4f57e303bb Mon Sep 17 00:00:00 2001 From: Raphael Luz <luz@ivt.tugraz.at> Date: Thu, 5 Sep 2013 08:38:28 +0200 Subject: [PATCH] - removed PHEM ADVANCE code - restructured Demo / Default Data --- Default Data/VACC/Bus.vacc | 23 + Default Data/VACC/Coach.vacc | 27 + .../VACC/Truck.vacc | 4 +- .../VCDV/Truck.vcdv | 0 .../{Cycles => VDRI}/Citybus_Heavy_Urban.vdri | 0 .../{Cycles => VDRI}/Citybus_Suburban.vdri | 0 .../{Cycles => VDRI}/Citybus_Urban.vdri | 0 Default Data/{Cycles => VDRI}/Coach.vdri | 0 .../{Cycles => VDRI}/Construction_Cycle.vdri | 0 .../{Cycles => VDRI}/Interurban_Bus.vdri | 0 Default Data/{Cycles => VDRI}/Long_Haul.vdri | 0 .../{Cycles => VDRI}/Municipal_Utility.vdri | 0 .../{Cycles => VDRI}/Regional_Delivery.vdri | 0 .../{Cycles => VDRI}/Urban_Delivery.vdri | 0 .../ACEA_RegionalDelivery_AuxDemo.vdri | 2 +- .../ACEA_UrbanDelivery_AuxDemo.vdri | 2 +- Demo Data/12t Demo/Declaration/Demo.vacc | 13 - .../Declaration/Demo_Declaration.vecto | 8 +- .../Declaration/Demo_VehicleDeclaration.vveh | 9 +- Demo Data/12t Demo/Demo_Engine.veng | 9 +- Demo Data/12t Demo/Demo_Gearbox.vgbx | 42 +- .../ProofOfConcept/Demo_ChassisDyno.vecto | 6 +- .../ProofOfConcept/Demo_TestTrackCycle.vecto | 6 +- Demo Data/12t Demo/ProofOfConcept/Dummy.vacc | 4 +- .../40t Demo/Demo_CrosswindCorrection.vcdv | 26 - Demo Data/40t Demo/VehClass5_40t.veng | 9 +- Demo Data/40t Demo/VehClass5_40t.vgbx | 42 +- Demo Data/40t Demo/VehClass5_40t.vveh | 6 +- .../40t Demo/VehClass5_40t_LongHaul.vecto | 8 +- .../20120815_acea_long_haul_1m_DemoAux.vdri | 4 +- User Manual Source/Update Notes.pptx | Bin 1741054 -> 1742406 bytes VECTO/ADVANCE/cADV.vb | 216 -- VECTO/ADVANCE/cADVANCE.vb | 2437 ----------------- VECTO/File Browser/FB_Global.vb | 1 - VECTO/GUI/F_ADV.Designer.vb | 415 --- VECTO/GUI/F_ADV.resx | 270 -- VECTO/GUI/F_ADV.vb | 323 --- VECTO/GUI/F_ADVfzp.Designer.vb | 164 -- VECTO/GUI/F_ADVfzp.resx | 123 - VECTO/GUI/F_ADVfzp.vb | 68 - VECTO/GUI/F_GEN.vb | 2 +- VECTO/GUI/F_MAINForm.Designer.vb | 36 +- VECTO/GUI/F_MAINForm.vb | 138 +- VECTO/GUI/F_ModSplit.Designer.vb | 158 -- VECTO/GUI/F_ModSplit.resx | 120 - VECTO/GUI/F_ModSplit.vb | 102 - VECTO/GUI/F_TEM_Creator.Designer.vb | 169 -- VECTO/GUI/F_TEM_Creator.resx | 120 - VECTO/GUI/F_TEM_Creator.vb | 48 - VECTO/MODcalc/Em Calc.vb | 97 +- VECTO/MODcalc/cMOD.vb | 53 +- VECTO/MODcalc/cPower.vb | 32 +- VECTO/MODcalc/cVh.vb | 19 - VECTO/M_MAIN.vb | 131 +- VECTO/My Project/AssemblyInfo.vb | 4 +- VECTO/VECTO.vbproj | 42 - VECTO/VECTO_Global.vb | 1 - VECTO/VECTO_Types.vb | 1 - VECTO/cDEV.vb | 5 - VECTO/cERG.vb | 584 ++-- 60 files changed, 526 insertions(+), 5603 deletions(-) create mode 100644 Default Data/VACC/Bus.vacc create mode 100644 Default Data/VACC/Coach.vacc rename Demo Data/40t Demo/Truck_Default.vacc => Default Data/VACC/Truck.vacc (92%) rename Demo Data/12t Demo/Declaration/Demo_CrosswindCorrection.vcdv => Default Data/VCDV/Truck.vcdv (100%) rename Default Data/{Cycles => VDRI}/Citybus_Heavy_Urban.vdri (100%) rename Default Data/{Cycles => VDRI}/Citybus_Suburban.vdri (100%) rename Default Data/{Cycles => VDRI}/Citybus_Urban.vdri (100%) rename Default Data/{Cycles => VDRI}/Coach.vdri (100%) rename Default Data/{Cycles => VDRI}/Construction_Cycle.vdri (100%) rename Default Data/{Cycles => VDRI}/Interurban_Bus.vdri (100%) rename Default Data/{Cycles => VDRI}/Long_Haul.vdri (100%) rename Default Data/{Cycles => VDRI}/Municipal_Utility.vdri (100%) rename Default Data/{Cycles => VDRI}/Regional_Delivery.vdri (100%) rename Default Data/{Cycles => VDRI}/Urban_Delivery.vdri (100%) delete mode 100644 Demo Data/12t Demo/Declaration/Demo.vacc delete mode 100644 Demo Data/40t Demo/Demo_CrosswindCorrection.vcdv delete mode 100644 VECTO/ADVANCE/cADV.vb delete mode 100644 VECTO/ADVANCE/cADVANCE.vb delete mode 100644 VECTO/GUI/F_ADV.Designer.vb delete mode 100644 VECTO/GUI/F_ADV.resx delete mode 100644 VECTO/GUI/F_ADV.vb delete mode 100644 VECTO/GUI/F_ADVfzp.Designer.vb delete mode 100644 VECTO/GUI/F_ADVfzp.resx delete mode 100644 VECTO/GUI/F_ADVfzp.vb delete mode 100644 VECTO/GUI/F_ModSplit.Designer.vb delete mode 100644 VECTO/GUI/F_ModSplit.resx delete mode 100644 VECTO/GUI/F_ModSplit.vb delete mode 100644 VECTO/GUI/F_TEM_Creator.Designer.vb delete mode 100644 VECTO/GUI/F_TEM_Creator.resx delete mode 100644 VECTO/GUI/F_TEM_Creator.vb diff --git a/Default Data/VACC/Bus.vacc b/Default Data/VACC/Bus.vacc new file mode 100644 index 0000000000..7abf8eb10a --- /dev/null +++ b/Default Data/VACC/Bus.vacc @@ -0,0 +1,23 @@ +c v,acc,dec +c [km/h],[m/s²],[m/s²] +0,1.01570922360353,-0.243137391053393 +5,1.38546581120225,-0.660815080435473 +10,1.34993329755465,-0.697805375020862 +15,1.21026714002479,-0.703434814668512 +20,1.08369598822194,-0.677703399378421 +25,0.960244171563553,-0.63631961226452 +30,0.830278494884728,-0.548894523516266 +35,0.705875078338323,-0.453995336940216 +40,0.61560012996407,-0.385460695652016 +45,0.54934680060935,-0.349181329186105 +50,0.506759643818294,-0.309125096967231 +55,0.475339640114064,-0.296716093796643 +60,0.443179073790072,-0.270229542673924 +65,0.402073380967498,-0.256408113084341 +70,0.354058549774571,-0.217808535739946 +75,0.307424130491395,-0.18609307386602 +80,0.26769036830267,-0.142683384645006 +85,0.223947186420069,-0.117950211164234 +90,0.198040479041662,-0.102997621205622 +95,0.182725799001603,-0.102997621205622 +100,0.180785716979631,-0.102997621205622 diff --git a/Default Data/VACC/Coach.vacc b/Default Data/VACC/Coach.vacc new file mode 100644 index 0000000000..f8c8e4b305 --- /dev/null +++ b/Default Data/VACC/Coach.vacc @@ -0,0 +1,27 @@ +c v,acc,dec +c [km/h],[m/s²],[m/s²] +0,1.01570922360353,-0.231742702878269 +5,1.38546581120225,-0.45346198022574 +10,1.34993329755465,-0.565404125020508 +15,1.29026714002479,-0.703434814668512 +20,1.16369598822194,-0.677703399378421 +25,1.04024417156355,-0.63631961226452 +30,0.910278494884728,-0.548894523516266 +35,0.785875078338323,-0.453995336940216 +40,0.69560012996407,-0.385460695652016 +45,0.648984223443223,-0.349181329186105 +50,0.594249623931624,-0.309125096967231 +55,0.559156929181929,-0.296716093796643 +60,0.541508805860806,-0.270229542673924 +65,0.539582904761905,-0.256408113084341 +70,0.539103523809524,-0.217808535739946 +75,0.529581598997494,-0.18609307386602 +80,0.496418462064251,-0.142683384645006 +85,0.453932619248656,-0.117950211164234 +90,0.397824554210839,-0.102997621205622 +95,0.33969661577071,-0.102997621205622 +100,0.289428370365158,-0.102997621205622 +105,0.256471472751248,-0.102997621205622 +110,0.24,-0.102997621205622 +115,0.22,-0.102997621205622 +120,0.2,-0.102997621205622 diff --git a/Demo Data/40t Demo/Truck_Default.vacc b/Default Data/VACC/Truck.vacc similarity index 92% rename from Demo Data/40t Demo/Truck_Default.vacc rename to Default Data/VACC/Truck.vacc index ae4b968aa5..0790383861 100644 --- a/Demo Data/40t Demo/Truck_Default.vacc +++ b/Default Data/VACC/Truck.vacc @@ -1,5 +1,5 @@ -c v,a_desmax,a_brake -c [km/h],[m/s²],[m/s²] +c v,acc,dec +c [km/h],[m/s²],[m/s²] 0,1.01570922360353,-0.231742702878269 5,1.38546581120225,-0.414230217967212 10,1.34993329755465,-0.469050310026691 diff --git a/Demo Data/12t Demo/Declaration/Demo_CrosswindCorrection.vcdv b/Default Data/VCDV/Truck.vcdv similarity index 100% rename from Demo Data/12t Demo/Declaration/Demo_CrosswindCorrection.vcdv rename to Default Data/VCDV/Truck.vcdv diff --git a/Default Data/Cycles/Citybus_Heavy_Urban.vdri b/Default Data/VDRI/Citybus_Heavy_Urban.vdri similarity index 100% rename from Default Data/Cycles/Citybus_Heavy_Urban.vdri rename to Default Data/VDRI/Citybus_Heavy_Urban.vdri diff --git a/Default Data/Cycles/Citybus_Suburban.vdri b/Default Data/VDRI/Citybus_Suburban.vdri similarity index 100% rename from Default Data/Cycles/Citybus_Suburban.vdri rename to Default Data/VDRI/Citybus_Suburban.vdri diff --git a/Default Data/Cycles/Citybus_Urban.vdri b/Default Data/VDRI/Citybus_Urban.vdri similarity index 100% rename from Default Data/Cycles/Citybus_Urban.vdri rename to Default Data/VDRI/Citybus_Urban.vdri diff --git a/Default Data/Cycles/Coach.vdri b/Default Data/VDRI/Coach.vdri similarity index 100% rename from Default Data/Cycles/Coach.vdri rename to Default Data/VDRI/Coach.vdri diff --git a/Default Data/Cycles/Construction_Cycle.vdri b/Default Data/VDRI/Construction_Cycle.vdri similarity index 100% rename from Default Data/Cycles/Construction_Cycle.vdri rename to Default Data/VDRI/Construction_Cycle.vdri diff --git a/Default Data/Cycles/Interurban_Bus.vdri b/Default Data/VDRI/Interurban_Bus.vdri similarity index 100% rename from Default Data/Cycles/Interurban_Bus.vdri rename to Default Data/VDRI/Interurban_Bus.vdri diff --git a/Default Data/Cycles/Long_Haul.vdri b/Default Data/VDRI/Long_Haul.vdri similarity index 100% rename from Default Data/Cycles/Long_Haul.vdri rename to Default Data/VDRI/Long_Haul.vdri diff --git a/Default Data/Cycles/Municipal_Utility.vdri b/Default Data/VDRI/Municipal_Utility.vdri similarity index 100% rename from Default Data/Cycles/Municipal_Utility.vdri rename to Default Data/VDRI/Municipal_Utility.vdri diff --git a/Default Data/Cycles/Regional_Delivery.vdri b/Default Data/VDRI/Regional_Delivery.vdri similarity index 100% rename from Default Data/Cycles/Regional_Delivery.vdri rename to Default Data/VDRI/Regional_Delivery.vdri diff --git a/Default Data/Cycles/Urban_Delivery.vdri b/Default Data/VDRI/Urban_Delivery.vdri similarity index 100% rename from Default Data/Cycles/Urban_Delivery.vdri rename to Default Data/VDRI/Urban_Delivery.vdri diff --git a/Demo Data/12t Demo/Declaration/ACEA_RegionalDelivery_AuxDemo.vdri b/Demo Data/12t Demo/Declaration/ACEA_RegionalDelivery_AuxDemo.vdri index 63eae8a539..e26f83d090 100644 --- a/Demo Data/12t Demo/Declaration/ACEA_RegionalDelivery_AuxDemo.vdri +++ b/Demo Data/12t Demo/Declaration/ACEA_RegionalDelivery_AuxDemo.vdri @@ -25835,4 +25835,4 @@ c [m],[km/h],[%],[s],[kW],[kW],[kW] 25833,40,0.484438915,0,0.5,2.376,2.97 25834,40,0.484438915,0,0.5,2.376,2.97 25835,40,0.484438915,0,0.5,2.376,2.97 -25836,0,0.484438915,0,0.5,2.376,2.97 +25836,0,0.484438915,2,0.5,2.376,2.97 diff --git a/Demo Data/12t Demo/Declaration/ACEA_UrbanDelivery_AuxDemo.vdri b/Demo Data/12t Demo/Declaration/ACEA_UrbanDelivery_AuxDemo.vdri index 6afc0cc1e5..df9f0f8ae0 100644 --- a/Demo Data/12t Demo/Declaration/ACEA_UrbanDelivery_AuxDemo.vdri +++ b/Demo Data/12t Demo/Declaration/ACEA_UrbanDelivery_AuxDemo.vdri @@ -27816,4 +27816,4 @@ c [m],[km/h],[%],[s],[kW],[kW],[kW] 27813,51,0.450840618,0,0.5,2.376,2.97 27814,51,0.450840618,0,0.5,2.376,2.97 27815,51,0.450840618,0,0.5,2.376,2.97 -27816,0,0.450840618,0,0.5,2.376,2.97 +27816,0,0.450840618,2,0.5,2.376,2.97 diff --git a/Demo Data/12t Demo/Declaration/Demo.vacc b/Demo Data/12t Demo/Declaration/Demo.vacc deleted file mode 100644 index 02699b0a38..0000000000 --- a/Demo Data/12t Demo/Declaration/Demo.vacc +++ /dev/null @@ -1,13 +0,0 @@ -c v,a_desmax,a_brake -c [km/h],[m/s²],[m/s²] -0,4,-0.49 -10,3.625,-0.985299321 -20,3.25,-1.007016046 -30,2.875,-0.973245282 -40,2.5,-0.898828018 -50,2.4,-0.845186182 -60,2.3,-0.782065661 -70,2.2,-0.700634022 -80,2.1,-0.62182988 -90,2,-0.554912104 -100,2,-0.49 diff --git a/Demo Data/12t Demo/Declaration/Demo_Declaration.vecto b/Demo Data/12t Demo/Declaration/Demo_Declaration.vecto index 775f7b3687..31705a4b5a 100644 --- a/Demo Data/12t Demo/Declaration/Demo_Declaration.vecto +++ b/Demo Data/12t Demo/Declaration/Demo_Declaration.vecto @@ -1,6 +1,6 @@ c VECTO Input File -c VECTO 1.3 -c 02.05.2013 09:11:10 +c VECTO 1.4 RC1 +c 04.09.2013 14:05:57 c Vehicle (.vveh): Demo_VehicleDeclaration.vveh c Engine (.veng): @@ -17,7 +17,7 @@ ALT,Alternator,..\Demo_AuxAlternator.vaux DEMO,Demo,..\Demo_AuxDevice.vaux <//> c Speed Dependent Desired Acceleration and Braking (.vacc) -Demo.vacc +..\..\..\Default Data\VACC\Truck.vacc c Engine Only Mode (1/0) 0 c ICE Auto-Start/Stop (1/0) - Non HEV only @@ -42,3 +42,5 @@ c Allowed UnderSpeed [km/h] 5 c Minimum target speed for Look-Ahead with Coasting [km/h] 50 +c Start/Stop activation delay time [s] +0 diff --git a/Demo Data/12t Demo/Declaration/Demo_VehicleDeclaration.vveh b/Demo Data/12t Demo/Declaration/Demo_VehicleDeclaration.vveh index 040f307f9c..0456dd030c 100644 --- a/Demo Data/12t Demo/Declaration/Demo_VehicleDeclaration.vveh +++ b/Demo Data/12t Demo/Declaration/Demo_VehicleDeclaration.vveh @@ -1,6 +1,6 @@ c VECTO Vehicle Input File -c VECTO 1.0 Beta 1 -c 23.10.2012 17:36:07 +c VECTO 1.4 RC1 +c 04.09.2013 14:05:37 c Curb weight vehicle [kg] 7750 c Curb weight extra trailer/body [kg] @@ -11,12 +11,12 @@ c Cd value [-] 0.6 c Cross sectional area [m^2] 8.8 -c Wheels equivalent rotational inertia [kg] (= I_wheel/rdyn^2) +c Wheels inertia [kgm^2] 216 c Wheel effective diameter [m] 0.849 c Cd Mode, Input File -1,Demo_CrosswindCorrection.vcdv +1,..\..\..\Default Data\VCDV\Truck.vcdv c Retarder Type (0=None, 1=Primary, 2=Secondary) 0 c Retarder Ratio @@ -24,6 +24,7 @@ c Retarder Ratio c Retarder File <NOFILE> c Axle configurations +c Max. axle weight [kg], RRC [N/N] 6000,0.009 6000,0.009 <//> diff --git a/Demo Data/12t Demo/Demo_Engine.veng b/Demo Data/12t Demo/Demo_Engine.veng index d6baa5cd6c..3356ba7b12 100644 --- a/Demo Data/12t Demo/Demo_Engine.veng +++ b/Demo Data/12t Demo/Demo_Engine.veng @@ -1,6 +1,6 @@ c VECTO Engine Input File -c VECTO 1.0 Beta 1 -c 23.10.2012 18:02:37 +c VECTO 1.4 RC1 +c 04.09.2013 14:06:31 c Make & Model Demo Engine c Rated power [kW] @@ -13,8 +13,9 @@ c Idling speed [rpm] 600 c Inertia [kgm2] 2.8 -c Full load curve -Demo_EngineFullload.vfld +c Full load curves +Demo_EngineFullload.vfld,0 - 99 +<//> c Fuel map Demo_EngineFcmap.vmap c WHTC test results diff --git a/Demo Data/12t Demo/Demo_Gearbox.vgbx b/Demo Data/12t Demo/Demo_Gearbox.vgbx index 3a63ee4b5d..00a69d2078 100644 --- a/Demo Data/12t Demo/Demo_Gearbox.vgbx +++ b/Demo Data/12t Demo/Demo_Gearbox.vgbx @@ -1,47 +1,29 @@ c VECTO Gearbox Input File -c VECTO 1.1 beta 3 -c 21.03.2013 09:49:47 +c VECTO 1.4 RC1 +c 04.09.2013 14:06:29 c Make & Model Demo c Gearbox rotational inertia [kgm2] 0 c Traction Interruption 1 -c Ratio [-], Loss Map or Efficiency +c Gears (0=axle) +c Ratio [-], Loss Map or Efficiency, Is TC gear c Gear 0 -4.3,0.96 +4.3,0.96,0 c Gear 1 -6.696,0.96 +6.696,0.96,0 c Gear 2 -3.806,0.96 +3.806,0.96,0 c Gear 3 -2.289,0.96 +2.289,0.96,0 c Gear 4 -1.48,0.96 +1.48,0.96,0 c Gear 5 -1,0.98 +1,0.98,0 c Gear 6 -0.728,0.96 -c Gear 7 -0,<NOFILE> -c Gear 8 -0,<NOFILE> -c Gear 9 -0,<NOFILE> -c Gear 10 -0,<NOFILE> -c Gear 11 -0,<NOFILE> -c Gear 12 -0,<NOFILE> -c Gear 13 -0,<NOFILE> -c Gear 14 -0,<NOFILE> -c Gear 15 -0,<NOFILE> -c Gear 16 -0,<NOFILE> +0.728,0.96,0 +<//> c Gear shift polygons file ShiftPolygons.vgbs c Torque Reserve [%] diff --git a/Demo Data/12t Demo/ProofOfConcept/Demo_ChassisDyno.vecto b/Demo Data/12t Demo/ProofOfConcept/Demo_ChassisDyno.vecto index cf632cf7ce..7f049cd0d3 100644 --- a/Demo Data/12t Demo/ProofOfConcept/Demo_ChassisDyno.vecto +++ b/Demo Data/12t Demo/ProofOfConcept/Demo_ChassisDyno.vecto @@ -1,6 +1,6 @@ c VECTO Input File -c VECTO 1.3 -c 30.04.2013 16:49:03 +c VECTO 1.4 RC1 +c 04.09.2013 14:06:18 c Vehicle (.vveh): Demo_Vehicle_ChassisDyno.vveh c Engine (.veng): @@ -41,3 +41,5 @@ c Allowed UnderSpeed [km/h] 0 c Minimum target speed for Look-Ahead with Coasting [km/h] 50 +c Start/Stop activation delay time [s] +0 diff --git a/Demo Data/12t Demo/ProofOfConcept/Demo_TestTrackCycle.vecto b/Demo Data/12t Demo/ProofOfConcept/Demo_TestTrackCycle.vecto index 2b0049b313..0b1feb5a39 100644 --- a/Demo Data/12t Demo/ProofOfConcept/Demo_TestTrackCycle.vecto +++ b/Demo Data/12t Demo/ProofOfConcept/Demo_TestTrackCycle.vecto @@ -1,6 +1,6 @@ c VECTO Input File -c VECTO 1.3 -c 30.04.2013 14:52:04 +c VECTO 1.4 RC1 +c 04.09.2013 14:06:33 c Vehicle (.vveh): Demo_Vehicle_TestTrack.vveh c Engine (.veng): @@ -39,3 +39,5 @@ c Allowed UnderSpeed [km/h] 0 c Minimum target speed for Look-Ahead with Coasting [km/h] 50 +c Start/Stop activation delay time [s] +0 diff --git a/Demo Data/12t Demo/ProofOfConcept/Dummy.vacc b/Demo Data/12t Demo/ProofOfConcept/Dummy.vacc index 4d9642b8d0..cb8174bab8 100644 --- a/Demo Data/12t Demo/ProofOfConcept/Dummy.vacc +++ b/Demo Data/12t Demo/ProofOfConcept/Dummy.vacc @@ -1,4 +1,4 @@ c v,a_desmax,a_brake c [km/h],[m/s²],[m/s²] -0,10,-10 -1000,10,-10 \ No newline at end of file +0,100,-100 +1000,100,-100 \ No newline at end of file diff --git a/Demo Data/40t Demo/Demo_CrosswindCorrection.vcdv b/Demo Data/40t Demo/Demo_CrosswindCorrection.vcdv deleted file mode 100644 index 22cb214f24..0000000000 --- a/Demo Data/40t Demo/Demo_CrosswindCorrection.vcdv +++ /dev/null @@ -1,26 +0,0 @@ -c Demo data -c Cross-wind sensitivity for rigid vehicle (Mitschke) -c average cross wind: 3m/s -c v_veh,cdx_rel -c [km/h],[-] -0,1.09879105165478 -5,1.09879105165478 -10,1.09879105165478 -15,1.09879105165478 -20,1.09879105165478 -25,1.09879105165478 -30,1.09879105165478 -35,1.09879105165478 -40,1.09879105165478 -45,1.09879105165478 -50,1.09879105165478 -55,1.09879105165478 -60,1.09879105165478 -65,1.08880328691127 -70,1.08053379303156 -75,1.07361197884146 -80,1.06774118921044 -85,1.0627044915251 -90,1.05833988168619 -95,1.05452412535638 -100,1.05116194011008 diff --git a/Demo Data/40t Demo/VehClass5_40t.veng b/Demo Data/40t Demo/VehClass5_40t.veng index fd7b1a9828..c247e96dd7 100644 --- a/Demo Data/40t Demo/VehClass5_40t.veng +++ b/Demo Data/40t Demo/VehClass5_40t.veng @@ -1,6 +1,6 @@ c VECTO Engine Input File -c VECTO 1.2 -c 23.04.2013 14:06:21 +c VECTO 1.4 RC1 +c 04.09.2013 14:06:37 c Make & Model Demo engine c Rated power [kW] @@ -13,8 +13,9 @@ c Idling speed [rpm] 620 c Inertia [kgm2] 3.8 -c Full load curve -VehClass5_40t.vfld +c Full load curves +VehClass5_40t.vfld,0 - 99 +<//> c Fuel map VehClass5_40t.vmap c WHTC test results diff --git a/Demo Data/40t Demo/VehClass5_40t.vgbx b/Demo Data/40t Demo/VehClass5_40t.vgbx index 1a1d13dc85..097ff0a2b6 100644 --- a/Demo Data/40t Demo/VehClass5_40t.vgbx +++ b/Demo Data/40t Demo/VehClass5_40t.vgbx @@ -1,47 +1,41 @@ c VECTO Gearbox Input File -c VECTO 1.2 -c 23.04.2013 13:55:37 +c VECTO 1.4 RC1 +c 04.09.2013 14:06:39 c Make & Model Demo Gearbox Long Haul c Gearbox rotational inertia [kgm2] 0 c Traction Interruption 0.8 -c Ratio [-], Loss Map or Efficiency +c Gears (0=axle) +c Ratio [-], Loss Map or Efficiency, Is TC gear c Gear 0 -3.066,0.97 +3.066,0.97,0 c Gear 1 -14.93,0.96 +14.93,0.96,0 c Gear 2 -11.64,0.96 +11.64,0.96,0 c Gear 3 -9.02,0.96 +9.02,0.96,0 c Gear 4 -7.04,0.96 +7.04,0.96,0 c Gear 5 -5.64,0.96 +5.64,0.96,0 c Gear 6 -4.4,0.96 +4.4,0.96,0 c Gear 7 -3.39,0.96 +3.39,0.96,0 c Gear 8 -2.65,0.96 +2.65,0.96,0 c Gear 9 -2.05,0.96 +2.05,0.96,0 c Gear 10 -1.6,0.96 +1.6,0.96,0 c Gear 11 -1.28,0.96 +1.28,0.96,0 c Gear 12 -1,0.98 -c Gear 13 -0,<NOFILE> -c Gear 14 -0,<NOFILE> -c Gear 15 -0,<NOFILE> -c Gear 16 -0,<NOFILE> +1,0.98,0 +<//> c Gear shift polygons file VehClass5_40t.vgbs c Torque Reserve [%] diff --git a/Demo Data/40t Demo/VehClass5_40t.vveh b/Demo Data/40t Demo/VehClass5_40t.vveh index af6e268e91..f10e472cf9 100644 --- a/Demo Data/40t Demo/VehClass5_40t.vveh +++ b/Demo Data/40t Demo/VehClass5_40t.vveh @@ -1,6 +1,6 @@ c VECTO Vehicle Input File -c VECTO 1.2 -c 23.04.2013 14:06:11 +c VECTO 1.4 RC1 +c 04.09.2013 14:13:21 c Curb weight vehicle [kg] 14000 c Curb weight extra trailer/body [kg] @@ -16,7 +16,7 @@ c Wheels inertia [kgm^2] c Wheel effective diameter [m] 0.975 c Cd Mode, Input File -1,Demo_CrosswindCorrection.vcdv +1,..\..\Default Data\VCDV\Truck.vcdv c Retarder Type (0=None, 1=Primary, 2=Secondary) 0 c Retarder Ratio diff --git a/Demo Data/40t Demo/VehClass5_40t_LongHaul.vecto b/Demo Data/40t Demo/VehClass5_40t_LongHaul.vecto index a700f6d0c0..0ddead0a51 100644 --- a/Demo Data/40t Demo/VehClass5_40t_LongHaul.vecto +++ b/Demo Data/40t Demo/VehClass5_40t_LongHaul.vecto @@ -1,6 +1,6 @@ c VECTO Input File -c VECTO 1.3 -c 30.04.2013 16:49:20 +c VECTO 1.4 RC1 +c 04.09.2013 14:12:01 c Vehicle (.vveh): VehClass5_40t.vveh c Engine (.veng): @@ -14,7 +14,7 @@ c Auxiliaries (.vaux) ALT,Alternator,Demo_AuxAlternator.vaux <//> c Speed Dependent Desired Acceleration and Braking (.vacc) -Truck_Default.vacc +..\..\Default Data\VACC\Truck.vacc c Engine Only Mode (1/0) 0 c ICE Auto-Start/Stop (1/0) - Non HEV only @@ -39,3 +39,5 @@ c Allowed UnderSpeed [km/h] 0 c Minimum target speed for Look-Ahead with Coasting [km/h] 50 +c Start/Stop activation delay time [s] +0 diff --git a/Demo Data/Cycles/20120815_acea_long_haul_1m_DemoAux.vdri b/Demo Data/Cycles/20120815_acea_long_haul_1m_DemoAux.vdri index ec771025d4..9ae33518ed 100644 --- a/Demo Data/Cycles/20120815_acea_long_haul_1m_DemoAux.vdri +++ b/Demo Data/Cycles/20120815_acea_long_haul_1m_DemoAux.vdri @@ -1,6 +1,6 @@ <s>,<v>,<grad>,<stop>,<Aux_Alt>,<Padd> c [m],[km/h],[%],[s],[kW],[kW] -0,0,2.95016969,0,0.5,1.3 +0,0,2.95016969,2,0.5,1.3 1,60,2.95016969,0,0.5,1.3 2,60,2.95016969,0,0.5,1.3 3,60,2.95016969,0,0.5,1.3 @@ -108191,4 +108191,4 @@ c [m],[km/h],[%],[s],[kW],[kW] 108188,60,-2.982225506,0,0.5,1.3 108189,60,-2.982225506,0,0.5,1.3 108190,60,-2.982225506,0,0.5,1.3 -108191,0,-2.982225506,0,0.5,1.3 +108191,0,-2.982225506,2,0.5,1.3 diff --git a/User Manual Source/Update Notes.pptx b/User Manual Source/Update Notes.pptx index c6e41166443fc97810a29e340df9235839273d9d..8ea1319541c6d8a9cbd9878db111f851453d9ff4 100644 GIT binary patch delta 64122 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 YZ<P<EZIPZigTwbwiaUj`qF@>S3)h}RhX4Qo delta 62994 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	t$g@hpo+}=C<7-CuR@RoIA10 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	#8}qHEVI!3)Eu4eIz9<Jb7S2I1 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 diff --git a/VECTO/ADVANCE/cADV.vb b/VECTO/ADVANCE/cADV.vb deleted file mode 100644 index 5098ac7718..0000000000 --- a/VECTO/ADVANCE/cADV.vb +++ /dev/null @@ -1,216 +0,0 @@ -Imports System.Collections.Generic - -Public Class cADV - - Private sFilePath As String - - Private MyPath As String - - Private fFZPpath As cSubPath - Private fFLTpath As cSubPath - Private fTEMpath As cSubPath - Private fSTRpaths As List(Of cSubPath) - Public SD3out As Boolean - Public STRfilter As Boolean - Public STRSUMdistflt As Single - Public RndSeed As Short - - - Public Sub New() - - sFilePath = "" - MyPath = "" - - fFZPpath = New cSubPath - fFLTpath = New cSubPath - fTEMpath = New cSubPath - fSTRpaths = New List(Of cSubPath) - - End Sub - - Public Function ReadFile() As Boolean - Dim file As cFile_V3 - Dim SubPath As cSubPath - - If sFilePath = "" Then Return False - If Not IO.File.Exists(sFilePath) Then Return False - - file = New cFile_V3 - - SetDefault() - - If Not file.OpenRead(sFilePath) Then - file = Nothing - Return False - End If - - - fFZPpath.Init(MyPath, file.ReadLine(0)) - - fFLTpath.Init(MyPath, file.ReadLine(0)) - - fTEMpath.Init(MyPath, file.ReadLine(0)) - - RndSeed = CShort(file.ReadLine(0)) - - SD3out = CBool(file.ReadLine(0)) - - STRfilter = CBool(file.ReadLine(0)) - - STRSUMdistflt = CSng(file.ReadLine(0)) - - Do While Not file.EndOfFile - SubPath = New cSubPath - SubPath.Init(MyPath, file.ReadLine(0)) - fSTRpaths.Add(SubPath) - Loop - - -lbClose: - - file.Close() - file = Nothing - - Return True - - End Function - - Public Function SaveFile() As Boolean - Dim fADV As New cFile_V3 - Dim SubPath As cSubPath - - If Not fADV.OpenWrite(sFilePath) Then Return False - - 'Line 1: FZP file - fADV.WriteLine(fFZPpath.PathOrDummy) - - 'Line 2: FLT file - fADV.WriteLine(fFLTpath.PathOrDummy) - - 'Line 3: TEM file - fADV.WriteLine(fTEMpath.PathOrDummy) - - 'Line 4: RndSeed - fADV.WriteLine(RndSeed.ToString) - - 'Line 5: MISKAMout True/False| - fADV.WriteLine(Math.Abs(CInt(SD3out))) - - 'Line 6: STRfilter True/False - fADV.WriteLine(Math.Abs(CInt(STRfilter))) - - 'Line 7: Distance filters for SUM.STR - fADV.WriteLine(STRSUMdistflt.ToString) - - 'Line 8 +: STR files - For Each SubPath In fSTRpaths - fADV.WriteLine(SubPath.PathOrDummy) - Next - - fADV.Close() - fADV = Nothing - - Return True - - End Function - - Private Sub SetDefault() - - SD3out = False - STRfilter = False - STRSUMdistflt = 85 - RndSeed = 0 - - STRpathsClear() - - End Sub - - Public Property FilePath() As String - Get - Return sFilePath - End Get - Set(ByVal value As String) - sFilePath = value - MyPath = IO.Path.GetDirectoryName(sFilePath) & "\" - End Set - End Property - - Public Property FZPpath(Optional ByVal Original As Boolean = False) As String - Get - If Original Then - Return fFZPpath.OriginalPath - Else - Return fFZPpath.FullPath - End If - End Get - Set(ByVal value As String) - fFZPpath.Init(MyPath, value) - End Set - End Property - - Public Property FLTpath(Optional ByVal Original As Boolean = False) As String - Get - If Original Then - Return fFLTpath.OriginalPath - Else - Return fFLTpath.FullPath - End If - End Get - Set(ByVal value As String) - fFLTpath.Init(MyPath, value) - End Set - End Property - - Public Property TEMpath(Optional ByVal Original As Boolean = False) As String - Get - If Original Then - Return fTEMpath.OriginalPath - Else - Return fTEMpath.FullPath - End If - End Get - Set(ByVal value As String) - fTEMpath.Init(MyPath, value) - End Set - End Property - -#Region "STR-Dateien" - Public ReadOnly Property STRpaths(ByVal index As Short, Optional ByVal Original As Boolean = False) As String - Get - If Original Then - Return fSTRpaths(index).OriginalPath - Else - Return fSTRpaths(index).FullPath - End If - End Get - End Property - - Public Sub STRpathsAdd(ByVal path As String) - Dim SubPath As cSubPath - - SubPath = New cSubPath - - SubPath.Init(MyPath, path) - - fSTRpaths.Add(SubPath) - - End Sub - - Public Sub STRpathsClear() - fSTRpaths.Clear() - End Sub - - Public ReadOnly Property STRcount As Integer - Get - Return fSTRpaths.Count - End Get - End Property - -#End Region - - - - - - -End Class diff --git a/VECTO/ADVANCE/cADVANCE.vb b/VECTO/ADVANCE/cADVANCE.vb deleted file mode 100644 index 7b03cbaf3b..0000000000 --- a/VECTO/ADVANCE/cADVANCE.vb +++ /dev/null @@ -1,2437 +0,0 @@ -Imports System.Collections.Generic - -Public Class cADVANCE_V3 - - Public FadvSUM As System.IO.StreamWriter - Public RndSeed As Int16 - Public MISKAMout As Boolean - - Public ADVANCEdone As Boolean - - 'TEM (TODO) - Public ADVkalt As Boolean - Public ADVtkw As Single - Public ADVtkat As Single - Public vtumg As Single - - 'ADV - Private FLTpath As String - Private TEMpath As String - Private STRfilter As Boolean - Private STRroute As Boolean - - 'FLT-Collection - Private FLTfleet As Dictionary(Of String, cFLTfleet) - - Public iadvance As Integer - Public aVehNr As Int32 - Public aVehType As String - Public aWorldX As List(Of Single) - Public aWorldY As List(Of Single) - Public aStrId As List(Of Int32) - - - Private EMlist As List(Of String) - Private EMdim As Integer - - Private AusgVisInit As Boolean - - -#Region "FZP Variablen" - Private FZPpath As String - Private FZPlen As Int32 - Private FZPsortPath As String - Private vt() As Int32 '<< Bei Int16: musste Sim-Zeit unter 32767s (~9h) sein => Bei Kreisverkehr-Projekt zu wenig! - Private t0 As Int32 - Private vX() As Single - Private vY() As Single - Private vNr() As Int32 '<< Int16 zu klein (EkoZara: vNr's bis ~ 48000). Möglich wäre allerdings Int16 von -32767 bis +32767 verwenden d.h. Max = 65534 - Private vNrSub() As Int16 '<< Evtl. weghaun...? - Private vVm() As Single - Private vStg() As Single - Private vID() As Int16 - Private vSID() As Int32 '<< Int16 zu klein. (Int16 mit negativem Bereich (2*32767) wahrscheinlich auch noch zu klein) - Private FZProwT As Int16 = 0 - Private FZProwWeltX As Int16 = 1 - Private FZProwWeltY As Int16 = 2 - Private FZProwFzNr As Int16 = 3 - Private FZProwV As Int16 = 4 - Private FZProwSteig As Int16 = 5 - Private FZProwTyp As Int16 = 6 - Private FZProwStr As Int16 = 7 -#End Region - -#Region "STR Variablen" - - Private sSIDdim As Int16 - Private STRpaths As List(Of String) 'Liste der STR-Dateien - Private sSIDlist As List(Of Int32) 'Streckennummer-Liste, aufsteigend sortiert, keine Duplikate - Private sSIDfiles As List(Of Int32) 'Dateinummern, gleich sortiert wie sSIDlist - - 'Felder für Streckennummer, Spur und Koordinaten für alle STR-Dateien |@@| Fields for Route-number, Track and Coordinates for all STR files - Private STRlen As Int32 - Private sStr As List(Of Int32) - Private sSp As List(Of Int16) - Private sSegAnX As List(Of Single) - Private sSegEnX As List(Of Single) - Private sSegAnY As List(Of Single) - Private sSegEnY As List(Of Single) - - 'STR.SUM - Private STRerg As List(Of cSTRerg) - Private STRdistTol As Single - - -#End Region - -#Region "SD3 Variablen" - Private SD3path As String - Private sFC() As Single - Private sNOx() As Single - Private sCO() As Single - Private sHC() As Single - Private sPM() As Single - Private sBe() As Single - Private sRu() As Single - Private sSO2() As Single - Private ala() As Single - Private vDTV() As Single - Private ALKW() As Single -#End Region - - - 'Calculation - Private zFZP As Int32 'Globale FZP-Zeile - Private LastGen As String 'Letzte .gen-Datei - Private VehStrAlt As String 'VehStr = Fahrzeug ID: bestehend aus Fahrzeugnummer (aus VISSIM) und SubNr um Zeitlücken zu korrigieren - Private vNrAlt As Int32 - Private fzpL10 As Int32 - Private fzpL As Int32 - - Private SUMpath As String - - 'ADVANCE initialization - Public Function ADVANCE_V2_Init() As Boolean - - Dim msgtext As String - Dim FZPs As Boolean - Dim MsgSrc As String - - MsgSrc = "ADV/Init" - - AusgVisInit = False - ADVANCEdone = False - FZPs = Cfg.FZPsort - - 'Read ADV-File - If Not ADVread() Then Return False - - 'Check whether FLT is available - If Not IO.File.Exists(FLTpath) Then - WorkerMsg(tMsgID.Err, "Fleet composition file not found! (" & FLTpath & ")", MsgSrc) - Return False - End If - - 'Check whether FZP is sorted - If FZPs And Cfg.FZPsortExp Then - If STRfilter Then - FZPsortPath = IO.Path.GetDirectoryName(FZPpath) & "\" & IO.Path.GetFileNameWithoutExtension(FZPpath) & "_" & IO.Path.GetFileNameWithoutExtension(STRpaths(0)) & ".sfzp" - Else - FZPsortPath = IO.Path.GetDirectoryName(FZPpath) & "\" & IO.Path.GetFileNameWithoutExtension(FZPpath) & ".sorted" & fEXT(FZPpath) - End If - If IO.File.Exists(FZPsortPath) Then - msgtext = "File '" & IO.Path.GetFileName(FZPsortPath).ToString & "' already exists!" - Select Case F_ADVfzp.Answer(msgtext) - Case 0 - WorkerMsg(tMsgID.Warn, "New Traffic Data path: " & FZPsortPath, MsgSrc) - WorkerMsg(tMsgID.Warn, "Traffic Data Sort/Export temporarily disabled.", MsgSrc) - FZPpath = FZPsortPath - FZPs = False - Case 1 - 'GO! - Case 2 - ADVANCEdone = True - Return True - End Select - End If - End If - - 'FLT einlesen (muss vor STR sein wegen cSTRerg) |@@| Read FLT (must be done before STR because of cSTRerg) - If Not FLTread() Then Return False - - If Not FLTcheck() Then Return False - - 'Create EMlist - EMlist = New List(Of String) - - If EVcheck() Then - EMlist.Add("\\EC") - Else - EMlist.Add(sKey.MAP.FC) - EMlist.Add(sKey.MAP.NOx) - EMlist.Add(sKey.MAP.CO) - EMlist.Add(sKey.MAP.HC) - EMlist.Add(sKey.MAP.PM) - EMlist.Add(sKey.MAP.PN) - EMlist.Add(sKey.MAP.NO) - End If - - EMdim = EMlist.Count - 1 - - - - 'STR read - If STRfilter Then - - If Not STRread() Then Return False - - SD3path = fFileWoExt(JobFile) & ".sd3" 'fPATH(JobFile) & fFILE(JobFile, False) & ".sd3" - If MISKAMout Then - ReDim sFC(STRlen) - ReDim sNOx(STRlen) - ReDim sCO(STRlen) - ReDim sHC(STRlen) - ReDim sPM(STRlen) - ReDim sBe(STRlen) - ReDim sRu(STRlen) - ReDim sSO2(STRlen) - ReDim ala(STRlen) - ReDim vDTV(STRlen) - ReDim ALKW(STRlen) - End If - End If - - 'Create Lists - aWorldX = New List(Of Single) - aWorldY = New List(Of Single) - aStrId = New List(Of Int32) - - 'Read FZP - If Not FZPread() Then Return False - If PHEMworker.CancellationPending Then Return True - - 'FZP sort (and export) - If FZPs Then - ProgBarCtrl.ProgJobInt = 0 - FZPsortieren() - If Cfg.FZPsortExp Then - If Not FZPexport() Then Return False - End If - If PHEMworker.CancellationPending Then Return True - End If - - 'FZP Check - FZPcheck() - - 'TEM (TODO) - ADVkalt = False - - 'Random-Init - Rnd(-1) - Randomize(RndSeed) - - 'For Output-Vis - iadvance = FZPlen - - 'Dump-initialization - - ' Filename - SUMpath = fFileWoExt(JobFile) & ".vehicle.sum" 'fPATH(JobFile) & fFILE(JobFile, False) & ".sum" - - ' Dump Modal - If Cfg.ModOut Then - If Not AusgMOD_Init() Then Return False - End If - - 'Start-values - zFZP = 0 - VehStrAlt = vNr(1) & "_" & vNrSub(1) - vNrAlt = -1 - LastGen = "" - fzpL10 = Math.Max(FZPlen / 100, 1000) - fzpL = 0 - ProgBarCtrl.ProgJobInt = 0 - WorkerMsg(tMsgID.Normal, "Calculation running... ", MsgSrc) - - Return True - - End Function - - 'ADVANCE memory release - Public Sub ADVANCE_V2_Close() - Dim MsgSrc As String - - MsgSrc = "ADV/Close" - - ProgBarCtrl.ProgJobInt = 0 - - WorkerMsg(tMsgID.Normal, "Finalizing... ", MsgSrc) - - 'Dump - AusgVis_V3_Close() - - 'Free memory - vt = Nothing 'ReDim vt(-1) - vX = Nothing - vY = Nothing - vNr = Nothing - vNrSub = Nothing - vVm = Nothing - vStg = Nothing - vID = Nothing - vSID = Nothing - sStr = Nothing - sSIDlist = Nothing - sSIDfiles = Nothing - sSp = Nothing - sSegAnX = Nothing - sSegEnX = Nothing - sSegAnY = Nothing - sSegEnY = Nothing - 'ReDim vX(-1) - 'ReDim vY(-1) - 'ReDim vNr(-1) - 'ReDim vNrSub(-1) - 'ReDim vVm(-1) - 'ReDim vStg(-1) - 'ReDim vID(-1) - 'ReDim vSID(-1) - 'ReDim sStr(-1) - 'ReDim sSIDlist(-1) - 'ReDim sSp(-1) - 'ReDim sSegAnX(-1) - 'ReDim sSegEnX(-1) - 'ReDim sSegAnY(-1) - 'ReDim sSegEnY(-1) - FLTfleet = Nothing 'ReDim FLTfleet(-1) - If MISKAMout Then - sFC = Nothing - sNOx = Nothing - sCO = Nothing - sHC = Nothing - sPM = Nothing - sBe = Nothing - sRu = Nothing - sSO2 = Nothing - ala = Nothing - vDTV = Nothing - ALKW = Nothing - 'ReDim sFC(-1) - 'ReDim sNOx(-1) - 'ReDim sCO(-1) - 'ReDim sHC(-1) - 'ReDim sPM(-1) - 'ReDim sBe(-1) - 'ReDim sRu(-1) - 'ReDim sSO2(-1) - 'ReDim ala(-1) - 'ReDim vDTV(-1) - 'ReDim ALKW(-1) - End If - iadvance = 0 - - 'Delete Lists - aWorldX = Nothing - aWorldY = Nothing - aStrId = Nothing - - AusgVisInit = False - - 'Garbage Collection - Soll "System Out of Memory" Exception verhindern (tut's aber nicht!) |@@| Garbage Collection - If "System Out of Memory" Exception prevents it (but does not do it!) - GC.Collect() - - - End Sub - - 'ADVANCE Vehicle calculation - Public Function ADVANCE_V2_Next() As Boolean - - Dim VehStr As String - Dim vNrAkt As Int32 - Dim vIDi As Int16 - Dim z As Int32 - Dim vList As System.Collections.Generic.List(Of Double) - Dim stgList As System.Collections.Generic.List(Of Double) - Dim MsgSrc As String - - MsgSrc = "ADV" - -lbStart: - - 'Check whether finished - If zFZP = FZPlen Then - ADVANCEdone = True - WorkerMsg(tMsgID.Normal, "Calculation done", MsgSrc) - Return True - End If - - 'Initialize Cycle-class - DRI = New cDRI - DRI.ADVinit() - vList = DRI.Values(tDriComp.V) - stgList = DRI.Values(tDriComp.Grad) - - 'Fahzeugnummer und Typ definieren (bleibt hier konstant) |@@| Vehicle-number and Type definition (here remains constant) - ' Old Vehicle is VehStrAlt, New is VehStr - vNrAkt = vNr(zFZP + 1) - vIDi = vID(zFZP + 1) - VehStr = vNr(zFZP + 1) & "_" & vNrSub(zFZP + 1) - - 'Create Lists - aWorldX.Clear() - aWorldY.Clear() - aStrId.Clear() - - 't0 - DRI.t0 = vt(zFZP + 1) - - 'Define Fields for Vehicle-calculations - z = -1 - Do - 'Check whether it is a new Vehicle - If VehStr <> vNr(zFZP + 1) & "_" & vNrSub(zFZP + 1) Then Exit Do - z += 1 - zFZP += 1 - - 'General(Allgemeiner) Vehicle-Cycle - vList.Add(vVm(zFZP) / 3.6) - stgList.Add(vStg(zFZP)) - - 'ADVANCE - ' Strecken-Auswertung (MISKAM) |@@| Road-Distance evaluation (MISKAM) - aWorldX.Add(vX(zFZP)) - aWorldY.Add(vY(zFZP)) - aStrId.Add(vSID(zFZP)) - - fzpL += 1 - If fzpL = fzpL10 Then - ''StatusMSG(7, "Calculation running... " & CInt(zFZP / FZPlen * 100).ToString("00") & "%", False) - ProgBarCtrl.ProgJobInt = zFZP / FZPlen * 100 - fzpL = 0 - End If - - Loop Until zFZP = FZPlen - - ' Vehicle identification - aVehNr = vNrAkt - aVehType = CStr(vIDi) - - 'Check whether Cycle too short => skip - If z < 1 Then GoTo lbStart - - 'Increase number of Vehicles per each Type - FLTfleet(aVehType).VehCount += 1 - - DRI.tDim = z - - 'Check whethert last GEN-file to use is new, otherwise occupied(Belegung ) by FLT - If vNrAlt = vNrAkt Then - GenFile = LastGen - Else - Try - GenFile = FLTfleet(key:=CStr(vIDi)).GetGenFile - If GenFile = "" Then Return False - Catch ex As Exception - WorkerMsg(tMsgID.Err, vIDi & " is no valid vehicle type!", MsgSrc) - Return False - End Try - End If - - 'VehStr is now ALT - VehStrAlt = VehStr - vNrAlt = vNrAkt - LastGen = GenFile - - Return True - - End Function - - 'Section by section calculation - Public Sub STRcalc() - Dim t As Integer - Dim STR0 As Integer - Dim STR1 As Integer - Dim t0 As Integer - Dim dist0 As Double - Dim time0 As Single - Dim STRergRef As cSTRerg - Dim e As Integer - Dim EMsum() As Double - - If Not STRfilter Then Exit Sub - - STR0 = -1 - t0 = -1 - dist0 = 0 - time0 = 0 - ReDim EMsum(EMdim) - - 'Zyklus durchschleifen |@@| through Cycle-loop - For t = 0 To MODdata.tDim - - 'No. of STR-file - STR1 = getSTRfileNr(aStrId(t)) - - 'If STR-No has changed: - ' Finish with Old STR-No. - If STR0 <> STR1 Then - - If t0 > -1 Then ' STR0 > -1 Then - - STRergRef = STRerg(STR0) - - If dist0 >= STRdistTol * STRergRef.Distance Then - - 'Distance (km driven) - STRergRef.VehDist(aVehType) += dist0 - - 'Travel-Time in h - STRergRef.VehTime(aVehType) += time0 / 3600 - - 'Vehicle(KFZ) No. - STRergRef.VehCount(aVehType) += 1 - - 'Cumulative emissions - For e = 0 To EMdim - STRergRef.EMsum(aVehType)(e) += EMsum(e) / 3600 - Next - - End If - - End If - - t0 = t - STR0 = STR1 - dist0 = 0 - time0 = 0 - For e = 0 To EMdim - EMsum(e) = 0 - Next - - End If - - 'Add up - dist0 += MODdata.Vh.V(t) / 1000 - time0 += 1 - If GEN.VehMode = tVehMode.EV Then - EMsum(0) += MODdata.Px.PiBat(t) - Else - For e = 0 To EMdim - EMsum(e) += Math.Max(MODdata.Em.EmComp(EMlist(e)).FinalVals(t), 0) - Next - End If - - - Next - - 'Last STR completed - If t0 > -1 Then - - STRergRef = STRerg(STR0) - - If dist0 >= STRdistTol * STRergRef.Distance Then - - 'Distance (km driven) - STRergRef.VehDist(aVehType) += dist0 - - 'Time in h - STRergRef.VehTime(aVehType) += time0 / 3600 - - 'Vehicle(KFZ) No. - STRergRef.VehCount(aVehType) += 1 - - 'Cumulative emissions - For e = 0 To EMdim - STRergRef.EMsum(aVehType)(e) += EMsum(e) / 3600 - Next - - End If - - End If - - - - - End Sub - - Private Function getSTRfileNr(ByVal SID As Integer) As Integer - Dim x As Integer - For x = 0 To sSIDdim - If sSIDlist(x) = SID Then Return sSIDfiles(x) - Next - Return -1 - End Function - - 'Read FLT - Private Function FLTread() As Boolean - - Dim fFLT As cFile_V3 - Dim ArP() As Single - Dim ArGen() As String - Dim FLTdim As Int16 - Dim IDstr As String - Dim lastIDstr As String - Dim ft As cFLTfleet - Dim lA As String() - - Dim path0 As String - Dim MsgSrc As String - - MsgSrc = "ADV/Init/FLTread" - - - - WorkerMsg(tMsgID.Normal, "Reading FLT file...", MsgSrc) - - fFLT = New cFile_V3 - If Not fFLT.OpenRead(FLTpath) Then - WorkerMsg(tMsgID.Err, "Failed to open .flt file (" & FLTpath & ")", MsgSrc) - fFLT = Nothing - Return False - End If - - ReDim ArP(999) - ReDim ArGen(999) - FLTfleet = New Dictionary(Of String, cFLTfleet) - lastIDstr = "" - path0 = fPATH(FLTpath) - - Do While Not fFLT.EndOfFile - lA = fFLT.ReadLine - IDstr = Trim(lA(0)) - If IDstr <> lastIDstr Then - If lastIDstr <> "" Then - ft = New cFLTfleet(lastIDstr) - If Not ft.Init(ArGen, ArP, FLTdim) Then Return False - FLTfleet.Add(lastIDstr, ft) - End If - lastIDstr = IDstr - FLTdim = -1 - End If - FLTdim += 1 - ArGen(FLTdim) = fFileRepl(lA(1), path0) - ArP(FLTdim) = CSng(lA(2)) - Loop - If lastIDstr <> "" Then - ft = New cFLTfleet(lastIDstr) - If Not ft.Init(ArGen, ArP, FLTdim) Then Return False - FLTfleet.Add(lastIDstr, ft) - End If - ft = Nothing - - fFLT.Close() - fFLT = Nothing - - ArP = Nothing - ArGen = Nothing - FLTdim = Nothing - - Return True - - End Function - - Private Function FLTcheck() As Boolean - Dim FLTref As cFLTfleet - Dim check As Boolean - - check = True - - For Each FLTref In FLTfleet.Values - If Not FLTref.FileCheck() Then check = False - Next - - Return check - - End Function - - Private Function EVcheck() As Boolean - Dim GEN0 As cGEN - Dim flt0 As cFLTfleet - - GEN0 = New cGEN - - For Each flt0 In FLTfleet.Values - - GEN0.FilePath = flt0.GetGenFile - - If Not GEN0.ReadFile Then Return False - - Return (GEN0.VehMode = tVehMode.EV) - - Next - - Return False - - End Function - - 'Read FZP - Private Function FZPread() As Boolean - - Dim fReader As Microsoft.VisualBasic.FileIO.TextFieldParser - Dim f As System.IO.StreamReader - Dim l As Int32 - Dim lc As Int32 - Dim lc10 As Int32 - Dim line() As String - Dim line0 As String - Dim ComDone As Boolean - Dim x As Int32 - Dim LineSkip As Int16 - Dim lastSID As Int32 - Dim SIDisBad As Boolean - Dim s As Int32 - Dim FZPlenOgl As Int32 - Dim MsgSrc As String - - MsgSrc = "ADV/Init/TFread" - - If Not IO.File.Exists(FZPpath) Then - WorkerMsg(tMsgID.Err, "Traffic File not found (" & FZPpath & ")", MsgSrc) - Return False - End If - - WorkerMsg(tMsgID.Normal, "Traffic File: Counting lines...", MsgSrc) - - - 'Determine File-length - Try - f = New System.IO.StreamReader(FZPpath) - Catch ex As Exception - WorkerMsg(tMsgID.Err, "Cannot access Traffic File (" & FZPpath & ")", MsgSrc) - Return False - End Try - - x = 0 - LineSkip = 0 - ComDone = False - Do While Not f.EndOfStream - line0 = f.ReadLine() - If Not ComDone Then - If LineSkip > 200 Then - WorkerMsg(tMsgID.Err, "Error in Traffic File: Number of Columns < 8", MsgSrc) - Return False - End If - If IsNumeric(line0.Split(";")(0)) And UBound(line0.Split(";")) > 6 Then - ComDone = True - Else - LineSkip += 1 - Continue Do - End If - End If - x += 1 - Loop - FZPlen = x - f.Close() - f.Dispose() - f = Nothing - - If PHEMworker.CancellationPending Then Return True - - 'Dimension arrays - ReDim vt(FZPlen) - ReDim vX(FZPlen) - ReDim vY(FZPlen) - ReDim vNr(FZPlen) - ReDim vNrSub(FZPlen) - ReDim vVm(FZPlen) - ReDim vStg(FZPlen) - ReDim vID(FZPlen) - ReDim vSID(FZPlen) - - FZPlenOgl = FZPlen - - - If STRfilter Then - WorkerMsg(tMsgID.Normal, "Traffic File: Reading & Filtering...", MsgSrc) - Else - WorkerMsg(tMsgID.Normal, "Traffic File: Reading...", MsgSrc) - End If - - 'Import File - fReader = New Microsoft.VisualBasic.FileIO.TextFieldParser(FZPpath, FileFormat) - fReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited - fReader.Delimiters = New String() {";"} - - 'Skip Comments - For l = 1 To LineSkip - fReader.ReadLine() - Next - l = 0 - lc = 0 - lastSID = -1 - lc10 = Math.Max(FZPlen / 100, 1000) - Do While Not fReader.EndOfData - line = fReader.ReadFields() - 'Strecken die nicht in der STR Datei aufgeführt sind werden hier entfernt |@@| Routes that are not listed in the STR file, are ignoted(?) here - If STRfilter Then - If line(FZProwStr) <> lastSID Then - lastSID = line(FZProwStr) - SIDisBad = True - For s = 0 To sSIDdim - If sSIDlist(s) = lastSID Then - SIDisBad = False - Exit For - End If - Next - End If - If SIDisBad Then - FZPlen -= 1 - lc10 = Math.Max(FZPlen / 100, 1000) - GoTo lbProg1 'Continue Do - End If - End If - 'Show Arrays - l += 1 - vt(l) = line(FZProwT) - vX(l) = line(FZProwWeltX) - vY(l) = line(FZProwWeltY) - vNr(l) = line(FZProwFzNr) - vVm(l) = line(FZProwV) - vStg(l) = line(FZProwSteig) - vID(l) = CInt(line(FZProwTyp)) - vSID(l) = line(FZProwStr) - vNrSub(l) = 0 - 'Display Progress -lbProg1: - lc += 1 - If lc >= lc10 Then - ProgBarCtrl.ProgJobInt = l / FZPlen * 100 - lc = 0 - If PHEMworker.CancellationPending Then Return True - End If - Loop - - 'Free memory - fReader.Close() - fReader.Dispose() - fReader = Nothing - - If FZPlenOgl <> FZPlen Then - If FZPlen = 0 Then - WorkerMsg(tMsgID.Err, "Street ID's in traffic file not found in segment file.", MsgSrc) - Return False - End If - 'Newly dimensioned arrays - ReDim Preserve vt(FZPlen) - ReDim Preserve vX(FZPlen) - ReDim Preserve vY(FZPlen) - ReDim Preserve vNr(FZPlen) - ReDim Preserve vNrSub(FZPlen) - ReDim Preserve vVm(FZPlen) - ReDim Preserve vStg(FZPlen) - ReDim Preserve vID(FZPlen) - ReDim Preserve vSID(FZPlen) - End If - - Return True - - End Function - - 'Sort FZP - Private Sub FZPsortieren() - - 'Dim x0 As Int32 - Dim x1 As Int32 - Dim x2 As Int32 - Dim vNri As Int16 - Dim vNrAnz As Int16 - Dim vNr1 As Int32 - Dim vNr2 As Int32 - Dim vNrSort() As Int32 - Dim vts As Int32 - Dim vXs As Single - Dim vYs As Single - Dim vNrs As Int32 - Dim vVms As Single - Dim vStgs As Single - Dim vIDs As Int16 - Dim vSIDs As Int32 - Dim lc As Int32 - Dim lc10 As Int32 - - Dim x0 As Int32 - Dim xx1 As Int32 - Dim xx2 As Int32 - Dim t1 As Int32 - Dim t2 As Int32 - Dim MsgSrc As String - - MsgSrc = "ADV/Init/TFsort" - - WorkerMsg(tMsgID.Normal, "Sorting traffic data...", MsgSrc) - - ReDim Preserve vNr(FZPlen) - vNrSort = vNr.Clone - Array.Sort(vNrSort) - - x1 = 1 - lc10 = Math.Max(FZPlen / 100, 1000) - lc = 0 - x0 = 1 - Do - 'Current Vehicle is vNr1 - vNr1 = vNrSort(x1) - 'Count vehicles with vNr = vNr1 - x2 = x1 - vNrAnz = 0 - Do - x2 += 1 - vNrAnz += 1 - If x2 > FZPlen Then Exit Do - vNr2 = vNrSort(x2) - Loop Until vNr1 <> vNr2 - 'vNrAnz = Number of Vehicles with vNr = vNr1 - 'Sort all vehicles with vNr = vNr1 by Vehicle-number - x2 = x1 - 1 - vNri = 0 - Do - x2 += 1 - vNr2 = vNr(x2) - If vNr2 = vNr1 Then - If x1 <> x2 Then - 'Cache = line x1 - vts = vt(x1) - vXs = vX(x1) - vYs = vY(x1) - vNrs = vNr(x1) - vVms = vVm(x1) - vStgs = vStg(x1) - vIDs = vID(x1) - vSIDs = vSID(x1) - 'Linex1 = line x2 - vt(x1) = vt(x2) - vX(x1) = vX(x2) - vY(x1) = vY(x2) - vNr(x1) = vNr2 - vVm(x1) = vVm(x2) - vStg(x1) = vStg(x2) - vID(x1) = vID(x2) - vSID(x1) = vSID(x2) - 'Line x2 = cache - vt(x2) = vts - vX(x2) = vXs - vY(x2) = vYs - vNr(x2) = vNrs - vVm(x2) = vVms - vStg(x2) = vStgs - vID(x2) = vIDs - vSID(x2) = vSIDs - End If - vNri += 1 - x1 += 1 - End If - Loop Until vNri = vNrAnz - 'vNr1 sorted by time - If x0 < FZPlen Then - For xx1 = x0 To x1 - 2 - t1 = vt(xx1) - For xx2 = xx1 + 1 To x1 - 1 - t2 = vt(xx2) - If t2 < t1 Then - 'Cache = line xx1 - vXs = vX(xx1) - vYs = vY(xx1) - vVms = vVm(xx1) - vStgs = vStg(xx1) - vIDs = vID(xx1) - vSIDs = vSID(xx1) - 'Line xx1 = Line xx2 - vt(xx1) = t2 - vX(xx1) = vX(xx2) - vY(xx1) = vY(xx2) - vVm(xx1) = vVm(xx2) - vStg(xx1) = vStg(xx2) - vID(xx1) = vID(xx2) - vSID(xx1) = vSID(xx2) - 'Line x2 = Cache - vt(xx2) = t1 - vX(xx2) = vXs - vY(xx2) = vYs - vVm(xx2) = vVms - vStg(xx2) = vStgs - vID(xx2) = vIDs - vSID(xx2) = vSIDs - t1 = vt(xx1) - End If - Next - Next - End If - x0 = x1 - 'Display Status - lc += 1 - If lc >= lc10 Then - '' StatusMSG(7, "Sorting FZP..." & CInt(x1 / FZPlen * 100).ToString("00") & "%", False) - ProgBarCtrl.ProgJobInt = x1 / FZPlen * 100 - lc = 0 - If PHEMworker.CancellationPending Then Exit Sub - End If - Loop Until x1 > FZPlen - - vNrSort = Nothing - - End Sub - - 'FZP export - Private Function FZPexport() As Boolean - - Dim f As System.IO.StreamWriter - Dim x As Int32 - Dim line() As String - Dim line0 As String - Dim s As Int16 - Dim FZPsDim As Int16 = 7 - Dim MsgSrc As String - - MsgSrc = "ADV/Init/TFexport" - - - WorkerMsg(tMsgID.Normal, "Exporting sorted traffic data...", MsgSrc) - - Try - f = My.Computer.FileSystem.OpenTextFileWriter(FZPsortPath, False, FileFormat) - Catch ex As Exception - WorkerMsg(tMsgID.Err, "Cannot write to " & FZPsortPath, MsgSrc) - Return False - End Try - - ReDim line(FZPsDim) - - line(FZProwT) = "t" - line(FZProwWeltX) = "WeltX" - line(FZProwWeltY) = "WeltY" - line(FZProwFzNr) = "FzNr" - line(FZProwV) = "v" - line(FZProwSteig) = "Steig" - line(FZProwTyp) = "Typ" - line(FZProwStr) = "Str" - - line0 = line(0) - For s = 1 To FZPsDim - line0 &= ";" & line(s) - Next - - 'Header - f.WriteLine(line0) - - 'Data - For x = 1 To FZPlen - line(FZProwT) = vt(x) - line(FZProwWeltX) = vX(x) - line(FZProwWeltY) = vY(x) - line(FZProwFzNr) = vNr(x) - line(FZProwV) = vVm(x) - line(FZProwSteig) = vStg(x) - line(FZProwTyp) = vID(x) - line(FZProwStr) = vSID(x) - line0 = line(0) - For s = 1 To FZPsDim - line0 &= ";" & line(s) - Next - f.WriteLine(line0) - 'f.WriteLine(vt(x) & ";" & vX(x) & ";" & vY(x) & ";" & vNr(x) & ";" & vVm(x) & ";" & vStg(x) & ";" & vID(x) & ";" & vSID(x)) - Next - - f.Close() - f.Dispose() - f = Nothing - - Return True - - End Function - - 'Read STR - Private Function STRread() As Boolean - Dim fReader As Microsoft.VisualBasic.FileIO.TextFieldParser - Dim line() As String - Dim ComDone As Boolean - Dim s As Int32 - Dim x As Int32 - Dim path As String - Dim path0 As String - Dim pathADV As String - Dim StrClone As Int32() - Dim StrFileClone As Int16() - Dim sSTRfile As List(Of Int16) - - Dim STRerg0 As cSTRerg - Dim STRdist As Double - Dim MsgSrc As String - - MsgSrc = "ADV/Init/SFread" - - WorkerMsg(tMsgID.Normal, "Reading segment files...", MsgSrc) - - pathADV = fPATH(JobFile) - - sSTRfile = New List(Of Short) - sStr = New List(Of Integer) - sSp = New List(Of Short) - sSegAnX = New List(Of Single) - sSegEnX = New List(Of Single) - sSegAnY = New List(Of Single) - sSegEnY = New List(Of Single) - sSIDlist = New List(Of Integer) - sSIDfiles = New List(Of Integer) - STRlen = -1 - x = -1 - - STRerg = New List(Of cSTRerg) - - For Each path0 In STRpaths - - path = fFileRepl(path0, pathADV) - - If Not IO.File.Exists(path) Then - WorkerMsg(tMsgID.Err, "Segments File not found (" & path & ")", MsgSrc) - Return False - End If - - x += 1 - STRerg0 = New cSTRerg - STRerg0.Init() - STRerg0.MySTRpath = path - - STRdist = 0 - - fReader = New Microsoft.VisualBasic.FileIO.TextFieldParser(path, FileFormat) - fReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited - fReader.Delimiters = New String() {";"} - - ComDone = False - Do While Not fReader.EndOfData - line = fReader.ReadFields - If Not ComDone Then - If IsNumeric(line(0)) Then - ComDone = True - Else - Continue Do - End If - End If - STRlen += 1 - sStr.Add(line(0)) - sSp.Add(line(1)) - sSegAnX.Add(line(2)) - sSegEnX.Add(line(3)) - sSegAnY.Add(line(4)) - sSegEnY.Add(line(5)) - sSTRfile.Add(x) - - STRdist += ((sSegEnY(STRlen) - sSegAnY(STRlen)) ^ 2 + (sSegEnX(STRlen) - sSegAnX(STRlen)) ^ 2) ^ 0.5 - - Loop - - fReader.Close() - fReader.Dispose() - - STRerg0.Distance = CSng(STRdist / 1000) - STRerg.Add(STRerg0) - - Next - - fReader = Nothing - - 'Create SID-List - ReDim StrClone(STRlen) - ReDim StrFileClone(STRlen) - sStr.CopyTo(StrClone) - sSTRfile.CopyTo(StrFileClone) - - Array.Sort(StrClone, StrFileClone) - - s = StrClone(0) - sSIDlist.Add(s) - sSIDfiles.Add(StrFileClone(0)) - sSIDdim = 0 - For x = 1 To STRlen - If s <> StrClone(x) Then - s = StrClone(x) - sSIDdim += 1 - sSIDlist.Add(s) - sSIDfiles.Add(StrFileClone(x)) - End If - Next - - sSTRfile = Nothing - - Return True - - End Function - - - 'FZP Check: - ' ...Fahrzeuge aufteilen, die Lücke im Zeitverlauf haben |@@| Vehicles divisions, have the bridge the gap over time - Private Sub FZPcheck() - - Dim z As Int32 - Dim t1 As Int32 - Dim vnr1 As Int32 - Dim SubNr As Int16 - Dim MsgSrc As String - - MsgSrc = "ADV/Init/TFcheck" - - WorkerMsg(tMsgID.Normal, "Searching for time gaps > 1s...", MsgSrc) - - t1 = vt(1) - vnr1 = vNr(1) - SubNr = 0 - For z = 2 To FZPlen - If vNr(z) = vnr1 Then - If vt(z) - t1 > 1.1 Then - WorkerMsg(tMsgID.Warn, "Time gap found! Vehicle " & vnr1 & " at t= " & vt(z), MsgSrc) - SubNr += 1 - End If - If SubNr > 0 Then vNrSub(z) = SubNr - Else - SubNr = 0 - End If - vnr1 = vNr(z) - t1 = vt(z) - Next - - End Sub - - 'Read ADV - Private Function ADVread() As Boolean - - Dim fADV As cADV - Dim line As String = "" - Dim s As String = "" - Dim i As Integer - Dim MsgSrc As String - - MsgSrc = "ADV/Init/ADVread" - - fADV = New cADV - fADV.FilePath = JobFile - - '********** .Read ADV-file ******** - If Not fADV.ReadFile Then - WorkerMsg(tMsgID.Err, "Failed to open .adv file (" & JobFile & ")", MsgSrc) - fADV = Nothing - Return False - End If - - STRpaths = New List(Of String) - - 'Line 1: FZP file - FZPpath = fADV.FZPpath - - 'Line 2: FLT file - FLTpath = fADV.FLTpath - - 'Line 3: TEM file - TEMpath = fADV.TEMpath - - 'Line 4: RndSeed - RndSeed = fADV.RndSeed - - 'Line 5: MISKAMout True/False - MISKAMout = fADV.SD3out - - 'Line 6: strFilter True/False - STRfilter = fADV.STRfilter - - 'Zeile 7: STR.SUM Streckenfilter |@@| Line 7: STR.SUM Route-filter - STRdistTol = fADV.STRSUMdistflt / 100 - - 'Line 8+: STR files - For i = 1 To fADV.STRcount - STRpaths.Add(fADV.STRpaths(i - 1)) - Next - - '***************************************** - - fADV = Nothing - - Return True - - End Function - - Private Function AusgMOD_Init() As Boolean - - Dim f As cFile_V3 - Dim VehType As String - - For Each VehType In FLTfleet.Keys - - 'Define Output-path - MODdata.ModOutpName = fFileWoExt(JobFile) - - f = New cFile_V3 - - If Not f.OpenWrite(MODdata.ModOutpName & "_" & VehType & ".mod") Then Return False - - 'Header: - f.WriteLine("VECTO " & VECTOvers) - f.WriteLine(Now.ToString) - f.WriteLine("Input File: " & JobFile) - f.WriteLine("Modal Results For Type " & VehType) - f.WriteLine(" ") - - f.Close() - - Next - - Return True - - End Function - - Private Function AusgSUM_Init() As Boolean - Dim MsgSrc As String - - MsgSrc = "ADV/OutpInit/SumInit" - - ' *********************************** .sum ************************************* - 'File results with sums over all Vehicles(KFZs): - Try - FadvSUM = My.Computer.FileSystem.OpenTextFileWriter(SUMpath, False, FileFormat) - Catch ex As Exception - WorkerMsg(tMsgID.Err, "Cannot access .sum file (" & SUMpath & ")", MsgSrc) - Return False - End Try - FadvSUM.AutoFlush = True - - 'Header - FadvSUM.WriteLine("VECTO ADVANCE Average results per vehicle") - FadvSUM.WriteLine("VECTO " & VECTOvers) - FadvSUM.WriteLine("Inputfile: " & JobFile) - FadvSUM.WriteLine(ERG.ERGinfo) - FadvSUM.WriteLine("VehNr,VehType,GEN," & ERG.ErgHead()) - FadvSUM.WriteLine("[-],[-],[-]," & ERG.ErgUnits()) - FadvSUM.Close() - - Return True - - End Function - - 'Close Output - Private Function AusgVis_V3_Close() As Boolean - Dim F611 As New cFile_V3 - Dim secvis As Single - Dim j As Int32 - Dim js As Int32, ivd As Int32 - Dim axi As Single, ayi As Single - Dim amaz As Int32 - Dim amiz As Int32 - - FadvSUM.Dispose() - FadvSUM = Nothing - - If MISKAMout Then - amaz = vt(1) - amiz = vt(1) - For j = 2 To FZPlen - If vt(j) > amaz Then amaz = vt(j) - If vt(j) < amiz Then amiz = vt(j) - Next - secvis = amaz - amiz - - 'C - 'C Convert Emissions to g per second and Vehicle(KFZ)/day - For j = 1 To STRlen - sFC(j) = sFC(j) / secvis - sNOx(j) = sNOx(j) / secvis - sCO(j) = sCO(j) / secvis - sHC(j) = sHC(j) / secvis - sPM(j) = sPM(j) / secvis - sBe(j) = sBe(j) / secvis - sRu(j) = sRu(j) / secvis - sSO2(j) = sSO2(j) / secvis - vDTV(j) = vDTV(j) * 86400 / secvis - ALKW(j) = ALKW(j) * 86400 / secvis - 'C - Next j - 'C - 'C Convert Emissions to mg per Meter - 'C Streckenlaenge [m] wird aus Gerade zwischen Anfangs- und Endpunkt berechnet: |@@| Route-length [m] is calculated from straight line between start and end points: - 'C - For j = 1 To STRlen - axi = (sSegEnX(j) - sSegAnX(j)) ^ 2 - ayi = (sSegEnY(j) - sSegAnY(j)) ^ 2 - ala(j) = (axi + ayi) ^ 0.5 - sFC(j) = 1000 * sFC(j) / ala(j) - sNOx(j) = 1000 * sNOx(j) / ala(j) - sCO(j) = 1000 * sCO(j) / ala(j) - sHC(j) = 1000 * sHC(j) / ala(j) - sPM(j) = 1000 * sPM(j) / ala(j) - sBe(j) = 1000 * sBe(j) / ala(j) - sRu(j) = 1000 * sRu(j) / ala(j) - sSO2(j) = 1000 * sSO2(j) / ala(j) - Next j - 'C - 'C Dump Results - 'C - 'C Filename for ResultFile = Input-filename but with *.sd3: - 'C - - 'C - 'C File mit Summen Ergebnissen ueber alle Streckenstuecke: |@@| File with sums over all results Route-sections: - Call F611.OpenWrite(SD3path, ";") - 'C - Call F611.WriteLine("Results from VECTO ADVANCE") ' Format 630 - Call F611.WriteLine("VECTO " & VECTOvers) ' Format '(a25)' - Call F611.WriteLine("Average results per line over total time interval [sec]:", secvis) ' Format 640 - Call F611.WriteLine("Cold start extra emissions are included") ' Format * - Call F611.WriteLine("lfd.; x1; y1; x2; y2;Strassen;; mittl.Emiss. [mg/(m*s)];;; ; ; ; ; ; ; ;DTV;Lkw-An-; Fahr-; Qh/;Typ; S_z0;Str-;; lNfz; lBus; F; L; W;Abschn.-") ' Format '(A150)' - Call F611.WriteLine("Nr.;[m];[m];[m];[m];Breite[m];Höhe[m];NOx;BENZOL;RUSS;PM10;KW;CO;CO2;SO2;Stoff 9; Stoff 10;[Kfz/d];teil[-];muster;SBr[m];[-];[m];Nr;Strassenkategorie;[-];[-]; S; N; O;Laenge[m]") ' Format '(A180)' - 'C - For js = 1 To STRlen - ivd = Math.Round(vDTV(js), 0, MidpointRounding.AwayFromZero) - Call F611.WriteLine(js, sSegAnX(js), sSegAnY(js), sSegEnX(js), sSegEnY(js), -99.9, -99.9, sNOx(js), sBe(js), sRu(js), sPM(js), sHC(js), sCO(js), sFC(js) * 3.14, sSO2(js), "-99", "-99", ivd, ALKW(js), " ", "-99", "-99", "-99", sStr(js), " ", " ", " ", " ", " ", " ", ala(js)) ' Format 620 - Next js - - Call F611.Close() - F611 = Nothing - End If - - If STRfilter Then - If Not AusgSTRerg() Then Return False - End If - - Return True - - End Function - - Public Function AusgVis_V3() As Boolean - Dim sumNr As Int32 - Dim ie As Short - Dim MsgSrc As String - - MsgSrc = "ADV/OutpInit" - - - If Not AusgVisInit Then - AusgVisInit = True - If Not AusgSUM_Init() Then Return False - End If - - If MISKAMout Then Call AusMISK_V2() - - sumNr = 0 - - For ie = 0 To 1 - Try - FadvSUM = My.Computer.FileSystem.OpenTextFileWriter(SUMpath, True, FileFormat) - FadvSUM.AutoFlush = True - Exit For - Catch ex As Exception - If ie = 0 Then - System.Threading.Thread.Sleep(2000) - Else - WorkerMsg(tMsgID.Err, "Failed to access .sum file (" & SUMpath & ")", MsgSrc) - Return False - End If - End Try - Next - - FadvSUM.WriteLine(aVehNr & "," & aVehType & "," & fFILE(GenFile, True) & "," & ERG.ErgLine()) ' Format 661 - - FadvSUM.Close() - FadvSUM.Dispose() - - Return True - - End Function - - - Private Sub AusMISK_V2() - 'C Subroutine of PHEM/Advance for dumping the results of MISKAM Air-Quality-Model of Lohmeyer - 'C Dump Data separated by Semicolons - 'C - 'C - 'C - ' include "com.inc"<<<<<<<<<<<<<<<<<<<<<<<<<< - Dim chari As String = "" - Dim ami As Single, ax As Single, ay As Single, akabst As Single, C1 As Single, C2 As Single - Dim jm1 As Long, jist As Long - Dim j As Int32 - Dim jz As Int32 - 'C ------------------------------------------------------------------------------------------------- - 'C - 'C Adding up the Emission-data for Route-segments, for every Vehicle over each second - 'C Caution: There are 2 possible Directions(Richtungen) for each section but only the StrId is given to *.fzp -> the "Closest" assigned Direction(Richtungen) - 'C Richtung zugewiesen |@@| Direction assigned - 'C - - - For jz = 0 To MODdata.tDim - 'C - ami = 1000000000000 - For j = 0 To STRlen - 'C - If (aStrId(jz) = sStr(j)) Then - 'C Suche nach naechstgelegenem Strassenteilstueck |@@| Find nearest Road-section - 'C Koordinaten Kfz: |@@| Coordinate vehicle(KFZ): - ax = aWorldX(jz) - ay = aWorldY(jz) - 'C Koordinaten Strecke: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) aus Eingabe |@@| Route Coordinates: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) from Input - 'C Abstandsumme zu Anfang- und Endpunkt des Streckenabschnittes j |@@| Total distance to the beginning and end of the Route-section j - C1 = ((ax - sSegAnX(j)) ^ 2 + (ay - sSegAnY(j)) ^ 2) ^ 0.5 - C2 = ((ax - sSegEnX(j)) ^ 2 + (ay - sSegEnY(j)) ^ 2) ^ 0.5 - akabst = C1 + C2 - If (akabst <= ami) Then - ami = akabst - jist = j - End If - End If - Next j - 'C Falls Streckennummer auf *.fzp File in *.str File nicht existiert, wird auf naechstgelegenes Stueck zugewiesen (gleiches System wie oben): |@@| If the Route number in *.fzp file not exist in *.str file, it is assigned the nearest section (same method as above): - If (ami = 1000000000000) Then - If (STRlen >= 1) Then - For j = 1 To STRlen - ax = aWorldX(jz) - ay = aWorldY(jz) - C1 = ((ax - sSegAnX(j)) ^ 2 + (ay - sSegAnY(j)) ^ 2) ^ 0.5 - C2 = ((ax - sSegEnX(j)) ^ 2 + (ay - sSegEnY(j)) ^ 2) ^ 0.5 - akabst = C1 + C2 - If (akabst <= ami) Then - ami = akabst - jist = j - End If - Next j - End If - End If - 'C Aufsummierung der Emissionen auf den jeweils zugehoerigen Streckenabschnitten: |@@| Summation of the emissions to the respective associated sections: - 'C berechnung sekuendlich in (g/h)/3600 -> g/Strecke ueber gesamte Zeit |@@| calculation in every second (g/h) / 3600 - by> g / haul all the time - sFC(jist) = sFC(jist) + (MODdata.Em.EmDefComp(tMapComp.FC).FinalVals(jz)) / 3600 - sNOx(jist) = sNOx(jist) + (MODdata.Em.EmDefComp(tMapComp.NOx).FinalVals(jz)) / 3600 - sCO(jist) = sCO(jist) + (MODdata.Em.EmDefComp(tMapComp.CO).FinalVals(jz)) / 3600 - sHC(jist) = sHC(jist) + (MODdata.Em.EmDefComp(tMapComp.HC).FinalVals(jz)) / 3600 - sPM(jist) = sPM(jist) + (MODdata.Em.EmDefComp(tMapComp.PM).FinalVals(jz)) / 3600 - - 'C Zaehlen der Kfz fuer DTV (nur wenn nicht in voriger Sekunde auch schon auf der Strecke |@@| Counting the Vehicle for DTV (only if not already in previous second on the track - If (jist <> jm1) Then - vDTV(jist) = vDTV(jist) + 1 - If Not GEN.PKWja Then - ALKW(jist) = ALKW(jist) - End If - End If - 'C , - 'C Grobe Rechnung Benzol nach GLOBEMI (HBEFA): |@@| Rough calculation for benzene GLOBEMI (HBEFA): - 'C Distinguish as: Otto, Diesel, HDV(LKW), Car(PKW), before/after EURO 1 - 'C Otto: - If GEN.ottoJa Then - If GEN.PKWja Then - If (GEN.eklasse < 1) Then - sBe(jist) = sBe(jist) + (MODdata.Em.EmDefComp(tMapComp.HC).FinalVals(jz) * 0.0438) / 3600 - Else - sBe(jist) = sBe(jist) + (MODdata.Em.EmDefComp(tMapComp.HC).FinalVals(jz) * 0.1293) / 3600 - 'Continue For - End If - Else - sBe(jist) = sBe(jist) + (MODdata.Em.EmDefComp(tMapComp.HC).FinalVals(jz) * 0.05) / 3600 - End If - 'C Diesel - Else - If GEN.PKWja Then - sBe(jist) = sBe(jist) + (MODdata.Em.EmDefComp(tMapComp.HC).FinalVals(jz) * 0.0167) / 3600 - Else - sBe(jist) = sBe(jist) + (MODdata.Em.EmDefComp(tMapComp.HC).FinalVals(jz) * 0.0167) / 3600 - End If - End If - 'C - 'C Grobe Rechnung Russ, Anteile Russ an PM derzeit nur Schaetzwerte!!!!: |@@| Rough calculation of Soot, Soot shares of PM currently only Schaetz-values!!: - 'C Distinguish as: Otto, Diesel, HDV(LKW), Car(PKW), before/after EURO 1 - 'C Diesel: - If Not GEN.ottoJa Then - If GEN.PKWja Then - If (GEN.eklasse < 2) Then - sRu(jist) = sRu(jist) + (MODdata.Em.EmDefComp(tMapComp.PM).FinalVals(jz) * 0.5) / 3600 - ElseIf (GEN.eklasse > 4) Then - sRu(jist) = sRu(jist) + (MODdata.Em.EmDefComp(tMapComp.PM).FinalVals(jz) * 0.1) / 3600 - Else - sRu(jist) = sRu(jist) + (MODdata.Em.EmDefComp(tMapComp.PM).FinalVals(jz) * 0.75) / 3600 - End If - Else - If (GEN.eklasse > 3) Then - sRu(jist) = sRu(jist) + (MODdata.Em.EmDefComp(tMapComp.PM).FinalVals(jz) * 0.7) / 3600 - Else - sRu(jist) = sRu(jist) + (MODdata.Em.EmDefComp(tMapComp.PM).FinalVals(jz) * 0.5) / 3600 - End If - End If - 'C Otto - Else - If GEN.PKWja Then - sRu(jist) = sRu(jist) + (MODdata.Em.EmDefComp(tMapComp.PM).FinalVals(jz) * 0.1) / 3600 - Else - sRu(jist) = sRu(jist) + (MODdata.Em.EmDefComp(tMapComp.PM).FinalVals(jz) * 0.1) / 3600 - End If - End If - 'C - 'C SO2-Emissionen aus dem im Kraftstoff enthaltenen |@@| SO2-Emissions as contained in the Fuel - 'C Schwefel gerechnet. Mit Masse SO2 = (Masse% S / 100) * 2 |@@| Sulfur expected. With SO2 mass = (mass% S / 100) * 2 - 'C Diesel_ - If Not GEN.ottoJa Then - sSO2(jist) = sSO2(jist) + (MODdata.Em.EmDefComp(tMapComp.FC).FinalVals(jz) * 0.001 / 50) / 3600 - 'C Otto: - Else - sSO2(jist) = sSO2(jist) + (MODdata.Em.EmDefComp(tMapComp.FC).FinalVals(jz) * 0.0005 / 50) / 3600 - End If - 'C - jm1 = jist - 'C - Next jz - - End Sub - - Private Function AusgSTRerg() As Boolean - Dim s As System.Text.StringBuilder - Dim Sepp As String = "," - Dim STRergRef As cSTRerg - Dim VehType As String - Dim km As Double - Dim sum As Double - Dim e As Integer - Dim fSSUM As cFile_V3 - Dim Fleet0 As cFLTfleet - Dim STRSUMpath As String - Dim MsgSrc As String - - MsgSrc = "ADV/Outp/SegSum" - - fSSUM = New cFile_V3 - s = New System.Text.StringBuilder - - '******** Dump each STR results ' ********* - For Each STRergRef In STRerg - If Not STRergRef.Ausg() Then Return False - Next - - '********* Dump Totals of all STR's ' ********* - - STRSUMpath = fFileWoExt(JobFile) & ".segment.sum" - - If Not fSSUM.OpenWrite(STRSUMpath) Then - WorkerMsg(tMsgID.Err, "Failed to write to '" & STRSUMpath & "'!", MsgSrc) - Return False - End If - - - '** File Header - fSSUM.WriteLine("VECTO ADVANCE Sum Results by Segments and Vehicle Types") - fSSUM.WriteLine("VECTO " & VECTOvers) - fSSUM.WriteLine(Now.ToString) - fSSUM.WriteLine("Inputfile: " & JobFile) - - '**************************************************************** - '*************************** Em per km *************************** - - 'Header - s.Length = 0 - s.Append("*** Results per km ***,Vehicles,Travel Time,Travelled Distance, Average Speed") - If GEN.VehMode = tVehMode.EV Then - s.Append(Sepp & "EC") - Else - For e = 0 To EMdim - s.Append(Sepp & MODdata.Em.EmComp(EMlist(e)).Name) - Next - End If - fSSUM.WriteLine(s.ToString) - - 'Untits - s.Length = 0 - s.Append("Segment / Vehicle Type,[-],[h],[km],[km/h]") - If GEN.VehMode = tVehMode.EV Then - s.Append(Sepp & "[kWh/km]") - Else - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[#/km]") - s.Append(Sepp & "[g/km]") - End If - fSSUM.WriteLine(s.ToString) - - '** Em per segment - For Each STRergRef In STRerg - - s.Length = 0 - - 'Segment-Name - s.Append(fFILE(STRergRef.MySTRpath, True)) - - 'Number of Vehicles - s.Append(Sepp & STRergRef.AllVehCount) - - 'Travel time - sum = STRergRef.AllVehTime - s.Append(Sepp & sum) - - 'km - km = STRergRef.AllVehDist - s.Append(Sepp & km) - - 'Speed - If sum = 0 Then - s.Append(Sepp & "-") - Else - s.Append(Sepp & km / sum) - End If - - 'Em per km - For e = 0 To EMdim - If km = 0 Then - s.Append(Sepp & "-") - Else - s.Append(Sepp & STRergRef.AllEm(e) / km) - End If - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - Next - - '** Em per Vehicle Type - For Each VehType In FLTfleet.Keys - - s.Length = 0 - - 'Type - s.Append("Veh " & VehType) - - 'Number of Vehicles - s.Append(Sepp & FLTfleet(VehType).VehCount) - - 'Reisezeit, Strecke, Avg.Speed |@@| Travel time, Route-Distance, Avg. Speed - sum = 0 - km = 0 - For Each STRergRef In STRerg - sum += STRergRef.VehTime(VehType) - km += STRergRef.VehDist(VehType) - Next - s.Append(Sepp & sum) - s.Append(Sepp & km) - If sum = 0 Then - s.Append(Sepp & "-") - Else - s.Append(Sepp & km / sum) - End If - - 'Em - For e = 0 To EMdim - If km = 0 Then - s.Append(Sepp & "-") - Else - sum = 0 - For Each STRergRef In STRerg - sum += STRergRef.EMsum(VehType)(e) - Next - s.Append(Sepp & sum / km) - End If - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - Next - - '** Total - s.Length = 0 - - 'Segment - s.Append("Sum") - - 'Number of Vehicles is not calculated from STRerg (makes no sense) but from cFLTfleet-recording - sum = 0 - For Each Fleet0 In FLTfleet.Values - sum += Fleet0.VehCount - Next - s.Append(Sepp & sum) - - 'Travelling time - sum = 0 - For Each STRergRef In STRerg - sum += STRergRef.AllVehTime - Next - s.Append(Sepp & sum) - - 'km - km = 0 - For Each STRergRef In STRerg - km += STRergRef.AllVehDist - Next - s.Append(Sepp & km) - - 'Speed - If sum = 0 Then - s.Append(Sepp & "-") - Else - s.Append(Sepp & km / sum) - End If - - 'Em per km - For e = 0 To EMdim - If km = 0 Then - s.Append(Sepp & "-") - Else - sum = 0 - For Each STRergRef In STRerg - sum += STRergRef.AllEm(e) - Next - s.Append(Sepp & sum / km) - End If - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - '**************************************************************** - '**************************** Em abs **************************** - - fSSUM.WriteLine(" ") - - 'Header - s.Length = 0 - s.Append("*** Absolute Values ***") - If GEN.VehMode = tVehMode.EV Then - s.Append(Sepp & "EC") - Else - For e = 0 To EMdim - s.Append(Sepp & MODdata.Em.EmComp(EMlist(e)).Name) - Next - End If - fSSUM.WriteLine(s.ToString) - - 'Untits - s.Length = 0 - s.Append("Segment / Vehicle Type") - If GEN.VehMode = tVehMode.EV Then - s.Append(Sepp & "[kWh]") - Else - s.Append(Sepp & "[g]") - s.Append(Sepp & "[g]") - s.Append(Sepp & "[g]") - s.Append(Sepp & "[g]") - s.Append(Sepp & "[g]") - s.Append(Sepp & "[#]") - s.Append(Sepp & "[g]") - End If - fSSUM.WriteLine(s.ToString) - - '** Em per segment - For Each STRergRef In STRerg - - s.Length = 0 - - 'Segment-Name - s.Append(fFILE(STRergRef.MySTRpath, True)) - - 'Em abs - For e = 0 To EMdim - s.Append(Sepp & STRergRef.AllEm(e)) - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - Next - - '** Em per Vehicle Type - For Each VehType In FLTfleet.Keys - - s.Length = 0 - - 'Type - s.Append("Veh " & VehType) - - 'Em - For e = 0 To EMdim - sum = 0 - For Each STRergRef In STRerg - sum += STRergRef.EMsum(VehType)(e) - Next - s.Append(Sepp & sum) - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - Next - - '** Total - s.Length = 0 - - 'Segment - s.Append("Sum") - - 'Em abs - For e = 0 To EMdim - sum = 0 - For Each STRergRef In STRerg - sum += STRergRef.AllEm(e) - Next - s.Append(Sepp & sum) - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - fSSUM.Close() - - Return True - - End Function - - '.Analyze Mod-file - Public Sub AusgModCut(ByVal InPath As String, ByVal VehList As Int32()) - Dim f As System.IO.StreamReader - Dim VehNr As Int32 - Dim x As Int16 - Dim x1 As Int16 - Dim fOut As cFile_V3 - Dim laststring As String - Dim foundNr As Int32 - Dim CheckLast As Boolean - Dim MsgSrc As String - - MsgSrc = "ADV/ModCut" - - WorkerMsg(tMsgID.Normal, "Starting .mod split.", MsgSrc) - - 'Open Infile - Try - f = New System.IO.StreamReader(InPath) - Catch ex As Exception - WorkerMsg(tMsgID.Err, "Cannot access .mod file (" & InPath & ")", MsgSrc) - WorkerMsg(tMsgID.Normal, "Aborted!", MsgSrc) - Exit Sub - End Try - - WorkerMsg(tMsgID.Normal, "File " & InPath, MsgSrc) - WorkerStatus(".mod split running. File " & fFILE(InPath, True)) - - fOut = New cFile_V3 - CheckLast = False - - 'Anzahl VehNummern |@@| Number of VehNummern - x1 = 1 + UBound(VehList) - x - x = 0 - laststring = "" - - 'Loop through all VehNummern in list - For Each VehNr In VehList - - 'Abort when User-abort - If PHEMworker.CancellationPending Then - WorkerMsg(tMsgID.Normal, "Aborted by User.", MsgSrc) - GoTo lbDone - End If - - 'Abort when File finished - If f.EndOfStream Then - WorkerMsg(tMsgID.Err, "Reached end of file before last vehicle number was found.", MsgSrc) - WorkerMsg(tMsgID.Normal, "Aborted! (Reached end of file)", MsgSrc) - GoTo lbDone - End If - - 'Open Output-File / Abort if Error on Opening - If Not fOut.OpenWrite(fFileWoExt(InPath) & "_Veh" & VehNr & ".mod") Then - WorkerMsg(tMsgID.Err, "Cannot create output file. Veh.Nr. " & VehNr, MsgSrc) - GoTo lbDone - End If - - 'Loop through file - Do While Not f.EndOfStream - - 'If string already contains a VehNr do not read again Line (see below) - If CheckLast Then - CheckLast = False - Else - 'Read Line - laststring = f.ReadLine - End If - - 'If Line with VehNr found: extract VehNr - If InStr(laststring, "VehNr:", CompareMethod.Text) > 0 Then - foundNr = GetVehNr(laststring) - - 'If VehNr is the required one: write the Output-file - If foundNr = VehNr Then - - 'First line write ("VehNr: ...") - fOut.WriteLine(laststring) - - 'Read next Line (otherwise Do-While skipped) - laststring = f.ReadLine - - 'Loop until next VehNr / end_of_file - Do While Not f.EndOfStream - - 'If next Vehicle: - If InStr(laststring, "VehNr:", CompareMethod.Text) > 0 Then - If GetVehNr(laststring) = VehNr Then - 'If Vehicle-number is the same: Continue writing File - 'Skip header and Units - f.ReadLine() - f.ReadLine() - laststring = f.ReadLine - Else - 'Otherwise: Get out of loop - Exit Do - End If - End If - - 'Write Line - fOut.WriteLine(laststring) - - 'Read line - laststring = f.ReadLine - - Loop - - 'If not EndOfStream Set flag so next VehNr is not skipped - If Not f.EndOfStream Then CheckLast = True - - 'Close Output-file - fOut.Close() - - 'Jump out of the VehNr-search-loop - Exit Do - - End If - - End If - - Loop - - 'ProgBar - x += 1 - ProgBarCtrl.ProgJobInt = CInt(100 * x / x1) - - Next - - WorkerMsg(tMsgID.Normal, "done", MsgSrc) - -lbDone: - - f.Close() - f.Dispose() - f = Nothing - fOut.Close() - fOut = Nothing - - End Sub - - Private Function GetVehNr(ByVal Str As String) As Integer - Dim foundStr As String - foundStr = Str.Split(",")(0) - Return CInt(Right(foundStr, Len(foundStr) - 7)) - End Function - - - 'FLT-class - Private Class cFLTfleet - - Private MyP() As Single 'Percentage - Private MyGen() As String 'GEN Datei - Private MyDim As Int16 'Dim - Private MyID As String 'Vehicle Type - - Public VehCount As Integer 'Anzahl Fahrzeuge - - 'New - Public Sub New(ByVal ID As String) - MyID = ID - MyDim = -1 - End Sub - - 'Initialize - Public Function Init(ByVal GenFiles As String(), ByVal Shares As Single(), ByVal ArDim As Int16) As Boolean - Dim x As Int16 - Dim xsum As Single - Dim MsgSrc As String - - MsgSrc = "ADV/FLT/Init" - - MyDim = ArDim - - If MyDim > -1 Then - ReDim MyGen(ArDim) - ReDim MyP(ArDim) - xsum = 0 - For x = 0 To ArDim - MyGen(x) = GenFiles(x) - MyP(x) = Shares(x) - xsum += Shares(x) - Next - If Math.Abs(1 - xsum) > 0.0001 Then - WorkerMsg(tMsgID.Err, "Vehicle Type " & MyID & ": Share sum is not 100%!", MsgSrc) - Return False - End If - - For x = 1 To ArDim - MyP(x) += MyP(x - 1) - Next - End If - - Return True - - End Function - - 'GenFile Random-generator - Public Function GetGenFile() As String - Dim r As Single - Dim x As Int16 - Dim MsgSrc As String - - MsgSrc = "ADV/FLT/GetGenFile" - - Select Case MyDim - Case -1 - WorkerMsg(tMsgID.Err, "Vehicle type " & MyID & " is not specified in .FLT file. Cannot assign .GEN file.", MsgSrc) - Return "" - Case 0 - Return MyGen(0) - Case Else - r = 1 - Rnd() - x = MyDim - Do While r <= MyP(x - 1) - x -= 1 - If x = 0 Then Exit Do - Loop - Return MyGen(x) - End Select - End Function - - Public Function FileCheck() As Boolean - Dim str As String - Dim check As Boolean - Dim MsgSrc As String - - MsgSrc = "ADV/FLT/" & MyID - - check = True - - For Each str In MyGen - If str = "" OrElse Not IO.File.Exists(str) Then - WorkerMsg(tMsgID.Err, "File not found (" & str & ")!", MsgSrc) - check = False - End If - Next - - Return check - - End Function - - - - - End Class - - 'Klasse für abschnittsweise Auswertung |@@| Class for sections evaluation - Private Class cSTRerg - - Public MySTRpath As String - - Public VehCount As Dictionary(Of String, Integer) 'Fahrzeuganzahl je Fahrzeugtyp - Public VehDist As Dictionary(Of String, Double) 'Verkehrsleistung je Fahrzeugtyp - Public VehTime As Dictionary(Of String, Double) 'Reisezeit je Fahrzeugtyp - - Public EMsum As Dictionary(Of String, List(Of Double)) 'Summen-Emissionen je Fahrzeugtyp und Em-Komponente Absolut [g] - - Public Distance As Single 'STR-Länge für Filter in km - - Public Sub Init() - Dim KV As KeyValuePair(Of String, cFLTfleet) - Dim dic0 As List(Of Double) - Dim x As Integer - - VehCount = New Dictionary(Of String, Integer) - VehDist = New Dictionary(Of String, Double) - VehTime = New Dictionary(Of String, Double) - - EMsum = New Dictionary(Of String, List(Of Double)) - - For Each KV In ADV.FLTfleet - VehCount.Add(KV.Key, 0) - VehDist.Add(KV.Key, 0) - VehTime.Add(KV.Key, 0) - - dic0 = New List(Of Double) - - For x = 0 To ADV.EMdim - dic0.Add(0) - Next - - EMsum.Add(KV.Key, dic0) - - Next - - End Sub - - Public Function Ausg() As Boolean - Dim s As System.Text.StringBuilder - Dim Sepp As String = "," - Dim VehType As String - Dim km As Double - Dim KVl As KeyValuePair(Of String, List(Of Double)) - Dim sum As Double - Dim e As Integer - Dim fSSUM As cFile_V3 - Dim STRSUMpath As String - Dim MsgSrc As String - - MsgSrc = "ADV/Outp/Seg" - - fSSUM = New cFile_V3 - - STRSUMpath = fFileWoExt(JobFile) & "_" & fFILE(MySTRpath, False) & ".sum" - - If Not fSSUM.OpenWrite(STRSUMpath) Then - WorkerMsg(tMsgID.Err, "Failed to write to '" & STRSUMpath & "'!", MsgSrc) - Return False - End If - - s = New System.Text.StringBuilder - - 'File Header - fSSUM.WriteLine("VECTO ADVANCE Sum Results per Segment") - fSSUM.WriteLine("VECTO " & VECTOvers) - fSSUM.WriteLine("Inputfile: " & JobFile) - fSSUM.WriteLine("Segment File: " & MySTRpath) - fSSUM.WriteLine("Calculated Segment Length: " & Distance * 1000 & "m") - fSSUM.WriteLine("Minimum Travelled Distance: " & 1000 * ADV.STRdistTol * Distance & "m (" & ADV.STRdistTol * 100 & "%)") - - fSSUM.WriteLine(" ") - - '**************************************************************** - '*************************** Em per km *************************** - - 'Header - s.Length = 0 - s.Append("*** Results per km ***,Vehicles,Travel Time,Travelled Distance, Average Speed") - If GEN.VehMode = tVehMode.EV Then - s.Append(Sepp & "EC") - Else - For e = 0 To ADV.EMdim - s.Append(Sepp & MODdata.Em.EmComp(ADV.EMlist(e)).Name) - Next - End If - fSSUM.WriteLine(s.ToString) - - 'Untits - s.Length = 0 - s.Append("Vehicle Type,[-],[h],[km],[km/h]") - If GEN.VehMode = tVehMode.EV Then - s.Append(Sepp & "[kWh/km]") - Else - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[g/km]") - s.Append(Sepp & "[#/km]") - s.Append(Sepp & "[g/km]") - End If - fSSUM.WriteLine(s.ToString) - - '** Results per Veh-Type - For Each VehType In ADV.FLTfleet.Keys - - s.Length = 0 - - 'Type - s.Append(VehType) - - 'Number of Vehicles - s.Append(Sepp & VehCount(VehType)) - - 'Travellingtime - sum = VehTime(VehType) - s.Append(Sepp & sum) - - 'km - km = VehDist(VehType) - s.Append(Sepp & km) - - 'Speed - If sum = 0 Then - s.Append(Sepp & "-") - Else - s.Append(Sepp & km / sum) - End If - - 'Em - For e = 0 To ADV.EMdim - If km = 0 Then - s.Append(Sepp & "-") - Else - s.Append(Sepp & EMsum(VehType)(e) / km) - End If - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - Next - - '** Total - s.Length = 0 - - 'Type - s.Append("Sum") - - 'Number of Vehicles - s.Append(Sepp & CStr(AllVehCount())) - - 'Travelling-time - sum = AllVehTime() - s.Append(Sepp & CStr(sum)) - - 'km - km = AllVehDist() - s.Append(Sepp & km) - - 'Speed - If sum = 0 Then - s.Append(Sepp & "-") - Else - s.Append(Sepp & km / sum) - End If - - 'Em - For e = 0 To ADV.EMdim - If km = 0 Then - s.Append(Sepp & "-") - Else - sum = 0 - For Each KVl In EMsum - sum += KVl.Value(e) - Next - s.Append(Sepp & sum / km) - End If - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - fSSUM.WriteLine(" ") - - '**************************************************************** - '*************************** Em absolut ************************* - - 'Header - s.Length = 0 - s.Append("*** Absolute Values ***") - If GEN.VehMode = tVehMode.EV Then - s.Append(Sepp & "EC") - Else - For e = 0 To ADV.EMdim - s.Append(Sepp & MODdata.Em.EmComp(ADV.EMlist(e)).Name) - Next - End If - fSSUM.WriteLine(s.ToString) - - 'Untits - s.Length = 0 - s.Append("Vehicle Type") - If GEN.VehMode = tVehMode.EV Then - s.Append(Sepp & "[kWh]") - Else - s.Append(Sepp & "[g]") - s.Append(Sepp & "[g]") - s.Append(Sepp & "[g]") - s.Append(Sepp & "[g]") - s.Append(Sepp & "[g]") - s.Append(Sepp & "[#]") - s.Append(Sepp & "[g]") - End If - fSSUM.WriteLine(s.ToString) - - '** Results per Veh-Type - For Each VehType In ADV.FLTfleet.Keys - - s.Length = 0 - - 'Type - s.Append(VehType) - - 'Em - For e = 0 To ADV.EMdim - s.Append(Sepp & EMsum(VehType)(e)) - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - Next - - '** Total - s.Length = 0 - - 'Type - s.Append("Sum") - - 'Em - For e = 0 To ADV.EMdim - sum = 0 - For Each KVl In EMsum - sum += KVl.Value(e) - Next - s.Append(Sepp & sum) - Next - - 'Writing - fSSUM.WriteLine(s.ToString) - - 'Close file - fSSUM.Close() - - Return True - - - End Function - - Public Function AllVehCount() As Integer - Dim sum As Integer - Dim KV As KeyValuePair(Of String, Integer) - sum = 0 - For Each KV In VehCount - sum += KV.Value - Next - Return sum - End Function - - Public Function AllVehDist() As Double - Dim sum As Double - Dim KV As KeyValuePair(Of String, Double) - sum = 0 - For Each KV In VehDist - sum += KV.Value - Next - Return sum - End Function - - Public Function AllVehTime() As Double - Dim sum As Double - Dim KV As KeyValuePair(Of String, Double) - sum = 0 - For Each KV In VehTime - sum += KV.Value - Next - Return sum - End Function - - Public Function AllEm(ByVal EmKompNr As String) As Double - Dim sum As Double - Dim KV As KeyValuePair(Of String, List(Of Double)) - sum = 0 - For Each KV In EMsum - sum += KV.Value(EmKompNr) - Next - Return sum - End Function - - - - End Class - - - - -End Class - diff --git a/VECTO/File Browser/FB_Global.vb b/VECTO/File Browser/FB_Global.vb index c16170b77c..adc85a3c02 100644 --- a/VECTO/File Browser/FB_Global.vb +++ b/VECTO/File Browser/FB_Global.vb @@ -7,7 +7,6 @@ '----------------------------- Public fbWorkDir As cFileBrowser Public fbGEN As cFileBrowser - Public fbADV As cFileBrowser Public fbFileLists As cFileBrowser Public fbVEH As cFileBrowser Public fbDRI As cFileBrowser diff --git a/VECTO/GUI/F_ADV.Designer.vb b/VECTO/GUI/F_ADV.Designer.vb deleted file mode 100644 index 827b74ea3a..0000000000 --- a/VECTO/GUI/F_ADV.Designer.vb +++ /dev/null @@ -1,415 +0,0 @@ -<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ -Partial Class F_ADV - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - <System.Diagnostics.DebuggerNonUserCode()> _ - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - <System.Diagnostics.DebuggerStepThrough()> _ - Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(F_ADV)) - Me.TextBoxTEM = New System.Windows.Forms.TextBox() - Me.TextBoxFLT = New System.Windows.Forms.TextBox() - Me.ButtonTEM = New System.Windows.Forms.Button() - Me.ButtonFLT = New System.Windows.Forms.Button() - Me.TextBoxFZP = New System.Windows.Forms.TextBox() - Me.ButtonFZP = New System.Windows.Forms.Button() - Me.StatusStrip1 = New System.Windows.Forms.StatusStrip() - Me.ToolStripStatusLabelADV = New System.Windows.Forms.ToolStripStatusLabel() - Me.Label2 = New System.Windows.Forms.Label() - Me.TBseed = New System.Windows.Forms.TextBox() - Me.CheckBoxMISKAM = New System.Windows.Forms.CheckBox() - Me.Label1 = New System.Windows.Forms.Label() - Me.Label3 = New System.Windows.Forms.Label() - Me.Label4 = New System.Windows.Forms.Label() - Me.Label5 = New System.Windows.Forms.Label() - Me.CheckBoxSTRfilter = New System.Windows.Forms.CheckBox() - Me.ButOK = New System.Windows.Forms.Button() - Me.ButCancel = New System.Windows.Forms.Button() - Me.LbSTR = New System.Windows.Forms.ListBox() - Me.ButSTRadd = New System.Windows.Forms.Button() - Me.ButSTRrem = New System.Windows.Forms.Button() - Me.LbFilter0 = New System.Windows.Forms.Label() - Me.TbFilter = New System.Windows.Forms.TextBox() - Me.LbFilter1 = New System.Windows.Forms.Label() - Me.ToolStrip1 = New System.Windows.Forms.ToolStrip() - Me.ToolStripBtNew = New System.Windows.Forms.ToolStripButton() - Me.ToolStripBtOpen = New System.Windows.Forms.ToolStripButton() - Me.ToolStripBtSave = New System.Windows.Forms.ToolStripButton() - Me.ToolStripBtSaveAs = New System.Windows.Forms.ToolStripButton() - Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() - Me.ToolStripBtSendTo = New System.Windows.Forms.ToolStripButton() - Me.StatusStrip1.SuspendLayout() - Me.ToolStrip1.SuspendLayout() - Me.SuspendLayout() - ' - 'TextBoxTEM - ' - Me.TextBoxTEM.Enabled = False - Me.TextBoxTEM.Location = New System.Drawing.Point(15, 255) - Me.TextBoxTEM.Name = "TextBoxTEM" - Me.TextBoxTEM.Size = New System.Drawing.Size(402, 20) - Me.TextBoxTEM.TabIndex = 13 - ' - 'TextBoxFLT - ' - Me.TextBoxFLT.Location = New System.Drawing.Point(15, 211) - Me.TextBoxFLT.Name = "TextBoxFLT" - Me.TextBoxFLT.Size = New System.Drawing.Size(402, 20) - Me.TextBoxFLT.TabIndex = 13 - ' - 'ButtonTEM - ' - Me.ButtonTEM.Enabled = False - Me.ButtonTEM.Location = New System.Drawing.Point(423, 254) - Me.ButtonTEM.Name = "ButtonTEM" - Me.ButtonTEM.Size = New System.Drawing.Size(28, 21) - Me.ButtonTEM.TabIndex = 7 - Me.ButtonTEM.Text = "..." - Me.ButtonTEM.UseVisualStyleBackColor = True - ' - 'ButtonFLT - ' - Me.ButtonFLT.Location = New System.Drawing.Point(423, 211) - Me.ButtonFLT.Name = "ButtonFLT" - Me.ButtonFLT.Size = New System.Drawing.Size(28, 21) - Me.ButtonFLT.TabIndex = 6 - Me.ButtonFLT.Text = "..." - Me.ButtonFLT.UseVisualStyleBackColor = True - ' - 'TextBoxFZP - ' - Me.TextBoxFZP.Location = New System.Drawing.Point(15, 167) - Me.TextBoxFZP.Name = "TextBoxFZP" - Me.TextBoxFZP.Size = New System.Drawing.Size(402, 20) - Me.TextBoxFZP.TabIndex = 13 - ' - 'ButtonFZP - ' - Me.ButtonFZP.Location = New System.Drawing.Point(423, 166) - Me.ButtonFZP.Name = "ButtonFZP" - Me.ButtonFZP.Size = New System.Drawing.Size(28, 21) - Me.ButtonFZP.TabIndex = 5 - Me.ButtonFZP.Text = "..." - Me.ButtonFZP.UseVisualStyleBackColor = True - ' - 'StatusStrip1 - ' - Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabelADV}) - Me.StatusStrip1.Location = New System.Drawing.Point(0, 500) - Me.StatusStrip1.Name = "StatusStrip1" - Me.StatusStrip1.Size = New System.Drawing.Size(466, 22) - Me.StatusStrip1.SizingGrip = False - Me.StatusStrip1.TabIndex = 2 - Me.StatusStrip1.Text = "StatusStrip1" - ' - 'ToolStripStatusLabelADV - ' - Me.ToolStripStatusLabelADV.Name = "ToolStripStatusLabelADV" - Me.ToolStripStatusLabelADV.Size = New System.Drawing.Size(138, 17) - Me.ToolStripStatusLabelADV.Text = "ToolStripStatusLabelADV" - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Location = New System.Drawing.Point(12, 38) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(123, 13) - Me.Label2.TabIndex = 4 - Me.Label2.Text = "Seed for fleet distribution" - ' - 'TBseed - ' - Me.TBseed.Location = New System.Drawing.Point(144, 35) - Me.TBseed.Name = "TBseed" - Me.TBseed.Size = New System.Drawing.Size(46, 20) - Me.TBseed.TabIndex = 5 - ' - 'CheckBoxMISKAM - ' - Me.CheckBoxMISKAM.AutoSize = True - Me.CheckBoxMISKAM.Checked = True - Me.CheckBoxMISKAM.CheckState = System.Windows.Forms.CheckState.Checked - Me.CheckBoxMISKAM.Location = New System.Drawing.Point(15, 68) - Me.CheckBoxMISKAM.Name = "CheckBoxMISKAM" - Me.CheckBoxMISKAM.Size = New System.Drawing.Size(136, 17) - Me.CheckBoxMISKAM.TabIndex = 6 - Me.CheckBoxMISKAM.Text = "Segment-related output" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) - Me.CheckBoxMISKAM.UseVisualStyleBackColor = True - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.Location = New System.Drawing.Point(12, 151) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(63, 13) - Me.Label1.TabIndex = 7 - Me.Label1.Text = "Traffic Data" - ' - 'Label3 - ' - Me.Label3.AutoSize = True - Me.Label3.Location = New System.Drawing.Point(12, 195) - Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(121, 13) - Me.Label3.TabIndex = 8 - Me.Label3.Text = "Fleet Composition (.FLT)" - ' - 'Label4 - ' - Me.Label4.AutoSize = True - Me.Label4.Location = New System.Drawing.Point(12, 239) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(258, 13) - Me.Label4.TabIndex = 9 - Me.Label4.Text = "Temperature Ditribution (not supported in this version)" - ' - 'Label5 - ' - Me.Label5.AutoSize = True - Me.Label5.Location = New System.Drawing.Point(12, 283) - Me.Label5.Name = "Label5" - Me.Label5.Size = New System.Drawing.Size(75, 13) - Me.Label5.TabIndex = 10 - Me.Label5.Text = "Segment Data" - ' - 'CheckBoxSTRfilter - ' - Me.CheckBoxSTRfilter.AutoSize = True - Me.CheckBoxSTRfilter.Location = New System.Drawing.Point(15, 91) - Me.CheckBoxSTRfilter.Name = "CheckBoxSTRfilter" - Me.CheckBoxSTRfilter.Size = New System.Drawing.Size(161, 17) - Me.CheckBoxSTRfilter.TabIndex = 14 - Me.CheckBoxSTRfilter.Text = "Filter vehicles by segment ID" - Me.CheckBoxSTRfilter.UseVisualStyleBackColor = True - ' - 'ButOK - ' - Me.ButOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.ButOK.Location = New System.Drawing.Point(298, 474) - Me.ButOK.Name = "ButOK" - Me.ButOK.Size = New System.Drawing.Size(75, 23) - Me.ButOK.TabIndex = 15 - Me.ButOK.Text = "OK" - Me.ButOK.UseVisualStyleBackColor = True - ' - 'ButCancel - ' - Me.ButCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.ButCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.ButCancel.Location = New System.Drawing.Point(379, 474) - Me.ButCancel.Name = "ButCancel" - Me.ButCancel.Size = New System.Drawing.Size(75, 23) - Me.ButCancel.TabIndex = 17 - Me.ButCancel.Text = "Cancel" - Me.ButCancel.UseVisualStyleBackColor = True - ' - 'LbSTR - ' - Me.LbSTR.FormattingEnabled = True - Me.LbSTR.HorizontalScrollbar = True - Me.LbSTR.Location = New System.Drawing.Point(15, 299) - Me.LbSTR.Name = "LbSTR" - Me.LbSTR.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.LbSTR.Size = New System.Drawing.Size(436, 121) - Me.LbSTR.TabIndex = 18 - ' - 'ButSTRadd - ' - Me.ButSTRadd.Location = New System.Drawing.Point(15, 426) - Me.ButSTRadd.Name = "ButSTRadd" - Me.ButSTRadd.Size = New System.Drawing.Size(137, 23) - Me.ButSTRadd.TabIndex = 19 - Me.ButSTRadd.Text = "Add Files" - Me.ButSTRadd.UseVisualStyleBackColor = True - ' - 'ButSTRrem - ' - Me.ButSTRrem.Location = New System.Drawing.Point(317, 426) - Me.ButSTRrem.Name = "ButSTRrem" - Me.ButSTRrem.Size = New System.Drawing.Size(137, 23) - Me.ButSTRrem.TabIndex = 19 - Me.ButSTRrem.Text = "Remove Selected Files" - Me.ButSTRrem.UseVisualStyleBackColor = True - ' - 'LbFilter0 - ' - Me.LbFilter0.AutoSize = True - Me.LbFilter0.Location = New System.Drawing.Point(37, 117) - Me.LbFilter0.Name = "LbFilter0" - Me.LbFilter0.Size = New System.Drawing.Size(195, 13) - Me.LbFilter0.TabIndex = 20 - Me.LbFilter0.Text = "Distance filter for segment results output" - ' - 'TbFilter - ' - Me.TbFilter.Location = New System.Drawing.Point(238, 114) - Me.TbFilter.Name = "TbFilter" - Me.TbFilter.Size = New System.Drawing.Size(42, 20) - Me.TbFilter.TabIndex = 21 - ' - 'LbFilter1 - ' - Me.LbFilter1.AutoSize = True - Me.LbFilter1.Location = New System.Drawing.Point(286, 117) - Me.LbFilter1.Name = "LbFilter1" - Me.LbFilter1.Size = New System.Drawing.Size(21, 13) - Me.LbFilter1.TabIndex = 22 - Me.LbFilter1.Text = "[%]" - ' - 'ToolStrip1 - ' - Me.ToolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden - Me.ToolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripBtNew, Me.ToolStripBtOpen, Me.ToolStripBtSave, Me.ToolStripBtSaveAs, Me.ToolStripSeparator1, Me.ToolStripBtSendTo}) - Me.ToolStrip1.Location = New System.Drawing.Point(0, 0) - Me.ToolStrip1.Name = "ToolStrip1" - Me.ToolStrip1.Size = New System.Drawing.Size(466, 25) - Me.ToolStrip1.TabIndex = 23 - Me.ToolStrip1.Text = "ToolStrip1" - ' - 'ToolStripBtNew - ' - Me.ToolStripBtNew.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.ToolStripBtNew.Image = Global.VECTO.My.Resources.Resources.blue_document_icon - Me.ToolStripBtNew.ImageTransparentColor = System.Drawing.Color.Magenta - Me.ToolStripBtNew.Name = "ToolStripBtNew" - Me.ToolStripBtNew.Size = New System.Drawing.Size(23, 22) - Me.ToolStripBtNew.Text = "New" - Me.ToolStripBtNew.ToolTipText = "New" - ' - 'ToolStripBtOpen - ' - Me.ToolStripBtOpen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.ToolStripBtOpen.Image = Global.VECTO.My.Resources.Resources.Open_icon - Me.ToolStripBtOpen.ImageTransparentColor = System.Drawing.Color.Magenta - Me.ToolStripBtOpen.Name = "ToolStripBtOpen" - Me.ToolStripBtOpen.Size = New System.Drawing.Size(23, 22) - Me.ToolStripBtOpen.Text = "Open" - Me.ToolStripBtOpen.ToolTipText = "Open..." - ' - 'ToolStripBtSave - ' - Me.ToolStripBtSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.ToolStripBtSave.Image = Global.VECTO.My.Resources.Resources.Actions_document_save_icon - Me.ToolStripBtSave.ImageTransparentColor = System.Drawing.Color.Magenta - Me.ToolStripBtSave.Name = "ToolStripBtSave" - Me.ToolStripBtSave.Size = New System.Drawing.Size(23, 22) - Me.ToolStripBtSave.Text = "Save" - Me.ToolStripBtSave.ToolTipText = "Save" - ' - 'ToolStripBtSaveAs - ' - Me.ToolStripBtSaveAs.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.ToolStripBtSaveAs.Image = Global.VECTO.My.Resources.Resources.Actions_document_save_as_icon - Me.ToolStripBtSaveAs.ImageTransparentColor = System.Drawing.Color.Magenta - Me.ToolStripBtSaveAs.Name = "ToolStripBtSaveAs" - Me.ToolStripBtSaveAs.Size = New System.Drawing.Size(23, 22) - Me.ToolStripBtSaveAs.Text = "Save As" - Me.ToolStripBtSaveAs.ToolTipText = "Save As..." - ' - 'ToolStripSeparator1 - ' - Me.ToolStripSeparator1.Name = "ToolStripSeparator1" - Me.ToolStripSeparator1.Size = New System.Drawing.Size(6, 25) - ' - 'ToolStripBtSendTo - ' - Me.ToolStripBtSendTo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.ToolStripBtSendTo.Image = Global.VECTO.My.Resources.Resources.export_icon - Me.ToolStripBtSendTo.ImageTransparentColor = System.Drawing.Color.Magenta - Me.ToolStripBtSendTo.Name = "ToolStripBtSendTo" - Me.ToolStripBtSendTo.Size = New System.Drawing.Size(23, 22) - Me.ToolStripBtSendTo.Text = "Send to ADV List" - Me.ToolStripBtSendTo.ToolTipText = "Send to ADV List" - ' - 'F_ADV - ' - Me.AcceptButton = Me.ButOK - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.CancelButton = Me.ButCancel - Me.ClientSize = New System.Drawing.Size(466, 522) - Me.Controls.Add(Me.ToolStrip1) - Me.Controls.Add(Me.LbFilter1) - Me.Controls.Add(Me.TbFilter) - Me.Controls.Add(Me.LbFilter0) - Me.Controls.Add(Me.ButSTRrem) - Me.Controls.Add(Me.ButSTRadd) - Me.Controls.Add(Me.LbSTR) - Me.Controls.Add(Me.ButCancel) - Me.Controls.Add(Me.ButOK) - Me.Controls.Add(Me.CheckBoxSTRfilter) - Me.Controls.Add(Me.Label5) - Me.Controls.Add(Me.TextBoxTEM) - Me.Controls.Add(Me.Label4) - Me.Controls.Add(Me.ButtonTEM) - Me.Controls.Add(Me.TextBoxFLT) - Me.Controls.Add(Me.Label3) - Me.Controls.Add(Me.ButtonFLT) - Me.Controls.Add(Me.TextBoxFZP) - Me.Controls.Add(Me.Label1) - Me.Controls.Add(Me.CheckBoxMISKAM) - Me.Controls.Add(Me.TBseed) - Me.Controls.Add(Me.ButtonFZP) - Me.Controls.Add(Me.Label2) - Me.Controls.Add(Me.StatusStrip1) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.Name = "F_ADV" - Me.Text = "ADV Editor" - Me.StatusStrip1.ResumeLayout(False) - Me.StatusStrip1.PerformLayout() - Me.ToolStrip1.ResumeLayout(False) - Me.ToolStrip1.PerformLayout() - Me.ResumeLayout(False) - Me.PerformLayout() - - End Sub - Friend WithEvents ButtonFZP As System.Windows.Forms.Button - Friend WithEvents ButtonFLT As System.Windows.Forms.Button - Friend WithEvents ButtonTEM As System.Windows.Forms.Button - Friend WithEvents StatusStrip1 As System.Windows.Forms.StatusStrip - Friend WithEvents ToolStripStatusLabelADV As System.Windows.Forms.ToolStripStatusLabel - Friend WithEvents Label2 As System.Windows.Forms.Label - Friend WithEvents TBseed As System.Windows.Forms.TextBox - Friend WithEvents CheckBoxMISKAM As System.Windows.Forms.CheckBox - Friend WithEvents TextBoxTEM As System.Windows.Forms.TextBox - Friend WithEvents TextBoxFLT As System.Windows.Forms.TextBox - Friend WithEvents TextBoxFZP As System.Windows.Forms.TextBox - Friend WithEvents Label1 As System.Windows.Forms.Label - Friend WithEvents Label3 As System.Windows.Forms.Label - Friend WithEvents Label4 As System.Windows.Forms.Label - Friend WithEvents Label5 As System.Windows.Forms.Label - Friend WithEvents CheckBoxSTRfilter As System.Windows.Forms.CheckBox - Friend WithEvents ButOK As System.Windows.Forms.Button - Friend WithEvents ButCancel As System.Windows.Forms.Button - Friend WithEvents LbSTR As System.Windows.Forms.ListBox - Friend WithEvents ButSTRadd As System.Windows.Forms.Button - Friend WithEvents ButSTRrem As System.Windows.Forms.Button - Friend WithEvents LbFilter0 As System.Windows.Forms.Label - Friend WithEvents TbFilter As System.Windows.Forms.TextBox - Friend WithEvents LbFilter1 As System.Windows.Forms.Label - Friend WithEvents ToolStrip1 As System.Windows.Forms.ToolStrip - Friend WithEvents ToolStripBtNew As System.Windows.Forms.ToolStripButton - Friend WithEvents ToolStripBtOpen As System.Windows.Forms.ToolStripButton - Friend WithEvents ToolStripBtSave As System.Windows.Forms.ToolStripButton - Friend WithEvents ToolStripBtSaveAs As System.Windows.Forms.ToolStripButton - Friend WithEvents ToolStripSeparator1 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents ToolStripBtSendTo As System.Windows.Forms.ToolStripButton -End Class diff --git a/VECTO/GUI/F_ADV.resx b/VECTO/GUI/F_ADV.resx deleted file mode 100644 index 89a39fff28..0000000000 --- a/VECTO/GUI/F_ADV.resx +++ /dev/null @@ -1,270 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" use="required" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <metadata name="StatusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> - <value>125, 17</value> - </metadata> - <metadata name="ToolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> - <value>349, 17</value> - </metadata> - <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> - <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value> - AAABAAMAICAQAAAAAADoAgAANgAAACAgAAABABgAqAwAAB4DAAAgIAAAAQAgAKgQAADGDwAAKAAAACAA - AABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAADAQmADw8PgAoJjQAIBwwABoULAA4ODwAEAo - oADY0OgAyMDgAJiIyACwqNgAUECoADAYmABwYLgA+Pj4AIh4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u - 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u0E7u5gnsAMbY7u7qAN7u7qDFEYAF7Aa8DC - 7u7QDB7u7mAAAAvuwK4dDF7hwMCu7u4wbdAC7sCu4cCe6gwwTu7ugMGAxe7Aru6w3uQDgMXu7uYK8E7u - wK7uYD5cCuYC7u7pDWCu7sCu6AAuIMHjBO7u5wwMHu7AmCwGHrDe6Axe7u6wDe7uwAAAt+UAru5gnu7u - r/fu7v//mO7o/x7ury7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u - 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////////KAAAACAAAABAAAAAAQAYAAAAAACADAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////3ViujMXmW9bt/////////////z8/kMp - oTMXmZmLzP///zQYmjMXmTMXmTgcnEkwpHRhusrD5f///////////////////7qx3TMXmTMXmXZju/// - /////////////////7613zMXmTgdnOnm9PPx+fPx+cK54TMXmTMXmeHd8P///zQYmjMXmUw0plY/qz0i - njMXmTQYmqaa0////////////////3NguTMXmTMXmTofnfTz+v////////////////r5/UAloDMXmTMX - mTMXmTMXmTMXmTMXmV1Hrv///////zQYmjMXmbKo2f////f2+3FeuDMXmTYam+Dc8P////////Lw+Tgd - nDMXmTQYmjMXmbOp2f///////////////////4NywTMXmUAloHNguXFduDMXmTMXmaaZ0////////zQY - mjMXmbKo2f////////f2+zgcnDMXmZaIy////////7Cl2DMXmT0inoFwwDMXmWxXtv////////////// - /////8vE5TMXmTkenPX0+szF5jMXmTUZmuzq9v///////zQYmjMXmbKo2f///////////1hBrDMXmXlm - vP///////2hTtDMXmXpovcvE5TMXmTYam+7r9/////////////////7+/0kwpDMXmbiu3Ih3xDMXmWpW - tf///////////zQYmjMXmbKo2f///////////0ctozMXmYBuwP///+vp9TUZmjMXmb613/39/kUsojMX - mamd1P///////////////////5CByDMXmXNguUctozMXmbOp2f///////////zQYmjMXmbKo2f////// - /87H5zMXmTMXma2h1v///6aZ0zMXmTwinvj3/P///4V1wjMXmWFMsP///////////////////9nU7DMX - mTQYmjMXmTofnfTz+v///////////zQYmjMXmZaIy8zF5qqf1T4jnzMXmUw0pvX0+v///11HrjMXmXlm - vP///////8rC5TMXmTQYmuXh8v///////////////////1Q9qjMXmTMXmXhlvP///////////////zQY - mjMXmTMXmTMXmTMXmTMXmVE5qN7Z7////+Le8TMXmTMXmbyz3v////////z8/kQqojMXmZ6Rz/////// - /////////////76134l5xIl5xNPM6f///////////////4l5xIl5xIl5xI1+xqGU0Ma/4/39/v////// - /87H54l5xIl5xPf2+////////////7Cl2Il5xKaa0/////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ////////////////////////KAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////dWK6/zMXmf9vW7f//////////////////Pz+/0Mp - of8zF5n/mYvM//////80GJr/MxeZ/zMXmf84HJz/STCk/3Rhuv/Kw+X///////////////////////// - //+6sd3/MxeZ/zMXmf92Y7v///////////////////////////++td//MxeZ/zgdnP/p5vT/8/H5//Px - +f/CueH/MxeZ/zMXmf/h3fD//////zQYmv8zF5n/TDSm/1Y/q/89Ip7/MxeZ/zQYmv+mmtP///////// - /////////////3Nguf8zF5n/MxeZ/zofnf/08/r///////////////////////r5/f9AJaD/MxeZ/zMX - mf8zF5n/MxeZ/zMXmf8zF5n/XUeu////////////NBia/zMXmf+yqNn///////f2+/9xXrj/MxeZ/zYa - m//g3PD////////////y8Pn/OB2c/zMXmf80GJr/MxeZ/7Op2f///////////////////////////4Ny - wf8zF5n/QCWg/3Nguf9xXbj/MxeZ/zMXmf+mmdP///////////80GJr/MxeZ/7Ko2f////////////f2 - +/84HJz/MxeZ/5aIy////////////7Cl2P8zF5n/PSKe/4FwwP8zF5n/bFe2//////////////////// - ////////y8Tl/zMXmf85Hpz/9fT6/8zF5v8zF5n/NRma/+zq9v///////////zQYmv8zF5n/sqjZ//// - /////////////1hBrP8zF5n/eWa8////////////aFO0/zMXmf96aL3/y8Tl/zMXmf82Gpv/7uv3//// - ///////////////////+/v//STCk/zMXmf+4rtz/iHfE/zMXmf9qVrX/////////////////NBia/zMX - mf+yqNn/////////////////Ry2j/zMXmf+AbsD//////+vp9f81GZr/MxeZ/7613//9/f7/RSyi/zMX - mf+pndT///////////////////////////+Qgcj/MxeZ/3Nguf9HLaP/MxeZ/7Op2f////////////// - //80GJr/MxeZ/7Ko2f///////////87H5/8zF5n/MxeZ/62h1v//////ppnT/zMXmf88Ip7/+Pf8//// - //+FdcL/MxeZ/2FMsP///////////////////////////9nU7P8zF5n/NBia/zMXmf86H53/9PP6//// - /////////////zQYmv8zF5n/lojL/8zF5v+qn9X/PiOf/zMXmf9MNKb/9fT6//////9dR67/MxeZ/3lm - vP///////////8rC5f8zF5n/NBia/+Xh8v///////////////////////////1Q9qv8zF5n/MxeZ/3hl - vP//////////////////////NBia/zMXmf8zF5n/MxeZ/zMXmf8zF5n/UTmo/97Z7///////4t7x/zMX - mf8zF5n/vLPe/////////////Pz+/0Qqov8zF5n/npHP////////////////////////////vrXf/4l5 - xP+JecT/08zp//////////////////////+JecT/iXnE/4l5xP+Nfsb/oZTQ/8a/4//9/f7///////// - ///Ox+f/iXnE/4l5xP/39vv/////////////////sKXY/4l5xP+mmtP///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////////////////////////////w== -</value> - </data> -</root> \ No newline at end of file diff --git a/VECTO/GUI/F_ADV.vb b/VECTO/GUI/F_ADV.vb deleted file mode 100644 index 1232e5f2a5..0000000000 --- a/VECTO/GUI/F_ADV.vb +++ /dev/null @@ -1,323 +0,0 @@ -Public Class F_ADV - - Private Const IFanz As Int16 = 4 - Dim Advfile As String - Dim Changed As Boolean = False - - 'Initialize - Private Sub F05_ADV_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load - Changed = False - End Sub - - 'Close - Private Sub F05_ADV_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing - If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then - e.Cancel = ChangeCheckCancel() - End If - End Sub - - 'InputFile controls ------------------------------------------ - - 'Browse Button-Click Events - Private Sub ButtonFZP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFZP.Click - If fbFZP.OpenDialog(fFileRepl(Me.TextBoxFZP.Text, fPATH(Advfile))) Then Me.TextBoxFZP.Text = fbFZP.Files(0) - End Sub - - Private Sub ButtonFLT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFLT.Click - If fbFLT.OpenDialog(fFileRepl(Me.TextBoxFLT.Text, fPATH(Advfile))) Then Me.TextBoxFLT.Text = fbFLT.Files(0) - End Sub - - Private Sub ButtonTEM_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonTEM.Click - If fbTEM.OpenDialog(fFileRepl(Me.TextBoxTEM.Text, fPATH(Advfile))) Then Me.TextBoxTEM.Text = fbTEM.Files(0) - End Sub - - Private Sub ButSTRadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButSTRadd.Click - Dim file As String - If Me.LbSTR.Items.Count > 0 Then - file = Me.LbSTR.Items(Me.LbSTR.Items.Count - 1).ToString - Else - file = "" - End If - If fbSTR.OpenDialog(file, True) Then - For Each file In fbSTR.Files - Me.LbSTR.Items.Add(file) - Next - Change() - End If - End Sub - - Private Sub ButSTRrem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButSTRrem.Click - If Me.LbSTR.SelectedItems.Count > 0 Then Change() - Do While Me.LbSTR.SelectedItems.Count > 0 - Me.LbSTR.Items.Remove(Me.LbSTR.SelectedItems(0)) - Loop - End Sub - -#Region "Toolbar" - - 'New - Private Sub ToolStripBtNew_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtNew.Click - Call ADVnew() - End Sub - - 'Open - Private Sub ToolStripBtOpen_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtOpen.Click - If fbADV.OpenDialog(Advfile) Then ADVload2Form(fbADV.Files(0)) - End Sub - - 'Save - Private Sub ToolStripBtSave_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtSave.Click - Save() - End Sub - - 'Save As - Private Sub ToolStripBtSaveAs_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtSaveAs.Click - If fbADV.SaveDialog(Advfile) Then ADVsave(fbADV.Files(0)) - End Sub - - 'Send to ADV List - Private Sub ToolStripBtSendTo_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtSendTo.Click - If ChangeCheckCancel() Then Exit Sub - If Advfile = "" Then - MsgBox("File not found!" & ChrW(10) & ChrW(10) & "Save file and try again.") - Else - F_MAINForm.AddToListViewGEN(Advfile) - Me.ToolStripStatusLabelADV.Text = Advfile & " sent to ADV List." - End If - End Sub - -#End Region - - 'Save ADV - Private Function Save() As Boolean - If Advfile = "" Then - If fbADV.SaveDialog("") Then - Advfile = fbADV.Files(0) - Else - Return False - End If - End If - Return ADVsave(Advfile) - End Function - - - - '------------------------------------------------------------------- - - - 'New empty ADV - Public Sub ADVnew() - If ChangeCheckCancel() Then Exit Sub - Me.TBseed.Text = "1" - Me.TextBoxFZP.Text = "" - Me.TextBoxFLT.Text = "" - Me.TextBoxTEM.Text = "" - Me.TbFilter.Text = "85" - Me.LbSTR.Items.Clear() - Me.ToolStripStatusLabelADV.Text = "" - Me.CheckBoxMISKAM.Checked = False - Me.CheckBoxSTRfilter.Checked = False - Changed = False - Advfile = "" - Me.Text = "ADV Editor" - Me.ToolStripStatusLabelADV.Text = "New file" - End Sub - - 'Load ADV in Form - Public Sub ADVload2Form(ByVal file As String) - Dim ADV As cADV - Dim i As Integer - - If Not IO.File.Exists(file) Then - MsgBox("File not found!") - Exit Sub - End If - - If ChangeCheckCancel() Then Exit Sub - - ADVnew() - - ADV = New cADV - - ADV.FilePath = file - - If Not ADV.ReadFile() Then - MsgBox("Cannot read file!") - Exit Sub - End If - - 'Line 1: FZP file - Me.TextBoxFZP.Text = ADV.FZPpath(True) - - 'Line 2: FLT file - Me.TextBoxFLT.Text = ADV.FLTpath(True) - - 'Line 3: TEM file - Me.TextBoxTEM.Text = ADV.TEMpath(True) - - 'Line 4: RndSeed - Me.TBseed.Text = ADV.RndSeed - - 'Line 5: MISKAMout True/False - Me.CheckBoxMISKAM.Checked = ADV.SD3out - - 'Line 6: strFilter True/False - Me.CheckBoxSTRfilter.Checked = ADV.STRfilter - - 'Line 7: Distance filter for SUM.STR - Me.TbFilter.Text = ADV.STRSUMdistflt - - 'Line 8 +: STR files - For i = 1 To ADV.STRcount - Me.LbSTR.Items.Add(ADV.STRpaths(i - 1, True)) - Next - - Advfile = file - Me.Text = IO.Path.GetFileName(file) & " - ADV Editor" - Changed = False - Me.ToolStripStatusLabelADV.Text = "" 'file - End Sub - - 'Save ADV from Form - Private Function ADVsave(ByVal file As String) As Boolean - Dim ADV As cADV - Dim s As String - - ADV = New cADV - - ADV.FilePath = file - - ADV.FZPpath = Me.TextBoxFZP.Text - - ADV.FLTpath = Me.TextBoxFLT.Text - - ADV.TEMpath = Me.TextBoxTEM.Text - - ADV.RndSeed = Me.TBseed.Text - - ADV.SD3out = Me.CheckBoxMISKAM.Checked - - ADV.STRfilter = Me.CheckBoxSTRfilter.Checked - - ADV.STRSUMdistflt = Me.TbFilter.Text - - 'ADV.STRpathsClear() '<= Nicht notwendig da neues lokales cADV-Objekt |@@| ADV.STRpathsClear() '<= Not necessary because new local cADV object - For Each s In Me.LbSTR.Items - ADV.STRpathsAdd(s) - Next - - If Not ADV.SaveFile Then - MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical) - Return False - End If - - Advfile = file - - Me.Text = fFILE(file, True) & " - ADV Editor" - Advfile = file - - Me.ToolStripStatusLabelADV.Text = file & " saved." - - F_MAINForm.AddToListViewGEN(Advfile) - - Changed = False - - Return True - - End Function - - 'TEMformCreator - Sub TEMfromCreator(ByVal txt As String) - Me.TextBoxTEM.Text = txt - End Sub - - 'Form changes (control whether GEN saved) --------------------------------- - 'Event handler for the Form changes - - 'Change Status ändern |@@| Change Status change - Private Sub Change() - Me.ToolStripStatusLabelADV.Text = "Unsaved changes in current file" - Changed = True - End Sub - - ' "Save changes? "... Return True if user aborts - Private Function ChangeCheckCancel() As Boolean - - If Changed Then - - Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel) - Case MsgBoxResult.Yes - Return Not Save() - Case MsgBoxResult.Cancel - Return True - Case Else ' MsgBoxResult.No - Changed = False - Return False - End Select - - Else - - Return False - - End If - - End Function - '----------------------------------------------------------------------------------- - - - -#Region "Control-Enables und Change!" - - Private Sub CBMISKAM_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxMISKAM.CheckedChanged - If Me.CheckBoxMISKAM.Checked Then - Me.CheckBoxSTRfilter.Checked = True - Me.CheckBoxSTRfilter.Enabled = False - Else - Me.CheckBoxSTRfilter.Enabled = True - End If - Change() - End Sub - - Private Sub CheckBoxSTRfilter_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxSTRfilter.CheckedChanged - Me.LbSTR.Enabled = Me.CheckBoxSTRfilter.Checked - Me.ButSTRadd.Enabled = Me.CheckBoxSTRfilter.Checked - Me.ButSTRrem.Enabled = Me.CheckBoxSTRfilter.Checked - Me.TbFilter.Enabled = Me.CheckBoxSTRfilter.Checked - Me.LbFilter0.Enabled = Me.CheckBoxSTRfilter.Checked - Me.LbFilter1.Enabled = Me.CheckBoxSTRfilter.Checked - Change() - End Sub - - Private Sub TextBoxFZP_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxFZP.TextChanged - Change() - End Sub - - Private Sub TextBoxFLT_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxFLT.TextChanged - Change() - End Sub - - Private Sub TextBoxTEM_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxTEM.TextChanged - Change() - End Sub - - Private Sub TbFilter_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TbFilter.TextChanged - Change() - End Sub - -#End Region - - - - 'OK (Save & Close) - Private Sub ButSaveClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButOK.Click - If Not Save() Then Exit Sub - Me.Close() - End Sub - - 'Cancel - Private Sub ButCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButCancel.Click - Me.Close() - End Sub - - -End Class diff --git a/VECTO/GUI/F_ADVfzp.Designer.vb b/VECTO/GUI/F_ADVfzp.Designer.vb deleted file mode 100644 index 497a34216c..0000000000 --- a/VECTO/GUI/F_ADVfzp.Designer.vb +++ /dev/null @@ -1,164 +0,0 @@ -<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ -Partial Class F_ADVfzp - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - <System.Diagnostics.DebuggerNonUserCode()> _ - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - <System.Diagnostics.DebuggerStepThrough()> _ - Private Sub InitializeComponent() - Me.components = New System.ComponentModel.Container - Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel - Me.OK_Button = New System.Windows.Forms.Button - Me.Cancel_Button = New System.Windows.Forms.Button - Me.RbUseSFZP = New System.Windows.Forms.RadioButton - Me.RbUseFZP = New System.Windows.Forms.RadioButton - Me.RBAbort = New System.Windows.Forms.RadioButton - Me.LbTimer = New System.Windows.Forms.Label - Me.LbMsg = New System.Windows.Forms.Label - Me.Timer1 = New System.Windows.Forms.Timer(Me.components) - Me.TableLayoutPanel1.SuspendLayout() - Me.SuspendLayout() - ' - 'TableLayoutPanel1 - ' - Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.TableLayoutPanel1.ColumnCount = 2 - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) - Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) - Me.TableLayoutPanel1.Location = New System.Drawing.Point(194, 134) - Me.TableLayoutPanel1.Name = "TableLayoutPanel1" - Me.TableLayoutPanel1.RowCount = 1 - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) - Me.TableLayoutPanel1.TabIndex = 0 - ' - 'OK_Button - ' - Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.OK_Button.Location = New System.Drawing.Point(3, 3) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(67, 23) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'Cancel_Button - ' - Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'RbUseSFZP - ' - Me.RbUseSFZP.AutoSize = True - Me.RbUseSFZP.Checked = True - Me.RbUseSFZP.Location = New System.Drawing.Point(20, 48) - Me.RbUseSFZP.Name = "RbUseSFZP" - Me.RbUseSFZP.Size = New System.Drawing.Size(187, 17) - Me.RbUseSFZP.TabIndex = 1 - Me.RbUseSFZP.TabStop = True - Me.RbUseSFZP.Text = "Use the .sfzp file. Sorting disabled." - Me.RbUseSFZP.UseVisualStyleBackColor = True - ' - 'RbUseFZP - ' - Me.RbUseFZP.AutoSize = True - Me.RbUseFZP.Location = New System.Drawing.Point(20, 71) - Me.RbUseFZP.Name = "RbUseFZP" - Me.RbUseFZP.Size = New System.Drawing.Size(317, 17) - Me.RbUseFZP.TabIndex = 2 - Me.RbUseFZP.Text = "Use the original .fzp file. The existing .sfzp file will be replaced." - Me.RbUseFZP.UseVisualStyleBackColor = True - ' - 'RBAbort - ' - Me.RBAbort.AutoSize = True - Me.RBAbort.Location = New System.Drawing.Point(20, 94) - Me.RBAbort.Name = "RBAbort" - Me.RBAbort.Size = New System.Drawing.Size(53, 17) - Me.RBAbort.TabIndex = 3 - Me.RBAbort.Text = "Abort." - Me.RBAbort.UseVisualStyleBackColor = True - ' - 'LbTimer - ' - Me.LbTimer.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.LbTimer.AutoSize = True - Me.LbTimer.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.LbTimer.Location = New System.Drawing.Point(12, 142) - Me.LbTimer.Name = "LbTimer" - Me.LbTimer.Size = New System.Drawing.Size(74, 13) - Me.LbTimer.TabIndex = 4 - Me.LbTimer.Text = "Closing Dialog" - ' - 'LbMsg - ' - Me.LbMsg.AutoSize = True - Me.LbMsg.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.LbMsg.Location = New System.Drawing.Point(12, 19) - Me.LbMsg.Name = "LbMsg" - Me.LbMsg.Size = New System.Drawing.Size(57, 13) - Me.LbMsg.TabIndex = 5 - Me.LbMsg.Text = "Message" - ' - 'Timer1 - ' - Me.Timer1.Interval = 1000 - ' - 'F_ADVfzp - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(352, 175) - Me.Controls.Add(Me.LbMsg) - Me.Controls.Add(Me.LbTimer) - Me.Controls.Add(Me.RBAbort) - Me.Controls.Add(Me.RbUseFZP) - Me.Controls.Add(Me.RbUseSFZP) - Me.Controls.Add(Me.TableLayoutPanel1) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "F_ADVfzp" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "PHEM ADVANCE" - Me.TableLayoutPanel1.ResumeLayout(False) - Me.ResumeLayout(False) - Me.PerformLayout() - - End Sub - Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents OK_Button As System.Windows.Forms.Button - Friend WithEvents Cancel_Button As System.Windows.Forms.Button - Friend WithEvents RbUseSFZP As System.Windows.Forms.RadioButton - Friend WithEvents RbUseFZP As System.Windows.Forms.RadioButton - Friend WithEvents RBAbort As System.Windows.Forms.RadioButton - Friend WithEvents LbTimer As System.Windows.Forms.Label - Friend WithEvents LbMsg As System.Windows.Forms.Label - Friend WithEvents Timer1 As System.Windows.Forms.Timer - -End Class diff --git a/VECTO/GUI/F_ADVfzp.resx b/VECTO/GUI/F_ADVfzp.resx deleted file mode 100644 index b6156eff6c..0000000000 --- a/VECTO/GUI/F_ADVfzp.resx +++ /dev/null @@ -1,123 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" use="required" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <metadata name="Timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> - <value>17, 17</value> - </metadata> -</root> \ No newline at end of file diff --git a/VECTO/GUI/F_ADVfzp.vb b/VECTO/GUI/F_ADVfzp.vb deleted file mode 100644 index 2f8f4897db..0000000000 --- a/VECTO/GUI/F_ADVfzp.vb +++ /dev/null @@ -1,68 +0,0 @@ -Imports System.Windows.Forms - -Public Class F_ADVfzp - - Private TimerTime As Int16 - - Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click - Me.DialogResult = System.Windows.Forms.DialogResult.OK - Me.Close() - End Sub - - Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click - Me.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Close() - End Sub - - Private Sub F_ADVfzp_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click - TimerAbort() - End Sub - - Private Sub F_ADVfzp_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown - TimerTime = 10 - Me.LbTimer.Text = "Closing Dialog in " & TimerTime & "s" - Me.Timer1.Start() - End Sub - - Private Sub TimerAbort() - Me.Timer1.Stop() - Me.LbTimer.Text = " " - End Sub - - Public Function Answer(ByVal MsgText As String) As Int16 - Me.LbMsg.Text = MsgText - If Me.ShowDialog() = Windows.Forms.DialogResult.OK Then - If Me.RbUseSFZP.Checked Then - Return 0 - ElseIf Me.RbUseFZP.Checked Then - Return 1 - Else - Return 2 - End If - Else - Return 2 - End If - End Function - - Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick - TimerTime -= 1S - If TimerTime = 0 Then - Me.Timer1.Stop() - Me.DialogResult = Windows.Forms.DialogResult.OK - Me.Close() - End If - Me.LbTimer.Text = "Closing Dialog in " & TimerTime & "s" - End Sub - - Private Sub RbUseSFZP_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RbUseSFZP.CheckedChanged - TimerAbort() - End Sub - - Private Sub RbUseFZP_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RbUseFZP.CheckedChanged - TimerAbort() - End Sub - - Private Sub LbTimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LbTimer.Click - TimerAbort() - End Sub -End Class diff --git a/VECTO/GUI/F_GEN.vb b/VECTO/GUI/F_GEN.vb index f4b9377b5a..6af8cba3aa 100644 --- a/VECTO/GUI/F_GEN.vb +++ b/VECTO/GUI/F_GEN.vb @@ -858,7 +858,7 @@ Public Class F_GEN Me.ToolStripStatusLabelGEN.Text = "" - If PHEMmode <> tPHEMmode.ModeADVANCE Then F_MAINForm.AddToListViewGEN(Genfile) + F_MAINForm.AddToListViewGEN(Genfile) Changed = False diff --git a/VECTO/GUI/F_MAINForm.Designer.vb b/VECTO/GUI/F_MAINForm.Designer.vb index e2ace3deb6..dca853e94a 100644 --- a/VECTO/GUI/F_MAINForm.Designer.vb +++ b/VECTO/GUI/F_MAINForm.Designer.vb @@ -104,13 +104,9 @@ Partial Class F_MAINForm Me.VEHEditorToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.EngineEditorToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.GearboxEditorToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ADVEditorToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() Me.GRAPHiToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.ToolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator() Me.SignOrVerifyFilesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() - Me.CreateTEMFileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SplitMODFilesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.ToolStripSeparator4 = New System.Windows.Forms.ToolStripSeparator() Me.OpenLogToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.ChangeWorkingDirectoryToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() @@ -889,7 +885,7 @@ Partial Class F_MAINForm ' 'ToolStripDrDnBtTools ' - Me.ToolStripDrDnBtTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.GENEditorToolStripMenuItem1, Me.VEHEditorToolStripMenuItem, Me.EngineEditorToolStripMenuItem, Me.GearboxEditorToolStripMenuItem, Me.ADVEditorToolStripMenuItem1, Me.GRAPHiToolStripMenuItem, Me.ToolStripSeparator6, Me.SignOrVerifyFilesToolStripMenuItem, Me.ToolStripSeparator1, Me.CreateTEMFileToolStripMenuItem, Me.SplitMODFilesToolStripMenuItem, Me.ToolStripSeparator4, Me.OpenLogToolStripMenuItem, Me.ChangeWorkingDirectoryToolStripMenuItem1, Me.SettingsToolStripMenuItem}) + Me.ToolStripDrDnBtTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.GENEditorToolStripMenuItem1, Me.VEHEditorToolStripMenuItem, Me.EngineEditorToolStripMenuItem, Me.GearboxEditorToolStripMenuItem, Me.GRAPHiToolStripMenuItem, Me.ToolStripSeparator6, Me.SignOrVerifyFilesToolStripMenuItem, Me.ToolStripSeparator4, Me.OpenLogToolStripMenuItem, Me.ChangeWorkingDirectoryToolStripMenuItem1, Me.SettingsToolStripMenuItem}) Me.ToolStripDrDnBtTools.Image = Global.VECTO.My.Resources.Resources.Misc_Tools_icon Me.ToolStripDrDnBtTools.ImageTransparentColor = System.Drawing.Color.Magenta Me.ToolStripDrDnBtTools.Name = "ToolStripDrDnBtTools" @@ -920,13 +916,6 @@ Partial Class F_MAINForm Me.GearboxEditorToolStripMenuItem.Size = New System.Drawing.Size(214, 22) Me.GearboxEditorToolStripMenuItem.Text = "Gearbox Editor" ' - 'ADVEditorToolStripMenuItem1 - ' - Me.ADVEditorToolStripMenuItem1.Name = "ADVEditorToolStripMenuItem1" - Me.ADVEditorToolStripMenuItem1.Size = New System.Drawing.Size(214, 22) - Me.ADVEditorToolStripMenuItem1.Text = "ADV Editor" - Me.ADVEditorToolStripMenuItem1.Visible = False - ' 'GRAPHiToolStripMenuItem ' Me.GRAPHiToolStripMenuItem.Name = "GRAPHiToolStripMenuItem" @@ -945,25 +934,6 @@ Partial Class F_MAINForm Me.SignOrVerifyFilesToolStripMenuItem.Size = New System.Drawing.Size(214, 22) Me.SignOrVerifyFilesToolStripMenuItem.Text = "Sign or Verify Files" ' - 'ToolStripSeparator1 - ' - Me.ToolStripSeparator1.Name = "ToolStripSeparator1" - Me.ToolStripSeparator1.Size = New System.Drawing.Size(211, 6) - ' - 'CreateTEMFileToolStripMenuItem - ' - Me.CreateTEMFileToolStripMenuItem.Name = "CreateTEMFileToolStripMenuItem" - Me.CreateTEMFileToolStripMenuItem.Size = New System.Drawing.Size(214, 22) - Me.CreateTEMFileToolStripMenuItem.Text = "Create TEM File" - Me.CreateTEMFileToolStripMenuItem.Visible = False - ' - 'SplitMODFilesToolStripMenuItem - ' - Me.SplitMODFilesToolStripMenuItem.Name = "SplitMODFilesToolStripMenuItem" - Me.SplitMODFilesToolStripMenuItem.Size = New System.Drawing.Size(214, 22) - Me.SplitMODFilesToolStripMenuItem.Text = "Split MOD Files" - Me.SplitMODFilesToolStripMenuItem.Visible = False - ' 'ToolStripSeparator4 ' Me.ToolStripSeparator4.Name = "ToolStripSeparator4" @@ -1186,11 +1156,7 @@ Partial Class F_MAINForm Friend WithEvents ToolStripBtOpen As System.Windows.Forms.ToolStripButton Friend WithEvents ToolStripDrDnBtTools As System.Windows.Forms.ToolStripDropDownButton Friend WithEvents GENEditorToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ADVEditorToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem Friend WithEvents VEHEditorToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents ToolStripSeparator1 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents CreateTEMFileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents SplitMODFilesToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem Friend WithEvents ToolStripSeparator4 As System.Windows.Forms.ToolStripSeparator Friend WithEvents OpenLogToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem Friend WithEvents ChangeWorkingDirectoryToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem diff --git a/VECTO/GUI/F_MAINForm.vb b/VECTO/GUI/F_MAINForm.vb index 69ce453b36..29dccb0e04 100644 --- a/VECTO/GUI/F_MAINForm.vb +++ b/VECTO/GUI/F_MAINForm.vb @@ -12,8 +12,6 @@ Public Class F_MAINForm Private ConMenTarget As ListView Private ConMenTarGEN As Boolean - Private BGjob As tBGjob - Private MODpath As String Private MODVehList As Int32() @@ -62,18 +60,12 @@ Public Class F_MAINForm #End Region - Private Enum tBGjob As Short - PHEM = 0 - ModFilter = 1 - End Enum - #Region "FileBrowser Init/Close" Private Sub FB_Initialize() FB_Init = False fbWorkDir = New cFileBrowser("WorkDir", True) fbFileLists = New cFileBrowser("FileLists") fbGEN = New cFileBrowser("gen") - fbADV = New cFileBrowser("adv") fbVEH = New cFileBrowser("vveh") fbMAP = New cFileBrowser("vmap") fbDRI = New cFileBrowser("vdri") @@ -107,7 +99,6 @@ Public Class F_MAINForm '------------------------------------------------------- fbFileLists.Extensions = New String() {"txt"} fbGEN.Extensions = New String() {"vecto"} - fbADV.Extensions = New String() {"adv"} fbVEH.Extensions = New String() {"vveh"} fbMAP.Extensions = New String() {"vmap"} fbDRI.Extensions = New String() {"vdri"} @@ -142,7 +133,6 @@ Public Class F_MAINForm fbWorkDir.Close() fbFileLists.Close() fbGEN.Close() - fbADV.Close() fbVEH.Close() fbMAP.Close() fbDRI.Close() @@ -180,6 +170,7 @@ Public Class F_MAINForm 'PHEM-Launcher Public Sub PHEM_Launcher() Dim ProgOverall As Boolean + Dim GEN0 As cGEN 'Called when PHEM already running If PHEMworker.IsBusy Then @@ -196,8 +187,6 @@ Public Class F_MAINForm PHEMmode = tPHEMmode.ModeSTANDARD Case 1 PHEMmode = tPHEMmode.ModeBATCH - Case 2 - PHEMmode = tPHEMmode.ModeADVANCE End Select 'Wenn mehr als 100 Kombinationen in Batch fragen ob sekündliche Ausgabe |@@| When Batch resulting in more than 100 combinations per second, ask whether to dump-output per second @@ -224,10 +213,19 @@ Public Class F_MAINForm SetCycleList() 'Check whether Overall-progbar is needed - ProgOverall = PHEMmode <> tPHEMmode.ModeADVANCE ' JobFileList.Count > 1 Or PHEMmode = tPHEMmode.ModeBATCH + If PHEMmode = tPHEMmode.ModeBATCH Or JobFileList.Count > 1 Then + ProgOverall = True + Else + GEN0 = New cGEN + GEN0.FilePath = JobFileList(0) + If Not GEN0.ReadFile Then + GUImsg(tMsgID.Err, "Failed to job file (" & fFILE(JobFileList(0), True) & ")!") + Exit Sub + End If + ProgOverall = (GEN0.CycleFiles.Count > 1) + End If 'Launch through Job_Launcher - BGjob = tBGjob.PHEM Job_Launcher(ProgOverall) End Sub @@ -354,14 +352,9 @@ Public Class F_MAINForm End Try End If - Select Case BGjob - Case tBGjob.PHEM - e.Result = VECTO() - Case tBGjob.ModFilter - ADV = New cADVANCE_V3 - ADV.AusgModCut(MODpath, MODVehList) - ADV = Nothing - End Select + e.Result = VECTO() + + End Sub 'Progress Report @@ -421,21 +414,11 @@ Public Class F_MAINForm Result = e.Result - Select Case BGjob - - Case tBGjob.PHEM - - 'Falls Optimierer aktiv werden hier die Zielfunktion ausgegeben und Signal an Interface |@@| If Optimizers(Optimierer ) are active here, then dump the Objective-function(Zielfunktion ) and Signal to interface - If bOptOn Then - If Result = tCalcResult.Err Or Result = tCalcResult.Abort Then OptERstat = True - OptEND() - End If - - Case tBGjob.ModFilter - - ReDim MODVehList(-1) - - End Select + 'Falls Optimierer aktiv werden hier die Zielfunktion ausgegeben und Signal an Interface |@@| If Optimizers(Optimierer ) are active here, then dump the Objective-function(Zielfunktion ) and Signal to interface + If bOptOn Then + If Result = tCalcResult.Err Or Result = tCalcResult.Abort Then OptERstat = True + OptEND() + End If 'ShutDown when Unexpected Error If e.Error IsNot Nothing Then @@ -877,20 +860,12 @@ Public Class F_MAINForm x = New String() {""} - If LastModeIndex = 2 Then - 'ADVANCE - If fbADV.OpenDialog("", True) Then - Chck = True - x = fbADV.Files - End If - Else - 'STANDARD/BATCH - If fbGEN.OpenDialog("", True, "vecto") Then - Chck = True - x = fbGEN.Files - End If + 'STANDARD/BATCH + If fbGEN.OpenDialog("", True, "vecto") Then + Chck = True + x = fbGEN.Files End If - + If Chck Then AddToListViewGEN(x) End Sub @@ -912,11 +887,7 @@ Public Class F_MAINForm If Not IO.File.Exists(f) Then MsgBox(f & " not found!") Else - If UCase(Microsoft.VisualBasic.Right(f, 4)) = ".ADV" Then - OpenADVEditor(f) - Else - OpenGENEditor(f) - End If + OpenGENEditor(f) End If End Sub @@ -1264,32 +1235,22 @@ lbFound: 'New GEN/ADV Private Sub ToolStripBtNew_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtNew.Click - If LastModeIndex = 2 Then - OpenADVEditor("<New>") - Else - OpenGENEditor("<New>") - End If + OpenGENEditor("<New>") End Sub 'Open GEN/ADV Private Sub ToolStripBtOpen_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtOpen.Click - If LastModeIndex = 2 Then - If fbADV.OpenDialog("") Then OpenADVEditor(fbADV.Files(0)) - Else - If fbGEN.OpenDialog("", False, "vecto,vveh,vgbx,veng,vsig") Then - OpenVectoFile(fbGEN.Files(0)) - End If + + If fbGEN.OpenDialog("", False, "vecto,vveh,vgbx,veng,vsig") Then + OpenVectoFile(fbGEN.Files(0)) End If + End Sub Private Sub GENEditorToolStripMenuItem1_Click(sender As System.Object, e As System.EventArgs) Handles GENEditorToolStripMenuItem1.Click OpenGENEditor("<New>") End Sub - Private Sub ADVEditorToolStripMenuItem1_Click(sender As System.Object, e As System.EventArgs) Handles ADVEditorToolStripMenuItem1.Click - OpenADVEditor("<New>") - End Sub - Private Sub VEHEditorToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles VEHEditorToolStripMenuItem.Click If Not F_VEH.Visible Then F_VEH.Show() @@ -1339,26 +1300,6 @@ lbFound: End Sub - Private Sub CreateTEMFileToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles CreateTEMFileToolStripMenuItem.Click - F_TEM_Creator.Show() - F_TEM_Creator.Focus() - End Sub - - Private Sub SplitMODFilesToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles SplitMODFilesToolStripMenuItem.Click - If PHEMworker.IsBusy Then Exit Sub - - If F_ModSplit.ShowDialog = Windows.Forms.DialogResult.OK Then - MODpath = F_ModSplit.ModPath - MODVehList = F_ModSplit.VehList - Else - Exit Sub - End If - - 'Worker start - BGjob = tBGjob.ModFilter - Job_Launcher(False) - End Sub - Private Sub OpenLogToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles OpenLogToolStripMenuItem.Click System.Diagnostics.Process.Start(MyAppPath & "log.txt") End Sub @@ -1618,8 +1559,6 @@ lbFound: PHEMmode = tPHEMmode.ModeSTANDARD Case 1 PHEMmode = tPHEMmode.ModeBATCH - Case 2 - PHEMmode = tPHEMmode.ModeADVANCE End Select 'Load New List @@ -1829,21 +1768,10 @@ lbFound: End Sub - 'Open ADV-editor and load file - Friend Sub OpenADVEditor(ByVal x As String) - If Not F_ADV.Visible Then - F_ADV.Show() - If x = "<New>" Then F_ADV.ADVnew() - End If - F_ADV.WindowState = FormWindowState.Normal - If x <> "<New>" Then Call F_ADV.ADVload2Form(x) - F_ADV.Activate() - End Sub - Friend Sub OpenSigFile(ByVal file As String) If Not F_FileSign.Visible Then F_FileSign.Show() - + End If F_FileSign.WindowState = FormWindowState.Normal F_FileSign.TbSigFile.Text = file @@ -1955,8 +1883,6 @@ lbFound: PHEMmode = tPHEMmode.ModeSTANDARD Case 1 PHEMmode = tPHEMmode.ModeBATCH - Case 2 - PHEMmode = tPHEMmode.ModeADVANCE End Select End Sub diff --git a/VECTO/GUI/F_ModSplit.Designer.vb b/VECTO/GUI/F_ModSplit.Designer.vb deleted file mode 100644 index 166526ba64..0000000000 --- a/VECTO/GUI/F_ModSplit.Designer.vb +++ /dev/null @@ -1,158 +0,0 @@ -<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ -Partial Class F_ModSplit - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - <System.Diagnostics.DebuggerNonUserCode()> _ - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - <System.Diagnostics.DebuggerStepThrough()> _ - Private Sub InitializeComponent() - Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() - Me.OK_Button = New System.Windows.Forms.Button() - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.RichTextBox1 = New System.Windows.Forms.RichTextBox() - Me.TextBoxPath = New System.Windows.Forms.TextBox() - Me.ButBrowse = New System.Windows.Forms.Button() - Me.Label1 = New System.Windows.Forms.Label() - Me.Label2 = New System.Windows.Forms.Label() - Me.ButClear = New System.Windows.Forms.Button() - Me.TableLayoutPanel1.SuspendLayout() - Me.SuspendLayout() - ' - 'TableLayoutPanel1 - ' - Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.TableLayoutPanel1.ColumnCount = 2 - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) - Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) - Me.TableLayoutPanel1.Location = New System.Drawing.Point(277, 274) - Me.TableLayoutPanel1.Name = "TableLayoutPanel1" - Me.TableLayoutPanel1.RowCount = 1 - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) - Me.TableLayoutPanel1.TabIndex = 0 - ' - 'OK_Button - ' - Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.OK_Button.Location = New System.Drawing.Point(3, 3) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(67, 23) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'Cancel_Button - ' - Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'RichTextBox1 - ' - Me.RichTextBox1.Location = New System.Drawing.Point(15, 82) - Me.RichTextBox1.Name = "RichTextBox1" - Me.RichTextBox1.Size = New System.Drawing.Size(405, 186) - Me.RichTextBox1.TabIndex = 1 - Me.RichTextBox1.Text = "" - Me.RichTextBox1.WordWrap = False - ' - 'TextBoxPath - ' - Me.TextBoxPath.Location = New System.Drawing.Point(15, 25) - Me.TextBoxPath.Name = "TextBoxPath" - Me.TextBoxPath.Size = New System.Drawing.Size(376, 20) - Me.TextBoxPath.TabIndex = 2 - ' - 'ButBrowse - ' - Me.ButBrowse.Location = New System.Drawing.Point(397, 25) - Me.ButBrowse.Name = "ButBrowse" - Me.ButBrowse.Size = New System.Drawing.Size(26, 20) - Me.ButBrowse.TabIndex = 3 - Me.ButBrowse.Text = "..." - Me.ButBrowse.UseVisualStyleBackColor = True - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.Location = New System.Drawing.Point(12, 66) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(254, 13) - Me.Label1.TabIndex = 4 - Me.Label1.Text = "Vehicle Numbers separated by Comma or Line-break" - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Location = New System.Drawing.Point(12, 9) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(44, 13) - Me.Label2.TabIndex = 4 - Me.Label2.Text = "Filepath" - ' - 'ButClear - ' - Me.ButClear.Location = New System.Drawing.Point(15, 274) - Me.ButClear.Name = "ButClear" - Me.ButClear.Size = New System.Drawing.Size(75, 23) - Me.ButClear.TabIndex = 5 - Me.ButClear.Text = "Clear List" - Me.ButClear.UseVisualStyleBackColor = True - ' - 'F_ModSplit - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(435, 315) - Me.Controls.Add(Me.ButClear) - Me.Controls.Add(Me.Label2) - Me.Controls.Add(Me.Label1) - Me.Controls.Add(Me.ButBrowse) - Me.Controls.Add(Me.TextBoxPath) - Me.Controls.Add(Me.RichTextBox1) - Me.Controls.Add(Me.TableLayoutPanel1) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "F_ModSplit" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Split .mod file" - Me.TableLayoutPanel1.ResumeLayout(False) - Me.ResumeLayout(False) - Me.PerformLayout() - - End Sub - Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents OK_Button As System.Windows.Forms.Button - Friend WithEvents Cancel_Button As System.Windows.Forms.Button - Friend WithEvents RichTextBox1 As System.Windows.Forms.RichTextBox - Friend WithEvents TextBoxPath As System.Windows.Forms.TextBox - Friend WithEvents ButBrowse As System.Windows.Forms.Button - Friend WithEvents Label1 As System.Windows.Forms.Label - Friend WithEvents Label2 As System.Windows.Forms.Label - Friend WithEvents ButClear As System.Windows.Forms.Button - -End Class diff --git a/VECTO/GUI/F_ModSplit.resx b/VECTO/GUI/F_ModSplit.resx deleted file mode 100644 index ff31a6db56..0000000000 --- a/VECTO/GUI/F_ModSplit.resx +++ /dev/null @@ -1,120 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" use="required" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> -</root> \ No newline at end of file diff --git a/VECTO/GUI/F_ModSplit.vb b/VECTO/GUI/F_ModSplit.vb deleted file mode 100644 index 7015bee2f6..0000000000 --- a/VECTO/GUI/F_ModSplit.vb +++ /dev/null @@ -1,102 +0,0 @@ -Imports System.Windows.Forms - -Public Class F_ModSplit - - Private LastFile As String = "" - Private sMODpath As String - Private iVehList As Int32() - Dim FBtemp As cFileBrowser - - Public Sub New() - ' Dieser Aufruf ist für den Windows Form-Designer erforderlich. |@@| This call is required by the Windows Form Designer. - InitializeComponent() - - ' Add any initialization after the InitializeComponent() invocation. - FBtemp = New cFileBrowser("temp", False, True) - FBtemp.Extensions = New String() {"mod"} - End Sub - - 'Load - Private Sub F_ModSplit_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load - Me.TextBoxPath.Text = LastFile - End Sub - - 'Browse - Private Sub ButBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButBrowse.Click - If FBtemp.OpenDialog("", False, "mod") Then - Me.TextBoxPath.Text = FBtemp.Files(0) - Else - Exit Sub - End If - End Sub - - Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click - - Dim VehStr As String - Dim VehStrList As String() - Dim x As Int16 - Dim SplitArray As System.Collections.Generic.List(Of Char) - - sMODpath = Me.TextBoxPath.Text - VehStr = Me.RichTextBox1.Text - - If Not IO.File.Exists(sMODpath) Then - MsgBox("File not found!") - Exit Sub - End If - - If VehStr = "" Then - MsgBox("No Vehicle Numbers defined!") - Exit Sub - End If - - SplitArray = New System.Collections.Generic.List(Of Char) - - SplitArray.AddRange(vbNewLine.ToCharArray) - SplitArray.Add(",") - SplitArray.Add(";") - - ' Split - VehStrList = VehStr.Split(SplitArray.ToArray, StringSplitOptions.RemoveEmptyEntries) - - ' Convert to Int32 - ReDim iVehList(UBound(VehStrList)) - For x = 0 To UBound(VehStrList) - If IsNumeric(VehStrList(x)) Then - iVehList(x) = CInt(VehStrList(x)) - Else - iVehList(x) = 0 - End If - Next - ' Sort - Array.Sort(iVehList) - - LastFile = sMODpath - - 'End - Me.DialogResult = System.Windows.Forms.DialogResult.OK - Me.Close() - End Sub - - Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click - Me.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Close() - End Sub - - Public ReadOnly Property ModPath() As String - Get - Return sMODpath - End Get - End Property - - Public ReadOnly Property VehList() As Int32() - Get - Return iVehList - End Get - End Property - - Private Sub ButClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButClear.Click - Me.RichTextBox1.Text = "" - End Sub - -End Class diff --git a/VECTO/GUI/F_TEM_Creator.Designer.vb b/VECTO/GUI/F_TEM_Creator.Designer.vb deleted file mode 100644 index 89fe29698b..0000000000 --- a/VECTO/GUI/F_TEM_Creator.Designer.vb +++ /dev/null @@ -1,169 +0,0 @@ -<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ -Partial Class F_TEM_Creator - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - <System.Diagnostics.DebuggerNonUserCode()> _ - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - <System.Diagnostics.DebuggerStepThrough()> _ - Private Sub InitializeComponent() - Me.TextBoxTemp = New System.Windows.Forms.TextBox - Me.ComboBoxDrCyc = New System.Windows.Forms.ComboBox - Me.TextBoxPath = New System.Windows.Forms.TextBox - Me.ButtonBrowse = New System.Windows.Forms.Button - Me.ButtonOK = New System.Windows.Forms.Button - Me.ButtonCancel = New System.Windows.Forms.Button - Me.Label1 = New System.Windows.Forms.Label - Me.Label2 = New System.Windows.Forms.Label - Me.Label3 = New System.Windows.Forms.Label - Me.Label4 = New System.Windows.Forms.Label - Me.CheckBoxEXL = New System.Windows.Forms.CheckBox - Me.SuspendLayout() - ' - 'TextBoxTemp - ' - Me.TextBoxTemp.Location = New System.Drawing.Point(94, 15) - Me.TextBoxTemp.Name = "TextBoxTemp" - Me.TextBoxTemp.Size = New System.Drawing.Size(39, 20) - Me.TextBoxTemp.TabIndex = 0 - ' - 'ComboBoxDrCyc - ' - Me.ComboBoxDrCyc.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.ComboBoxDrCyc.FormattingEnabled = True - Me.ComboBoxDrCyc.Location = New System.Drawing.Point(94, 48) - Me.ComboBoxDrCyc.Name = "ComboBoxDrCyc" - Me.ComboBoxDrCyc.Size = New System.Drawing.Size(133, 21) - Me.ComboBoxDrCyc.TabIndex = 1 - ' - 'TextBoxPath - ' - Me.TextBoxPath.Location = New System.Drawing.Point(41, 82) - Me.TextBoxPath.Name = "TextBoxPath" - Me.TextBoxPath.Size = New System.Drawing.Size(208, 20) - Me.TextBoxPath.TabIndex = 2 - ' - 'ButtonBrowse - ' - Me.ButtonBrowse.Location = New System.Drawing.Point(255, 82) - Me.ButtonBrowse.Name = "ButtonBrowse" - Me.ButtonBrowse.Size = New System.Drawing.Size(25, 20) - Me.ButtonBrowse.TabIndex = 3 - Me.ButtonBrowse.Text = "..." - Me.ButtonBrowse.UseVisualStyleBackColor = True - ' - 'ButtonOK - ' - Me.ButtonOK.Location = New System.Drawing.Point(124, 152) - Me.ButtonOK.Name = "ButtonOK" - Me.ButtonOK.Size = New System.Drawing.Size(75, 23) - Me.ButtonOK.TabIndex = 4 - Me.ButtonOK.Text = "Create" - Me.ButtonOK.UseVisualStyleBackColor = True - ' - 'ButtonCancel - ' - Me.ButtonCancel.Location = New System.Drawing.Point(205, 152) - Me.ButtonCancel.Name = "ButtonCancel" - Me.ButtonCancel.Size = New System.Drawing.Size(75, 23) - Me.ButtonCancel.TabIndex = 5 - Me.ButtonCancel.Text = "Cancel" - Me.ButtonCancel.UseVisualStyleBackColor = True - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.Location = New System.Drawing.Point(21, 18) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(67, 13) - Me.Label1.TabIndex = 6 - Me.Label1.Text = "Temperature" - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Location = New System.Drawing.Point(139, 18) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(18, 13) - Me.Label2.TabIndex = 7 - Me.Label2.Text = "°C" - ' - 'Label3 - ' - Me.Label3.AutoSize = True - Me.Label3.Location = New System.Drawing.Point(47, 51) - Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(41, 13) - Me.Label3.TabIndex = 8 - Me.Label3.Text = "Region" - ' - 'Label4 - ' - Me.Label4.AutoSize = True - Me.Label4.Location = New System.Drawing.Point(12, 85) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(23, 13) - Me.Label4.TabIndex = 9 - Me.Label4.Text = "File" - ' - 'CheckBoxEXL - ' - Me.CheckBoxEXL.AutoSize = True - Me.CheckBoxEXL.Location = New System.Drawing.Point(15, 119) - Me.CheckBoxEXL.Name = "CheckBoxEXL" - Me.CheckBoxEXL.Size = New System.Drawing.Size(197, 17) - Me.CheckBoxEXL.TabIndex = 10 - Me.CheckBoxEXL.Text = "Open with MS Excel when complete" - Me.CheckBoxEXL.UseVisualStyleBackColor = True - ' - 'F04_TEM_Creator - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(290, 185) - Me.Controls.Add(Me.CheckBoxEXL) - Me.Controls.Add(Me.Label4) - Me.Controls.Add(Me.Label3) - Me.Controls.Add(Me.Label2) - Me.Controls.Add(Me.Label1) - Me.Controls.Add(Me.ButtonCancel) - Me.Controls.Add(Me.ButtonOK) - Me.Controls.Add(Me.ButtonBrowse) - Me.Controls.Add(Me.TextBoxPath) - Me.Controls.Add(Me.ComboBoxDrCyc) - Me.Controls.Add(Me.TextBoxTemp) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow - Me.MaximizeBox = False - Me.Name = "F04_TEM_Creator" - Me.Text = "Create new TEM file" - Me.ResumeLayout(False) - Me.PerformLayout() - - End Sub - Friend WithEvents TextBoxTemp As System.Windows.Forms.TextBox - Friend WithEvents ComboBoxDrCyc As System.Windows.Forms.ComboBox - Friend WithEvents TextBoxPath As System.Windows.Forms.TextBox - Friend WithEvents ButtonBrowse As System.Windows.Forms.Button - Friend WithEvents ButtonOK As System.Windows.Forms.Button - Friend WithEvents ButtonCancel As System.Windows.Forms.Button - Friend WithEvents Label1 As System.Windows.Forms.Label - Friend WithEvents Label2 As System.Windows.Forms.Label - Friend WithEvents Label3 As System.Windows.Forms.Label - Friend WithEvents Label4 As System.Windows.Forms.Label - Friend WithEvents CheckBoxEXL As System.Windows.Forms.CheckBox -End Class diff --git a/VECTO/GUI/F_TEM_Creator.resx b/VECTO/GUI/F_TEM_Creator.resx deleted file mode 100644 index ff31a6db56..0000000000 --- a/VECTO/GUI/F_TEM_Creator.resx +++ /dev/null @@ -1,120 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" use="required" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> -</root> \ No newline at end of file diff --git a/VECTO/GUI/F_TEM_Creator.vb b/VECTO/GUI/F_TEM_Creator.vb deleted file mode 100644 index 9a4b27489f..0000000000 --- a/VECTO/GUI/F_TEM_Creator.vb +++ /dev/null @@ -1,48 +0,0 @@ -Public Class F_TEM_Creator - - 'Initialization - Private Sub F04_TEM_Creator_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load - Me.TextBoxTemp.Text = "20" - Me.ComboBoxDrCyc.Items.Add("Average") - Me.ComboBoxDrCyc.Items.Add("Residential Street") - Me.ComboBoxDrCyc.Items.Add("Main Street") - Me.ComboBoxDrCyc.SelectedIndex = 0 - Me.TextBoxPath.Text = Cfg.LastTEM - Me.CheckBoxEXL.Checked = Cfg.TEMexl - End Sub - - 'Cancel - Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCancel.Click - Me.Close() - End Sub - - 'OK - Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOK.Click - Dim f As String - If Me.TextBoxPath.Text = "" Then - MsgBox("No file specified!", MsgBoxStyle.Critical) - Exit Sub - End If - f = Me.TextBoxPath.Text - Cfg.TEMexl = Me.CheckBoxEXL.Checked - If UCase(Microsoft.VisualBasic.Right(f, 4)) <> ".TEM" Then f = f & ".TEM" - Cfg.LastTEM = f - f = fFileRepl(f) - If IO.File.Exists(f) Then - If MsgBox("Overwrite existing file?", MsgBoxStyle.YesNo) = MsgBoxResult.No Then Exit Sub - End If - Me.Close() - If F_ADV.Visible Then - F_ADV.WindowState = FormWindowState.Normal - F_ADV.TEMfromCreator(f) - End If - If Cfg.TEMexl Then FileOpenAlt(f) - End Sub - - 'Browse - Private Sub ButtonBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonBrowse.Click - If fbTEM.SaveDialog(Me.TextBoxPath.Text) Then - Me.TextBoxPath.Text = fbTEM.Files(0) - End If - End Sub -End Class diff --git a/VECTO/MODcalc/Em Calc.vb b/VECTO/MODcalc/Em Calc.vb index fffc6091ca..8572bd32b8 100644 --- a/VECTO/MODcalc/Em Calc.vb +++ b/VECTO/MODcalc/Em Calc.vb @@ -1155,39 +1155,38 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus 'Calculation loop: Per Time-step / per Module: 1. Temperatures, 2. Conversions While True 'Display per-second Results on each iteration Results - If Not (PHEMmode = tPHEMmode.ModeADVANCE) Then - If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then - - ' Write Header *.ter - DatTer.OpenWrite(PathTer, ",") - DatTer.WriteLine("result-file for temperatures in the exhaust system") - DatTer.WriteLine("VECTO " & VECTOvers) - line1 = "time,vehicle speed,nnorm,P_norm,rpm,fuel consumption,lambda,m_p exhaust,ta_41_qs" - line2 = "[s],[km/h],[-],[-],[min-1],[g/h],[-],[kg/s],[°C]" - For ii = 1 To ModAnz - If TempMod(ii).TgasGegJa Then - line1 = line1 & ",tm_" & ii & "_output" & ",ttc_" & ii & "_output" & ",tgas_" & ii & "_output" - Else - line1 = line1 & ",tm_" & ii & ",ttc_" & ii & ",tgas_" & ii - End If - line2 = line2 & ",[°C],[°C],[°C]" - Next - line1 = line1 & ",Q_p coolant" - line2 = line2 & ",[W]" + If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then + + ' Write Header *.ter + DatTer.OpenWrite(PathTer, ",") + DatTer.WriteLine("result-file for temperatures in the exhaust system") + DatTer.WriteLine("VECTO " & VECTOvers) + line1 = "time,vehicle speed,nnorm,P_norm,rpm,fuel consumption,lambda,m_p exhaust,ta_41_qs" + line2 = "[s],[km/h],[-],[-],[min-1],[g/h],[-],[kg/s],[°C]" + For ii = 1 To ModAnz + If TempMod(ii).TgasGegJa Then + line1 = line1 & ",tm_" & ii & "_output" & ",ttc_" & ii & "_output" & ",tgas_" & ii & "_output" + Else + line1 = line1 & ",tm_" & ii & ",ttc_" & ii & ",tgas_" & ii + End If + line2 = line2 & ",[°C],[°C],[°C]" + Next + line1 = line1 & ",Q_p coolant" + line2 = line2 & ",[W]" - DatTer.WriteLine(line1) - DatTer.WriteLine(line2) + DatTer.WriteLine(line1) + DatTer.WriteLine(line2) - ' Write the Header for KonvMods - For ii = 1 To ModAnz - If TempMod(ii).ModTyp = 1 Or TempMod(ii).ModTyp = 2 Then - TempMod(ii).KonvMod.Header() - End If - Next + ' Write the Header for KonvMods + For ii = 1 To ModAnz + If TempMod(ii).ModTyp = 1 Or TempMod(ii).ModTyp = 2 Then + TempMod(ii).KonvMod.Header() + End If + Next - End If End If + 'Start-values ​​for Cooling-system simulation: t_mass1(0) = t_start_m1_m2 t_mass2(0) = t_start_m1_m2 @@ -1303,12 +1302,12 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus TempMod(iMod).eEmKomp(7, jz) = TempMod(iMod - 1).eEmKomp(7, jz) * (1 - TempMod(iMod).KonvMod.KonvRate(tMapComp.NO)(jz)) End If - If Not (PHEMmode = tPHEMmode.ModeADVANCE) Then - If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then - TempMod(iMod).KonvMod.Write(jz) 'Sekündliche Ausgabe - End If + + If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then + TempMod(iMod).KonvMod.Write(jz) 'Sekündliche Ausgabe End If + Else 'Falls Modul kein Konv-Element hat ändert sich nix (Anmerkung: Modul 1 hat immer ModTyp0) |@@| If Module has no Conv-element changes nothing (Note: Module 1 has always ModTyp0) If iMod > 1 Then @@ -1324,17 +1323,15 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Next 'Write Line in *.ter. - If Not (PHEMmode = tPHEMmode.ModeADVANCE) Then - If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then - line1 = jz & "," & vehspe(jz) & "," & nnorm(jz) & "," & p_norm(jz) & "," & rpm(jz) & "," & fc(jz) & "," & lambda(jz) & "," & mpexh(jz) & "," & tqs(jz) - For ij = 1 To ModAnz - line1 = line1 & "," & TempMod(ij).t_m(jz) & "," & TempMod(ij).t_tc(jz) & "," & TempMod(ij).t_gas(jz) - Next - If GEN.CoolantsimJa Then - line1 = line1 & "," & qp_loss(jz) - End If - DatTer.WriteLine(line1) + If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then + line1 = jz & "," & vehspe(jz) & "," & nnorm(jz) & "," & p_norm(jz) & "," & rpm(jz) & "," & fc(jz) & "," & lambda(jz) & "," & mpexh(jz) & "," & tqs(jz) + For ij = 1 To ModAnz + line1 = line1 & "," & TempMod(ij).t_m(jz) & "," & TempMod(ij).t_tc(jz) & "," & TempMod(ij).t_gas(jz) + Next + If GEN.CoolantsimJa Then + line1 = line1 & "," & qp_loss(jz) End If + DatTer.WriteLine(line1) End If '------------------------------------------------------------------------------------------ @@ -1346,15 +1343,13 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus '---------------------------------------------------------------------------------------------- 'Close all second-by-second Result-files - If Not (PHEMmode = tPHEMmode.ModeADVANCE) Then - If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then - DatTer.Close() - For ii = 1 To ModAnz - If TempMod(ii).ModTyp = 1 Or TempMod(ii).ModTyp = 2 Then - TempMod(ii).KonvMod.Close() - End If - Next - End If + If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then + DatTer.Close() + For ii = 1 To ModAnz + If TempMod(ii).ModTyp = 1 Or TempMod(ii).ModTyp = 2 Then + TempMod(ii).KonvMod.Close() + End If + Next End If '---------- Abfrage Rücksprung im iterativen Berechnungsmodus für Starttemp ------------------- |@@| Query return in the iterative Calculation-mode for Starttemp ------------------- diff --git a/VECTO/MODcalc/cMOD.vb b/VECTO/MODcalc/cMOD.vb index 96519d3329..683dd0e459 100644 --- a/VECTO/MODcalc/cMOD.vb +++ b/VECTO/MODcalc/cMOD.vb @@ -308,7 +308,6 @@ Public Class cMOD Dim t1 As Integer Dim Sepp As String - Dim ADVmode As Boolean Dim path As String Dim dist As Double Dim MsgSrc As String @@ -336,19 +335,9 @@ Public Class cMOD f = New cFile_V3 - ADVmode = (PHEMmode = tPHEMmode.ModeADVANCE) + path = ModOutpName & ".vmod" - If ADVmode Then - path = ModOutpName & "_" & ADV.aVehType & ".mod" - Else - If GEN.dynkorja Then - path = ModOutpName & ".vmod" - Else - path = ModOutpName & ".vmod" - End If - End If - - If Not f.OpenWrite(path, ",", False, ADVmode) Then + If Not f.OpenWrite(path, ",", False) Then WorkerMsg(tMsgID.Err, "Can't write to " & path, MsgSrc) Return False End If @@ -383,17 +372,12 @@ Public Class cMOD - '*** ID line (Only ADVANCE) - If ADVmode Then - s.Append("VehNr: " & ADV.aVehNr) - s.Append(",Input File: " & fFILE(GenFile, True)) - f.WriteLine(s.ToString) - Else - f.WriteLine("VECTO modal results") - f.WriteLine("VECTO " & VECTOvers) - f.WriteLine(Now.ToString) - f.WriteLine("Input File: " & JobFile) - End If + + f.WriteLine("VECTO modal results") + f.WriteLine("VECTO " & VECTOvers) + f.WriteLine(Now.ToString) + f.WriteLine("Input File: " & JobFile) + '*********************************************************************************************** '*********************************************************************************************** @@ -449,13 +433,6 @@ Public Class cMOD End If - 'ADVANCE-specific - If ADVmode Then - - s.Append(",WorldX,WorldY,StrId") - sU.Append(",[m],[m],[-]") - - End If If Cfg.FinalEmOnly Then @@ -697,20 +674,6 @@ Public Class cMOD End If - 'ADVANCE-specific - If ADVmode Then - - 'X - s.Append(Sepp & ADV.aWorldX(t)) - - 'Y - s.Append(Sepp & ADV.aWorldY(t)) - - 'StrId - s.Append(Sepp & ADV.aStrId(t)) - - End If - If Cfg.FinalEmOnly Then 'Final-emissions (tailpipe) diff --git a/VECTO/MODcalc/cPower.vb b/VECTO/MODcalc/cPower.vb index ff4bfbe351..981ad3064b 100644 --- a/VECTO/MODcalc/cPower.vb +++ b/VECTO/MODcalc/cPower.vb @@ -531,7 +531,7 @@ Public Class cPower Dim amax As Single Dim StdMode As Boolean - Dim NotAdvMode As Boolean + Dim LastPmax As Single @@ -540,7 +540,6 @@ Public Class cPower MsgSrc = "Power/Calc" StdMode = (PHEMmode = tPHEMmode.ModeSTANDARD) - NotAdvMode = Not (PHEMmode = tPHEMmode.ModeADVANCE) 'Abort if no speed given If Not DRI.Vvorg Then @@ -609,7 +608,7 @@ Public Class cPower FirstSecItar = True 'Secondary Progressbar - If NotAdvMode Then ProgBarCtrl.ProgJobInt = CInt(100 * jz / MODdata.tDim) + ProgBarCtrl.ProgJobInt = CInt(100 * jz / MODdata.tDim) ' Determine State @@ -1376,24 +1375,19 @@ lb_nOK: '*********************************** Time loop END *********************************** '*********************************************************************************************** - 'Notify (When not ADVANCE) - If NotAdvMode Then - - If Cfg.WegKorJa Then - If MODdata.tDim > MODdata.tDimOgl Then WorkerMsg(tMsgID.Normal, "Cycle extended by " & MODdata.tDim - MODdata.tDimOgl & " seconds to meet target distance.", MsgSrc) + 'Notify + If Cfg.WegKorJa Then + If MODdata.tDim > MODdata.tDimOgl Then WorkerMsg(tMsgID.Normal, "Cycle extended by " & MODdata.tDim - MODdata.tDimOgl & " seconds to meet target distance.", MsgSrc) - If Math.Abs(Vh.WegIst - Vh.WegSoll) > 80 Then - WorkerMsg(tMsgID.Warn, "Target distance= " & (Vh.WegSoll / 1000).ToString("#.000") & "[km], Actual distance= " & (Vh.WegIst / 1000).ToString("#.000") & "[km], Error= " & Math.Abs(Vh.WegIst - Vh.WegSoll).ToString("#.0") & "[m]", MsgSrc) - Else - WorkerMsg(tMsgID.Normal, "Target distance= " & (Vh.WegSoll / 1000).ToString("#.000") & "[km], Actual distance= " & (Vh.WegIst / 1000).ToString("#.000") & "[km], Error= " & Math.Abs(Vh.WegIst - Vh.WegSoll).ToString("#.0") & "[m]", MsgSrc) - End If + If Math.Abs(Vh.WegIst - Vh.WegSoll) > 80 Then + WorkerMsg(tMsgID.Warn, "Target distance= " & (Vh.WegSoll / 1000).ToString("#.000") & "[km], Actual distance= " & (Vh.WegIst / 1000).ToString("#.000") & "[km], Error= " & Math.Abs(Vh.WegIst - Vh.WegSoll).ToString("#.0") & "[m]", MsgSrc) + Else + WorkerMsg(tMsgID.Normal, "Target distance= " & (Vh.WegSoll / 1000).ToString("#.000") & "[km], Actual distance= " & (Vh.WegIst / 1000).ToString("#.000") & "[km], Error= " & Math.Abs(Vh.WegIst - Vh.WegSoll).ToString("#.0") & "[m]", MsgSrc) End If + End If - If SecSpeedRed > 0 Then WorkerMsg(tMsgID.Normal, "Speed reduction > 1.5 m/s in " & SecSpeedRed & " time steps.", MsgSrc) - - + If SecSpeedRed > 0 Then WorkerMsg(tMsgID.Normal, "Speed reduction > 1.5 m/s in " & SecSpeedRed & " time steps.", MsgSrc) - End If 'CleanUp Vh = Nothing @@ -1413,14 +1407,12 @@ lb_nOK: Dim PeDRI As List(Of Double) Dim PcorCount As Integer Dim StdMode As Boolean - Dim NotAdvMode As Boolean Dim MsgSrc As String Dim Padd As Single MsgSrc = "Power/Eng_Calc" StdMode = (PHEMmode = tPHEMmode.ModeSTANDARD) - NotAdvMode = Not (PHEMmode = tPHEMmode.ModeADVANCE) 'Abort if Power/Revolutions not given If Not (DRI.Nvorg And DRI.Pvorg) Then @@ -1443,7 +1435,7 @@ lb_nOK: For t = 0 To t1 'Secondary Progressbar - If NotAdvMode Then ProgBarCtrl.ProgJobInt = CInt(100 * t / t1) + ProgBarCtrl.ProgJobInt = CInt(100 * t / t1) 'Reset the second-by-second Errors MODdata.ModErrors.ResetAll() diff --git a/VECTO/MODcalc/cVh.vb b/VECTO/MODcalc/cVh.vb index dae7cd18d5..809c8c73ac 100644 --- a/VECTO/MODcalc/cVh.vb +++ b/VECTO/MODcalc/cVh.vb @@ -433,12 +433,6 @@ Public Class cVh MODdata.Duplicate(t) - If PHEMmode = tPHEMmode.ModeADVANCE Then - ADV.aWorldX.Insert(t, ADV.aWorldX(t)) - ADV.aWorldY.Insert(t, ADV.aWorldY(t)) - ADV.aStrId.Insert(t, ADV.aStrId(t)) - End If - End Sub @@ -468,13 +462,6 @@ Public Class cVh MODdata.Duplicate(t) - If PHEMmode = tPHEMmode.ModeADVANCE Then - ADV.aWorldX.Insert(t, ADV.aWorldX(t)) - ADV.aWorldY.Insert(t, ADV.aWorldY(t)) - ADV.aStrId.Insert(t, ADV.aStrId(t)) - End If - - End Sub Private Sub Cut(ByVal t As Integer) @@ -511,12 +498,6 @@ Public Class cVh MODdata.Cut(t) - If PHEMmode = tPHEMmode.ModeADVANCE Then - ADV.aWorldX.RemoveAt(t) - ADV.aWorldY.RemoveAt(t) - ADV.aStrId.RemoveAt(t) - End If - End Sub Public ReadOnly Property Vsoll(ByVal t As Integer) As Single diff --git a/VECTO/M_MAIN.vb b/VECTO/M_MAIN.vb index 1a7c8de07a..3690a26cde 100644 --- a/VECTO/M_MAIN.vb +++ b/VECTO/M_MAIN.vb @@ -63,9 +63,6 @@ Module M_MAIN Case tPHEMmode.ModeBATCH WorkerMsg(tMsgID.Normal, "Starting VECTO BATCH...", MsgSrc) CyclesDim = JobCycleList.Count - 1 - Case tPHEMmode.ModeADVANCE - WorkerMsg(tMsgID.Normal, "Starting PHEM ADVANCE...", MsgSrc) - CyclesDim = 0 End Select FilesDim = JobFileList.Count - 1 @@ -123,10 +120,6 @@ lbSkip0: VSUM = New cVSUM If Not ERG.Init(JobFileList(0)) Then GoTo lbErrBefore - If Not PHEMmode = tPHEMmode.ModeADVANCE Then - If Not ERG.ErgEntryInit() Then GoTo lbErrBefore - End If - SigFile = Left(ERG.ErgFile, ERG.ErgFile.Length - 5) & ".vsig" 'Warning on invalid/unrealistic settings @@ -150,7 +143,7 @@ lbSkip0: JobFile = fFileRepl(JobFileList(jgen)) - If Not PHEMmode = tPHEMmode.ModeADVANCE Then GenFile = JobFile + GenFile = JobFile WorkerJobStatus(jgen, "running...", tJobStatus.Running) @@ -158,40 +151,6 @@ lbSkip0: MSGwarn = 0 MSGerror = 0 - If (PHEMmode = tPHEMmode.ModeADVANCE) Then - - WorkerMsg(tMsgID.NewJob, "Job: " & NrOfRunStr() & " / " & ((FilesDim + 1) * (CyclesDim + 1)) & " | " & fFILE(JobFile, True), MsgSrc) - WorkerStatus("Current Job: " & NrOfRunStr() & " / " & ((FilesDim + 1) * (CyclesDim + 1)) & " | " & fFILE(JobFile, True)) - - - If Not ERG.ErgEntryInit() Then GoTo lbNextJob - - 'Status - WorkerJobStatus(jgen, "processing input...", tJobStatus.Running) - - ADV = New cADVANCE_V3 - If Not ADV.ADVANCE_V2_Init() Then GoTo lbNextJob - - If ADV.ADVANCEdone Or PHEMworker.CancellationPending Then GoTo lbAbort - - 'Status/ProgBar - WorkerJobStatus(jgen, "running...", tJobStatus.Running) - ProgBarCtrl.ProgOverallStartInt = 100 * (jgen) / (FilesDim + 1) - ProgBarCtrl.PgroOverallEndInt = 100 * (jgen + 1) / (FilesDim + 1) - - End If -lbADV: - If (PHEMmode = tPHEMmode.ModeADVANCE) Then - If Not ADV.ADVANCE_V2_Next() Then - JobAbortedByErr = True - GoTo lbNextJob - End If - If ADV.ADVANCEdone Then - ADV.ADVANCE_V2_Close() - GoTo lbNextJob - End If - End If - 'Check if Abort If PHEMworker.CancellationPending Then GoTo lbAbort @@ -318,45 +277,41 @@ lbADV: FCerror = False 'Read cycle - If (Not (PHEMmode = tPHEMmode.ModeADVANCE)) Then + DRI = New cDRI + DRI.FilePath = CurrentCycleFile - 'Read in - DRI = New cDRI - DRI.FilePath = CurrentCycleFile + If Not DRI.ReadFile Then + CyclAbrtedByErr = True + GoTo lbAusg + End If - If Not DRI.ReadFile Then + 'Convert v(s) into v(t) (optional) + If DRI.Scycle Then + If MsgOut Then WorkerMsg(tMsgID.Normal, "Converting cycle (v(s) => v(t))", MsgSrc) + If Not DRI.ConvStoT() Then CyclAbrtedByErr = True GoTo lbAusg End If + End If - 'Convert v(s) into v(t) (optional) - If DRI.Scycle Then - If MsgOut Then WorkerMsg(tMsgID.Normal, "Converting cycle (v(s) => v(t))", MsgSrc) - If Not DRI.ConvStoT() Then - CyclAbrtedByErr = True - GoTo lbAusg - End If - End If - - 'If first time step is Zero then duplicate first values to start cycle with vehicle standing. - If DRI.Vvorg AndAlso DRI.tDim > 1 AndAlso DRI.Values(tDriComp.V)(0) < 0.0001 AndAlso DRI.Values(tDriComp.V)(1) >= 0.0001 Then - DRI.FirstZero() - End If + 'If first time step is Zero then duplicate first values to start cycle with vehicle standing. + If DRI.Vvorg AndAlso DRI.tDim > 1 AndAlso DRI.Values(tDriComp.V)(0) < 0.0001 AndAlso DRI.Values(tDriComp.V)(1) >= 0.0001 Then + DRI.FirstZero() + End If - 'Convert to 1Hz (optional) - does not apply to v(s) cycles because timestep is missing - If DRI.Tvorg Then - If MsgOut Then WorkerMsg(tMsgID.Normal, "Converting cycle to 1Hz", MsgSrc) - If Not DRI.ConvTo1Hz() Then - 'Error-notification in DRI.Convert() - CyclAbrtedByErr = True - GoTo lbAusg - End If + 'Convert to 1Hz (optional) - does not apply to v(s) cycles because timestep is missing + If DRI.Tvorg Then + If MsgOut Then WorkerMsg(tMsgID.Normal, "Converting cycle to 1Hz", MsgSrc) + If Not DRI.ConvTo1Hz() Then + 'Error-notification in DRI.Convert() + CyclAbrtedByErr = True + GoTo lbAusg End If + End If - 'Unnormalised - DRI.DeNorm() + 'De-normalize + DRI.DeNorm() - End If '---------------------------------------------------------------------------- '---------------------------------------------------------------------------- @@ -534,30 +489,9 @@ lbADV: 'Output for BATCH and ADVANCE lbAusg: - If (PHEMmode = tPHEMmode.ModeADVANCE) Then - - 'In ADVANCE, Cycle-cancel = Job-cancel - If CyclAbrtedByErr Then - JobAbortedByErr = True - GoTo lbNextJob - End If - - ADV.STRcalc() - If Not ADV.AusgVis_V3() Then - JobAbortedByErr = True - GoTo lbNextJob - End If - - GoTo lbadv - - Else - - 'Output in Erg (first Calculation - Initialization & Header) - If Not ERG.AusgERG(NrOfRunStr, fFILE(GenFile, True), fFILE(CurrentCycleFile, True), CyclAbrtedByErr) Then GoTo lbErrInJobLoop - - - - End If + + 'Output in Erg (first Calculation - Initialization & Header) + If Not ERG.AusgERG(NrOfRunStr, fFILE(GenFile, True), fFILE(CurrentCycleFile, True), CyclAbrtedByErr) Then GoTo lbErrInJobLoop 'Data Cleanup MODdata.CleanUp() @@ -593,12 +527,6 @@ lbAusg: '********************************************************************************************** lbNextJob: - If (PHEMmode = tPHEMmode.ModeADVANCE) Then - ProgBarCtrl.ProgOverallStartInt = -1 - WorkerProg(100 * (jgen + 1) / (FilesDim + 1), 0) - End If - - If JobAbortedByErr Or (CyclAbrtedByErr And CyclesDim = 0) Then If JobAbortedByErr Then @@ -712,7 +640,6 @@ lbExit: MAP = Nothing TRS = Nothing DRI = Nothing - ADV = Nothing MODdata = Nothing ERG = Nothing diff --git a/VECTO/My Project/AssemblyInfo.vb b/VECTO/My Project/AssemblyInfo.vb index 435d327fdb..0b4a85966e 100644 --- a/VECTO/My Project/AssemblyInfo.vb +++ b/VECTO/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' by entering "*" in them: ' <Assembly: AssemblyVersion("1.0.*")> -<Assembly: AssemblyVersion("1.3.1.1")> -<Assembly: AssemblyFileVersion("1.3.1.1")> +<Assembly: AssemblyVersion("1.4.0.0")> +<Assembly: AssemblyFileVersion("1.4.0.0")> diff --git a/VECTO/VECTO.vbproj b/VECTO/VECTO.vbproj index 1376847efc..3b8b5be761 100644 --- a/VECTO/VECTO.vbproj +++ b/VECTO/VECTO.vbproj @@ -106,7 +106,6 @@ </ItemGroup> <ItemGroup> <Compile Include="ApplicationEvents.vb" /> - <Compile Include="ADVANCE\cADV.vb" /> <Compile Include="cVECTO.vb" /> <Compile Include="cVSUM.vb" /> <Compile Include="GUI\F_FileSign.Designer.vb"> @@ -204,30 +203,17 @@ <Compile Include="GUI\F_ShutDown.vb"> <SubType>Form</SubType> </Compile> - <Compile Include="GUI\F_ADVfzp.Designer.vb"> - <DependentUpon>F_ADVfzp.vb</DependentUpon> - </Compile> - <Compile Include="GUI\F_ADVfzp.vb"> - <SubType>Form</SubType> - </Compile> <Compile Include="GUI\F_GEN.Designer.vb"> <DependentUpon>F_GEN.vb</DependentUpon> </Compile> <Compile Include="GUI\F_GEN.vb"> <SubType>Form</SubType> </Compile> - <Compile Include="GUI\F_ModSplit.Designer.vb"> - <DependentUpon>F_ModSplit.vb</DependentUpon> - </Compile> - <Compile Include="GUI\F_ModSplit.vb"> - <SubType>Form</SubType> - </Compile> <Compile Include="cFile V3.vb" /> <Compile Include="VECTO_Global.vb" /> <Compile Include="VECTO_Types.vb" /> <Compile Include="M_SOC_Iter.vb" /> <Compile Include="cRegression.vb" /> - <Compile Include="ADVANCE\cADVANCE.vb" /> <Compile Include="GUI\GUI_Subs.vb" /> <Compile Include="GUI\F_VEH.Designer.vb"> <DependentUpon>F_VEH.vb</DependentUpon> @@ -241,18 +227,6 @@ <Compile Include="GUI\F_Options.vb"> <SubType>Form</SubType> </Compile> - <Compile Include="GUI\F_TEM_Creator.Designer.vb"> - <DependentUpon>F_TEM_Creator.vb</DependentUpon> - </Compile> - <Compile Include="GUI\F_TEM_Creator.vb"> - <SubType>Form</SubType> - </Compile> - <Compile Include="GUI\F_ADV.Designer.vb"> - <DependentUpon>F_ADV.vb</DependentUpon> - </Compile> - <Compile Include="GUI\F_ADV.vb"> - <SubType>Form</SubType> - </Compile> <Compile Include="GUI\F_AboutBox.Designer.vb"> <DependentUpon>F_AboutBox.vb</DependentUpon> </Compile> @@ -305,10 +279,6 @@ <EmbeddedResource Include="GUI\F_Welcome.resx"> <DependentUpon>F_Welcome.vb</DependentUpon> </EmbeddedResource> - <EmbeddedResource Include="GUI\F_ADVfzp.resx"> - <SubType>Designer</SubType> - <DependentUpon>F_ADVfzp.vb</DependentUpon> - </EmbeddedResource> <EmbeddedResource Include="GUI\F_ENG.resx"> <DependentUpon>F_ENG.vb</DependentUpon> </EmbeddedResource> @@ -323,10 +293,6 @@ <SubType>Designer</SubType> <DependentUpon>F_GEN.vb</DependentUpon> </EmbeddedResource> - <EmbeddedResource Include="GUI\F_ModSplit.resx"> - <SubType>Designer</SubType> - <DependentUpon>F_ModSplit.vb</DependentUpon> - </EmbeddedResource> <EmbeddedResource Include="GUI\F_ShutDown.resx"> <SubType>Designer</SubType> <DependentUpon>F_ShutDown.vb</DependentUpon> @@ -342,14 +308,6 @@ <SubType>Designer</SubType> <DependentUpon>F_Options.vb</DependentUpon> </EmbeddedResource> - <EmbeddedResource Include="GUI\F_TEM_Creator.resx"> - <SubType>Designer</SubType> - <DependentUpon>F_TEM_Creator.vb</DependentUpon> - </EmbeddedResource> - <EmbeddedResource Include="GUI\F_ADV.resx"> - <SubType>Designer</SubType> - <DependentUpon>F_ADV.vb</DependentUpon> - </EmbeddedResource> <EmbeddedResource Include="GUI\F_AboutBox.resx"> <SubType>Designer</SubType> <DependentUpon>F_AboutBox.vb</DependentUpon> diff --git a/VECTO/VECTO_Global.vb b/VECTO/VECTO_Global.vb index 635c8c8c1e..1384392d94 100644 --- a/VECTO/VECTO_Global.vb +++ b/VECTO/VECTO_Global.vb @@ -38,7 +38,6 @@ Module VECTO_Global Public MODdata As cMOD Public TRS As cTRS Public EXS As cEXS - Public ADV As cADVANCE_V3 Public Lic As vectolic.cLicense Public ERG As cERG Public DEV As cDEV diff --git a/VECTO/VECTO_Types.vb b/VECTO/VECTO_Types.vb index 84acf3a6c3..30770798ca 100644 --- a/VECTO/VECTO_Types.vb +++ b/VECTO/VECTO_Types.vb @@ -1,7 +1,6 @@ Public Enum tPHEMmode As Short ModeSTANDARD = 0 ModeBATCH = 1 - ModeADVANCE = 2 End Enum Public Enum tCalcMode As Short diff --git a/VECTO/cDEV.vb b/VECTO/cDEV.vb index 3614b4e28f..48bc7e403c 100644 --- a/VECTO/cDEV.vb +++ b/VECTO/cDEV.vb @@ -193,11 +193,6 @@ Public Class cDEV Public Function ShowAddOptions() As String F_MAINForm.GrbxTest.Visible = True - F_MAINForm.ADVEditorToolStripMenuItem1.Visible = True - F_MAINForm.CreateTEMFileToolStripMenuItem.Visible = True - F_MAINForm.SplitMODFilesToolStripMenuItem.Visible = True - F_MAINForm.ToolStripSeparator4.Visible = True - Return ("done") End Function diff --git a/VECTO/cERG.vb b/VECTO/cERG.vb index 09d154b024..4c39eb0dae 100644 --- a/VECTO/cERG.vb +++ b/VECTO/cERG.vb @@ -14,316 +14,6 @@ Class cERG ERGpath = "" End Sub - Public Function ErgEntryInit() As Boolean - Dim GENs As New List(Of String) - Dim str As String - Dim str1 As String - Dim iGEN As Integer - Dim ADV0 As cADV - Dim file As New cFile_V3 - Dim path0 As String - Dim GEN0 As cGEN - Dim MAP0 As cMAP - Dim ENG0 As cENG - Dim Em0 As cEmComp - Dim HEVorEVdone As Boolean - Dim EVdone As Boolean - Dim EngOnly As Boolean - Dim NonEngOnly As Boolean - Dim ErgEntry As cErgEntry - Dim CylceKin As cCycleKin - Dim i1 As Integer - Dim i2 As Integer - Dim iDim As Integer - Dim DRI0 As cDRI - Dim MsgSrc As String - - MsgSrc = "SUMALL/Init" - - ErgEntries = New Dictionary(Of String, cErgEntry) - ErgEntryList = New List(Of String) - - - '********************** GEN-Liste raussuchen. Bei ADVANCE aus Flotte sonst aus Jobliste '********************** |@@| Select GEN-list for ADVANCE either from Fleet or from Job-list '********************** - If PHEMmode = tPHEMmode.ModeADVANCE Then - - ADV0 = New cADV - ADV0.FilePath = JobFile - - If Not ADV0.ReadFile Then - WorkerMsg(tMsgID.Err, "Can't read .adv file '" & JobFile & "' !", MsgSrc) - Return False - End If - - If Not file.OpenRead(ADV0.FLTpath) Then - WorkerMsg(tMsgID.Err, "Can't read .flt file '" & ADV0.FLTpath & "' !", MsgSrc) - Return False - End If - - path0 = fPATH(ADV0.FLTpath) - - Do While Not file.EndOfFile - str = file.ReadLine(1) - GENs.Add(fFileRepl(str, path0)) - Loop - - file.Close() - - iGEN = GENs.Count - 1 - - Else - - For Each str In JobFileList - GENs.Add(fFileRepl(str)) - Next - iGEN = GENs.Count - 1 - - End If - - - '********************** Create Erg-entries '********************** - EVdone = False - HEVorEVdone = False - EngOnly = False - NonEngOnly = False - - 'Vehicle type-independent - AddToErg("\\T", "time", "[s]") - AddToErg("\\Prated", "Prated", "[kW]") - - 'For each GEN-file check Mode and Map - For Each str In GENs - - GEN0 = New cGEN - - GEN0.FilePath = str - - Try - If Not GEN0.ReadFile Then - WorkerMsg(tMsgID.Err, "Can't read .gen file '" & str & "' !", MsgSrc) - Return False - End If - Catch ex As Exception - WorkerMsg(tMsgID.Err, "File read error! (" & str & ")", MsgSrc) - Return False - End Try - - If GEN0.VehMode = tVehMode.EngineOnly Then - - If Not EngOnly Then - - 'nothing... - - EngOnly = True - - End If - - Else - - If Not NonEngOnly Then - - AddToErg("\\S", "distance", "[km]") - AddToErg("\\V", "speed", "[km/h]") - AddToErg("\\G", "∆altitude", "[m]") - - NonEngOnly = True - - End If - - 'Auxiliary energy consumption - If GEN0.AuxDef Then - For Each str1 In GEN0.AuxPaths.Keys - AddToErg("\\Eaux_" & UCase(str1), "Eaux_" & str1, "[kWh]") - Next - End If - - End If - - - 'Electric-Vehicle / Hybrid - If GEN0.VehMode = tVehMode.EV Or GEN0.VehMode = tVehMode.HEV Then - - 'EV & HEV - If Not HEVorEVdone Then - - AddToErg("\\PeEM+", "PeEM+", "[kW]") - AddToErg("\\PeBat+", "PeBat+", "[kW]") - AddToErg("\\PiBat+", "PiBat+", "[kW]") - AddToErg("\\PeEM-", "PeEM-", "[kW]") - AddToErg("\\PeBat-", "PeBat-", "[kW]") - AddToErg("\\PiBat-", "PiBat-", "[kW]") - AddToErg("\\EiBat+", "EiBat+", "[kWh]") - AddToErg("\\EiBat-", "EiBat-", "[kWh]") - AddToErg("\\EtaEM", "EtaEM", "[%]") - AddToErg("\\EtaBat", "EtaBat", "[%]") - AddToErg("\\∆SOC", "∆SOC", "[%]") - - HEVorEVdone = True - - End If - - 'Only EV: - If GEN0.VehMode = tVehMode.EV And Not EVdone Then - - AddToErg("\\EC", "EC", "[kWh/km]") - - EVdone = True - - End If - - - End If - - - 'Conventional / Hybrid (Everything except EV) - If GEN0.VehMode <> tVehMode.EV Then - - 'Conventional vehicles ... - 'AddToErg("\\n_norm", "n_norm", "[-]") - 'AddToErg("\\Pe_norm", "Pe_norm", "[-]") - AddToErg("\\Ppos", "Ppos", "[-]") - AddToErg("\\Pneg", "Pneg", "[-]") - - If GEN0.CreateMap Then - - 'From the measured data - DRI0 = New cDRI - DRI0.FilePath = GEN0.CycleFiles(0).FullPath - - Try - If Not DRI0.ReadFile Then Return False - Catch ex As Exception - WorkerMsg(tMsgID.Err, "File read error! (" & GEN0.CycleFiles(0).FullPath & ")", MsgSrc) - Return False - End Try - - For Each Em0 In DRI0.EmComponents.Values - - If Em0.WriteOutput Then - - 'Dump x/h if in ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible - If Em0.NormID = tEmNorm.x Or GEN0.VehMode = tVehMode.EngineOnly Or PHEMmode = tPHEMmode.ModeADVANCE Then - AddToErg(Em0.IDstring, Em0.Name, Em0.Unit, False) - Else - AddToErg(Em0.IDstring, Em0.Name, "[" & Em0.RawUnit & "/km]", True) - End If - - End If - - Next - - AddToErg(sKey.MAP.Extrapol, fMapCompName(tMapComp.Extrapol), "[-]") - - Else - - 'From the Engine-Map - ENG0 = New cENG - ENG0.FilePath = GEN0.PathENG - - Try - If Not ENG0.ReadFile Then Return False - Catch ex As Exception - WorkerMsg(tMsgID.Err, "File read error! (" & GEN0.PathENG & ")", MsgSrc) - Return False - End Try - - MAP0 = New cMAP(GEN0.PKWja) - MAP0.FilePath = ENG0.PathMAP - - Try - If Not MAP0.ReadFile(False) Then Return False 'Fehlermeldungen werden auch bei "MsgOutput = False" ausgegeben - Catch ex As Exception - WorkerMsg(tMsgID.Err, "File read error! (" & ENG0.PathMAP & ")", MsgSrc) - Return False - End Try - - - For Each str1 In MAP0.EmList - - Em0 = MAP0.EmComponents(str1) - - If Em0.WriteOutput Then - - 'Dump x/h if ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible - If Em0.NormID = tEmNorm.x Or GEN0.VehMode = tVehMode.EngineOnly Or PHEMmode = tPHEMmode.ModeADVANCE Then - AddToErg(Em0.IDstring, Em0.Name, Em0.Unit, False) - Else - AddToErg(Em0.IDstring, Em0.Name, "[" & Em0.RawUnit & "/km]", True) - End If - - End If - - Next - - End If - - End If - - Next - - - If EngOnly Then - - 'currently nothing - - End If - - If NonEngOnly Then - - 'Vehicle-related fields - AddToErg("\\Pbrake", "Pbrake", "[-]") - AddToErg("\\EposICE", "EposICE", "[kWh]") - AddToErg("\\EnegICE", "EnegICE", "[kWh]") - AddToErg("\\Eair", "Eair", "[kWh]") - AddToErg("\\Eroll", "Eroll", "[kWh]") - AddToErg("\\Egrad", "Egrad", "[kWh]") - AddToErg("\\Eacc", "Eacc", "[kWh]") - AddToErg("\\Eaux", "Eaux", "[kWh]") - AddToErg("\\Ebrake", "Ebrake", "[kWh]") - AddToErg("\\Etransm", "Etransm", "[kWh]") - AddToErg("\\Mass", "Mass", "[kg]") - AddToErg("\\Loading", "Loading", "[kg]") - - 'CylceKin - CylceKin = New cCycleKin - For Each ErgEntry In CylceKin.ErgEntries - AddToErg("\\" & ErgEntry.Head, ErgEntry.Head, ErgEntry.Unit) - Next - - End If - - 'ErgListe sortieren damit g/km und g/h nebeneinander liegen |@@| Sort ErgListe so that g/km and g/h are side-by-side - iDim = ErgEntryList.Count - 1 - - For i1 = 0 To iDim - 1 - str = ErgEntries(ErgEntryList(i1)).Head - For i2 = i1 + 1 To iDim - If ErgEntries(ErgEntryList(i2)).Head = str Then - ErgEntryList.Insert(i1 + 1, ErgEntryList(i2)) - ErgEntryList.RemoveAt(i2 + 1) - End If - Next - Next - - 'Sort Aux - For i1 = 0 To iDim - 1 - str = ErgEntries(ErgEntryList(i1)).Head - If str.Length > 4 AndAlso Left(str, 4) = "Eaux" Then - For i2 = i1 + 1 To iDim - If ErgEntries(ErgEntryList(i2)).Head.Length > 4 AndAlso Left(ErgEntries(ErgEntryList(i2)).Head, 4) = "Eaux" Then - ErgEntryList.Insert(i1 + 1, ErgEntryList(i2)) - ErgEntryList.RemoveAt(i2 + 1) - End If - Next - End If - Next - - - - Return True - - End Function - Public Function ErgHead() As String Dim s As New System.Text.StringBuilder Dim key As String @@ -546,13 +236,13 @@ Class cERG If Em0.WriteOutput Then If FCerror Then - If Em0.NormID = tEmNorm.x Or GEN.VehMode = tVehMode.EngineOnly Or PHEMmode = tPHEMmode.ModeADVANCE Then + If Em0.NormID = tEmNorm.x Or GEN.VehMode = tVehMode.EngineOnly Then ErgEntries(Em0.IDstring).ValueString = "ERROR" Else ErgEntries(Em0.IDstring & "_km").ValueString = "ERROR" End If Else - If Em0.NormID = tEmNorm.x Or GEN.VehMode = tVehMode.EngineOnly Or PHEMmode = tPHEMmode.ModeADVANCE Then + If Em0.NormID = tEmNorm.x Or GEN.VehMode = tVehMode.EngineOnly Then ErgEntries(Em0.IDstring).ValueString = Em0.FinalAvg.ToString Else ErgEntries(Em0.IDstring & "_km").ValueString = (Em0.FinalAvg / Vquer).ToString @@ -775,7 +465,27 @@ Class cERG End Sub - Public Function Init(ByVal GenFile As String) As Boolean + Public Function Init(ByVal GenFile As String) As Boolean + Dim GENs As New List(Of String) + Dim str As String + Dim str1 As String + Dim iGEN As Integer + Dim file As New cFile_V3 + Dim GEN0 As cGEN + Dim MAP0 As cMAP + Dim ENG0 As cENG + Dim Em0 As cEmComp + Dim HEVorEVdone As Boolean + Dim EVdone As Boolean + Dim EngOnly As Boolean + Dim NonEngOnly As Boolean + Dim ErgEntry As cErgEntry + Dim CylceKin As cCycleKin + Dim i1 As Integer + Dim i2 As Integer + Dim iDim As Integer + Dim DRI0 As cDRI + Dim MsgSrc As String MsgSrc = "SUMALL/Init" @@ -823,6 +533,254 @@ Class cERG Lic.FileSigning.AddFile(ERGpath) + ErgEntries = New Dictionary(Of String, cErgEntry) + ErgEntryList = New List(Of String) + + + '********************** GEN-Liste raussuchen. Bei ADVANCE aus Flotte sonst aus Jobliste '********************** |@@| Select GEN-list for ADVANCE either from Fleet or from Job-list '********************** + For Each str In JobFileList + GENs.Add(fFileRepl(str)) + Next + iGEN = GENs.Count - 1 + + + '********************** Create Erg-entries '********************** + EVdone = False + HEVorEVdone = False + EngOnly = False + NonEngOnly = False + + 'Vehicle type-independent + AddToErg("\\T", "time", "[s]") + AddToErg("\\Prated", "Prated", "[kW]") + + 'For each GEN-file check Mode and Map + For Each str In GENs + + GEN0 = New cGEN + + GEN0.FilePath = str + + Try + If Not GEN0.ReadFile Then + WorkerMsg(tMsgID.Err, "Can't read .gen file '" & str & "' !", MsgSrc) + Return False + End If + Catch ex As Exception + WorkerMsg(tMsgID.Err, "File read error! (" & str & ")", MsgSrc) + Return False + End Try + + If GEN0.VehMode = tVehMode.EngineOnly Then + + If Not EngOnly Then + + 'nothing... + + EngOnly = True + + End If + + Else + + If Not NonEngOnly Then + + AddToErg("\\S", "distance", "[km]") + AddToErg("\\V", "speed", "[km/h]") + AddToErg("\\G", "∆altitude", "[m]") + + NonEngOnly = True + + End If + + 'Auxiliary energy consumption + If GEN0.AuxDef Then + For Each str1 In GEN0.AuxPaths.Keys + AddToErg("\\Eaux_" & UCase(str1), "Eaux_" & str1, "[kWh]") + Next + End If + + End If + + + 'Electric-Vehicle / Hybrid + If GEN0.VehMode = tVehMode.EV Or GEN0.VehMode = tVehMode.HEV Then + + 'EV & HEV + If Not HEVorEVdone Then + + AddToErg("\\PeEM+", "PeEM+", "[kW]") + AddToErg("\\PeBat+", "PeBat+", "[kW]") + AddToErg("\\PiBat+", "PiBat+", "[kW]") + AddToErg("\\PeEM-", "PeEM-", "[kW]") + AddToErg("\\PeBat-", "PeBat-", "[kW]") + AddToErg("\\PiBat-", "PiBat-", "[kW]") + AddToErg("\\EiBat+", "EiBat+", "[kWh]") + AddToErg("\\EiBat-", "EiBat-", "[kWh]") + AddToErg("\\EtaEM", "EtaEM", "[%]") + AddToErg("\\EtaBat", "EtaBat", "[%]") + AddToErg("\\∆SOC", "∆SOC", "[%]") + + HEVorEVdone = True + + End If + + 'Only EV: + If GEN0.VehMode = tVehMode.EV And Not EVdone Then + + AddToErg("\\EC", "EC", "[kWh/km]") + + EVdone = True + + End If + + + End If + + + 'Conventional / Hybrid (Everything except EV) + If GEN0.VehMode <> tVehMode.EV Then + + 'Conventional vehicles ... + 'AddToErg("\\n_norm", "n_norm", "[-]") + 'AddToErg("\\Pe_norm", "Pe_norm", "[-]") + AddToErg("\\Ppos", "Ppos", "[-]") + AddToErg("\\Pneg", "Pneg", "[-]") + + If GEN0.CreateMap Then + + 'From the measured data + DRI0 = New cDRI + DRI0.FilePath = GEN0.CycleFiles(0).FullPath + + Try + If Not DRI0.ReadFile Then Return False + Catch ex As Exception + WorkerMsg(tMsgID.Err, "File read error! (" & GEN0.CycleFiles(0).FullPath & ")", MsgSrc) + Return False + End Try + + For Each Em0 In DRI0.EmComponents.Values + + If Em0.WriteOutput Then + + 'Dump x/h if in ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible + If Em0.NormID = tEmNorm.x Or GEN0.VehMode = tVehMode.EngineOnly Then + AddToErg(Em0.IDstring, Em0.Name, Em0.Unit, False) + Else + AddToErg(Em0.IDstring, Em0.Name, "[" & Em0.RawUnit & "/km]", True) + End If + + End If + + Next + + AddToErg(sKey.MAP.Extrapol, fMapCompName(tMapComp.Extrapol), "[-]") + + Else + + 'From the Engine-Map + ENG0 = New cENG + ENG0.FilePath = GEN0.PathENG + + Try + If Not ENG0.ReadFile Then Return False + Catch ex As Exception + WorkerMsg(tMsgID.Err, "File read error! (" & GEN0.PathENG & ")", MsgSrc) + Return False + End Try + + MAP0 = New cMAP(GEN0.PKWja) + MAP0.FilePath = ENG0.PathMAP + + Try + If Not MAP0.ReadFile(False) Then Return False 'Fehlermeldungen werden auch bei "MsgOutput = False" ausgegeben + Catch ex As Exception + WorkerMsg(tMsgID.Err, "File read error! (" & ENG0.PathMAP & ")", MsgSrc) + Return False + End Try + + + For Each str1 In MAP0.EmList + + Em0 = MAP0.EmComponents(str1) + + If Em0.WriteOutput Then + + 'Dump x/h if ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible + If Em0.NormID = tEmNorm.x Or GEN0.VehMode = tVehMode.EngineOnly Then + AddToErg(Em0.IDstring, Em0.Name, Em0.Unit, False) + Else + AddToErg(Em0.IDstring, Em0.Name, "[" & Em0.RawUnit & "/km]", True) + End If + + End If + + Next + + End If + + End If + + Next + + + If EngOnly Then + + 'currently nothing + + End If + + If NonEngOnly Then + + 'Vehicle-related fields + AddToErg("\\Pbrake", "Pbrake", "[-]") + AddToErg("\\EposICE", "EposICE", "[kWh]") + AddToErg("\\EnegICE", "EnegICE", "[kWh]") + AddToErg("\\Eair", "Eair", "[kWh]") + AddToErg("\\Eroll", "Eroll", "[kWh]") + AddToErg("\\Egrad", "Egrad", "[kWh]") + AddToErg("\\Eacc", "Eacc", "[kWh]") + AddToErg("\\Eaux", "Eaux", "[kWh]") + AddToErg("\\Ebrake", "Ebrake", "[kWh]") + AddToErg("\\Etransm", "Etransm", "[kWh]") + AddToErg("\\Mass", "Mass", "[kg]") + AddToErg("\\Loading", "Loading", "[kg]") + + 'CylceKin + CylceKin = New cCycleKin + For Each ErgEntry In CylceKin.ErgEntries + AddToErg("\\" & ErgEntry.Head, ErgEntry.Head, ErgEntry.Unit) + Next + + End If + + 'ErgListe sortieren damit g/km und g/h nebeneinander liegen |@@| Sort ErgListe so that g/km and g/h are side-by-side + iDim = ErgEntryList.Count - 1 + + For i1 = 0 To iDim - 1 + str = ErgEntries(ErgEntryList(i1)).Head + For i2 = i1 + 1 To iDim + If ErgEntries(ErgEntryList(i2)).Head = str Then + ErgEntryList.Insert(i1 + 1, ErgEntryList(i2)) + ErgEntryList.RemoveAt(i2 + 1) + End If + Next + Next + + 'Sort Aux + For i1 = 0 To iDim - 1 + str = ErgEntries(ErgEntryList(i1)).Head + If str.Length > 4 AndAlso Left(str, 4) = "Eaux" Then + For i2 = i1 + 1 To iDim + If ErgEntries(ErgEntryList(i2)).Head.Length > 4 AndAlso Left(ErgEntries(ErgEntryList(i2)).Head, 4) = "Eaux" Then + ErgEntryList.Insert(i1 + 1, ErgEntryList(i2)) + ErgEntryList.RemoveAt(i2 + 1) + End If + Next + End If + Next + Return True End Function -- GitLab