14 Commits

Author SHA1 Message Date
Emmanuele Sassi 3f11963c4f - migliorata visualizzazione finestra restart
- aggiornata versione
2025-08-06 11:18:01 +02:00
Emmanuele Sassi e9d71da793 - cambiato nome da FiveLakesUI a PluginUI 2025-07-08 16:18:03 +02:00
Emmanuele Sassi 7c3facdab9 Merge branch 'develop' of https://gitlab.steamware.net/egalware-supervisor/plugin/effector.plugin.fivelakes into develop 2025-06-16 14:54:55 +02:00
Emmanuele Sassi 070f0afd21 - aggiunto nome macchina in messaggi di log alla ripartenza 2025-06-16 14:54:50 +02:00
Dario Sassi 497d367d8c Aggiornata versione a 2.7f1 2025-06-12 20:32:58 +02:00
Emmanuele Sassi 6ab6be0703 - aggiunta di log
- correzioni varie
2025-06-12 09:24:28 +02:00
Emmanuele Sassi 622a6da893 - migliorata gestione attivazione csv out
- gestita cartella ultimo csv aperto
- messaggi in inglese
- cambiato aggiornamento stato porta in simulazione
- correzione in Restart nCircId invece di nId e condizioni di riordinamento su porte da sistemare
- corretta gestione tempi di produzione su JsonLuaDoor
2025-04-07 14:53:08 +02:00
Emmanuele Sassi 27f1b9b99d - aggiunta funzione OpenProduction
- migliorata gestione conversione date in string con convertitori da libreria
- correzione in PlgGetNextDoor to manage also folders for ddf
- in modalita' debug se reset azzero stato macchina
- se in reset non aggiorno stati porte
- in RestartWnd aggiunta lista porte con stato da sistemare e gestito bottone EmptyMachine
- corretta scrittura date ed altri parametri su Json
2025-02-26 16:19:46 +01:00
Emmanuele Sassi bb8c88cfbc - salvata posizione in ini per RestartWnd
- aggiunta EgtWPFBaseLib
- modificata grafica pagina RestartWnd
2025-02-19 21:16:25 +01:00
Emmanuele Sassi 5c041a28b3 - pulizia file spostati in Lib 2025-02-17 18:17:32 +01:00
Emmanuele Sassi 696682745a - aggiunta funzione che mostra messaggio di errore da script lua 2025-02-11 19:14:58 +01:00
Dario Sassi 58d209aab7 Effector.Plugin.FiveLakes :
- sistemazione visibilità pagina macchina.
2025-02-07 18:41:28 +01:00
Emmanuele Sassi 44815f86fa - aggiunta gestione ddt con parametri e swing
- aggiunto timer per csv output
- implementata gestione calcolo porte uguali una sola volta
- gestita barra caricamento calcolo porta prima di mandarlo a macchina
- gestita barra di caricamento durante verifica porte
2025-01-23 17:29:46 +01:00
Emmanuele Sassi 2079fe7707 - modifiche per allineamento a versione DoorArreda
- miglioramento grafico
2025-01-20 17:27:45 +01:00
51 changed files with 2690 additions and 1703 deletions
+14
View File
@@ -9,6 +9,8 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.Interface",
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.FiveLakes", "Effector.Plugin.FiveLakes\Effector.Plugin.FiveLakes.vbproj", "{7C77F537-8235-40AB-B24A-4E71CFB96D2C}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.Lib", "..\Effector.Plugin.Lib\Effector.Plugin.Lib\Effector.Plugin.Lib.vbproj", "{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -55,6 +57,18 @@ Global
{7C77F537-8235-40AB-B24A-4E71CFB96D2C}.Release|x64.Build.0 = Release|Any CPU
{7C77F537-8235-40AB-B24A-4E71CFB96D2C}.Release|x86.ActiveCfg = Release|Any CPU
{7C77F537-8235-40AB-B24A-4E71CFB96D2C}.Release|x86.Build.0 = Release|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|x64.ActiveCfg = Debug|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|x64.Build.0 = Debug|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|x86.ActiveCfg = Debug|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|x86.Build.0 = Debug|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|Any CPU.Build.0 = Release|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|x64.ActiveCfg = Release|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|x64.Build.0 = Release|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|x86.ActiveCfg = Release|Any CPU
{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -15,10 +15,19 @@ Module ConstIni
Public Const INI_FILE_NAME As String = "Effector.Plugin.FiveLakes.ini"
Public Const S_GENERAL As String = "General"
Public Const K_CAMEXEPATH As String = "CAMExePath"
Public Const K_DOORCREATOREXEPATH As String = "DoorCreatorExePath"
Public Const K_BACKUPDIR As String = "BackupDir"
Public Const K_RESOURCESDIR As String = "ResourcesDir"
Public Const K_DDFDIR As String = "DDFDir"
Public Const K_DDTDIR As String = "DDTDir"
Public Const K_GENDDFDIR As String = "GenDDFDir"
Public Const K_CSV As String = "CSV"
Public Const K_ISCSVOUTPUTENABLED As String = "IsCSVOutputEnabled"
Public Const K_CSVOUTPUTPATH As String = "CSVOutputPath"
Public Const K_RESTART_WINPLACE As String = "RestartWinPlace"
Public Const K_LASTPRODUCTIONDIR As String = "LastProductionDir"
Public Const K_LASTCSVDIR As String = "LastCsvDir"
Public Const S_CSV As String = "CSV"
Public Const K_DDFNAME As String = "DDFName"
@@ -26,8 +35,20 @@ Module ConstIni
Public Const K_HEIGHT As String = "Height"
Public Const K_WIDTH As String = "Width"
Public Const K_THICKNESS As String = "Thickness"
Public Const K_SWING As String = "Swing"
Public Const K_STATE As String = "State"
Public Const K_PROGRAMSENT As String = "ProgramSent"
Public Const K_PROGRAMSTART As String = "ProgramStart"
Public Const K_PROGRAMEND As String = "ProgramEnd"
Public Const K_MANUALADDEDDOORNAME As String = "ManualAddedDoorName"
Public Const K_DELIMITER As String = "Delimiter"
Public Const S_PRODUCTION As String = "Production"
Public Const K_CUSTOMER As String = "Customer"
Public Const K_ORDER As String = "Order"
Public Const K_SEQUENCE As String = "Sequence"
Public Const K_TICKET As String = "Ticket"
Public Const S_DEBUG As String = "Debug"
Public Const K_VARIABLELIST As String = "VariableList"
Public Const K_VARIABLEONDRAW As String = "VariableOnDraw"
@@ -1,103 +1,315 @@
<Grid x:Class="DoorListPageV"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Effector.Plugin.FiveLakes">
<Grid.Resources>
<local:StateToSelColorConverter x:Key="StateToSelColorConverter"/>
<local:DDTListToBooleanConverter x:Key="DDTListToBooleanConverter"/>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="3"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<Button Content="CSV"
ToolTip="Open CSV file"
Command="{Binding OpenCSV_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"/>
<Button Content="Skip Door"
ToolTip="Skip Door"
Command="{Binding SkipDoor_Command}"/>
<Button Content="↑"
ToolTip="Move Up"
Command="{Binding MoveUp_Command}"/>
<Button Content="↓"
ToolTip="Move Down"
Command="{Binding MoveDown_Command}"/>
<Button Content="Delete"
ToolTip="Delete"
Command="{Binding Delete_Command}"/>
<Button Content="Delete All"
ToolTip="Delete All"
Command="{Binding DeleteAll_Command}"/>
<Button Content="Produce"
ToolTip="Send to production"
Command="{Binding Produce_Command}"/>
<Button Content="Produce All"
ToolTip="Send all to production"
Command="{Binding ProduceAll_Command}"/>
<Button Content="Reset Production Queue"
ToolTip="Take all the door ready for production back to Verify state"
Command="{Binding ResetProductionQueue_Command}"/>
<Button Content="Verify"
ToolTip="Verify all the doors that are in state Not Verified"
Command="{Binding Verify_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"/>
</StackPanel>
<DataGrid Grid.Row="1"
<Border BorderThickness="0"
Padding="3"
BorderBrush="Transparent"
Background="{StaticResource Effector_DarkBlue}">
<StackPanel Orientation="Horizontal"
Background="{StaticResource Effector_DarkBlue}">
<Button ToolTip="Open CSV file"
Command="{Binding OpenCSV_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/OpenCsv.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Delete CSV file"
Command="{Binding DeleteCSV_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/DeleteCsv.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Delete All CSV files"
Command="{Binding DeleteAll_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/DeleteAll.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Send selected door to production"
Command="{Binding Produce_Command}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/Produce.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Send all to production"
Command="{Binding ProduceAll_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/ProduceAll.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Take all the door ready for production back to Verify state"
Command="{Binding ResetProductionQueue_Command}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/ResetProduction.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Move Up"
Command="{Binding MoveUp_Command}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/MoveUp.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Move Down"
Command="{Binding MoveDown_Command}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/MoveDown.png"
Style="{StaticResource Button_Image}"/>
</Button>
<!--<Button ToolTip="Skip selected door, which will not be sent to production"
Command="{Binding SkipDoor_Command}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/SkipDoor.png"
Style="{StaticResource Button_Image}"/>
</Button>-->
<Button ToolTip="Mark the selected door as not to be produced"
Command="{Binding NotProduceDoor_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/NotProduce.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Add a new door to the list"
Command="{Binding AddDoor_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/Add.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Copy the selected door"
Command="{Binding CopyDoor_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/Copy.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Multiple copy the selected door"
Command="{Binding MultipleCopyDoor_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/MultipleCopy.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Delete door"
Command="{Binding Delete_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/Delete.png"
Style="{StaticResource Button_Image}"/>
</Button>
<Button ToolTip="Verify all the doors that are in state Not Verified"
Command="{Binding Verify_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/Verify.png"
Style="{StaticResource Button_Image}"/>
</Button>
<!--<Button ToolTip="Open production CSV file"
Command="{Binding OpenProduction_Command}"
IsEnabled="{Binding bExecButton_IsEnabled}"
Style="{StaticResource DoorList_Button}">
<Image Source="../Resources/DoorListPage/OpenProduction.png"
Style="{StaticResource Button_Image}"/>
</Button>-->
<TextBlock Text="{Binding sExecPercentage}"
VerticalAlignment="Center"
Margin="10,0,5,0"
Visibility="{Binding ExecPercentage_Visibility, Mode=OneWay}"/>
<ProgressBar Minimum="0"
Maximum="100"
Value="{Binding dExecPercentage, Mode=OneWay}"
Height="15"
Width="100"
Margin="5,0,0,0"
Visibility="{Binding ExecPercentage_Visibility}"/>
</StackPanel>
</Border>
<FrameworkElement x:Name="dummyElement" Visibility="Collapsed"/>
<DataGrid Grid.Row="2"
ItemsSource="{Binding DoorList}"
SelectedItem="{Binding SelDoor}"
AutoGenerateColumns="False"
CanUserDeleteRows="False"
CanUserResizeRows="False"
SelectionMode="Single"
SelectionUnit="FullRow"
CanUserSortColumns="False"
SelectionMode="Single">
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
HorizontalGridLinesBrush="Transparent"
VerticalGridLinesBrush="Transparent"
ColumnHeaderHeight="32"
HeadersVisibility="Column"
FontSize="12"
FontFamily="/Resources/Fonts/#Roboto"
FontWeight="Regular"
RowHeight="32"
BorderThickness="0">
<DataGrid.Resources>
<DataTemplate x:Key="DDTTemplate">
<ComboBox IsEditable="True"
Text="{Binding DataContext.sDDFName, RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}, UpdateSourceTrigger=LostFocus}"
ItemsSource="{Binding DataContext.DDTList, RelativeSource={RelativeSource AncestorType={x:Type local:DoorListPageV}}}"
Style="{StaticResource DataGridTemplateColumn_ComboBox}"/>
</DataTemplate>
<DataTemplate x:Key="NoDDTTemplate">
<TextBox Text="{Binding DataContext.sDDFName, RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}}"
Style="{StaticResource DataGridTextColumn_TextBox}"/>
</DataTemplate>
<Style x:Key="DDTContentControl" TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.DDTList, Source={x:Reference dummyElement}, Converter={StaticResource DDTListToBooleanConverter}}"
Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource NoDDTTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=DataContext.DDTList, Source={x:Reference dummyElement}, Converter={StaticResource DDTListToBooleanConverter}}"
Value="False">
<Setter Property="ContentTemplate" Value="{StaticResource DDTTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="{StaticResource Effector_DarkBlue}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="FontSize" Value="15"/>
<Setter Property="Padding" Value="10,0,10,0"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Header=""
<DataGridTextColumn Header="ID"
Binding="{Binding nId}"
Width="Auto"/>
<DataGridTextColumn Header="Line"
Binding="{Binding nCSVLine}"
Width="Auto"/>
<DataGridTextColumn Header="DDF"
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<!--<DataGridTextColumn Header="DDF File Name"
Binding="{Binding sDDFName}"
Width="Auto"/>
<!--<DataGridTextColumn Header="Quantity"
Binding="{Binding nQuantity}"
Width="Auto"/>-->
<DataGridTextColumn Header="State"
Binding="{Binding nState}"
Width="Auto"/>
<DataGridTextColumn Header="Height"
Binding="{Binding dHeight}"
Width="Auto"/>
Width="1*"
MinWidth="100"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>-->
<DataGridTemplateColumn Header="DDF/DDT File Name"
Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding sDDFName}"
Style="{StaticResource DataGridTextColumn_TextBlock}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<!--<TextBox Text="{Binding sDDFName}"
Style="{StaticResource DataGridTextColumn_TextBlock}"/>-->
<ContentControl Style="{StaticResource DDTContentControl}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Width"
Binding="{Binding dWidth}"
Width="Auto"/>
Width="Auto"
IsReadOnly="{Binding Path=DataContext.DDTList, Source={x:Reference dummyElement}, Converter={StaticResource DDTListToBooleanConverter}}"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="Height"
Binding="{Binding dHeight}"
Width="Auto"
IsReadOnly="{Binding Path=DataContext.DDTList, Source={x:Reference dummyElement}, Converter={StaticResource DDTListToBooleanConverter}}"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="Thickness"
Binding="{Binding dThickness}"
Width="Auto"/>
<DataGridTextColumn Header="Csv"
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="State"
Binding="{Binding nState}"
Width="Auto"
IsReadOnly="{Binding Path=DataContext.DDTList, Source={x:Reference dummyElement}, Converter={StaticResource DDTListToBooleanConverter}}"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="CSV"
Binding="{Binding sCSVName}"
Width="Auto"/>
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip" Value="{Binding sCSVName}"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="CSV Line"
Binding="{Binding nCSVLine}"
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="Production State"
Binding="{Binding nProdState}"
Width="Auto"/>
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="Load Time"
Binding="{Binding sLoadTime}"
Width="Auto"/>
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="Machining 1 Start"
Binding="{Binding sMachining1Start}"
Width="Auto"/>
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="Machining 1 End"
Binding="{Binding sMachining1End}"
Width="Auto"/>
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="Machining 2 Start"
Binding="{Binding sMachining2Start}"
Width="Auto"/>
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="Machining 2 End"
Binding="{Binding sMachining2End}"
Width="Auto"/>
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
<DataGridTextColumn Header="Unload Time"
Binding="{Binding sUnloadTime}"
Width="Auto"/>
Width="Auto"
IsReadOnly="True"
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
</DataGrid.Columns>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style TargetType="DataGridRow" BasedOn="{StaticResource RowDataGrid_CustomHighLight}">
<Setter Property="Background" Value="{Binding Background}"/>
<Setter Property="BorderBrush" Value="{Binding nState, Converter={StaticResource StateToSelColorConverter}}" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
File diff suppressed because it is too large Load Diff
@@ -51,6 +51,12 @@
<Reference Include="Effector.Plugin.Interface">
<HintPath>..\..\Effector.Main\Effector.Plugin.Interface\bin\Debug\Effector.Plugin.Interface.dll</HintPath>
</Reference>
<Reference Include="Effector.Plugin.Lib">
<HintPath>..\..\Effector.Plugin.Lib\Effector.Plugin.Lib\bin\Debug\Effector.Plugin.Lib.dll</HintPath>
</Reference>
<Reference Include="EgwWPFBaseLib">
<HintPath>..\..\..\EgwWPFBaseLib\EgwWPFBaseLib\bin\Debug\EgwWPFBaseLib.dll</HintPath>
</Reference>
<Reference Include="KeraLua, Version=1.4.1.0, Culture=neutral, PublicKeyToken=6a194c04b9c89217, processorArchitecture=MSIL">
<HintPath>..\packages\KeraLua.1.4.1\lib\net46\KeraLua.dll</HintPath>
</Reference>
@@ -98,13 +104,10 @@
<DependentUpon>DoorListPageV.xaml</DependentUpon>
</Compile>
<Compile Include="DoorListPage\DoorListPageVM.vb" />
<Compile Include="ProcessManager\ProcessManagerV.xaml.vb">
<DependentUpon>ProcessManagerV.xaml</DependentUpon>
<Compile Include="PluginUI\PluginUIV.xaml.vb">
<DependentUpon>PluginUIV.xaml</DependentUpon>
</Compile>
<Compile Include="FiveLakesUI.xaml.vb">
<DependentUpon>FiveLakesUI.xaml</DependentUpon>
</Compile>
<Compile Include="FiveLakesUIVM.vb" />
<Compile Include="PluginUI\PluginUIVM.vb" />
<Compile Include="LUA\LuaManager.vb" />
<Compile Include="LUA\Lua_Aux.vb" />
<Compile Include="LUA\Lua_General.vb" />
@@ -116,7 +119,6 @@
<DependentUpon>MainMenuV.xaml</DependentUpon>
</Compile>
<Compile Include="MainMenu\MainMenuVM.vb" />
<Compile Include="ProcessManager\ProcessManagerVM.vb" />
<Compile Include="RestartWnd\RestartWndV.xaml.vb">
<DependentUpon>RestartWndV.xaml</DependentUpon>
</Compile>
@@ -141,15 +143,8 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="Utility\Command.vb" />
<Compile Include="Utility\ExecProcessManager.vb" />
<Compile Include="Utility\GenInterface.vb" />
<Compile Include="Utility\IdNameStruct.vb" />
<Compile Include="Utility\IniFile.vb" />
<Compile Include="Utility\JsonUtility.vb" />
<Compile Include="Utility\Map.vb" />
<Compile Include="Utility\StringConversion.vb" />
<Compile Include="Utility\VMBase.vb" />
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
@@ -160,17 +155,15 @@
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
<None Include="packages.config" />
<Resource Include="Resources\Fonts\Roboto-Light.ttf" />
<Resource Include="Resources\Fonts\Roboto-Regular.ttf" />
</ItemGroup>
<ItemGroup>
<Page Include="DoorListPage\DoorListPageV.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="ProcessManager\ProcessManagerV.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="FiveLakesUI.xaml">
<Page Include="PluginUI\PluginUIV.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
@@ -195,6 +188,33 @@
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\DoorListPage\Add.png" />
<Resource Include="Resources\DoorListPage\Copy.png" />
<Resource Include="Resources\DoorListPage\MultipleCopy.png" />
<Resource Include="Resources\DoorListPage\OpenCsv.png" />
<Resource Include="Resources\DoorListPage\Produce.png" />
<Resource Include="Resources\DoorListPage\ProduceAll.png" />
<Resource Include="Resources\DoorListPage\ResetProduction.png" />
<Resource Include="Resources\DoorListPage\SaveCsv.png" />
<Resource Include="Resources\DoorListPage\SkipDoor.png" />
<Resource Include="Resources\DoorListPage\Verify.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\DoorListPage\Delete.png" />
<Resource Include="Resources\DoorListPage\DeleteCsv.png" />
<Resource Include="Resources\DoorListPage\MoveDown.png" />
<Resource Include="Resources\DoorListPage\MoveUp.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\DoorListPage\NotProduce.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\DoorListPage\OpenProduction.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\DoorListPage\DeleteAll.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<PropertyGroup>
<PreBuildEvent>powershell.exe -ExecutionPolicy Unrestricted -NoProfile -NonInteractive -File $(ProjectDir)\pre-build.ps1 -ProjectDir $(ProjectDir) -ProjectPath $(ProjectPath)</PreBuildEvent>
+15 -2
View File
@@ -1,4 +1,6 @@
Imports KeraLua
Imports System.IO
Imports Effector.Plugin.Lib
Public Module Lua_General
@@ -11,6 +13,7 @@ Public Module Lua_General
Friend func_PlgGetNextDoor As LuaFunction = AddressOf Lua_PlgGetNextDoor
Friend func_PlgOpenRestartWnd As LuaFunction = AddressOf Lua_PlgOpenRestartWnd
Friend func_PlgMachineReset As LuaFunction = AddressOf Lua_PlgMachineReset
Friend func_PlgRestartMachineMessage As LuaFunction = AddressOf Lua_PlgRestartMachineMessage
Private Function Lua_PlgGetNumberFromIni(ByVal p As IntPtr) As Integer
Dim state = Lua.FromIntPtr(p)
@@ -108,8 +111,8 @@ Public Module Lua_General
If Not IsNothing(NextDoor) Then
' restituisco il risultato
LuaSetParam(state, NextDoor.nId)
' Dim sGenDDFName As String = Path.GetFileNameWithoutExtension(NextDoor.sDDFName) & "_" & NextDoor.nId & ".ddf"
LuaSetParam(state, NextDoor.sDDFName & "_" & NextDoor.nId)
LuaSetParam(state, If(Not String.IsNullOrWhiteSpace(Path.GetDirectoryName(NextDoor.sDDFName)), Path.GetDirectoryName(NextDoor.sDDFName) & "_", "") & Path.GetFileNameWithoutExtension(NextDoor.sDDFName) & "_" & NextDoor.nId & ".ddf")
'LuaSetParam(state, NextDoor.sDDFName & "_" & NextDoor.nId)
Return 2
End If
Return 0
@@ -139,6 +142,15 @@ Public Module Lua_General
Return 0
End Function
Private Function Lua_PlgRestartMachineMessage(ByVal p As IntPtr) As Integer
Dim state = Lua.FromIntPtr(p)
Dim nMachineIndex As Integer = 1
LuaGetParam(state, 1, nMachineIndex)
LuaClearStack(state)
MessageBox.Show("Error! Check log file for description." & Environment.NewLine & "When fixed reset and restart MainAuto on machine " & nMachineIndex)
Return 0
End Function
Friend Function LuaInstallGeneral(state As Lua) As Boolean
If IsNothing(state) Then Return False
state.Register("PlgGetNumberFromIni", func_PlgGetNumberFromIni)
@@ -150,6 +162,7 @@ Public Module Lua_General
state.Register("PlgGetNextDoor", func_PlgGetNextDoor)
state.Register("PlgOpenRestartWnd", func_PlgOpenRestartWnd)
state.Register("PlgMachineReset", func_PlgMachineReset)
state.Register("PlgRestartMachineMessage", func_PlgRestartMachineMessage)
Return True
End Function
@@ -10,6 +10,7 @@
<local:StringToVisibilityConverter x:Key="StringToVisibilityConverter"/>
<local:StringToMachineStateConverter x:Key="StringToMachineStateConverter"/>
<local:StringToDDFCalcStateConverter x:Key="StringToDDFCalcStateConverter"/>
<local:DDFCalcStateToVisibilityConverter x:Key="DDFCalcStateToVisibilityConverter"/>
<local:StringToNewDoorStateConverter x:Key="StringToNewDoorStateConverter"/>
<local:StringToBooleanConverter x:Key="StringToBooleanConverter"/>
<local:StringToBackgroundConverter x:Key="StringToBackgroundConverter"/>
@@ -49,7 +50,7 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid>
<Grid Visibility="{Binding MachineCommands_Visibility}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="20"/>
@@ -773,6 +774,17 @@
<TextBlock Text="{Binding DoorOnMachineArray[0].nId}"
Style="{StaticResource MachDrawVar_TextBlock}"/>
</Border>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<ProgressBar Grid.Row="1"
Value="{Binding dDdfCalcValue, Mode=OneWay}"
Height="20"
Maximum="100"
Visibility="{Binding nDDfCalcState, Converter={StaticResource DDFCalcStateToVisibilityConverter}}"/>
</Grid>
<Border Grid.Column="3"
Grid.Row="1"
Visibility="{Binding VariableList[1].sValue, Converter={StaticResource StringToVisibilityConverter}}"
@@ -6,6 +6,7 @@ Imports System.Windows.Threading
Imports Newtonsoft.Json.Linq
Imports Effector.Plugin.FiveLakes.Variable
Imports Effector.Plugin.Interface
Imports Effector.Plugin.Lib
Public Class MachinePageVM
Inherits VMBase
@@ -44,6 +45,13 @@ Public Class MachinePageVM
NotifyPropertyChanged(NameOf(nDDfCalcState))
End Sub
Private m_dDdfCalcValue As Double = 0
Public ReadOnly Property dDdfCalcValue As Double
Get
Return m_dDdfCalcValue
End Get
End Property
Private m_nNewDoorState As Integer = -1
Public ReadOnly Property nNewDoorState As Integer
Get
@@ -155,11 +163,15 @@ Public Class MachinePageVM
New Variable(Variable.VariableTypes.BOOLEAN, "@BF04", "901.4", 2),
New Variable(Variable.VariableTypes.BOOLEAN, "@BF05", "901.5", 2),
New Variable(Variable.VariableTypes.BOOLEAN, "@BF06", "901.6", 2),
New Variable(Variable.VariableTypes.BOOLEAN, "@BF07", "901.7", 2)})
New Variable(Variable.VariableTypes.BOOLEAN, "@BF07", "901.7", 2),
New Variable(Variable.VariableTypes.INTEGER, "@P1000_END", "1353", 1),
New Variable(Variable.VariableTypes.INTEGER, "@P2000_END", "1354", 1),
New Variable(Variable.VariableTypes.INTEGER, "@P1000_END", "1353", 2),
New Variable(Variable.VariableTypes.INTEGER, "@P2000_END", "1354", 2)})
AddHandler m_VarTimer.Tick, AddressOf VarTimer_Tick
m_VarTimer.Interval = New TimeSpan(100)
m_VarTimer.Start()
m_DoorOnMachineList.Add(New Door(35, 1, "Test.ddf", "Produzione2024", 1, 800, 1800, 40, {""}, {""}))
' m_DoorOnMachineList.Add(New Door(35, 1, "Test.ddf", "Produzione2024", 1, 800, 1800, 40, {""}, {""}))
Dim sResourcesDirPath As String = ""
GetPluginPrivateProfileString(S_GENERAL, K_RESOURCESDIR, "", sResourcesDirPath)
m_sMachineImagePath = sResourcesDirPath & "\FiveLakesMachine.png"
@@ -209,15 +221,15 @@ Public Class MachinePageVM
' se in simulazione
If Map.refSupervisorFunction.PlgGetPrivateProfileInt(S_NC, K_NC_SIMULATE, 0) > 0 Then
' aggiorno stato porta in macchina da 1 a 2 se in stazione di lavorazione
For nMachineIndex = 1 To 2
Dim nMachineId As Integer = nMachineIndex
Dim Machine1Var As Variable = m_VariableList.FirstOrDefault(Function(x) x.sName = "@WP_PR_02" AndAlso x.nMachine = nMachineId)
If Not IsNothing(Machine1Var) AndAlso Machine1Var.dValue = 1 Then
Dim nIndex As Integer = -1
Integer.TryParse(Machine1Var.sIndex, nIndex)
Map.refSupervisorFunction.ComWriteDoubleVar(nIndex, 2, Machine1Var.nMachine)
End If
Next
'For nMachineIndex = 1 To 2
' Dim nMachineId As Integer = nMachineIndex
' Dim Machine1Var As Variable = m_VariableList.FirstOrDefault(Function(x) x.sName = "@WP_PR_02" AndAlso x.nMachine = nMachineId)
' If Not IsNothing(Machine1Var) AndAlso Machine1Var.dValue = 1 Then
' Dim nIndex As Integer = -1
' Integer.TryParse(Machine1Var.sIndex, nIndex)
' Map.refSupervisorFunction.ComWriteDoubleVar(nIndex, 2, Machine1Var.nMachine)
' End If
'Next
' se presente un sent
Dim Sent1Var As Variable = m_VariableList.FirstOrDefault(Function(x) x.sName = "@SENT_1" AndAlso x.nMachine = 2)
Dim Sent2Var As Variable = m_VariableList.FirstOrDefault(Function(x) x.sName = "@SENT_2" AndAlso x.nMachine = 2)
@@ -237,16 +249,40 @@ Public Class MachinePageVM
End If
Next
End If
' se reset
For nMachineIndex = 1 To 2
Dim nMachineId As Integer = nMachineIndex
Dim Reset As Variable = m_VariableList.FirstOrDefault(Function(x) x.sName = "@RESET_ON" AndAlso x.nMachine = nMachineId)
If Not IsNothing(Reset) AndAlso Reset.nValue = 1 Then
Dim MachineState As Variable = m_VariableList.FirstOrDefault(Function(x) x.sName = "@STATE" AndAlso x.nMachine = nMachineId)
Dim nIndex As Integer = -1
Integer.TryParse(MachineState.sIndex, nIndex)
Map.refSupervisorFunction.ComWriteShortVar(nIndex, 0, nMachineIndex)
End If
Next
End If
' leggo stato calcolo da lua
Dim nState As Integer = -1
If LuaGetGlobVar("MACHINE1.DDfCalcState", nState) Then
SetDDfCalcState(nState)
If nState = 1 Then
m_dDdfCalcValue += 100 / 250
m_dDdfCalcValue = Math.Min(100, m_dDdfCalcValue)
ElseIf m_dDdfCalcValue <> 0 Then
m_dDdfCalcValue = 0
End If
NotifyPropertyChanged(NameOf(dDdfCalcValue))
NotifyPropertyChanged(NameOf(nDDfCalcState))
End If
If LuaGetGlobVar("MACHINE1.NewDoorState", nState) Then
SetNewDoorState(nState)
End If
m_LuaDoorList.Clear()
Dim bM1Reset As Boolean = False
LuaGetGlobVar("bReset_M1", bM1Reset)
Dim bM2Reset As Boolean = False
LuaGetGlobVar("bReset_M2", bM2Reset)
For nDoorIndex = 1 To 10
Dim nId As Integer = -1
LuaGetGlobVar("ListaCircPorte." & nDoorIndex & ".nId", nId)
@@ -281,10 +317,10 @@ Public Class MachinePageVM
Dim lUnloadTime As Long = 0
LuaGetGlobVar("ListaCircPorte." & nDoorIndex & ".nUnloadTime", lUnloadTime)
m_LuaDoorList.Add(New LuaDoor(nId, nCircIndex, nDoorState, nDoorPosition, sDoorCode, sDoorDescription, sDDFName, sCSVName, sM1CNPath, sM2CNPath, lLoadTime, lMachining1Start, lMachining1End, lMachining2Start, lMachining2End, lUnloadTime))
If nId > 0 Then
If nId > 0 AndAlso (Not bM1Reset AndAlso nDoorState >= 2 AndAlso nDoorState <= 4) OrElse (Not bM2Reset AndAlso nDoorState >= 5 AndAlso nDoorState <= 8) Then
' aggiorno dati in lista porte
Dim Door As Door = Map.refDoorListPageVM.DoorList.FirstOrDefault(Function(x) x.nId = nId)
If nDoorState <> Door.nProdState Then
If Not IsNothing(Door) AndAlso nDoorState <> Door.nProdState Then
Door.SetProdState(nDoorState)
If lLoadTime > 0 Then Door.SetLoadTime(lLoadTime)
If lMachining1Start > 0 Then Door.SetMachining1Start(lMachining1Start)
@@ -337,6 +373,56 @@ Public Class MachinePageVM
NotifyPropertyChanged(NameOf(DoorOnMachineArray))
End Sub
Friend Sub PrintAllVariableInLog()
Map.refSupervisorFunction.PlgOutLog("Writing all variables start")
' leggo variabili da macchina
For nVarIndex As Integer = 0 To m_VariableList.Count - 1
Dim Var As Variable = m_VariableList(nVarIndex)
Select Case Var.Type
Case Variable.VariableTypes.INTEGER
Dim nIndex As Integer = 0
Integer.TryParse(Var.sIndex, nIndex)
Dim nValue As Integer = 0
If Map.refSupervisorFunction.ComReadShortVar(nIndex, nValue, Var.nMachine) Then
Map.refSupervisorFunction.PlgOutLog(Var.nMachine & " " & Var.sName & " " & Var.sIndex & " " & nValue)
Else
Map.refSupervisorFunction.PlgOutLog("Error! Reading Variable " & Var.sIndex & " on machine " & Var.nMachine & "failed!")
End If
Case Variable.VariableTypes.DOUBLE
Dim nIndex As Integer = 0
Integer.TryParse(Var.sIndex, nIndex)
Dim dValue As Double = 0
If Map.refSupervisorFunction.ComReadDoubleVar(nIndex, dValue, Var.nMachine) Then
Map.refSupervisorFunction.PlgOutLog(Var.nMachine & " " & Var.sName & " " & Var.sIndex & " " & dValue)
Else
Map.refSupervisorFunction.PlgOutLog("Error! Reading Variable " & Var.sIndex & " on machine " & Var.nMachine & "failed!")
End If
Case Variable.VariableTypes.BOOLEAN
Dim nIndex As Integer = 0
Dim nBit As Integer = 0
Dim sIndexSplit() As String = Var.sIndex.Split("."c)
Integer.TryParse(sIndexSplit(0), nIndex)
Integer.TryParse(sIndexSplit(1), nBit)
Dim bValue As Boolean = 0
If Map.refSupervisorFunction.ComReadBitVar(nIndex, nBit, bValue, Var.nMachine) Then
Map.refSupervisorFunction.PlgOutLog(Var.nMachine & " " & Var.sName & " " & Var.sIndex & " " & bValue)
Else
Map.refSupervisorFunction.PlgOutLog("Error! Reading Variable " & Var.sIndex & " on machine " & Var.nMachine & "failed!")
End If
End Select
Next
Map.refSupervisorFunction.PlgOutLog("Writing all variables end")
End Sub
Friend Sub PrintAllDoorInList()
Map.refSupervisorFunction.PlgOutLog("Writing door list start")
Map.refSupervisorFunction.PlgOutLog("Id DDFName State ProdState LoadTime | Machining1Start | Machining1End | Machining2Start | Machining2End | UnloadTime")
For Each Door In Map.refDoorListPageVM.DoorList
Map.refSupervisorFunction.PlgOutLog(Door.nId & " " & Door.sDDFName & " " & Door.nState & " " & Door.nProdState & " " & Door.sLoadTime & " | " & Door.sMachining1Start & " | " & Door.sMachining1End & " | " & Door.sMachining2Start & " | " & Door.sMachining2End & " | " & Door.sUnloadTime)
Next
Map.refSupervisorFunction.PlgOutLog("Writing door list end")
End Sub
#Region "COMMANDS"
#Region "WriteVariable"
@@ -600,19 +686,23 @@ Public Class MachinePageVM
Dim Sent2 As Variable = m_VariableList.FirstOrDefault(Function(x) x.nMachine = nMachineIndex AndAlso x.sName = "@SENT_2")
Dim StartDoorPresence As Variable = m_VariableList.FirstOrDefault(Function(x) x.nMachine = nMachineIndex AndAlso x.sName = "@WP_PR_00")
Dim EndDoorPresence As Variable = m_VariableList.FirstOrDefault(Function(x) x.nMachine = nMachineIndex AndAlso x.sName = "@WP_PR_02")
Dim P1000 As Variable = m_VariableList.FirstOrDefault(Function(x) x.nMachine = nMachineIndex AndAlso x.sName = "@P1000_END")
Dim P2000 As Variable = m_VariableList.FirstOrDefault(Function(x) x.nMachine = nMachineIndex AndAlso x.sName = "@P2000_END")
If StateVariable.nValue < 1 OrElse StateVariable.nValue > 5 Then Return
Select Case StateVariable.nValue
Case 0
Return
Case 1
If nStartStop = 1 AndAlso (StartDoorPresence.dValue = 1 OrElse EndDoorPresence.dValue = 2) AndAlso Sent1.nValue = 1 Then
If nStartStop = 1 AndAlso (StartDoorPresence.dValue = 1 OrElse EndDoorPresence.dValue = 1) AndAlso Sent1.nValue = 1 Then
nState = 2
Map.refSupervisorFunction.ComWriteShortVar(Sent1.sIndex, 0, nMachineIndex)
Else Return
End If
Case 2
If nStartStop = 2 AndAlso EndDoorPresence.dValue = 2 Then
If nStartStop = 2 AndAlso EndDoorPresence.dValue = 1 Then
Map.refSupervisorFunction.ComWriteShortVar(P1000.sIndex, 1, nMachineIndex)
nState = 3
Map.refSupervisorFunction.ComWriteDoubleVar(EndDoorPresence.sIndex, 2, nMachineIndex)
Else Return
End If
Case 3
@@ -622,8 +712,10 @@ Public Class MachinePageVM
Else Return
End If
Case 4
If nStartStop = 2 AndAlso EndDoorPresence.dValue = 2 Then
If nStartStop = 2 AndAlso EndDoorPresence.dValue = 1 Then
Map.refSupervisorFunction.ComWriteShortVar(P2000.sIndex, 1, nMachineIndex)
nState = 5
Map.refSupervisorFunction.ComWriteDoubleVar(EndDoorPresence.sIndex, 2, nMachineIndex)
Else Return
End If
Case 5
@@ -822,42 +914,42 @@ Public Class LuaDoor
Private m_dtLoadTime As DateTime
Public ReadOnly Property sLoadTime As String
Get
Return m_dtLoadTime.ToString("yy/MM/dd HH:mm:ss")
Return ConvertDateTimeToString(m_dtLoadTime)
End Get
End Property
Private m_dtMachining1Start As DateTime
Public ReadOnly Property sMachining1Start As String
Get
Return m_dtMachining1Start.ToString("yy/MM/dd HH:mm:ss")
Return ConvertDateTimeToString(m_dtMachining1Start)
End Get
End Property
Private m_dtMachining1End As DateTime
Public ReadOnly Property sMachining1End As String
Get
Return m_dtMachining1End.ToString("yy/MM/dd HH:mm:ss")
Return ConvertDateTimeToString(m_dtMachining1End)
End Get
End Property
Private m_dtMachining2Start As DateTime
Public ReadOnly Property sMachining2Start As String
Get
Return m_dtMachining2Start.ToString("yy/MM/dd HH:mm:ss")
Return ConvertDateTimeToString(m_dtMachining2Start)
End Get
End Property
Private m_dtMachining2End As DateTime
Public ReadOnly Property sMachining2End As String
Get
Return m_dtMachining2End.ToString("yy/MM/dd HH:mm:ss")
Return ConvertDateTimeToString(m_dtMachining2End)
End Get
End Property
Private m_dtUnloadTime As DateTime
Public ReadOnly Property sUnloadTime As String
Get
Return m_dtUnloadTime.ToString("yy/MM/dd HH:mm:ss")
Return ConvertDateTimeToString(m_dtUnloadTime)
End Get
End Property
@@ -962,6 +1054,20 @@ Public Class StringToDDFCalcStateConverter
End Class
Public Class DDFCalcStateToVisibilityConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
If TypeOf value IsNot Integer Then Return Visibility.Collapsed
Return If(value = 0, Visibility.Collapsed, Visibility.Visible)
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
Public Class StringToNewDoorStateConverter
Implements IValueConverter
@@ -14,19 +14,19 @@
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<RadioButton Content="Door List"
<RadioButton Content="DOOR LIST"
Command="{Binding Page_Command}"
CommandParameter="{StaticResource Door_List}"
IsChecked="True"
Style="{StaticResource {x:Type ToggleButton}}"/>
Style="{StaticResource MainMenu_ToggleButton}"/>
<RadioButton Grid.Column="1"
Content="Machine Status"
Content="MACHINE STATUS"
Command="{Binding Page_Command}"
CommandParameter="{StaticResource Machine_State}"
Style="{StaticResource {x:Type ToggleButton}}"/>
<RadioButton Grid.Column="2"
Style="{StaticResource MainMenu_ToggleButton}"/>
<!--<RadioButton Grid.Column="2"
Content="Statistics"
Command="{Binding Page_Command}"
CommandParameter="{StaticResource Statistics}"
Style="{StaticResource {x:Type ToggleButton}}"/>
Style="{StaticResource MainMenu_ToggleButton}"/>-->
</Grid>
@@ -1,4 +1,6 @@
Public Class MainMenuVM
Imports Effector.Plugin.Lib
Public Class MainMenuVM
Inherits VMBase
' Definizione comandi
@@ -18,7 +20,7 @@
End Property
Public Sub Page(nPage As Integer)
Map.refFiveLakesUIVM.SetSelPage(nPage)
Map.refPluginUIVM.SetSelPage(nPage)
End Sub
#End Region ' Page
@@ -13,9 +13,9 @@ Imports System.Windows
<Assembly: AssemblyTitle("Effector.Plugin.FiveLakes")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("Windows User")>
<Assembly: AssemblyCompany("Egalware s.r.l.")>
<Assembly: AssemblyProduct("Effector.Plugin.FiveLakes")>
<Assembly: AssemblyCopyright("Copyright @ Windows User 2024")>
<Assembly: AssemblyCopyright("Copyright © 2024-2025 by Egalware s.r.l.")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(false)>
@@ -55,5 +55,5 @@ Imports System.Windows
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>
<Assembly: AssemblyVersion("2.7.8.1")>
<Assembly: AssemblyFileVersion("2.7.8.1")>
@@ -1,14 +1,10 @@
<Grid x:Class="FiveLakesUI"
<Grid x:Class="PluginUIV"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Effector.Plugin.FiveLakes"
DataContext="{StaticResource FiveLakesUIVM}">
<TabControl SelectedIndex="{Binding SelPage}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</TabControl.ItemContainerStyle>
DataContext="{StaticResource PluginUIVM}">
<TabControl SelectedIndex="{Binding SelPage}"
Style="{StaticResource NoHeader_TabControl}">
<TabItem Name="DoorList"
Header="DoorList">
<local:DoorListPageV DataContext="{StaticResource DoorListVM}"/>
@@ -22,11 +18,4 @@
<local:StatisticsPageV DataContext="{StaticResource StatisticsPageVM}"/>
</TabItem>
</TabControl>
<!--<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding TextTest}" Background="Green"/>
<Button Grid.Column="1"
x:Name="Button1"/>-->
</Grid>
@@ -3,11 +3,11 @@ Imports Effector.Plugin.Interface
<Export(GetType(IPluginControl))>
<ExportMetadata("Name", "Project")>
Public Class FiveLakesUI
Public Class PluginUIV
Implements IPluginControl
Private m_FiveLakesUIVM As FiveLakesUIVM
Private m_FiveLakesUIVM As PluginUIVM
<ImportingConstructor>
Sub New(Host As IHost)
@@ -1,7 +1,8 @@
Imports System.ComponentModel.Composition
Imports Effector.Plugin.Interface
Imports Effector.Plugin.Lib
Public Class FiveLakesUIVM
Public Class PluginUIVM
Inherits VMBase
Public Enum Pages As Integer
@@ -52,7 +53,7 @@ Public Class FiveLakesUIVM
' Impostazione direttorio di configurazione
m_sConfigDir = m_sDataRoot & "\" & CONF_DIR
' Impostazione path Ini file
IniFile.SetIniFile(m_sConfigDir & "\" & INI_FILE_NAME)
PluginIniFile.SetIniFile(m_sConfigDir & "\" & INI_FILE_NAME)
' Impostazione path resources dir
m_sResourcesRoot = m_sDataRoot & "\" & RES_DIR
End Sub
@@ -1,57 +0,0 @@
<Window x:Class="ProcessManagerV"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="200"
Width="300">
<StackPanel>
<Grid HorizontalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="30"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="Arguments Queue Count: "/>
<TextBlock Grid.Column="1"
Text="{Binding ArgumentsQueue}"/>
<TextBlock Grid.Row="1"
Text="ResultQueue: "/>
<TextBlock Grid.Column="1"
Grid.Row="1"
Text="{Binding ResultQueue}"/>
</Grid>
<!--<DataGrid ItemsSource="{Binding ThreadList}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Process Status"
Binding="{Binding ProcessStatus}"/>
<DataGridTextColumn Header="Curr Request Id"
Binding="{Binding CurrRequest.nId}"/>
<DataGridTextColumn Header="Curr Request Args"
Binding="{Binding CurrRequest.sArgs}"/>
<DataGridTextColumn Header="Process Result"
Binding="{Binding nProcResult}"/>
</DataGrid.Columns>
</DataGrid>-->
<ItemsControl ItemsSource="{Binding ThreadList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ProcessStatus}"/>
<TextBlock Text="{Binding CurrRequest.nId}"/>
<TextBlock Text="{Binding CurrRequest.sArgs}"/>
<TextBlock Text="{Binding nProcResult}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ProgressBar Value="{Binding dProgress_Value, Mode=OneWay}"
Minimum="0"
Maximum="{Binding dProgress_Maximum}"
Height="20"
Width="250"/>
</StackPanel>
</Window>
@@ -1,19 +0,0 @@
Public Class ProcessManagerV
Private WithEvents m_ProcessManagerVM As ProcessManagerVM
Sub New(Owner As Window, ProcessManagerVM As ProcessManagerVM)
'MyBase.New(Owner)
Me.Owner = Owner
' This call is required by the designer.
InitializeComponent()
Me.DataContext = ProcessManagerVM
' Assegno al riferimento locale al VM il VM preso dal DataContext
m_ProcessManagerVM = ProcessManagerVM
End Sub
'Private Sub CloseWindow(bDialogResult As Boolean) Handles m_ProcessManagerVM.m_CloseWindow
' Me.DialogResult = bDialogResult
'End Sub
End Class
@@ -1,70 +0,0 @@
Imports System.Windows.Threading
Imports System.Collections.ObjectModel
Public Class ProcessManagerVM
Inherits VMBase
Private m_nTaskQuantity As Integer = 3
Private m_UpdateDataTimer As New DispatcherTimer
Private m_ExecProcessManager As ExecProcessManager
Public ReadOnly Property ExecProcessManager As ExecProcessManager
Get
Return m_ExecProcessManager
End Get
End Property
Public ReadOnly Property ArgumentsQueue As String
Get
Return m_ExecProcessManager.ArgumentsQueueCount.ToString()
End Get
End Property
Public ReadOnly Property ResultQueue As String
Get
Return m_ExecProcessManager.ArgumentsResultQueueCount.ToString()
End Get
End Property
Public ReadOnly Property ThreadList As ObservableCollection(Of ThreadData)
Get
If Not IsNothing(m_ExecProcessManager.ThreadDataList) Then
Return New ObservableCollection(Of ThreadData)(m_ExecProcessManager.ThreadDataList.ToList())
Else
Return New ObservableCollection(Of ThreadData)
End If
End Get
End Property
Private m_dProgress_Value As Double
Public ReadOnly Property dProgress_Value As Double
Get
Return (m_dProgress_Maximum - m_nTaskQuantity - m_ExecProcessManager.ArgumentsQueueCount) '/ m_dProgress_Maximum * 100
End Get
End Property
Private m_dProgress_Maximum As Double
Public ReadOnly Property dProgress_Maximum As Double
Get
Return m_dProgress_Maximum
End Get
End Property
Sub New(ExecProcessManager As ExecProcessManager)
m_ExecProcessManager = ExecProcessManager
m_dProgress_Maximum = m_ExecProcessManager.ArgumentsQueueCount + m_nTaskQuantity
m_UpdateDataTimer.Interval = New TimeSpan(0, 0, 1)
AddHandler m_UpdateDataTimer.Tick, AddressOf UpdateDataTimer_Tick
m_UpdateDataTimer.Start()
End Sub
Private Sub UpdateDataTimer_Tick(sender As Object, e As EventArgs)
NotifyPropertyChanged(NameOf(ArgumentsQueue))
NotifyPropertyChanged(NameOf(ResultQueue))
NotifyPropertyChanged(NameOf(ThreadList))
NotifyPropertyChanged(NameOf(dProgress_Value))
End Sub
End Class
Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 773 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 B

@@ -1,17 +1,18 @@
<Window x:Class="RestartWndV"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Effector.Plugin.FiveLakes"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="{Binding sTitle}">
<Lib:EffectorWindow x:Class="RestartWndV"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Lib="clr-namespace:Effector.Plugin.Lib;assembly=Effector.Plugin.Lib"
xmlns:local="clr-namespace:Effector.Plugin.FiveLakes"
ShowInTaskbar="False"
IsMinimizable="False"
IsClosable="False"
Title="{Binding sTitle}">
<Window.Resources>
<local:StringToVisibilityConverter x:Key="StringToVisibilityConverter"/>
<local:DoorToVisibilityConverter x:Key="DoorToVisibilityConverter"/>
<local:StateToVisibilityConverter x:Key="StateToVisibilityConverter"/>
<local:VariableNameToVisibilityConverter x:Key="VariableNameToVisibilityConverter"/>
<local:ListEmptyToVisibilityConverter x:Key="ListEmptyToVisibilityConverter"/>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
@@ -22,6 +23,7 @@
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Image Source="{Binding sMachineImagePath}"
Stretch="Uniform"/>
@@ -207,76 +209,123 @@
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Grid Grid.Row="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<TextBlock Text="Doors not found on machine!"
FontWeight="Bold"
Visibility="{Binding DoorToBeFixedList, Converter={StaticResource ListEmptyToVisibilityConverter}}"
HorizontalAlignment="Center"
Margin="0,0,0,10"/>
<ItemsControl Grid.Row="1"
ItemsSource="{Binding DoorToBeFixedList}"
HorizontalAlignment="Center">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Margin="0,0,0,0"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="{StaticResource Effector_LightBlue}"
BorderThickness="2"
CornerRadius="10"
Padding="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0"
Grid.Row="0"
Text="Id"
Margin="0,0,0,5"/>
<TextBlock Grid.Column="2"
Grid.Row="0"
Text="{Binding nId}"
TextAlignment="Right"/>
<TextBlock Grid.Column="0"
Grid.Row="2"
Text="Old State"
Margin="0,0,0,5"/>
<TextBlock Grid.Column="2"
Grid.Row="2"
Text="{Binding nOldState}"
TextAlignment="Right"/>
<TextBlock Grid.Column="0"
Grid.Row="3"
Text="DDF Name"
Margin="0,0,0,5"/>
<TextBlock Grid.Column="2"
Grid.Row="3"
Text="{Binding sDDFName}"
TextAlignment="Right"/>
<TextBlock Grid.Column="0"
Grid.Row="4"
Text="CSV Name"
Margin="0,0,0,5"/>
<TextBlock Grid.Column="2"
Grid.Row="4"
Text="{Binding sCSVName}"
TextAlignment="Right"/>
<TextBlock Grid.Column="0"
Grid.Row="5"
Text="New State"
Margin="0,0,0,5"/>
<ComboBox Grid.Column="2"
Grid.Row="5"
ItemsSource="{Binding StateList}"
SelectedItem="{Binding SelState}"
HorizontalAlignment="Right"/>
</Grid>
</Border>
<!--<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Center">
<TextBlock Text="Id"/>
<TextBlock Text="{Binding nId}"
Margin="10,0,0,0"/>
</StackPanel>
<ComboBox Grid.Row="1"
ItemsSource="{Binding StateList}"
SelectedItem="{Binding SelState}"/>
</Grid>-->
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Grid>
<!--<ItemsControl ItemsSource="{Binding RestartDoorList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Visibility="{Binding nState, Converter={StaticResource StateToVisibilityConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0"
Grid.Row="0"
Text="Id"/>
<TextBlock Grid.Column="1"
Grid.Row="0"
Text="{Binding nId}"/>
<TextBlock Grid.Column="0"
Grid.Row="1"
Text="Circular Index"/>
<TextBlock Grid.Column="1"
Grid.Row="1"
Text="{Binding nCircIndex}"/>
<TextBlock Grid.Column="0"
Grid.Row="2"
Text="State"/>
<TextBlock Grid.Column="1"
Grid.Row="2"
Text="{Binding nState}"/>
<ComboBox Grid.Column="1"
Grid.Row="2"
ItemsSource="{Binding DoorStateList}"
SelectedItem="{Binding SelDoorState}"/>
<TextBlock Grid.Column="0"
Grid.Row="3"
Text="DDF Name"/>
<TextBlock Grid.Column="1"
Grid.Row="3"
Text="{Binding sDDFName}"/>
<TextBlock Grid.Column="0"
Grid.Row="4"
Text="CSV Name"/>
<TextBlock Grid.Column="1"
Grid.Row="4"
Text="{Binding sCSVName}"/>
<TextBlock Text="Id"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>-->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Row="1"
Orientation="Horizontal"
Margin="20"
HorizontalAlignment="Center">
<Button Content="Ok"
Command="{Binding Ok_Command}"/>
Command="{Binding Ok_Command}"
Margin="0,0,10,0"
Visibility="{Binding OkBtn_Visibility}"
Style="{StaticResource Restart_Button}"/>
<Button Grid.Column="1"
Content="Empty Line"
Command="{Binding Empty_Command}"/>
</Grid>
Content="Empty Machine"
Command="{Binding Empty_Command}"
Margin="10,0,0,0"
Style="{StaticResource Restart_Button}"/>
</StackPanel>
</Grid>
</Window>
</Lib:EffectorWindow>
@@ -1,4 +1,6 @@
Public Class RestartWndV
Imports Effector.Plugin.Lib
Public Class RestartWndV
Private WithEvents m_RestartWndVM As RestartWndVM
@@ -10,6 +12,10 @@
Me.DataContext = RestartWndVM
' Assegno al riferimento locale al VM il VM preso dal DataContext
m_RestartWndVM = RestartWndVM
' imposto posizione finestra
Me.SetPlacementAppName(S_GENERAL)
Me.SetPlacementKeyName(K_RESTART_WINPLACE)
Me.SetPlacementFileName(PluginIniFile.sPath)
End Sub
Private Sub CloseWindow(bDialogResult As Boolean) Handles m_RestartWndVM.m_CloseWindow
@@ -4,6 +4,8 @@ Imports System.Collections.ObjectModel
Imports System.Globalization
Imports System.IO
Imports System.Reflection
Imports Effector.Plugin.Lib
Imports Effector.Plugin.FiveLakes.Door
Public Class RestartWndVM
Inherits VMBase
@@ -52,12 +54,26 @@ Public Class RestartWndVM
End Get
End Property
Private m_DoorToBeFixedList As New ObservableCollection(Of DoorToBeFixed)
Public ReadOnly Property DoorToBeFixedList As ObservableCollection(Of DoorToBeFixed)
Get
Return m_DoorToBeFixedList
End Get
End Property
Public ReadOnly Property VariableList As ObservableCollection(Of Variable)
Get
Return Map.refMachinePageVM.VariableList
End Get
End Property
Private m_OkBtn_Visibility As Visibility = True
Public ReadOnly Property OkBtn_Visibility As Visibility
Get
Return m_OkBtn_Visibility
End Get
End Property
' Definizione comandi
Private m_cmdOk As ICommand
Private m_cmdEmpty As ICommand
@@ -74,16 +90,42 @@ Public Class RestartWndVM
Dim nValue As Integer = GetPluginPrivateProfileDouble(S_DEBUG, K_DOORINDEX & "M" & m_nMachineIndex & "P" & nIndex, 0)
WriteVariableValueToName(nMachineIndex, "@DOORN_S" & nIndex.ToString(), nValue)
Next
' scrive tutte le variabili dell'intera linea
'For nIndex = 0 To 4
' Dim dValue As Double = GetPluginPrivateProfileDouble(S_DEBUG, K_DOORPRESENCE & "M1P" & nIndex, 0)
' WriteVariableValueToName(1, "@WP_PR_0" & nIndex.ToString(), dValue)
' Dim nValue As Integer = GetPluginPrivateProfileDouble(S_DEBUG, K_DOORINDEX & "M1P" & nIndex, 0)
' WriteVariableValueToName(1, "@DOORN_S" & nIndex.ToString(), nValue)
' dValue = GetPluginPrivateProfileDouble(S_DEBUG, K_DOORPRESENCE & "M2P" & nIndex, 0)
' WriteVariableValueToName(2, "@WP_PR_0" & nIndex.ToString(), dValue)
' nValue = GetPluginPrivateProfileDouble(S_DEBUG, K_DOORINDEX & "M2P" & nIndex, 0)
' WriteVariableValueToName(2, "@DOORN_S" & nIndex.ToString(), nValue)
'Next
End If
' riporto lista porte su log
Map.refMachinePageVM.PrintAllDoorInList()
' riporto lista variabili macchina su log
Map.refMachinePageVM.PrintAllVariableInLog()
Dim sBackupFilePath As String = ""
GetPluginPrivateProfileString("General", "BackupDir", "", sBackupFilePath)
sBackupFilePath &= "\LuaBackup.json"
Dim JsonLuaDoorList As List(Of JsonLuaDoor)
Dim JsonLuaDoorList As List(Of JsonLuaDoor) = Nothing
If File.Exists(sBackupFilePath) Then
Dim sReadedFile As String = File.ReadAllText(sBackupFilePath)
JsonLuaDoorList = JsonConvert.DeserializeObject(Of List(Of JsonLuaDoor))(sReadedFile)
JsonLuaDoorList = JsonLuaDoorList.OrderBy(Of Integer)(Function(x) x.nCircIndex).ToList()
' riporto lista porte come letta da Json
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: Doors read from json start")
Map.refSupervisorFunction.PlgOutLog("CircIndex Id State DDFName")
For Each Door In JsonLuaDoorList
Map.refSupervisorFunction.PlgOutLog(Door.nCircIndex & " " & Door.nId & " " & Door.nState & " " & Door.sDDFName)
Next
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: Doors read from json end")
Else
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: File json does not exist!")
End If
' creo posti in lista descrizioni
@@ -100,12 +142,196 @@ Public Class RestartWndVM
Dim nCircindex As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S" & nPositionIndex.ToString(), nCircindex)
If nCircindex <> 0 Then
m_DoorOnMachineArray(nPositionIndex) = New RestartDoor(JsonLuaDoorList(nCircindex - 1))
If Not IsNothing(JsonLuaDoorList) AndAlso JsonLuaDoorList(nCircindex - 1).nId > 0 Then
m_DoorOnMachineArray(nPositionIndex) = New RestartDoor(JsonLuaDoorList(nCircindex - 1))
Else
m_OkBtn_Visibility = Visibility.Collapsed
NotifyPropertyChanged(NameOf(OkBtn_Visibility))
End If
End If
End If
Next
NotifyPropertyChanged(NameOf(DoorOnMachineArray))
' riporto lista porte dopo verifica presenza
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: Doors for restart window start")
Map.refSupervisorFunction.PlgOutLog("Position CircIndex Id State DDFName")
For DoorIndex = 0 To m_DoorOnMachineArray.Count - 1
Dim Door As RestartDoor = m_DoorOnMachineArray(DoorIndex)
If IsNothing(Door) Then
Map.refSupervisorFunction.PlgOutLog(DoorIndex & " Empty")
Else
Map.refSupervisorFunction.PlgOutLog(DoorIndex & " " & Door.nCircIndex & " " & Door.nId & " " & Door.nState & " " & Door.sDDFName)
End If
Next
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: Doors for restart window end")
' percorro la lista lua
If Not IsNothing(JsonLuaDoorList) Then
For LuaDoorIndex = 0 To JsonLuaDoorList.Count - 1
Dim LuaDoor As JsonLuaDoor = JsonLuaDoorList(LuaDoorIndex)
If nMachineIndex = 1 Then
' verifico che in base allo stato siano in una posizione conforme, altrimenti li azzero
Select Case LuaDoor.nState
Case 1, 2 ' IMPORTED, SENT_1
Dim nCircIndex0 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S0", nCircIndex0)
If nCircIndex0 <> LuaDoor.nCircIndex Then
ResetLuaDoor(LuaDoorIndex, JsonLuaDoorList)
End If
Case 3 ' START_MACHINING_1
Dim nCircIndex0 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S0", nCircIndex0)
Dim nCircIndex1 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S1", nCircIndex1)
Dim nCircIndex2 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S2", nCircIndex2)
If nCircIndex0 <> LuaDoor.nCircIndex AndAlso nCircIndex1 <> LuaDoor.nCircIndex AndAlso nCircIndex2 <> LuaDoor.nCircIndex Then
ResetLuaDoor(LuaDoorIndex, JsonLuaDoorList)
End If
Case 4 ' MACHINED_1
Dim nCircIndex2 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S2", nCircIndex2)
Dim nCircIndex3 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S3", nCircIndex3)
Dim nCircIndex4 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S4", nCircIndex4)
If nCircIndex2 <> LuaDoor.nCircIndex AndAlso nCircIndex3 <> LuaDoor.nCircIndex AndAlso nCircIndex4 <> LuaDoor.nCircIndex Then
ResetLuaDoor(LuaDoorIndex, JsonLuaDoorList)
End If
End Select
ElseIf nMachineIndex = 2 Then
Select Case LuaDoor.nState
Case 5 ' SENT_2
Dim nCircIndex0 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S0", nCircIndex0)
If nCircIndex0 <> LuaDoor.nCircIndex Then
ResetLuaDoor(LuaDoorIndex, JsonLuaDoorList)
End If
Case 6 ' START_MACHINING_2
Dim nCircIndex0 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S0", nCircIndex0)
Dim nCircIndex1 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S1", nCircIndex1)
Dim nCircIndex2 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S2", nCircIndex2)
If nCircIndex0 <> LuaDoor.nCircIndex AndAlso nCircIndex1 <> LuaDoor.nCircIndex AndAlso nCircIndex2 <> LuaDoor.nCircIndex Then
ResetLuaDoor(LuaDoorIndex, JsonLuaDoorList)
End If
Case 7 ' MACHINED_2
Dim nCircIndex2 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S2", nCircIndex2)
Dim nCircIndex3 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S3", nCircIndex3)
Dim nCircIndex4 As Integer = 0
GetVariableValueFromName(nMachineIndex, "@DOORN_S4", nCircIndex4)
If nCircIndex2 <> LuaDoor.nCircIndex AndAlso nCircIndex3 <> LuaDoor.nCircIndex AndAlso nCircIndex4 <> LuaDoor.nCircIndex Then
ResetLuaDoor(LuaDoorIndex, JsonLuaDoorList)
End If
Case 8 ' UNLOADED
ResetLuaDoor(LuaDoorIndex, JsonLuaDoorList)
End Select
End If
Next
End If
' riporto lista porte che scrivo su json
If IsNothing(JsonLuaDoorList) Then
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: File json does not exist!")
Else
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: Doors to be written on json start")
Map.refSupervisorFunction.PlgOutLog("CircIndex Id State DDFName")
For Each Door In JsonLuaDoorList
Map.refSupervisorFunction.PlgOutLog(Door.nCircIndex & " " & Door.nId & " " & Door.nState & " " & Door.sDDFName)
Next
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: Doors to be written on json end")
End If
' aggiorno file backup del lua
If File.Exists(sBackupFilePath) Then
Try
File.Delete(sBackupFilePath)
Catch ex As Exception
End Try
Dim sWriteFile As String = JsonConvert.SerializeObject(JsonLuaDoorList, Formatting.Indented)
File.WriteAllText(sBackupFilePath, sWriteFile)
End If
' verifico se in lista porte ci sono porte non gestite
For DoorIndex = 0 To Map.refDoorListPageVM.DoorList.Count - 1
Dim CurrDoor As Door = Map.refDoorListPageVM.DoorList(DoorIndex)
Select Case CurrDoor.nState
Case Door.DoorStates.PRODUCED
Continue For
Case Door.DoorStates.MACHINE_2_END
If nMachineIndex = 1 Then Continue For
' cerco porta tra quelle in restart
If Not IdIsInRestartList(CurrDoor.nId) Then
m_DoorToBeFixedList.Add(New DoorToBeFixed(CurrDoor, nMachineIndex))
End If
Case Door.DoorStates.MACHINE_2_START
If nMachineIndex = 1 Then Continue For
' cerco porta tra quelle in restart
If Not IdIsInRestartList(CurrDoor.nId) Then
m_DoorToBeFixedList.Add(New DoorToBeFixed(CurrDoor, nMachineIndex))
End If
Case Door.DoorStates.MACHINE_1_END
If nMachineIndex = 2 Then
Dim bOnMachine1 As Boolean = False
' verifico che l'id sia in Json Door
Dim Machine1EndDoor As JsonLuaDoor = JsonLuaDoorList.FirstOrDefault(Function(x) x.nId = CurrDoor.nId)
If Not IsNothing(Machine1EndDoor) Then
' verifico che l'id sia in qualche posizione
For nPositionIndex As Integer = 4 To 0 Step -1
Dim dWPValue As Double = 0
GetVariableValueFromName(1, "@WP_PR_0" & nPositionIndex.ToString(), dWPValue)
If dWPValue <> 0 Then
' verifico indice
Dim nCircindex As Integer = 0
GetVariableValueFromName(1, "@DOORN_S" & nPositionIndex.ToString(), nCircindex)
If nCircindex = Machine1EndDoor.nCircIndex Then
bOnMachine1 = True
Exit For
End If
End If
Next
End If
If Not bOnMachine1 Then
m_DoorToBeFixedList.Add(New DoorToBeFixed(CurrDoor, nMachineIndex))
End If
Else
' cerco porta tra quelle in restart
If Not IdIsInRestartList(CurrDoor.nId) Then
m_DoorToBeFixedList.Add(New DoorToBeFixed(CurrDoor, nMachineIndex))
End If
End If
Case Door.DoorStates.MACHINE_1_START
If nMachineIndex = 2 Then Continue For
' cerco porta tra quelle in restart
If Not IdIsInRestartList(CurrDoor.nId) Then
m_DoorToBeFixedList.Add(New DoorToBeFixed(CurrDoor, nMachineIndex))
End If
Case Door.DoorStates.ON_LOAD_STATION
If nMachineIndex = 2 Then Continue For
' cerco porta tra quelle in restart
If Not IdIsInRestartList(CurrDoor.nId) Then
m_DoorToBeFixedList.Add(New DoorToBeFixed(CurrDoor, nMachineIndex))
End If
End Select
Next
' riporto lista porte non gestite
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: Doors not managed from list start")
Map.refSupervisorFunction.PlgOutLog("Id State")
For Each Door In m_DoorToBeFixedList
Map.refSupervisorFunction.PlgOutLog(Door.nId & " " & Door.SelState)
Next
Map.refSupervisorFunction.PlgOutLog("Machine" & nMachineIndex & ".lua: Doors not managed from list end")
' riporto lista porte su log
Map.refMachinePageVM.PrintAllDoorInList()
'If File.Exists(sBackupFilePath) Then
' Dim sReadedFile As String = File.ReadAllText(sBackupFilePath)
@@ -127,12 +353,22 @@ Public Class RestartWndVM
'End If
' se macchina 1
' carico immagine della macchina
Dim sResourcesDirPath As String = ""
GetPluginPrivateProfileString(S_GENERAL, K_RESOURCESDIR, "", sResourcesDirPath)
m_sMachineImagePath = sResourcesDirPath & "\Multiax-C1223Ripartenza.png"
m_sMachineImagePath = sResourcesDirPath & "\Machine" & m_nMachineIndex & ".png"
End Sub
Private Function IdIsInRestartList(nId As Integer) As Boolean
For Each Door In m_DoorOnMachineArray
If IsNothing(Door) Then Continue For
If Door.nId = nId Then Return True
Next
Return False
End Function
Private Sub ResetLuaDoor(Index As Integer, LuaDoorList As List(Of JsonLuaDoor))
LuaDoorList(Index) = New JsonLuaDoor(0, LuaDoorList(Index).nCircIndex, 0, "", "", "", "", "", "", 0, 0, 0, 0, 0, 0)
End Sub
#End Region ' CONSTRUCTOR
@@ -187,9 +423,53 @@ Public Class RestartWndVM
End Property
Public Sub Ok()
' se ci sono porte da sistemare
If m_DoorToBeFixedList.Count > 0 Then
' verifico se devo cambiarne l'ordine
For Each ToBeFixedDoor In m_DoorToBeFixedList
Dim Door As Door = Map.refDoorListPageVM.DoorList.FirstOrDefault(Function(x) x.nId = ToBeFixedDoor.nId)
If ToBeFixedDoor.SelState = Door.DoorStates.NOTPRODUCE Then
Dim DoorIndex As Integer = Map.refDoorListPageVM.DoorList.IndexOf(Door)
For Index = 0 To Map.refDoorListPageVM.DoorList.Count - 1
If Map.refDoorListPageVM.DoorList(Index).nState < Door.DoorStates.READY_FOR_PRODUCTION Then
Map.refDoorListPageVM.DoorList.Move(DoorIndex, If(Index > 0, Index - 1, 0))
Exit For
End If
Next
Door.SetState(Door.DoorStates.NOTPRODUCE)
ElseIf ToBeFixedDoor.SelState = Door.DoorStates.READY_FOR_PRODUCTION Then
Door.SetState(Door.DoorStates.READY_FOR_PRODUCTION)
Door.SetProdState(Door.DoorProdStates.NOT_INIT)
'Door.SetLoadTime(0)
'Door.SetMachining1Start(0)
'Door.SetMachining1End(0)
'Door.SetMachining2Start(0)
'Door.SetMachining2End(0)
'Door.SetUnloadTime(0)
ElseIf ToBeFixedDoor.SelState = Door.DoorStates.PRODUCED Then
Door.SetState(Door.DoorStates.PRODUCED)
Door.SetProdState(Door.DoorProdStates.UNLOADED)
If Door.dtMachining2End = DateTime.MinValue Then
Door.SetMachining2End(DateTime.Now)
End If
If Door.dtUnloadTime = DateTime.MinValue Then
Door.SetUnloadTime(DateTime.Now)
End If
End If
Next
End If
Map.refDoorListPageVM.NotifyPropertyChanged(NameOf(Map.refDoorListPageVM.DoorList))
RaiseEvent m_CloseWindow(True)
End Sub
Private Function IdIsInToBeFixedList(nId As Integer) As Boolean
For Each Door In m_DoorToBeFixedList
If IsNothing(Door) Then Continue For
If Door.nId = nId Then Return True
Next
Return False
End Function
#End Region ' Ok
#Region "Empty"
@@ -204,8 +484,40 @@ Public Class RestartWndVM
End Property
Public Sub Empty()
Map.refDoorListPageVM.ResetProductionQueue()
Map.refDoorListPageVM.WriteBackup()
Dim sDoorToRemove As String = ""
For DoorIndex As Integer = 0 To m_DoorOnMachineArray.Count - 1
Dim DoorToRemove As RestartDoor = m_DoorOnMachineArray(DoorIndex)
If Not IsNothing(DoorToRemove) Then
sDoorToRemove &= "- " & DoorToRemove.nId & DoorToRemove.sCSVName & If(DoorIndex > m_DoorOnMachineArray.Count - 1, Environment.NewLine, "")
End If
Next
MessageBox.Show("Are you sure you want to empty the machine?" & Environment.NewLine &
If(Not String.IsNullOrWhiteSpace(sDoorToRemove), "You have to remove doors:" & Environment.NewLine & sDoorToRemove, "") & Environment.NewLine &
"You have to reset the machine and then restart it.", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning)
' se ci sono porte sulla macchina
If m_DoorOnMachineArray.Count > 0 Then
For Each DoorOnmachine In m_DoorOnMachineArray
If Not IsNothing(DoorOnmachine) Then
Dim Door As Door = Map.refDoorListPageVM.DoorList.FirstOrDefault(Function(x) x.nId = DoorOnmachine.nId)
If Not IsNothing(Door) Then
Door.SetState(Door.DoorStates.READY_FOR_PRODUCTION)
Door.SetProdState(Door.DoorProdStates.NOT_INIT)
End If
End If
Next
End If
' se ci sono porte da sistemare
If m_DoorToBeFixedList.Count > 0 Then
' verifico se devo cambiarne l'ordine
For Each ToBeFixedDoor In m_DoorToBeFixedList
Dim Door As Door = Map.refDoorListPageVM.DoorList.FirstOrDefault(Function(x) x.nId = ToBeFixedDoor.nId)
If Not IsNothing(Door) Then
Door.SetState(Door.DoorStates.READY_FOR_PRODUCTION)
Door.SetProdState(Door.DoorProdStates.NOT_INIT)
End If
Next
End If
' imposto stato di reset
RaiseEvent m_CloseWindow(False)
End Sub
@@ -248,6 +560,83 @@ Public Class VariableNameToVisibilityConverter
End Class
Public Class ListEmptyToVisibilityConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
If IsNothing(value) OrElse Not TypeOf value Is IList Then Return Visibility.Collapsed
Dim List As IList = DirectCast(value, IList)
Return If(List.Count > 0, Visibility.Visible, Visibility.Collapsed)
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
Public Class DoorToBeFixed
Private m_nId As Integer = -1
Public ReadOnly Property nId As Integer
Get
Return m_nId
End Get
End Property
Private m_sDDFName As String
Public ReadOnly Property sDDFName As String
Get
Return m_sDDFName
End Get
End Property
Private m_nOldState As DoorStates
Public ReadOnly Property nOldState As DoorStates
Get
Return m_nOldState
End Get
End Property
Private m_sCSVName As String
Public ReadOnly Property sCSVName As String
Get
Return m_sCSVName
End Get
End Property
Private m_StateList As New ObservableCollection(Of Door.DoorStates)
Public ReadOnly Property StateList As ObservableCollection(Of Door.DoorStates)
Get
Return m_StateList
End Get
End Property
Private m_SelState As Door.DoorStates
Public Property SelState As Door.DoorStates
Get
Return m_SelState
End Get
Set(value As Door.DoorStates)
m_SelState = value
End Set
End Property
Sub New(Door As Door, nMachineIndex As Integer)
m_nId = Door.nId
m_sDDFName = Door.sDDFName
m_nOldState = Door.nState
m_sCSVName = Door.sCSVName
If nMachineIndex = 1 Then
m_StateList = New ObservableCollection(Of Door.DoorStates)({Door.DoorStates.READY_FOR_PRODUCTION, Door.DoorStates.NOTPRODUCE})
ElseIf nMachineIndex = 2 Then
m_StateList = New ObservableCollection(Of Door.DoorStates)({Door.DoorStates.READY_FOR_PRODUCTION, Door.DoorStates.NOTPRODUCE, Door.DoorStates.PRODUCED})
End If
m_SelState = Door.DoorStates.NOTPRODUCE
End Sub
End Class
Public Class RestartDoor
Inherits VMBase
@@ -1,69 +0,0 @@

''' <summary>
''' A command whose sole purpose is to
''' relay its functionality to other
''' objects by invoking delegates. The
''' default return value for the CanExecute
''' method is 'true'.
''' </summary>
Public Class Command
Implements ICommand
#Region "Fields"
Private ReadOnly _execute As Action(Of Object)
Private ReadOnly _canExecute As Predicate(Of Object)
#End Region ' Fields
#Region "Constructors"
''' <summary>
''' Creates a new command that can always execute.
''' </summary>
''' <param name="execute">The execution logic.</param>
Public Sub New(ByVal execute As Action(Of Object))
Me.New(execute, Nothing)
End Sub
''' <summary>
''' Creates a new command.
''' </summary>
''' <param name="execute">The execution logic.</param>
''' <param name="canExecute">The execution status logic.</param>
Public Sub New(ByVal execute As Action(Of Object), ByVal canExecute As Predicate(Of Object))
If execute Is Nothing Then
Throw New ArgumentNullException("execute")
End If
_execute = execute
_canExecute = canExecute
End Sub
#End Region ' Constructors
#Region "ICommand Members"
<DebuggerStepThrough> _
Public Function CanExecute(ByVal parameter As Object) As Boolean Implements ICommand.CanExecute
Return If(_canExecute Is Nothing, True, _canExecute(parameter))
End Function
Public Custom Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged
AddHandler(ByVal value As EventHandler)
AddHandler CommandManager.RequerySuggested, value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
RemoveHandler CommandManager.RequerySuggested, value
End RemoveHandler
RaiseEvent(ByVal sender As System.Object, ByVal e As System.EventArgs)
End RaiseEvent
End Event
Public Sub Execute(ByVal parameter As Object) Implements ICommand.Execute
_execute(parameter)
End Sub
#End Region ' ICommand Members
End Class
+265 -41
View File
@@ -9,50 +9,95 @@
Assign a Key to every Panel ViewModel to use
it in xaml file(ProjectView.xaml).
-->
<local:FiveLakesUIVM x:Key="FiveLakesUIVM"/>
<local:PluginUIVM x:Key="PluginUIVM"/>
<local:MainMenuVM x:Key="MainMenuVM"/>
<local:DoorListPageVM x:Key="DoorListVM"/>
<local:MachinePageVM x:Key="MachinePageVM"/>
<local:StatisticsPageVM x:Key="StatisticsPageVM"/>
<!--Colori predefiniti-->
<SolidColorBrush x:Key="EgaltechBlue1" Color="#FF4D84C4" />
<SolidColorBrush x:Key="EgaltechBlue2" Color="#FF7096CE" />
<SolidColorBrush x:Key="EgaltechBlue3" Color="#FF90ABD9" />
<SolidColorBrush x:Key="EgaltechBlue4" Color="#FFB2C3E4" />
<SolidColorBrush x:Key="EgaltechWhite" Color="#FFFFFFFF" />
<SolidColorBrush x:Key="EgaltechGray" Color="#FF585858" />
<SolidColorBrush x:Key="EgaltechLightGray" Color="LightGray" />
<SolidColorBrush x:Key="EgaltechUltralightGray" Color="#FFF2F2F2" />
<SolidColorBrush x:Key="EgaltechGreen" Color="#FF00FF00" />
<SolidColorBrush x:Key="Roller" Color="#FF585858" />
<SolidColorBrush x:Key="TableFrame" Color="LightGray" />
<SolidColorBrush x:Key="Structure" Color="#61b0ff" />
<SolidColorBrush x:Key="Bridge" Color="LightBlue" />
<SolidColorBrush x:Key="Shuttle" Color="DarkGray" />
<!--#e8eef5-->
<Color x:Key="Effector_LightBlue_Color" R="232" G="238" B="245" A="255"/>
<SolidColorBrush x:Key="Effector_LightBlue" Color="{StaticResource Effector_LightBlue_Color}" />
<!--#afc5d6-->
<Color x:Key="Effector_Blue_Color" R="175" G="197" B="214" A="255"/>
<SolidColorBrush x:Key="Effector_Blue" Color="{StaticResource Effector_Blue_Color}" />
<!--#749fc4-->
<Color x:Key="Effector_DarkBlue_Color" R="116" G="159" B="196" A="255"/>
<SolidColorBrush x:Key="Effector_DarkBlue" Color="{StaticResource Effector_DarkBlue_Color}" />
<!--#92bde3-->
<Color x:Key="Effector_LightBlue_Status_Color" R="146" G="189" B="227" A="255"/>
<SolidColorBrush x:Key="Effector_LightBlue_Status" Color="{StaticResource Effector_LightBlue_Status_Color}" />
<!--#5682a6-->
<Color x:Key="Effector_Blue_Status_Color" R="86" G="130" B="166" A="255"/>
<SolidColorBrush x:Key="Effector_Blue_Status" Color="{StaticResource Effector_Blue_Status_Color}" />
<!--#cd5c5c-->
<Color x:Key="Effector_Red_Status_Color" R="205" G="92" B="92" A="255"/>
<SolidColorBrush x:Key="Effector_Red_Status" Color="{StaticResource Effector_Red_Status_Color}" />
<!--#b1cbaa-->
<Color x:Key="Effector_Green_Status_Color" R="177" G="203" B="170" A="255"/>
<SolidColorBrush x:Key="Effector_Green_Status" Color="{StaticResource Effector_Green_Status_Color}" />
<!--#9c9c9c-->
<Color x:Key="Effector_Gray_Status_Color" R="156" G="156" B="156" A="255"/>
<SolidColorBrush x:Key="Effector_Gray_Status" Color="{StaticResource Effector_Gray_Status_Color}" />
<!--#ffd932-->
<Color x:Key="Effector_Yellow_Status_Color" R="255" G="217" B="50" A="255"/>
<SolidColorBrush x:Key="Effector_Yellow_Status" Color="{StaticResource Effector_Yellow_Status_Color}" />
<!--#6398c7-->
<Color x:Key="Effector_LightBlue_SelStatus_Color" R="99" G="152" B="199" A="255"/>
<SolidColorBrush x:Key="Effector_LightBlue_SelStatus" Color="{StaticResource Effector_LightBlue_SelStatus_Color}" />
<!--#4b677e-->
<Color x:Key="Effector_Blue_SelStatus_Color" R="75" G="103" B="126" A="255"/>
<SolidColorBrush x:Key="Effector_Blue_SelStatus" Color="{StaticResource Effector_Blue_SelStatus_Color}" />
<!--#a94444-->
<Color x:Key="Effector_Red_SelStatus_Color" R="169" G="68" B="68" A="255"/>
<SolidColorBrush x:Key="Effector_Red_SelStatus" Color="{StaticResource Effector_Red_SelStatus_Color}" />
<!--#89aa81-->
<Color x:Key="Effector_Green_SelStatus_Color" R="137" G="170" B="129" A="255"/>
<SolidColorBrush x:Key="Effector_Green_SelStatus" Color="{StaticResource Effector_Green_SelStatus_Color}" />
<!--#7d7d7d-->
<Color x:Key="Effector_Gray_SelStatus_Color" R="125" G="125" B="125" A="255"/>
<SolidColorBrush x:Key="Effector_Gray_SelStatus" Color="{StaticResource Effector_Gray_SelStatus_Color}" />
<!--#dcb718-->
<Color x:Key="Effector_Yellow_SelStatus_Color" R="220" G="183" B="24" A="255"/>
<SolidColorBrush x:Key="Effector_Yellow_SelStatus" Color="{StaticResource Effector_Yellow_SelStatus_Color}" />
<!--#e5ebf1-->
<Color x:Key="Effector_White_SelStatus_Color" R="229" G="235" B="241" A="255"/>
<SolidColorBrush x:Key="Effector_White_SelStatus" Color="{StaticResource Effector_Yellow_SelStatus_Color}" />
<!--#92908d-->
<Color x:Key="Icarus_Gray_Color" R="146" G="144" B="141" A="255"/>
<SolidColorBrush x:Key="Icarus_Gray" Color="{StaticResource Icarus_Gray_Color}" />
<!--#3c89c9-->
<Color x:Key="Icarus_LightBlue_Color" R="60" G="137" B="201" A="255"/>
<SolidColorBrush x:Key="Icarus_LightBlue" Color="{StaticResource Icarus_LightBlue_Color}" />
<!--#2e5a81-->
<Color x:Key="Icarus_Blue_Color" R="46" G="90" B="129" A="255"/>
<SolidColorBrush x:Key="Icarus_Blue" Color="{StaticResource Icarus_Blue_Color}" />
<!--#50A388-->
<Color x:Key="Icarus_Green_Color" R="80" G="163" B="136" A="255"/>
<SolidColorBrush x:Key="Icarus_Green" Color="{StaticResource Icarus_Green_Color}" />
<!--#BC373E-->
<Color x:Key="Icarus_Orange_Color" R="188" G="55" B="62" A="255"/>
<SolidColorBrush x:Key="Icarus_Orange" Color="{StaticResource Icarus_Orange_Color}" />
<!--
<Color x:Key="Effector_Orange_Color" R="188" G="55" B="62" A="255"/>
<SolidColorBrush x:Key="Effector_Orange" Color="{StaticResource Effector_Orange_Color}" />-->
<!--#A74C77-->
<Color x:Key="Icarus_Purple_Color" R="167" G="76" B="119" A="255"/>
<SolidColorBrush x:Key="Icarus_Purple" Color="{StaticResource Icarus_Purple_Color}" />
<!--
<Color x:Key="Effector_Purple_Color" R="167" G="76" B="119" A="255"/>
<SolidColorBrush x:Key="Effector_Purple" Color="{StaticResource Effector_Purple_Color}" />-->
<!--Colori per EgtWPFLib5-->
<SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/>
<!--Colori default dei controlli-->
<SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/>
<SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/>
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/>
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/>
<SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6"/>
<SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/>
<SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/>
<SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/>
<SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/>
<Style x:Key="FocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="2" StrokeDashArray="1 2" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" SnapsToDevicePixels="true" StrokeThickness="1"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--Risorsa che toglie le animazioni dai menù popup per evitare che i menù mru di scelta dei file rimangano aperti se il file è grosso -->
<!--o viene eseguito un lua che non aggiorna l'interfaccia-->
@@ -65,6 +110,193 @@
<Thickness x:Key="WindowBorder_Thickness">2</Thickness>
<sys:Double x:Key="WindowBorder_Height">2</sys:Double>
<!--Button-->
<Style TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DoorList_Button" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Height" Value="40"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="2"/>
</Style>
<Style x:Key="Restart_Button" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Height" Value="40"/>
<Setter Property="Width" Value="150"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontWeight" Value="Regular"/>
<Setter Property="FontFamily" Value="/Resources/Fonts/#Roboto"/>
<Setter Property="Background" Value="{StaticResource Effector_DarkBlue}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="10,5,10,5"/>
</Style>
<!--ToggleButton-->
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Background" Value="{StaticResource Effector_Blue}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="FontFamily" Value="/Resources/Fonts/#Roboto"/>
<Setter Property="FontWeight" Value="Medium"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="Button.IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
</Trigger>
<Trigger Property="IsChecked" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Effector_DarkBlue}"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="White"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="MainMenu_ToggleButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="Padding" Value="25,0,25,0"/>
</Style>
<!--Border-->
<Style x:Key="Parameter_MachinePage_Border" TargetType="{x:Type GroupBox}">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="DarkGray"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
<!-- Custom SelectedItem colors for DataGrid -->
<Style x:Key="RowDataGrid_CustomHighLight" TargetType="{x:Type DataGridRow}">
<Setter Property="BorderBrush" Value="LightGray" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderThickness" Value="2,2,2,2" />
<!--<Setter Property="BorderBrush" Value="Cyan" />-->
<Setter Property="Padding" Value="0,0,0,0" />
<Setter Property="Margin" Value="-2,0,-2,0" />
<Setter Property="Foreground" Value="Blue" />
</Trigger>
</Style.Triggers>
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Black" />
</Style.Resources>
</Style>
<!--Styles for DataGrid columns-->
<Style x:Key="DataGridTextColumn_TextBlock" TargetType="{x:Type TextBlock}">
<Setter Property="TextAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="DataGridTextColumn_TextBox" TargetType="{x:Type TextBox}">
<Setter Property="TextAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<Style x:Key="DataGridTemplateColumn_ComboBox" TargetType="{x:Type ComboBox}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Left"/>
</Style>
</Setter.Value>
</Setter>
</Style>
<!--Style for page tabcontrol-->
<ControlTemplate x:Key="NoHeader_TabControl_ControlTemplate" TargetType="{x:Type TabControl}">
<Grid x:Name="templateRoot" ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">
<Border x:Name="contentPanel" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" KeyboardNavigation.DirectionalNavigation="Contained" KeyboardNavigation.TabIndex="1" KeyboardNavigation.TabNavigation="Local">
<ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style x:Key="NoHeader_TabControl" TargetType="{x:Type TabControl}">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Template" Value="{StaticResource NoHeader_TabControl_ControlTemplate}"/>
</Style>
<!-- Image -->
<Style x:Key="Button_Image" TargetType="{x:Type Image}">
<Setter Property="Stretch" Value="Uniform" />
</Style>
<!--Stili per disegno macchina con porte-->
<Style x:Key="Table" TargetType="Border">
@@ -99,12 +331,4 @@
<Setter Property="BorderThickness" Value="0"/>
</Style>
<!--Border-->
<Style x:Key="Parameter_MachinePage_Border" TargetType="{x:Type GroupBox}">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="DarkGray"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</ResourceDictionary>
@@ -12,77 +12,125 @@ Public Class Dictionary
#Region "Colors"
'Private m_Omag_Red As SolidColorBrush = Brushes.Red
'Public ReadOnly Property Omag_Red As SolidColorBrush
Private Shared m_Effector_LightBlue As SolidColorBrush = Application.Current.FindResource("Effector_LightBlue")
Public Shared ReadOnly Property Effector_LightBlue As SolidColorBrush
Get
Return m_Effector_LightBlue
End Get
End Property
Private Shared m_Effector_Blue As SolidColorBrush = Application.Current.FindResource("Effector_Blue")
Public Shared ReadOnly Property Effector_Blue As SolidColorBrush
Get
Return m_Effector_Blue
End Get
End Property
Private Shared m_Effector_DarkBlue As SolidColorBrush = Application.Current.FindResource("Effector_DarkBlue")
Public Shared ReadOnly Property Effector_DarkBlue As SolidColorBrush
Get
Return m_Effector_DarkBlue
End Get
End Property
Private Shared m_Effector_LightBlue_Status As SolidColorBrush = Application.Current.FindResource("Effector_LightBlue_Status")
Public Shared ReadOnly Property Effector_LightBlue_Status As SolidColorBrush
Get
Return m_Effector_LightBlue_Status
End Get
End Property
Private Shared m_Effector_Blue_Status As SolidColorBrush = Application.Current.FindResource("Effector_Blue_Status")
Public Shared ReadOnly Property Effector_Blue_Status As SolidColorBrush
Get
Return m_Effector_Blue_Status
End Get
End Property
Private Shared m_Effector_Red_Status As SolidColorBrush = Application.Current.FindResource("Effector_Red_Status")
Public Shared ReadOnly Property Effector_Red_Status As SolidColorBrush
Get
Return m_Effector_Red_Status
End Get
End Property
Private Shared m_Effector_Green_Status As SolidColorBrush = Application.Current.FindResource("Effector_Green_Status")
Public Shared ReadOnly Property Effector_Green_Status As SolidColorBrush
Get
Return m_Effector_Green_Status
End Get
End Property
Private Shared m_Effector_Gray_Status As SolidColorBrush = Application.Current.FindResource("Effector_Gray_Status")
Public Shared ReadOnly Property Effector_Gray_Status As SolidColorBrush
Get
Return m_Effector_Gray_Status
End Get
End Property
Private Shared m_Effector_Yellow_Status As SolidColorBrush = Application.Current.FindResource("Effector_Yellow_Status")
Public Shared ReadOnly Property Effector_Yellow_Status As SolidColorBrush
Get
Return m_Effector_Yellow_Status
End Get
End Property
Private Shared m_Effector_LightBlue_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_LightBlue_SelStatus")
Public Shared ReadOnly Property Effector_LightBlue_SelStatus As SolidColorBrush
Get
Return m_Effector_LightBlue_SelStatus
End Get
End Property
Private Shared m_Effector_Blue_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Blue_SelStatus")
Public Shared ReadOnly Property Effector_Blue_SelStatus As SolidColorBrush
Get
Return m_Effector_Blue_SelStatus
End Get
End Property
Private Shared m_Effector_Red_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Red_SelStatus")
Public Shared ReadOnly Property Effector_Red_SelStatus As SolidColorBrush
Get
Return m_Effector_Red_SelStatus
End Get
End Property
Private Shared m_Effector_Green_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Green_SelStatus")
Public Shared ReadOnly Property Effector_Green_SelStatus As SolidColorBrush
Get
Return m_Effector_Green_SelStatus
End Get
End Property
Private Shared m_Effector_Gray_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Gray_SelStatus")
Public Shared ReadOnly Property Effector_Gray_SelStatus As SolidColorBrush
Get
Return m_Effector_Gray_SelStatus
End Get
End Property
Private Shared m_Effector_Yellow_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_Yellow_SelStatus")
Public Shared ReadOnly Property Effector_Yellow_SelStatus As SolidColorBrush
Get
Return m_Effector_Yellow_SelStatus
End Get
End Property
Private Shared m_Effector_White_SelStatus As SolidColorBrush = Application.Current.FindResource("Effector_White_SelStatus")
Public Shared ReadOnly Property Effector_White_SelStatus As SolidColorBrush
Get
Return m_Effector_White_SelStatus
End Get
End Property
'Private Shared m_Effector_Orange As SolidColorBrush = Application.Current.FindResource("Effector_Orange")
'Public Shared ReadOnly Property Effector_Orange As SolidColorBrush
' Get
' Return m_Omag_Red
' Return m_Effector_Orange
' End Get
'End Property
'Private Shared m_Button_Static_Background As SolidColorBrush = New BrushConverter().ConvertFrom("#FFDDDDDD")
'Public Shared ReadOnly Property Button_Static_Background As SolidColorBrush
' Get
' Return m_Button_Static_Background
' End Get
'End Property
'Private Shared m_TabControl_Header_Background As LinearGradientBrush = Application.Current.FindResource("TabItem.Static.Background")
'Public Shared ReadOnly Property TabControl_Header_Background As LinearGradientBrush
' Get
' Return m_TabControl_Header_Background
' End Get
'End Property
'Private Shared m_Icarus_Gray As SolidColorBrush = Application.Current.FindResource("Icarus_Gray")
'Public Shared ReadOnly Property Icarus_Gray As SolidColorBrush
' Get
' Return m_Icarus_Gray
' End Get
'End Property
'Private Shared m_Icarus_LightBlue As SolidColorBrush = Application.Current.FindResource("Icarus_LightBlue")
'Public Shared ReadOnly Property Icarus_LightBlue As SolidColorBrush
' Get
' Return m_Icarus_LightBlue
' End Get
'End Property
'Private Shared m_Icarus_Blue As SolidColorBrush = Application.Current.FindResource("Icarus_Blue")
'Public Shared ReadOnly Property Icarus_Blue As SolidColorBrush
' Get
' Return m_Icarus_Blue
' End Get
'End Property
'Private Shared m_Icarus_Green As SolidColorBrush = Application.Current.FindResource("Icarus_Green")
'Public Shared ReadOnly Property Icarus_Green As SolidColorBrush
' Get
' Return m_Icarus_Green
' End Get
'End Property
'Private Shared m_Icarus_Orange As SolidColorBrush = Application.Current.FindResource("Icarus_Orange")
'Public Shared ReadOnly Property Icarus_Orange As SolidColorBrush
' Get
' Return m_Icarus_Orange
' End Get
'End Property
'Private Shared m_Icarus_Purple As SolidColorBrush = Application.Current.FindResource("Icarus_Purple")
'Public Shared ReadOnly Property Icarus_Purple As SolidColorBrush
' Get
' Return m_Icarus_Purple
' End Get
'End Property
'<SolidColorBrush x : Key="Icarus_Gray" Color="#92908d" />
'<SolidColorBrush x : Key="Icarus_LightBlue" Color="#3c89c9" />
'<SolidColorBrush x : Key="Icarus_Blue" Color="#2e5a81" />
'<SolidColorBrush x : Key="Icarus_Green" Color="#40826d" />
'<SolidColorBrush x : Key="Icarus_Orange" Color="#C37636" />
'<SolidColorBrush x : Key="Icarus_Purple" Color="#990066" />
#End Region ' Colors
End Class
@@ -1,711 +0,0 @@
Imports System.IO
Imports System.Threading
Imports MS.Internal
Imports Effector.Plugin.FiveLakes.ThreadData
Imports System.Windows.Threading
Public Class ExecProcessManager
Public Event m_AllArgsProcessed()
Public Enum ExecutionThreadStatuses As Integer
RUNNING = 1
STOPPED = 2
End Enum
Private Enum ProcessManagerStates
NULL = 0
OPEN = 1
CLOSE = 2
End Enum
Private m_ProcessManagerTimer As New DispatcherTimer
Private m_ProcessManagerState As ProcessManagerStates
Private m_ProcessManagerV As ProcessManagerV
Public ReadOnly Property ProcessManagerV As ProcessManagerV
Get
Return m_ProcessManagerV
End Get
End Property
' riferimento al thread principale
Private m_ExecutionThread As Thread
Private m_ExecutionThreadStatus As ExecutionThreadStatuses = ExecutionThreadStatuses.STOPPED
Public ReadOnly Property ExecutionThreadStatus As ExecutionThreadStatuses
Get
Return m_ExecutionThreadStatus
End Get
End Property
' array dei thread
Private m_ThreadList As Thread()
' array dei dati dei thread
Private m_ThreadDataList As ThreadData()
Friend ReadOnly Property ThreadDataList As ThreadData()
Get
Return m_ThreadDataList
End Get
End Property
' variabile che ferma i processi
Private m_bStopProcess As Boolean = False
' variabile che conferma chiusura dei processi
Private m_bExecutionThreadStoped As Boolean = False
' numero massimo di istanze del cam
Private m_MaxCamInstances As Integer = 1
' nome dell'eseguibile da lanciare
Private m_sProcessFileName As String = ""
' stringa di argomenti dell'eseguibile da lanciare
Private m_sProcessArguments As String = ""
' coda delle cose da eseguire
Private ArgumentsQueueLock As New Object
Private m_ArgumentsQueue As New Queue(Of ProcessArgs)
Public ReadOnly Property ArgumentsQueue As Queue(Of ProcessArgs)
Get
Return m_ArgumentsQueue
End Get
End Property
' coda dei risultati
Private ArgumentsResultQueueLock As New Object
Private m_ArgumentsResultQueue As New Queue(Of ProcessArgsResult)
Public ReadOnly Property ArgumentsResultQueue As Queue(Of ProcessArgsResult)
Get
Return m_ArgumentsResultQueue
End Get
End Property
' funzione che richiede prossimo elemento da processare
Private m_delGetNextProcessArgs As Func(Of ProcessArgs)
Public Sub SetGetNextProcessArgs(GetNextProcessArgs As Func(Of ProcessArgs))
m_delGetNextProcessArgs = GetNextProcessArgs
End Sub
' funzione di pre processing dell'elemento
Private m_delPreProcess As Func(Of ProcessArgs, ProcessArgs)
Public Sub SetPreProcess(PreProcess As Func(Of ProcessArgs, ProcessArgs))
m_delPreProcess = PreProcess
End Sub
' funzione di post processing dell'elemento
Private m_delPostProcess As Action(Of ProcessArgsResult)
Public Sub SetPostProcess(PostProcess As Action(Of ProcessArgsResult))
m_delPostProcess = PostProcess
End Sub
Sub New(sProcessFileName As String, sProcessArguments As String)
m_sProcessFileName = sProcessFileName
m_sProcessArguments = sProcessArguments
m_ProcessManagerTimer.Interval = New TimeSpan(0, 0, 1)
AddHandler m_ProcessManagerTimer.Tick, AddressOf ProcessManagerTimer_Tick
m_ProcessManagerTimer.Start()
End Sub
Private Sub ProcessManagerTimer_Tick(sender As Object, e As EventArgs)
Select Case m_ProcessManagerState
Case ProcessManagerStates.OPEN
' creo finestra statistiche processi
m_ProcessManagerV = New ProcessManagerV(Application.Current.MainWindow, New ProcessManagerVM(Me))
ProcessManagerV.Show()
m_ProcessManagerState = ProcessManagerStates.NULL
Case ProcessManagerStates.CLOSE
' chiudo finestra statistiche processi
If Not IsNothing(m_ProcessManagerV) Then
ProcessManagerV.Close()
m_ProcessManagerV = Nothing
End If
m_ProcessManagerState = ProcessManagerStates.NULL
End Select
End Sub
Public Function ArgumentsEnqueue(ProcessArgs As ProcessArgs) As Boolean
If ProcessArgs.nId <= 0 OrElse String.IsNullOrWhiteSpace(ProcessArgs.sArgs) Then Return False
SyncLock ArgumentsQueueLock
m_ArgumentsQueue.Enqueue(ProcessArgs)
End SyncLock
Return True
End Function
Public Function ArgumentsDequeue() As ProcessArgs
Dim DequeueProcessArgs As ProcessArgs = Nothing
SyncLock ArgumentsQueueLock
If m_ArgumentsQueue.Count > 0 Then
DequeueProcessArgs = m_ArgumentsQueue.Dequeue()
End If
End SyncLock
Return DequeueProcessArgs
End Function
Public Function ArgumentsQueueCount() As Integer
Dim nCount As Integer = 0
SyncLock ArgumentsQueueLock
nCount = m_ArgumentsQueue.Count
End SyncLock
Return nCount
End Function
Public Function ArgumentsResultEnqueue(ProcessArgsResult As ProcessArgsResult) As Boolean
SyncLock ArgumentsResultQueueLock
m_ArgumentsResultQueue.Enqueue(ProcessArgsResult)
End SyncLock
Return True
End Function
Public Function ArgumentsResultDequeue() As ProcessArgsResult
Dim DequeueProcessArgsResult As ProcessArgsResult = Nothing
SyncLock ArgumentsResultQueueLock
If m_ArgumentsResultQueue.Count > 0 Then
DequeueProcessArgsResult = m_ArgumentsResultQueue.Dequeue()
End If
End SyncLock
Return DequeueProcessArgsResult
End Function
Public Function ArgumentsResultQueueCount() As Integer
Dim nCount As Integer = 0
SyncLock ArgumentsResultQueueLock
nCount = m_ArgumentsResultQueue.Count
End SyncLock
Return nCount
End Function
Public Sub SetMaxCamInstances(nValue As Integer)
' Numero di core logici da utilizzare (minimo tra presenti sul PC e imposti da INI)
Dim nMaxThread As Integer = Math.Min(Environment.ProcessorCount, nValue)
m_MaxCamInstances = nMaxThread
End Sub
' funzione che avvia thread principale
Public Sub StartExecutionThread()
If m_ExecutionThreadStatus = ExecutionThreadStatuses.RUNNING Then Return
m_bStopProcess = False
m_bExecutionThreadStoped = False
m_ExecutionThread = New Thread(Sub()
ExecutionProcess()
End Sub)
m_ExecutionThread.SetApartmentState(ApartmentState.STA)
' avvio thread di gestione della macchina che avvia la connessione
m_ExecutionThread.Start()
m_ExecutionThreadStatus = ExecutionThreadStatuses.RUNNING
' lancio apertura finestra statistiche processi
m_ProcessManagerState = ProcessManagerStates.OPEN
End Sub
Public Sub StopExecutionThread()
If m_ExecutionThreadStatus = ExecutionThreadStatuses.STOPPED Then Return
m_bStopProcess = True
While Not m_bExecutionThreadStoped
Thread.Sleep(100)
End While
If Not IsNothing(m_ExecutionThread) Then
m_ExecutionThread.Abort()
While Not m_ExecutionThread.ThreadState = ThreadState.Aborted
Thread.Sleep(100)
End While
m_ExecutionThread = Nothing
End If
m_ThreadList = Nothing
m_ExecutionThreadStatus = ExecutionThreadStatuses.STOPPED
' lancio chiusura finestra statistiche processi
m_ProcessManagerState = ProcessManagerStates.CLOSE
End Sub
' funzione di esecuzione del thread principale che gestice i processi
Private Sub ExecutionProcess()
Dim bStopMainProcess As Boolean = False
Dim nStartingProc As Integer = 0
While Not bStopMainProcess
bStopMainProcess = m_bStopProcess
' se processo fermato, fermo i thread
If bStopMainProcess Then
If Not IsNothing(m_ThreadList) AndAlso m_ThreadList.Count > 0 AndAlso Not IsNothing(m_ThreadList(0)) Then
' li fermo
m_bStopProcess = True
' verifico siano terminati
Dim bOneNotEnded As Boolean = True
While bOneNotEnded
bOneNotEnded = False
For Each Thread In m_ThreadList
If Not IsNothing(Thread) Then
If Thread.IsAlive Then
bOneNotEnded = True
End If
End If
Next
End While
' pulisco la lista
For ThreadIndex = 0 To m_ThreadList.Count - 1
m_ThreadList(ThreadIndex) = Nothing
Next
m_bStopProcess = False
End If
m_bExecutionThreadStoped = True
Return
End If
' se lista processi nulla o vuota, li faccio partire
If (IsNothing(m_ThreadList) OrElse m_ThreadList.Count = 0) Then
m_ThreadList = New Thread(m_MaxCamInstances - 1) {}
m_ThreadDataList = New ThreadData(m_MaxCamInstances - 1) {}
For nThreadIndex = 0 To m_MaxCamInstances - 1
Dim ThreadId As Integer = nThreadIndex
m_ThreadList(nThreadIndex) = New Thread(Sub()
ThreadFunction(ThreadId)
End Sub)
m_ThreadList(nThreadIndex).SetApartmentState(ApartmentState.STA)
' avvio thread di gestione della macchina che avvia la connessione
m_ThreadList(nThreadIndex).Start()
Thread.Sleep(100)
Next
End If
' se qualche processo in stop, lo faccio ripartire
For ThreadIndex = 0 To m_ThreadList.Count - 1
If ThreadIndex < m_ThreadList.Count Then
Dim Thread = m_ThreadList(ThreadIndex)
If Not IsNothing(Thread) Then
If Thread.ThreadState = ThreadState.Stopped OrElse
Thread.ThreadState = ThreadState.Aborted OrElse
Thread.ThreadState = ThreadState.Suspended OrElse
(Not m_ThreadDataList(ThreadIndex).ProcessStatus = ProcessStatuses.TOBESTARTED AndAlso
(IsNothing(m_ThreadDataList(ThreadIndex).Process) OrElse
(Not IsNothing(m_ThreadDataList(ThreadIndex).Process) AndAlso m_ThreadDataList(ThreadIndex).Process.HasExited))) Then
' inserire un ritardo di rilancio?
' lo chiudo e rilancio
'Thread.Sleep(500)
Thread.Abort()
Thread.Sleep(100)
While Not Thread.ThreadState = ThreadState.Aborted
Thread.Sleep(100)
End While
Thread = Nothing
Dim ThreadId As Integer = ThreadIndex
m_ThreadList(ThreadIndex) = New Thread(Sub()
ThreadFunction(ThreadId)
End Sub)
m_ThreadList(ThreadIndex).SetApartmentState(ApartmentState.STA)
' avvio thread di gestione della macchina che avvia la connessione
m_ThreadList(ThreadIndex).Start()
End If
Else
Dim ThreadId As Integer = ThreadIndex
If ThreadIndex < m_ThreadList.Count Then
m_ThreadList(ThreadIndex) = New Thread(Sub()
ThreadFunction(ThreadId)
End Sub)
m_ThreadList(ThreadIndex).SetApartmentState(ApartmentState.STA)
' avvio thread di gestione della macchina che avvia la connessione
m_ThreadList(ThreadIndex).Start()
End If
End If
End If
Next
' verifico se coda vuota e tutti i processi hanno finito
Dim nQueueArgs As Integer = 0
SyncLock ArgumentsQueueLock
nQueueArgs = m_ArgumentsQueue.Count
End SyncLock
If nQueueArgs = 0 Then
Dim bProcessWaiting As Boolean = False
For Each ThreadData In m_ThreadDataList
If ThreadData.ProcessStatus = ProcessStatuses.WAITINGANSWER OrElse ThreadData.ProcessStatus = ProcessStatuses.ANSWERRECEIVED Then
bProcessWaiting = True
Exit For
End If
Next
If Not bProcessWaiting Then
' creo thread per lanciare evento asincrono di fine calcolo
Dim AllArgsProcessedThread = New Thread(Sub()
RaiseEvent m_AllArgsProcessed()
End Sub)
AllArgsProcessedThread.SetApartmentState(ApartmentState.STA)
AllArgsProcessedThread.Start()
End If
End If
Thread.Sleep(1000)
End While
End Sub
' funzione di esecuzione del singolo processo che comunica con il programma
Private Sub ThreadFunction(ThreadIndex As Integer)
Dim MyThreadData As New ThreadData
m_ThreadDataList(ThreadIndex) = MyThreadData
'Dim CurrThreadStat As New ThreadStat(ThreadIndex, DateTime.Now)
'HistoryThreadDataList.Add(CurrThreadStat)
'MyThreadData.SetThreadStat(CurrThreadStat)
'Dim sDrive As String = "c" ' If(ThreadIndex Mod 2 = 0, "A", "B")
'Dim sCurrDdfDir As String = sDrive & ":\EgtData\WebDoor\Ddf"
'Dim stopWatch As New Stopwatch()
'Dim lExeTime As Long = 0
'Dim lOtherTime As Long = 0
' avvio processo
Dim Proc As Process = New Process()
Proc.StartInfo.FileName = m_sProcessFileName
Proc.StartInfo.RedirectStandardInput = True
Proc.StartInfo.RedirectStandardOutput = True
Proc.StartInfo.Arguments = ThreadIndex.ToString() & " " & m_sProcessArguments
Proc.StartInfo.UseShellExecute = False
Proc.StartInfo.CreateNoWindow = True
AddHandler Proc.OutputDataReceived, AddressOf Thread_OutputDataReceived
If Proc.Start() Then
'Dim CurrPocStat As New ProcStat(DateTime.Now)
'CurrThreadStat.ProcExecutionList.Add(CurrPocStat)
Proc.BeginOutputReadLine()
MyThreadData.SetProcess(Proc)
MyThreadData.SetProcessStatus(ProcessStatuses.NULL)
'Dim nProc0Wait As Integer = 0
' ciclo per leggere coda ed eseguire
While Not m_bStopProcess AndAlso Not Proc.HasExited
Select Case MyThreadData.ProcessStatus
Case ThreadData.ProcessStatuses.NULL
'MyThreadData.SetThreadOperation(ThreadOperations.WaitingData)
' se c'e' qualcosa da processare
'Dim nNumTaskToProcess As Integer = 0
'If ThreadIndex = 0 Then
' nNumTaskToProcess = currWDC.numTask2proc
' If nNumTaskToProcess > 0 Then
' If Not m_bCheckOrder Then m_bCheckOrder = True
' Else
' If m_bCheckOrder Then m_bCheckOrder = False
' Thread.Sleep(100)
' End If
'ElseIf m_bCheckOrder Then
' nNumTaskToProcess = currWDC.numTask2proc
' If nNumTaskToProcess = 0 Then
' m_bCheckOrder = False
' End If
'End If
Dim NextProcessArgs As ProcessArgs = Nothing
If Not IsNothing(m_delGetNextProcessArgs) Then
NextProcessArgs = m_delGetNextProcessArgs()
Else
NextProcessArgs = ArgumentsDequeue()
End If
If Not IsNothing(NextProcessArgs) AndAlso NextProcessArgs.nId > 0 AndAlso Not String.IsNullOrWhiteSpace(NextProcessArgs.sArgs) Then
If Not IsNothing(m_delPreProcess) Then
NextProcessArgs = m_delPreProcess(NextProcessArgs)
End If
MyThreadData.SetCurrRequest(NextProcessArgs)
Proc.StandardInput.WriteLine(ThreadIndex & "," & NextProcessArgs.sArgs)
MyThreadData.SetProcessStatus(ThreadData.ProcessStatuses.WAITINGANSWER)
End If
'If m_bCheckOrder Then
' Dim LastRequest As Dictionary(Of String, CalcReqtDTO) = currWDC.queueList(1)
' If LastRequest.Count > 0 Then
' MyThreadData.SetThreadOperation(ThreadOperations.FoundRequest)
' Dim ConvItem As KeyValuePair(Of String, String)
' ConvItem = New KeyValuePair(Of String, String)(LastRequest.First().Key, LastRequest.First().Value.DDF)
' MyThreadData.SetCurrRequest(ConvItem)
' ' vecchia versione
' 'MyThreadData.SetCurrRequest(LastRequest.First())
' Dim Item As KeyValuePair(Of String, String) = MyThreadData.CurrRequest
' Dim bOk As Boolean = Not IsNothing(Item)
' If bOk Then
' ' avvio cronometro
' 'stopWatch.Reset()
' stopWatch.Restart()
' ' svuoto vecchio set file della porta richiesta
' Dim fileList As String() = Directory.GetFiles(sCurrDdfDir, Item.Key + ".*")
' ' elimino vecchi
' If Not IsNothing(fileList) Then
' For Each sFile In fileList
' Try
' File.Delete(sFile)
' Catch ex As Exception
' End Try
' Next
' End If
' ' scrivo ddf
' MyThreadData.SetThreadOperation(ThreadOperations.WritingDdf)
' MyThreadData.SetDdfPath(sCurrDdfDir & "\" & Item.Key & ".ddf")
' Dim sDdfPath As String = MyThreadData.sDdfPath
' Try
' File.WriteAllText(sDdfPath, Item.Value)
' Catch ex As Exception
' bOk = False
' End Try
' If bOk Then
' MyThreadData.SetThreadOperation(ThreadOperations.ProcessingDdf)
' Proc.StandardInput.WriteLine(ThreadIndex & "," & sDdfPath)
' MyThreadData.SetWaitProcAnswer(ThreadData.ProcComm.WaitingAnswer)
' End If
' End If
' Else
' Thread.Sleep(100)
' End If
'Else
' Thread.Sleep(100)
'End If
Case ThreadData.ProcessStatuses.WAITINGANSWER
Thread.Sleep(10)
Case ThreadData.ProcessStatuses.ANSWERRECEIVED
Dim NewProcessArgsResult As New ProcessArgsResult(MyThreadData.CurrRequest, MyThreadData.nProcResult)
If Not IsNothing(m_delPostProcess) Then
m_delPostProcess(NewProcessArgsResult)
End If
ArgumentsResultEnqueue(NewProcessArgsResult)
'Dim Item As ProcessArgs = MyThreadData.CurrRequest
'Dim sDdfPath As String = MyThreadData.sDdfPath
'Dim bOk As Boolean = True
'' salvo exe time...
'stopWatch.Stop()
'lExeTime = stopWatch.ElapsedMilliseconds
'stopWatch.Restart()
'Dim procResults As New List(Of CalcResultDTO)
'Dim currRes As New CalcResultDTO
'Dim fContent As String = ""
'MyThreadData.SetThreadOperation(ThreadOperations.ReadingSvg)
'' verifico esistenza file svg e lo carico
'bOk = GetFileContent(Path.ChangeExtension(sDdfPath, "svg"), fContent)
'' !!! ToDo: inserire TIPO di richiesta secondo quanto ricevuto....
'' invio risposta
'currRes.Validated = MyThreadData.nProcResult = 0 AndAlso bOk
'currRes.DoorIdVers = Item.Key
'' per ora cablato a svg, prendere da MimeType richiesta...
'currRes.MimeType = "svg"
'' se NON fosse validato --> messo il messaggio...
'If (currRes.Validated) Then
' currRes.RawContent = fContent
'Else
' bOk = GetFileContent(Path.ChangeExtension(sDdfPath, "txt"), fContent)
' currRes.ErrorMsg = fContent
'End If
'MyThreadData.SetThreadOperation(ThreadOperations.SendResult)
'procResults.Add(currRes)
'Dim respPut As String = currWDC.SendProcResults(procResults)
'stopWatch.Stop()
'lOtherTime = stopWatch.ElapsedMilliseconds
'CurrPocStat.IncrementDoneRequest()
'' aggiorno thread display...
'UpdateThreadList(Item.Key, lExeTime, lOtherTime)
'' cambio nomi file generati in old
'Dim OldSvg As String = Path.ChangeExtension(sDdfPath, "svg")
'Dim NewSvg As String = Path.GetDirectoryName(sDdfPath) & "\" & Path.GetFileNameWithoutExtension(sDdfPath) & "_old.svg"
'Try
' File.Delete(NewSvg)
'Catch ex As Exception
'End Try
'Try
' File.Delete(Path.ChangeExtension(NewSvg, "txt"))
'Catch ex As Exception
'End Try
'Try
' File.Delete(Path.ChangeExtension(NewSvg, "log"))
'Catch ex As Exception
'End Try
'Try
' File.Delete(Path.ChangeExtension(NewSvg, "nge"))
'Catch ex As Exception
'End Try
'Try
' File.Delete(Path.ChangeExtension(NewSvg, "ddf"))
'Catch ex As Exception
'End Try
'Try
' File.Move(OldSvg, NewSvg)
'Catch ex As Exception
'End Try
'Try
' File.Move(Path.ChangeExtension(OldSvg, "txt"), Path.ChangeExtension(NewSvg, "txt"))
'Catch ex As Exception
'End Try
'Try
' File.Move(Path.ChangeExtension(OldSvg, "log"), Path.ChangeExtension(NewSvg, "log"))
'Catch ex As Exception
'End Try
'Try
' File.Move(Path.ChangeExtension(OldSvg, "nge"), Path.ChangeExtension(NewSvg, "nge"))
'Catch ex As Exception
'End Try
'Try
' File.Move(Path.ChangeExtension(OldSvg, "ddf"), Path.ChangeExtension(NewSvg, "ddf"))
'Catch ex As Exception
'End Try
MyThreadData.SetProcessStatus(ThreadData.ProcessStatuses.NULL)
End Select
End While
' CurrPocStat.SetStopProc(DateTime.Now)
If m_bStopProcess Then
Proc.StandardInput.WriteLine("quit")
End If
End If
' CurrThreadStat.SetStopThread(DateTime.Now)
MyThreadData.SetProcess(Nothing)
' MyThreadData.SetThreadOperation(ThreadOperations.Closed)
End Sub
Private Sub Thread_OutputDataReceived(sender As Object, e As DataReceivedEventArgs)
Dim sResult As String = e.Data
If Not String.IsNullOrWhiteSpace(sResult) AndAlso sResult.StartsWith("#42315#,") Then
Dim Results() As String = sResult.Split(","c)
If Results.Count >= 2 Then
Dim nIndex As Integer = -1
Dim nResult As Integer = -1
Dim dResult As Integer = -1
If Integer.TryParse(Results(1), nIndex) AndAlso nIndex >= 0 Then
If Integer.TryParse(Results(2), nResult) AndAlso nResult >= 0 Then
m_ThreadDataList(nIndex).SetProcResult(nResult)
ElseIf StringToDouble(Results(2), dResult) AndAlso dResult >= 0 Then
nResult = Math.Floor(dResult)
m_ThreadDataList(nIndex).SetProcResult(nResult)
End If
m_ThreadDataList(nIndex).SetProcessStatus(ThreadData.ProcessStatuses.ANSWERRECEIVED)
End If
End If
End If
End Sub
End Class
Public Class ThreadData
'Enum ThreadOperations As Integer
' WaitingData = 1
' FoundRequest = 2
' WritingDdf = 3
' ProcessingDdf = 4
' ReadingSvg = 5
' SendResult = 6
' Closed = 10
'End Enum
Public Enum ProcessStatuses As Integer
NULL = 0
WAITINGANSWER = 1
ANSWERRECEIVED = 2
TOBESTARTED = 10
End Enum
Private m_ProcessStatus As ProcessStatuses = ProcessStatuses.TOBESTARTED
Public ReadOnly Property ProcessStatus As ProcessStatuses
Get
Return m_ProcessStatus
End Get
End Property
Friend Sub SetProcessStatus(value As ProcessStatuses)
m_ProcessStatus = value
End Sub
Private m_CurrRequest As ProcessArgs
Public ReadOnly Property CurrRequest As ProcessArgs
Get
Return m_CurrRequest
End Get
End Property
Friend Sub SetCurrRequest(value As ProcessArgs)
m_CurrRequest = value
End Sub
'Private m_sDdfPath As String
'Public ReadOnly Property sDdfPath As String
' Get
' Return m_sDdfPath
' End Get
'End Property
'Friend Sub SetDdfPath(value As String)
' m_sDdfPath = value
'End Sub
Private m_nProcResult As Integer
Public ReadOnly Property nProcResult As Integer
Get
Return m_nProcResult
End Get
End Property
Friend Sub SetProcResult(value As Integer)
m_nProcResult = value
End Sub
'Private m_ThreadOperation As ThreadOperations
'Public ReadOnly Property ThreadOperation As ThreadOperations
' Get
' Return m_ThreadOperation
' End Get
'End Property
'Friend Sub SetThreadOperation(value As ThreadOperations)
' m_ThreadOperation = value
'End Sub
Private m_Process As Process
Public ReadOnly Property Process As Process
Get
Return m_Process
End Get
End Property
Friend Sub SetProcess(value As Process)
m_Process = value
End Sub
'Private m_ThreadStat As ThreadStat
'Public ReadOnly Property ThreadStat As ThreadStat
' Get
' Return m_ThreadStat
' End Get
'End Property
'Friend Sub SetThreadStat(value As ThreadStat)
' m_ThreadStat = value
'End Sub
End Class
Public Class ProcessArgs
Private m_nId As Integer
Public ReadOnly Property nId As Integer
Get
Return m_nId
End Get
End Property
Private m_sArgs As String
Public ReadOnly Property sArgs As String
Get
Return m_sArgs
End Get
End Property
Sub New(nId As Integer, sArgs As String)
m_nId = nId
m_sArgs = sArgs
End Sub
End Class
Public Class ProcessArgsResult
Private m_ProcessArgs As ProcessArgs
Public ReadOnly Property ProcessArgs As ProcessArgs
Get
Return m_ProcessArgs
End Get
End Property
Private m_nResult As Integer
Public ReadOnly Property nResult As Integer
Get
Return m_nResult
End Get
End Property
Public Sub SetResult(nResult As Integer)
m_nResult = nResult
End Sub
Sub New(ProcessArgs As ProcessArgs, nResult As Integer)
m_ProcessArgs = ProcessArgs
m_nResult = nResult
End Sub
End Class
@@ -1,76 +0,0 @@
Imports System.Globalization
Imports System.Runtime.InteropServices
Imports System.Text
Public Module GenInterface
'-------------------------------- IniFile : Get --------------------------------------------------
<DllImport("kernel32.dll", CharSet:=CharSet.Unicode)>
Public Function GetPrivateProfileInt(
lpAppName As String,
lpKeyName As String,
nDefault As Integer,
lpFileName As String) As Integer
End Function
Public Function GetPrivateProfileDouble(
lpAppName As String,
lpKeyName As String,
dDefault As Double,
lpFileName As String) As Double
Dim sValue As String = String.Empty
GetPrivateProfileString(lpAppName, lpKeyName, dDefault.ToString(), sValue, lpFileName)
Dim nPos As Integer = sValue.IndexOf(";")
If nPos >= 0 Then
sValue = sValue.Remove(nPos)
End If
Dim dValue As Double
If Not Double.TryParse(sValue, NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, dValue) Then
dValue = dDefault
End If
Return dValue
End Function
<DllImport("kernel32.dll", CharSet:=CharSet.Unicode)>
Private Function GetPrivateProfileString(
lpAppName As String,
lpKeyName As String,
lpDefault As String,
lpReturnedString As StringBuilder,
nSize As Integer,
lpFileName As String) As Integer
End Function
Public Function GetPrivateProfileString(
lpAppName As String,
lpKeyName As String,
lpDefault As String,
ByRef lpString As String,
lpFileName As String) As Integer
Dim sb As New StringBuilder(1024)
Dim nRet As Integer = GetPrivateProfileString(lpAppName, lpKeyName, lpDefault, sb, sb.Capacity, lpFileName)
lpString = sb.ToString
Return nRet
End Function
'-------------------------------- IniFile : Write ------------------------------------------------
<DllImport("kernel32.dll", CharSet:=CharSet.Unicode)>
Public Function WritePrivateProfileString(
lpAppName As String,
lpKeyName As String,
lpString As String,
lpFileName As String) As Boolean
End Function
'-------------------------------- Windows --------------------------------------------------------
Public Enum SW As Integer
HIDE = 0
SHOWMAXIMIZED = 3
RESTORE = 9
End Enum
<DllImport("user32.dll")>
Public Function ShowWindow(hWnd As IntPtr, nCmdShow As Integer) As Boolean
End Function
End Module
@@ -1,97 +0,0 @@
Imports System.Collections.ObjectModel
Public Structure IdNameStruct
Private m_Id As Integer
Public Property Id As Integer
Get
Return m_Id
End Get
Set(value As Integer)
m_Id = value
End Set
End Property
Private m_Name As String
Public Property Name As String
Get
Return m_Name
End Get
Set(value As String)
m_Name = value
End Set
End Property
Sub New(Id As Integer, Name As String)
m_Id = Id
m_Name = Name
End Sub
Public Overrides Function ToString() As String
Return Name
End Function
Public Shared Function IndFromId(Id As Integer, List As ObservableCollection(Of IdNameStruct)) As Integer
For i = 0 To List.Count - 1
If List(i).Id = Id Then Return i
Next
Return 0
End Function
Public Shared Function IndFromId(Id As Integer, List As List(Of IdNameStruct)) As Integer
For i = 0 To List.Count - 1
If List(i).Id = Id Then Return i
Next
Return 0
End Function
Public Shared Function IdFromInd(Ind As Integer, List As ObservableCollection(Of IdNameStruct)) As Integer
Return List(Ind).Id
End Function
Public Shared Function IdFromInd(Ind As Integer, List As List(Of IdNameStruct)) As Integer
Return List(Ind).Id
End Function
Public Shared Function IndFromId(Id As Integer, List As ObservableCollection(Of Object)) As Integer
For i = 0 To List.Count - 1
If TypeOf (List(i)) Is IdNameStruct AndAlso DirectCast(List(i), IdNameStruct).Id = Id Then
Return i
End If
Next
Return 0
End Function
Public Shared Function IndFromId(Id As Integer, List As List(Of Object)) As Integer
For i = 0 To List.Count - 1
If TypeOf (List(i)) Is IdNameStruct AndAlso DirectCast(List(i), IdNameStruct).Id = Id Then
Return i
End If
Next
Return 0
End Function
Public Shared Function IdFromInd(Ind As Integer, List As ObservableCollection(Of Object)) As Integer
If TypeOf (List(Ind)) Is IdNameStruct Then
Return DirectCast(List(Ind), IdNameStruct).Id
End If
Return 0
End Function
Public Shared Function IdFromInd(Ind As Integer, List As List(Of Object)) As Integer
If TypeOf (List(Ind)) Is IdNameStruct Then
Return DirectCast(List(Ind), IdNameStruct).Id
End If
Return 0
End Function
Public Shared Function IdFromName(Name As String, List As ObservableCollection(Of Object)) As Integer
For i = 0 To List.Count - 1
If DirectCast(List(i), IdNameStruct).Name = Name Then Return DirectCast(List(i), IdNameStruct).Id
Next
Return 0
End Function
Public Shared Function IdFromName(Name As String, List As List(Of Object)) As Integer
For i = 0 To List.Count - 1
If DirectCast(List(i), IdNameStruct).Name = Name Then Return DirectCast(List(i), IdNameStruct).Id
Next
Return 0
End Function
End Structure
@@ -1,65 +0,0 @@
'----------------------------------------------------------------------------
' EgalTech 2017-2017
'----------------------------------------------------------------------------
' File : IniFile.vb Data : 08.05.24 Versione : 2.6e1
' Contenuto : Modulo IniFile per gestione lettura/scrittura da file INI.
'
'
'
' Modifiche : 08.05.24 ES Creazione modulo.
'
'
'----------------------------------------------------------------------------
Imports System.Collections.ObjectModel
Public Module IniFile
Private m_sPath As String
Public ReadOnly Property sPath As String
Get
Return m_sPath
End Get
End Property
Friend Sub SetIniFile(sPath)
m_sPath = sPath
End Sub
Public Function GetPluginPrivateProfileInt(IpAppName As String, IpKeyName As String, nDefault As Integer) As Integer
Return GetPrivateProfileInt(IpAppName, IpKeyName, nDefault, m_sPath)
End Function
Public Function GetPluginPrivateProfileDouble(IpAppName As String, IpKeyName As String, dDefault As Double) As Double
Return GetPrivateProfileDouble(IpAppName, IpKeyName, dDefault, m_sPath)
End Function
Public Function GetPluginPrivateProfileString(IpAppName As String, IpKeyName As String, IpDefault As String, ByRef IpString As String) As Integer
Return GetPrivateProfileString(IpAppName, IpKeyName, IpDefault, IpString, m_sPath)
End Function
'Public Function GetPrivateProfileLanguage(lpAppName As String, lpKeyName As String, lpFileName As String) As Language
' Dim sVal As String = String.Empty
' GetPrivateProfileString(lpAppName, lpKeyName, "", sVal, lpFileName)
' Dim sItems() As String = sVal.Split(",".ToCharArray)
' If sItems.Count() = 2 Then
' Return New Language(sItems(0), sItems(1))
' End If
' Return Nothing
'End Function
'Public Function GetMainPrivateProfileLanguage(lpAppName As String, lpKeyName As String) As Language
' Dim sVal As String = String.Empty
' GetMainPrivateProfileString(lpAppName, lpKeyName, "", sVal)
' Dim sItems() As String = sVal.Split(",".ToCharArray)
' If sItems.Count() = 2 Then
' Return New Language(sItems(0), sItems(1))
' End If
' Return Nothing
'End Function
Public Function WritePluginPrivateProfileString(IpAppName As String, IpKeyName As String, ByRef IpString As String) As Boolean
Return WritePrivateProfileString(IpAppName, IpKeyName, IpString, m_sPath)
End Function
End Module
@@ -1,6 +1,7 @@
Imports System.Globalization
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Converters
Imports Effector.Plugin.Lib
Imports Effector.Plugin.FiveLakes.Door
Public Class JsonDoor
@@ -61,6 +62,13 @@ Public Class JsonDoor
End Get
End Property
Private m_nSwing As Integer
Public ReadOnly Property nSwing As Integer
Get
Return m_nSwing
End Get
End Property
Private m_sCSVName As String
Public ReadOnly Property sCSVName As String
Get
@@ -140,7 +148,7 @@ Public Class JsonDoor
#End Region ' Statistics
<JsonConstructor>
Sub New(nListIndex As Integer, nId As Integer, nCSVLine As Integer, sDDFName As String, sCSVName As String, nQuantity As Integer, dWidth As Double, dHeight As Double, dThickness As Double, nState As DoorStates, CustomerParameters As List(Of CustomerParameter),
Sub New(nListIndex As Integer, nId As Integer, nCSVLine As Integer, sDDFName As String, sCSVName As String, nQuantity As Integer, dWidth As Double, dHeight As Double, dThickness As Double, nSwing As Integer, nState As DoorStates, CustomerParameters As List(Of CustomerParameter),
nProdState As DoorProdStates, dtLoadTime As DateTime, dtMachining1Start As DateTime, dtMachining1End As DateTime, dtMachining2Start As DateTime, dtMachining2End As DateTime, dtUnloadTime As DateTime)
m_nListIndex = nListIndex
m_nId = nId
@@ -151,6 +159,7 @@ Public Class JsonDoor
m_dHeight = dHeight
m_dWidth = dWidth
m_dThickness = dThickness
m_nSwing = nSwing
m_nState = nState
m_CustomerParameters = CustomerParameters
m_nProdState = nProdState
@@ -172,6 +181,7 @@ Public Class JsonDoor
m_dHeight = Door.dHeight
m_dWidth = Door.dWidth
m_dThickness = Door.dThickness
m_nSwing = Door.nSwing
m_nState = Door.nState
m_CustomerParameters = Door.CustomerParameters
m_nProdState = Door.nProdState
@@ -209,30 +219,30 @@ Public Class JsonLuaDoor
End Get
End Property
Private m_DoorStateList As New List(Of IdNameStruct)({New IdNameStruct(0, "Not On Machine"),
New IdNameStruct(1, "Imported"),
New IdNameStruct(2, "On Load"),
New IdNameStruct(3, "On Machine 1"),
New IdNameStruct(4, "On Medium Station"),
New IdNameStruct(6, "On Machine 2"),
New IdNameStruct(7, "On Unload"),
New IdNameStruct(8, "Produced"),
New IdNameStruct(100, "Scrap")})
Public ReadOnly Property DoorStateList As List(Of IdNameStruct)
Get
Return m_DoorStateList
End Get
End Property
'Private m_DoorStateList As New List(Of IdNameStruct)({New IdNameStruct(0, "Not On Machine"),
' New IdNameStruct(1, "Imported"),
' New IdNameStruct(2, "On Load"),
' New IdNameStruct(3, "On Machine 1"),
' New IdNameStruct(4, "On Medium Station"),
' New IdNameStruct(6, "On Machine 2"),
' New IdNameStruct(7, "On Unload"),
' New IdNameStruct(8, "Produced"),
' New IdNameStruct(100, "Scrap")})
'Public ReadOnly Property DoorStateList As List(Of IdNameStruct)
' Get
' Return m_DoorStateList
' End Get
'End Property
Private m_SelDoorState As IdNameStruct
Public Property SelDoorState As IdNameStruct
Get
Return m_SelDoorState
End Get
Set(value As IdNameStruct)
m_SelDoorState = value
End Set
End Property
'Private m_SelDoorState As IdNameStruct
'Public Property SelDoorState As IdNameStruct
' Get
' Return m_SelDoorState
' End Get
' Set(value As IdNameStruct)
' m_SelDoorState = value
' End Set
'End Property
Private m_sDoorCode As String = ""
Public ReadOnly Property sDoorCode As String
@@ -276,72 +286,115 @@ Public Class JsonLuaDoor
End Get
End Property
Public ReadOnly Property nLoadTime As Integer
Get
'Return m_nLoadTime
Return ConvertDateTimeToLuaInteger(m_dtLoadTime)
End Get
End Property
Private m_dtLoadTime As DateTime
<JsonIgnore>
Public ReadOnly Property sLoadTime As String
Get
Return m_dtLoadTime.ToString("yy/MM/dd HH:mm:ss")
End Get
End Property
<JsonIgnore>
Public ReadOnly Property dtLoadTime As DateTime
Get
Return m_dtLoadTime
End Get
End Property
Public ReadOnly Property nMachining1Start As Integer
Get
Return ConvertDateTimeToLuaInteger(m_dtMachining1Start)
End Get
End Property
Private m_dtMachining1Start As DateTime
<JsonIgnore>
Public ReadOnly Property sMachining1Start As String
Get
Return m_dtMachining1Start.ToString("yy/MM/dd HH:mm:ss")
End Get
End Property
<JsonIgnore>
Public ReadOnly Property dtMachining1Start As DateTime
Get
Return m_dtMachining1Start
End Get
End Property
Public ReadOnly Property nMachining1End As Integer
Get
Return ConvertDateTimeToLuaInteger(m_dtMachining1End)
End Get
End Property
Private m_dtMachining1End As DateTime
<JsonIgnore>
Public ReadOnly Property sMachining1End As String
Get
Return m_dtMachining1End.ToString("yy/MM/dd HH:mm:ss")
End Get
End Property
<JsonIgnore>
Public ReadOnly Property dtMachining1End As DateTime
Get
Return m_dtMachining1End
End Get
End Property
Public ReadOnly Property nMachining2Start As Integer
Get
Return ConvertDateTimeToLuaInteger(m_dtMachining2Start)
End Get
End Property
Private m_dtMachining2Start As DateTime
<JsonIgnore>
Public ReadOnly Property sMachining2Start As String
Get
Return m_dtMachining2Start.ToString("yy/MM/dd HH:mm:ss")
End Get
End Property
<JsonIgnore>
Public ReadOnly Property dtMachining2Start As DateTime
Get
Return m_dtMachining2Start
End Get
End Property
Public ReadOnly Property nMachining2End As Integer
Get
Return ConvertDateTimeToLuaInteger(m_dtMachining2End)
End Get
End Property
Private m_dtMachining2End As DateTime
<JsonIgnore>
Public ReadOnly Property sMachining2End As String
Get
Return m_dtMachining2End.ToString("yy/MM/dd HH:mm:ss")
End Get
End Property
<JsonIgnore>
Public ReadOnly Property dtMachining2End As DateTime
Get
Return m_dtMachining2End
End Get
End Property
Public ReadOnly Property nUnloadTime As Integer
Get
Return ConvertDateTimeToLuaInteger(m_dtUnloadTime)
End Get
End Property
Private m_dtUnloadTime As DateTime
<JsonIgnore>
Public ReadOnly Property sUnloadTime As String
Get
Return m_dtUnloadTime.ToString("yy/MM/dd HH:mm:ss")
End Get
End Property
<JsonIgnore>
Public ReadOnly Property dtUnloadTime As DateTime
Get
Return m_dtUnloadTime
+7 -7
View File
@@ -2,7 +2,7 @@
Module Map
Private m_refFiveLakesUIVM As FiveLakesUIVM
Private m_refPluginUIVM As PluginUIVM
Private m_refDoorListPageVM As DoorListPageVM
Private m_refMachinePageVM As MachinePageVM
Private m_refSupervisorFunction As IHost
@@ -42,9 +42,9 @@ Module Map
#Region "Get"
Public ReadOnly Property refFiveLakesUIVM As FiveLakesUIVM
Public ReadOnly Property refPluginUIVM As PluginUIVM
Get
Return m_refFiveLakesUIVM
Return m_refPluginUIVM
End Get
End Property
@@ -451,9 +451,9 @@ Module Map
#Region "Init"
Friend Function BeginInit(FiveLakesUIVM As FiveLakesUIVM) As Boolean
m_refFiveLakesUIVM = FiveLakesUIVM
Return Not IsNothing(m_refFiveLakesUIVM)
Friend Function BeginInit(FiveLakesUIVM As PluginUIVM) As Boolean
m_refPluginUIVM = FiveLakesUIVM
Return Not IsNothing(m_refPluginUIVM)
End Function
Friend Function EndInit() As Boolean
' Verifico se tutti i pezzi necessari sono stati caricati
@@ -465,7 +465,7 @@ Module Map
' Not IsNothing(m_refNestingTabVM) AndAlso Not IsNothing(m_refSimulTabVM) AndAlso
' Not IsNothing(m_refMachiningTabVM) AndAlso
' LibMap.EndInit()
Return Not IsNothing(m_refFiveLakesUIVM)
Return Not IsNothing(m_refPluginUIVM)
End Function
#End Region ' Init
@@ -1,66 +0,0 @@
Imports System.Globalization
Public Module StringConversion
Public Function DoubleToString(ByVal dVal As Double, ByVal nNumDec As Integer) As String
Dim sFormat As String = "F" + Math.Abs(nNumDec).ToString()
Dim sVal As String = dVal.ToString(sFormat, CultureInfo.InvariantCulture)
If nNumDec > 0 Then
Return sVal.TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray)
Else
Return sVal
End If
End Function
Public Function StringToDouble(ByVal sVal As String, ByRef dVal As Double) As Boolean
' Return EgtLuaEvalNumExpr(sVal, dVal)
Return Double.TryParse(sVal, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, dVal)
End Function
'Public Function StringToDoubleAdv(ByVal sVal As String, ByRef dVal As Double, Optional bEval As Boolean = False) As Boolean
' If bEval Then
' Return EgtLuaEvalNumExpr(sVal, dVal)
' Else
' Return Double.TryParse(sVal, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, dVal)
' End If
'End Function
Public Function StringToInt(sVal As String, ByRef nVal As Integer) As Boolean
Dim dVal As Double = 0
If Not StringToDouble(sVal, dVal) Then Return False
nVal = CInt(Math.Round(dVal))
Return True
End Function
'Public Function LenToString(ByVal dVal As Double, ByVal nNumDec As Integer) As String
' Return DoubleToString(EgtToUiUnits(dVal), nNumDec)
'End Function
'Public Function StringToLen(ByVal sVal As String, ByRef dVal As Double) As Boolean
' If EgtLuaEvalNumExpr(sVal, dVal) Then
' dVal = EgtFromUiUnits(dVal)
' Return True
' Else
' Return False
' End If
'End Function
'Public Function StringToLenAdv(ByVal sVal As String, ByRef dVal As Double, Optional bEval As Boolean = False) As Boolean
' If bEval Then
' If EgtLuaEvalNumExpr(sVal, dVal) Then
' dVal = EgtFromUiUnits(dVal)
' Return True
' Else
' Return False
' End If
' Else
' If Double.TryParse(sVal, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, dVal) Then
' dVal = EgtFromUiUnits(dVal)
' Return True
' Else
' Return False
' End If
' End If
'End Function
End Module
@@ -1,12 +0,0 @@
Imports System.ComponentModel
Public Class VMBase
Implements INotifyPropertyChanged
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
Public Sub NotifyPropertyChanged(propName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End Sub
End Class