Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f11963c4f | |||
| e9d71da793 | |||
| 7c3facdab9 | |||
| 070f0afd21 | |||
| 497d367d8c | |||
| 6ab6be0703 | |||
| 622a6da893 | |||
| 27f1b9b99d | |||
| bb8c88cfbc | |||
| 5c041a28b3 | |||
| 696682745a | |||
| 58d209aab7 | |||
| 44815f86fa | |||
| 2079fe7707 | |||
| 388fc51a37 | |||
| 8808ebdb2b | |||
| 717519bb2c | |||
| a69e9536b4 | |||
| bde93faa1a | |||
| e38104d02c | |||
| 1aa26ca644 | |||
| 6da345d8c5 |
@@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.8.34309.116
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Supervisor.Plugin.Interface", "..\Ngp\Supervisor.Plugin.Interface\Supervisor.Plugin.Interface.vbproj", "{7D14D864-2BDC-4785-80F4-320164C2D5E4}"
|
||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.Interface", "..\Effector\Effector.Plugin.Interface\Effector.Plugin.Interface.vbproj", "{7D14D864-2BDC-4785-80F4-320164C2D5E4}"
|
||||
EndProject
|
||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Supervisor.Plugin.FiveLakes", "Supervisor.Plugin.FiveLakes\Supervisor.Plugin.FiveLakes.vbproj", "{7C77F537-8235-40AB-B24A-4E71CFB96D2C}"
|
||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.FiveLakes", "Effector.Plugin.FiveLakes\Effector.Plugin.FiveLakes.vbproj", "{7C77F537-8235-40AB-B24A-4E71CFB96D2C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -3,11 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.8.34309.116
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Supervisor", "..\Ngp\Supervisor\Supervisor.vbproj", "{38BEE4BF-9238-459F-AF89-4DD94C4FD0DA}"
|
||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Main", "..\Effector.Main\Effector.Main\Effector.Main.vbproj", "{38BEE4BF-9238-459F-AF89-4DD94C4FD0DA}"
|
||||
EndProject
|
||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Supervisor.Plugin.Interface", "..\Ngp\Supervisor.Plugin.Interface\Supervisor.Plugin.Interface.vbproj", "{7D14D864-2BDC-4785-80F4-320164C2D5E4}"
|
||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.Interface", "..\Effector.Main\Effector.Plugin.Interface\Effector.Plugin.Interface.vbproj", "{7D14D864-2BDC-4785-80F4-320164C2D5E4}"
|
||||
EndProject
|
||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Supervisor.Plugin.FiveLakes", "Supervisor.Plugin.FiveLakes\Supervisor.Plugin.FiveLakes.vbproj", "{7C77F537-8235-40AB-B24A-4E71CFB96D2C}"
|
||||
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
|
||||
@@ -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
|
||||
@@ -0,0 +1,63 @@
|
||||
'----------------------------------------------------------------------------
|
||||
' EgalTech 2015-2024
|
||||
'----------------------------------------------------------------------------
|
||||
' File : ConstIni.vb Data : 08.05.24 Versione : 2.6e1
|
||||
' Contenuto : Modulo costanti sezione e chiavi per file Ini.
|
||||
'
|
||||
'
|
||||
'
|
||||
' Modifiche : 08.05.24 ES Creazione modulo.
|
||||
'
|
||||
'
|
||||
'----------------------------------------------------------------------------
|
||||
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"
|
||||
Public Const K_QUANTITY As String = "Quantity"
|
||||
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"
|
||||
Public Const K_MACHINECOMMANDS As String = "MachineCommands"
|
||||
Public Const K_DOORCIRCLIST As String = "DoorCircList"
|
||||
Public Const K_DOORPRESENCE As String = "DoorPresence"
|
||||
Public Const K_DOORINDEX As String = "DoorIndex"
|
||||
|
||||
Public Const S_NC As String = "NC"
|
||||
Public Const K_NC_SIMULATE As String = "NcSimulate"
|
||||
|
||||
End Module
|
||||
@@ -0,0 +1,316 @@
|
||||
<Grid x:Class="DoorListPageV"
|
||||
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>
|
||||
<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"
|
||||
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="ID"
|
||||
Binding="{Binding nId}"
|
||||
Width="Auto"
|
||||
IsReadOnly="True"
|
||||
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
|
||||
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
|
||||
<!--<DataGridTextColumn Header="DDF File Name"
|
||||
Binding="{Binding sDDFName}"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
IsReadOnly="True"
|
||||
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
|
||||
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
|
||||
<DataGridTextColumn Header="Load Time"
|
||||
Binding="{Binding sLoadTime}"
|
||||
Width="Auto"
|
||||
IsReadOnly="True"
|
||||
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
|
||||
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
|
||||
<DataGridTextColumn Header="Machining 1 Start"
|
||||
Binding="{Binding sMachining1Start}"
|
||||
Width="Auto"
|
||||
IsReadOnly="True"
|
||||
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
|
||||
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
|
||||
<DataGridTextColumn Header="Machining 1 End"
|
||||
Binding="{Binding sMachining1End}"
|
||||
Width="Auto"
|
||||
IsReadOnly="True"
|
||||
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
|
||||
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
|
||||
<DataGridTextColumn Header="Machining 2 Start"
|
||||
Binding="{Binding sMachining2Start}"
|
||||
Width="Auto"
|
||||
IsReadOnly="True"
|
||||
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
|
||||
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
|
||||
<DataGridTextColumn Header="Machining 2 End"
|
||||
Binding="{Binding sMachining2End}"
|
||||
Width="Auto"
|
||||
IsReadOnly="True"
|
||||
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
|
||||
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
|
||||
<DataGridTextColumn Header="Unload Time"
|
||||
Binding="{Binding sUnloadTime}"
|
||||
Width="Auto"
|
||||
IsReadOnly="True"
|
||||
ElementStyle="{StaticResource DataGridTextColumn_TextBlock}"
|
||||
EditingElementStyle="{StaticResource DataGridTextColumn_TextBox}"/>
|
||||
</DataGrid.Columns>
|
||||
<DataGrid.RowStyle>
|
||||
<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>
|
||||
</Grid>
|
||||
@@ -4,8 +4,8 @@
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
|
||||
<RootNamespace>Supervisor.Plugin.FiveLakes</RootNamespace>
|
||||
<AssemblyName>Supervisor.Plugin.FiveLakes</AssemblyName>
|
||||
<RootNamespace>Effector.Plugin.FiveLakes</RootNamespace>
|
||||
<AssemblyName>Effector.Plugin.FiveLakes</AssemblyName>
|
||||
<OutputType>Library</OutputType>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<MyType>Custom</MyType>
|
||||
@@ -21,7 +21,7 @@
|
||||
<DefineTrace>true</DefineTrace>
|
||||
<IncrementalBuild>true</IncrementalBuild>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DocumentationFile>Supervisor.Plugin.FiveLakes.xml</DocumentationFile>
|
||||
<DocumentationFile>Effector.Plugin.FiveLakes.xml</DocumentationFile>
|
||||
<NoWarn>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
@@ -32,7 +32,7 @@
|
||||
<IncrementalBuild>false</IncrementalBuild>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DocumentationFile>Supervisor.Plugin.FiveLakes.xml</DocumentationFile>
|
||||
<DocumentationFile>Effector.Plugin.FiveLakes.xml</DocumentationFile>
|
||||
<NoWarn>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
@@ -48,8 +48,14 @@
|
||||
<OptionInfer>On</OptionInfer>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="EgtWPFLib48">
|
||||
<HintPath>..\..\..\EgtProg\DllD32\EgtWPFLib48.dll</HintPath>
|
||||
<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>
|
||||
@@ -57,9 +63,6 @@
|
||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Supervisor.Plugin.Interface">
|
||||
<HintPath>..\..\Ngp\Supervisor.Plugin.Interface\bin\Debug\Supervisor.Plugin.Interface.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
@@ -101,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" />
|
||||
@@ -119,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>
|
||||
@@ -144,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>
|
||||
@@ -163,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>
|
||||
@@ -198,12 +188,39 @@
|
||||
<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>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>copy $(TargetPath) c:\EgtData\Supervisor\Plugin\Supervisor.Plugin.FiveLakes\Supervisor.Plugin.FiveLakes.dll
|
||||
<PostBuildEvent>copy $(TargetPath) c:\EgtData\Effector\Plugin\Effector.Plugin.FiveLakes\Effector.Plugin.FiveLakes.dll
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\packages\KeraLua.1.4.1\build\net46\KeraLua.targets" Condition="Exists('..\packages\KeraLua.1.4.1\build\net46\KeraLua.targets')" />
|
||||
@@ -1,5 +1,5 @@
|
||||
Imports System.ComponentModel.Composition
|
||||
Imports Supervisor.Plugin.Interface
|
||||
Imports Effector.Plugin.Interface
|
||||
Imports KeraLua
|
||||
|
||||
<Export(GetType(IPluginLuaManager))>
|
||||
@@ -1,4 +1,6 @@
|
||||
Imports KeraLua
|
||||
Imports System.IO
|
||||
Imports Effector.Plugin.Lib
|
||||
|
||||
Public Module Lua_General
|
||||
|
||||
@@ -10,6 +12,8 @@ Public Module Lua_General
|
||||
Friend func_PlgCheckExecProcessAsync As LuaFunction = AddressOf Lua_PlgCheckExecProcessAsync
|
||||
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)
|
||||
@@ -107,7 +111,8 @@ Public Module Lua_General
|
||||
If Not IsNothing(NextDoor) Then
|
||||
' restituisco il risultato
|
||||
LuaSetParam(state, NextDoor.nId)
|
||||
LuaSetParam(state, NextDoor.sDDFName)
|
||||
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
|
||||
@@ -115,9 +120,34 @@ Public Module Lua_General
|
||||
|
||||
Private Function Lua_PlgOpenRestartWnd(ByVal p As IntPtr) As Integer
|
||||
Dim state = Lua.FromIntPtr(p)
|
||||
Dim nMachineIndex As Integer = 1
|
||||
LuaGetParam(state, 1, nMachineIndex)
|
||||
LuaClearStack(state)
|
||||
Dim RestartWnd As New RestartWndV(Application.Current.MainWindow, New RestartWndVM())
|
||||
RestartWnd.ShowDialog()
|
||||
Dim RestartWnd As New RestartWndV(Application.Current.MainWindow, New RestartWndVM(nMachineIndex))
|
||||
Dim bRes As Boolean = RestartWnd.ShowDialog()
|
||||
If Not IsNothing(bRes) Then
|
||||
' restituisco il risultato
|
||||
LuaSetParam(state, bRes)
|
||||
Return 1
|
||||
End If
|
||||
Return 0
|
||||
End Function
|
||||
|
||||
Private Function Lua_PlgMachineReset(ByVal p As IntPtr) As Integer
|
||||
Dim state = Lua.FromIntPtr(p)
|
||||
Dim nMachineIndex As Integer = 1
|
||||
LuaGetParam(state, 1, nMachineIndex)
|
||||
LuaClearStack(state)
|
||||
Map.refDoorListPageVM.ResetProductionQueue()
|
||||
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
|
||||
|
||||
@@ -131,6 +161,8 @@ Public Module Lua_General
|
||||
state.Register("PlgCheckExecProcessAsync", func_PlgCheckExecProcessAsync)
|
||||
state.Register("PlgGetNextDoor", func_PlgGetNextDoor)
|
||||
state.Register("PlgOpenRestartWnd", func_PlgOpenRestartWnd)
|
||||
state.Register("PlgMachineReset", func_PlgMachineReset)
|
||||
state.Register("PlgRestartMachineMessage", func_PlgRestartMachineMessage)
|
||||
Return True
|
||||
End Function
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Grid x:Class="MachinePageV"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:Supervisor.Plugin.FiveLakes"
|
||||
xmlns:local="clr-namespace:Effector.Plugin.FiveLakes"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
mc:Ignorable="d"
|
||||
@@ -10,10 +10,12 @@
|
||||
<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"/>
|
||||
<local:DoorToVisibilityConverter x:Key="DoorToVisibilityConverter"/>
|
||||
<local:StringToStyleConverter x:Key="StringToStyleConverter"/>
|
||||
</Grid.Resources>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
@@ -48,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"/>
|
||||
@@ -87,7 +89,8 @@
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<!--Bottoni di debug-->
|
||||
<Grid Grid.Column="1">
|
||||
<Grid Grid.Column="1"
|
||||
Visibility="{Binding MachineCommands_Visibility}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="3.8*"/>
|
||||
<ColumnDefinition Width="2*"/>
|
||||
@@ -767,42 +770,53 @@
|
||||
<Border Grid.Column="1"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[0].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Style="{StaticResource Door}">
|
||||
Style="{Binding VariableList[0].sValue, Converter={StaticResource StringToStyleConverter}}">
|
||||
<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}}"
|
||||
Style="{StaticResource Door}">
|
||||
Style="{Binding VariableList[1].sValue, Converter={StaticResource StringToStyleConverter}}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[1].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="5"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[2].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Style="{StaticResource Door}">
|
||||
Style="{Binding VariableList[2].sValue, Converter={StaticResource StringToStyleConverter}}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[2].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="7"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[3].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Style="{StaticResource Door}">
|
||||
Style="{Binding VariableList[3].sValue, Converter={StaticResource StringToStyleConverter}}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[3].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="9"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[4].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Style="{StaticResource Door}">
|
||||
Visibility="{Binding VariableList[24].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Style="{Binding VariableList[24].sValue, Converter={StaticResource StringToStyleConverter}}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[4].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="11"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[25].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Style="{StaticResource Door}">
|
||||
Style="{Binding VariableList[25].sValue, Converter={StaticResource StringToStyleConverter}}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[5].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
|
||||
@@ -810,25 +824,90 @@
|
||||
<Border Grid.Column="13"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[26].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Style="{StaticResource Door}">
|
||||
Style="{Binding VariableList[26].sValue, Converter={StaticResource StringToStyleConverter}}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[6].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="15"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[27].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Style="{StaticResource Door}">
|
||||
Style="{Binding VariableList[27].sValue, Converter={StaticResource StringToStyleConverter}}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[7].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="17"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[28].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Style="{StaticResource Door}">
|
||||
Style="{Binding VariableList[28].sValue, Converter={StaticResource StringToStyleConverter}}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[8].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
<!--Intestazione descrizione porte-->
|
||||
<Grid Grid.Row="4">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<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"/>
|
||||
<!--<TextBlock Grid.Column="0"
|
||||
Grid.Row="1"
|
||||
Text="Circular Index"/>-->
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="2"
|
||||
Text="State"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="3"
|
||||
Text="DDF Name"/>
|
||||
<!--<TextBlock Grid.Column="0"
|
||||
Grid.Row="4"
|
||||
Text="CSV Name"/>-->
|
||||
<!--<TextBlock Grid.Column="0"
|
||||
Grid.Row="5"
|
||||
Text="DoorCode"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="6"
|
||||
Text="DoorDescription"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="7"
|
||||
Text="M1 CN Path"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="8"
|
||||
Text="M2 CN Path"/>-->
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="9"
|
||||
Text="Load Time"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="10"
|
||||
Text="Machining 1 Start"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="11"
|
||||
Text="Machining 1 End"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="12"
|
||||
Text="Machining 2 Start"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="13"
|
||||
Text="Machining 2 End"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="14"
|
||||
Text="UnloadTime"/>
|
||||
</Grid>
|
||||
<!--Descrizione porte-->
|
||||
<ItemsControl Grid.Column="1"
|
||||
Grid.Row="4"
|
||||
@@ -840,11 +919,8 @@
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid Visibility="{Binding Converter={StaticResource DoorToVisibilityConverter}}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid HorizontalAlignment="Center"
|
||||
Visibility="{Binding Converter={StaticResource DoorToVisibilityConverter}}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
@@ -862,93 +938,48 @@
|
||||
<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"
|
||||
<!--<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}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="3"
|
||||
Text="DDF Name"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="3"
|
||||
Text="{Binding sDDFName}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
<!--<TextBlock Grid.Column="1"
|
||||
Grid.Row="4"
|
||||
Text="CSV Name"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="4"
|
||||
Text="{Binding sCSVName}"/>
|
||||
<!--<TextBlock Grid.Column="0"
|
||||
Grid.Row="5"
|
||||
Text="DoorCode"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Text="{Binding sCSVName}"/>-->
|
||||
<!--<TextBlock Grid.Column="1"
|
||||
Grid.Row="5"
|
||||
Text="{Binding sDoorCode}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="6"
|
||||
Text="DoorDescription"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="6"
|
||||
Text="{Binding sDoorDescription}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="7"
|
||||
Text="M1 CN Path"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="7"
|
||||
Text="{Binding sM1CNPath}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="8"
|
||||
Text="M2 CN Path"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="8"
|
||||
Text="{Binding sM2CNPath}"/>-->
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="9"
|
||||
Text="Load Time"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="9"
|
||||
Text="{Binding sLoadTime}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="10"
|
||||
Text="Machining 1 Start"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="10"
|
||||
Text="{Binding sMachining1Start}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="11"
|
||||
Text="Machining 1 End"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="11"
|
||||
Text="{Binding sMachining1End}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="12"
|
||||
Text="Machining 2 Start"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="12"
|
||||
Text="{Binding sMachining2Start}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="13"
|
||||
Text="Machining 2 End"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="13"
|
||||
Text="{Binding sMachining2End}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="14"
|
||||
Text="UnloadTime"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="14"
|
||||
Text="{Binding sUnloadTime}"/>
|
||||
@@ -957,277 +988,163 @@
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</Grid>
|
||||
<!--Bottoni macchina vecchi-->
|
||||
<!--<Grid Grid.Row="1">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="1*"/>
|
||||
<RowDefinition Height="1*"/>
|
||||
<RowDefinition Height="1*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Presenza porta M1S0"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="1,2,980,0"
|
||||
Width="30"/>
|
||||
<Button Content="1"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="1,2,980,1"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Avanza porta in M1S1"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding MoveVariable_Command}"
|
||||
CommandParameter="1,1,1360/1,980->1,1,1361/1,981"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Avanza porta in M1S2"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding MoveVariable_Command}"
|
||||
CommandParameter="1,1,1361/1,981->1,1,1362/1,982"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Avanza porta in M1S3"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding MoveVariable_Command}"
|
||||
CommandParameter="1,1,1362/1,982->1,1,1363/1,983"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Avanza porta in M1S4/M2S0"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding MoveVariable_Command}"
|
||||
CommandParameter="1,1,1363/1,983->1,1,1364;2,1,1360/1,984;2,980"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Presenza porta M2S0"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="2,2,980,0"
|
||||
Width="30"/>
|
||||
<Button Content="1"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="2,2,980,1"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Avanza porta in M2S1"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding MoveVariable_Command}"
|
||||
CommandParameter="1,1,1364;2,1,1360/1,984;2,980->2,1,1361/2,981"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Avanza porta in M2S2"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding MoveVariable_Command}"
|
||||
CommandParameter="2,1,1361/2,981->2,1,1362/2,982"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Avanza porta in M2S3"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding MoveVariable_Command}"
|
||||
CommandParameter="2,1,1362/2,982->2,1,1363/2,983"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Avanza porta in M2S4"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding MoveVariable_Command}"
|
||||
CommandParameter="2,1,1363/2,983->2,1,1364/2,984"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="1"
|
||||
Orientation="Horizontal">
|
||||
<TextBlock Text="State M1"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="1,1,1352,0"
|
||||
Width="30"/>
|
||||
<Button Content="1"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="1,1,1352,1"
|
||||
Width="30"/>
|
||||
<Button Content="2"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="1,1,1352,2"
|
||||
Width="30"/>
|
||||
<Button Content="3"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="1,1,1352,3"
|
||||
Width="30"/>
|
||||
<Button Content="4"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="1,1,1352,4"
|
||||
Width="30"/>
|
||||
<Button Content="5"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="1,1,1352,5"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="2"
|
||||
Orientation="Horizontal">
|
||||
<TextBlock Text="State M2"/>
|
||||
<Button Content="0"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="2,1,1352,0"
|
||||
Width="30"/>
|
||||
<Button Content="1"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="2,1,1352,1"
|
||||
Width="30"/>
|
||||
<Button Content="2"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="2,1,1352,2"
|
||||
Width="30"/>
|
||||
<Button Content="3"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="2,1,1352,3"
|
||||
Width="30"/>
|
||||
<Button Content="4"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="2,1,1352,4"
|
||||
Width="30"/>
|
||||
<Button Content="5"
|
||||
Command="{Binding WriteVariable_Command}"
|
||||
CommandParameter="2,1,1352,5"
|
||||
Width="30"/>
|
||||
</StackPanel>
|
||||
</Grid>-->
|
||||
<!--Lista circolare porte-->
|
||||
<Grid Grid.Row="2"
|
||||
Visibility="{Binding DoorCircList_Visibility}">
|
||||
<ItemsControl ItemsSource="{Binding LuaDoorList}">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<UniformGrid Columns="10"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid>
|
||||
<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"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<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"/>
|
||||
<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}"/>
|
||||
<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 Grid.Column="0"
|
||||
Grid.Row="5"
|
||||
Text="DoorCode"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="5"
|
||||
Text="{Binding sDoorCode}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="6"
|
||||
Text="DoorDescription"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="6"
|
||||
Text="{Binding sDoorDescription}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="7"
|
||||
Text="M1 CN Path"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="7"
|
||||
Text="{Binding sM1CNPath}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="8"
|
||||
Text="M2 CN Path"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="8"
|
||||
Text="{Binding sM2CNPath}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="9"
|
||||
Text="Load Time"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="9"
|
||||
Text="{Binding sLoadTime}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="10"
|
||||
Text="Machining 1 Start"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="10"
|
||||
Text="{Binding sMachining1Start}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="11"
|
||||
Text="Machining 1 End"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="11"
|
||||
Text="{Binding sMachining1End}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="12"
|
||||
Text="Machining 2 Start"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="12"
|
||||
Text="{Binding sMachining2Start}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="13"
|
||||
Text="Machining 2 End"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="13"
|
||||
Text="{Binding sMachining2End}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="14"
|
||||
Text="UnloadTime"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="14"
|
||||
Text="{Binding sUnloadTime}"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<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"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="1"
|
||||
Text="Circular Index"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="2"
|
||||
Text="State"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="3"
|
||||
Text="Position"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="4"
|
||||
Text="DDF Name"/>
|
||||
<!--<TextBlock Grid.Column="0"
|
||||
Grid.Row="5"
|
||||
Text="CSV Name"/>-->
|
||||
<!--<TextBlock Grid.Column="0"
|
||||
Grid.Row="6"
|
||||
Text="DoorCode"/>-->
|
||||
<!--<TextBlock Grid.Column="0"
|
||||
Grid.Row="7"
|
||||
Text="DoorDescription"/>-->
|
||||
<!--<TextBlock Grid.Column="0"
|
||||
Grid.Row="8"
|
||||
Text="M1 CN Path"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="9"
|
||||
Text="M2 CN Path"/>-->
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="10"
|
||||
Text="Load Time"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="11"
|
||||
Text="Machining 1 Start"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="12"
|
||||
Text="Machining 1 End"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="13"
|
||||
Text="Machining 2 Start"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="14"
|
||||
Text="Machining 2 End"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="15"
|
||||
Text="UnloadTime"/>
|
||||
</Grid>
|
||||
<ItemsControl Grid.Column="1"
|
||||
ItemsSource="{Binding LuaDoorList}">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<UniformGrid Columns="10"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
Text="{Binding nId}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="1"
|
||||
Text="{Binding nCircIndex}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="2"
|
||||
Text="{Binding nState}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="3"
|
||||
Text="{Binding nDoorPosition}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="4"
|
||||
Text="{Binding sDDFName}"/>
|
||||
<!--<TextBlock Grid.Column="1"
|
||||
Grid.Row="5"
|
||||
Text="{Binding sCSVName}"/>-->
|
||||
<!--<TextBlock Grid.Column="1"
|
||||
Grid.Row="6"
|
||||
Text="{Binding sDoorCode}"/>-->
|
||||
<!--<TextBlock Grid.Column="1"
|
||||
Grid.Row="7"
|
||||
Text="{Binding sDoorDescription}"/>-->
|
||||
<!--<TextBlock Grid.Column="1"
|
||||
Grid.Row="8"
|
||||
Text="{Binding sM1CNPath}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="9"
|
||||
Text="{Binding sM2CNPath}"/>-->
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="10"
|
||||
Text="{Binding sLoadTime}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="11"
|
||||
Text="{Binding sMachining1Start}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="12"
|
||||
Text="{Binding sMachining1End}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="13"
|
||||
Text="{Binding sMachining2Start}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="14"
|
||||
Text="{Binding sMachining2End}"/>
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="15"
|
||||
Text="{Binding sUnloadTime}"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
@@ -4,8 +4,9 @@ Imports System.Globalization
|
||||
Imports System.Reflection
|
||||
Imports System.Windows.Threading
|
||||
Imports Newtonsoft.Json.Linq
|
||||
Imports Supervisor.Plugin.FiveLakes.Variable
|
||||
Imports Supervisor.Plugin.Interface
|
||||
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"
|
||||
@@ -207,17 +219,17 @@ Public Class MachinePageVM
|
||||
End Select
|
||||
Next
|
||||
' se in simulazione
|
||||
If Map.refSupervisorFunction.PlgGetPrivateProfileInt(S_NC, K_NC_SIMULATE, 0) Then
|
||||
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)
|
||||
@@ -254,6 +290,8 @@ Public Class MachinePageVM
|
||||
LuaGetGlobVar("ListaCircPorte." & nDoorIndex & ".nCircIndex", nCircIndex)
|
||||
Dim nDoorState As Integer = -1
|
||||
LuaGetGlobVar("ListaCircPorte." & nDoorIndex & ".nState", nDoorState)
|
||||
Dim nDoorPosition As Integer = -1
|
||||
LuaGetGlobVar("ListaCircPorte." & nDoorIndex & ".nDoorPosition", nDoorPosition)
|
||||
Dim sDoorCode As String = ""
|
||||
LuaGetGlobVar("ListaCircPorte." & nDoorIndex & ".sDoorCode", sDoorCode)
|
||||
Dim sDoorDescription As String = ""
|
||||
@@ -278,11 +316,11 @@ Public Class MachinePageVM
|
||||
LuaGetGlobVar("ListaCircPorte." & nDoorIndex & ".nMachining2End", lMachining2End)
|
||||
Dim lUnloadTime As Long = 0
|
||||
LuaGetGlobVar("ListaCircPorte." & nDoorIndex & ".nUnloadTime", lUnloadTime)
|
||||
m_LuaDoorList.Add(New LuaDoor(nId, nCircIndex, nDoorState, sDoorCode, sDoorDescription, sDDFName, sCSVName, sM1CNPath, sM2CNPath, lLoadTime, lMachining1Start, lMachining1End, lMachining2Start, lMachining2End, lUnloadTime))
|
||||
If nId > 0 Then
|
||||
m_LuaDoorList.Add(New LuaDoor(nId, nCircIndex, nDoorState, nDoorPosition, sDoorCode, sDoorDescription, sDDFName, sCSVName, sM1CNPath, sM2CNPath, lLoadTime, lMachining1Start, lMachining1End, lMachining2Start, lMachining2End, lUnloadTime))
|
||||
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)
|
||||
@@ -297,7 +335,7 @@ Public Class MachinePageVM
|
||||
Dim Var As Variable = m_VariableList(nVarIndex)
|
||||
If nVarIndex >= 5 AndAlso nVarIndex <= 9 Then
|
||||
Dim nId As Integer = -1
|
||||
If Var.nValue > 0 Then
|
||||
If Var.nValue > 0 AndAlso Var.nValue <= 10 Then
|
||||
m_DoorOnMachineArray(nVarIndex - 5) = m_LuaDoorList(Var.nValue - 1)
|
||||
Else
|
||||
m_DoorOnMachineArray(nVarIndex - 5) = Nothing
|
||||
@@ -305,7 +343,7 @@ Public Class MachinePageVM
|
||||
End If
|
||||
If nVarIndex >= 30 AndAlso nVarIndex <= 33 Then
|
||||
Dim nId As Integer = -1
|
||||
If Var.nValue > 0 Then
|
||||
If Var.nValue > 0 AndAlso Var.nValue <= 10 Then
|
||||
m_DoorOnMachineArray(nVarIndex - 25) = m_LuaDoorList(Var.nValue - 1)
|
||||
Else
|
||||
m_DoorOnMachineArray(nVarIndex - 25) = Nothing
|
||||
@@ -335,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"
|
||||
@@ -416,10 +504,10 @@ Public Class MachinePageVM
|
||||
If (MachineStateVar.nValue <> 2 AndAlso MachineStateVar.nValue <> 4) OrElse
|
||||
Sent1Var.nValue <> 0 OrElse Sent2Var.nValue <> 0 Then Return
|
||||
End If
|
||||
' verifco se variabile tavolo di lavoro, che la macchina abbia finito di lavorare
|
||||
' verifco se variabile tavolo di lavoro, che la macchina abbia finito di lavorare o che sia a inizializzazione perche' ripartenza
|
||||
If nVerifyFromVarAddress = 1362 Then
|
||||
Dim MachineStateVar As Variable = VariableList.FirstOrDefault(Function(x) x.nMachine = nVerifyFromMachineIndex AndAlso x.sName = "@STATE")
|
||||
If MachineStateVar.nValue <> 3 AndAlso MachineStateVar.nValue <> 5 Then Return
|
||||
If MachineStateVar.nValue <> 1 AndAlso MachineStateVar.nValue <> 3 AndAlso MachineStateVar.nValue <> 5 Then Return
|
||||
End If
|
||||
' verifico che stazione di destinazione non sia gia' occupata
|
||||
Dim sToAndPresenceVariables As String() = sVariableToMoveArgs(1).Split("/"c)
|
||||
@@ -598,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 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
|
||||
@@ -620,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
|
||||
@@ -768,6 +862,13 @@ Public Class LuaDoor
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_nDoorPosition As Integer = 0
|
||||
Public ReadOnly Property nDoorPosition As Integer
|
||||
Get
|
||||
Return m_nDoorPosition
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sDoorCode As String = ""
|
||||
Public ReadOnly Property sDoorCode As String
|
||||
Get
|
||||
@@ -813,50 +914,51 @@ 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
|
||||
|
||||
Sub New(nId As Integer, nCircIndex As Integer, nState As Integer, sDoorCode As String, sDoorDescription As String, sDDFName As String, sCSVName As String,
|
||||
Sub New(nId As Integer, nCircIndex As Integer, nState As Integer, nDoorPosition As Integer, sDoorCode As String, sDoorDescription As String, sDDFName As String, sCSVName As String,
|
||||
sM1CNPath As String, sM2CNPath As String, lLoadTime As Long, lMachining1Start As Long, lMachining1End As Long, lMachining2Start As Long, lMachining2End As Long, lUnloadTime As Long)
|
||||
m_nId = nId
|
||||
m_nCircIndex = nCircIndex
|
||||
m_nState = nState
|
||||
m_nDoorPosition = nDoorPosition
|
||||
m_sDoorCode = sDoorCode
|
||||
m_sDoorDescription = sDoorDescription
|
||||
m_sDDFName = sDDFName
|
||||
@@ -952,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
|
||||
|
||||
@@ -1024,3 +1140,26 @@ Public Class DoorToVisibilityConverter
|
||||
End Function
|
||||
|
||||
End Class
|
||||
|
||||
Public Class StringToStyleConverter
|
||||
Implements IValueConverter
|
||||
|
||||
Dim DoorStyle As Style = Application.Current.TryFindResource("Door")
|
||||
Dim CutOutScrapStyle As Style = Application.Current.TryFindResource("CutOutScrap")
|
||||
|
||||
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
|
||||
If Not TypeOf value Is String OrElse String.IsNullOrWhiteSpace(value) Then Return "Door"
|
||||
Dim sValue As String = value
|
||||
Dim sLowerValue As String = sValue.ToLower()
|
||||
If sLowerValue = "true" Then Return "Door"
|
||||
If sLowerValue = "false" Then Return "Door"
|
||||
Dim nValue As Integer
|
||||
If Not Integer.TryParse(sValue, nValue) Then Return "Door"
|
||||
Return If(nValue = 4, CutOutScrapStyle, DoorStyle)
|
||||
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
|
||||
@@ -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,5 +1,5 @@
|
||||
Imports System.ComponentModel.Composition
|
||||
Imports Supervisor.Plugin.Interface
|
||||
Imports Effector.Plugin.Interface
|
||||
|
||||
<Export(GetType(IPluginControl))>
|
||||
<ExportMetadata("Name", "MainMenu")>
|
||||
@@ -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
|
||||
@@ -11,11 +11,11 @@ Imports System.Windows
|
||||
|
||||
' Review the values of the assembly attributes
|
||||
|
||||
<Assembly: AssemblyTitle("Supervisor.Plugin.FiveLakes")>
|
||||
<Assembly: AssemblyTitle("Effector.Plugin.FiveLakes")>
|
||||
<Assembly: AssemblyDescription("")>
|
||||
<Assembly: AssemblyCompany("Windows User")>
|
||||
<Assembly: AssemblyProduct("Supervisor.Plugin.FiveLakes")>
|
||||
<Assembly: AssemblyCopyright("Copyright @ Windows User 2024")>
|
||||
<Assembly: AssemblyCompany("Egalware s.r.l.")>
|
||||
<Assembly: AssemblyProduct("Effector.Plugin.FiveLakes")>
|
||||
<Assembly: AssemblyCopyright("Copyright © 2024-2025 by Egalware s.r.l.")>
|
||||
<Assembly: AssemblyTrademark("")>
|
||||
<Assembly: ComVisible(false)>
|
||||
|
||||
@@ -42,7 +42,7 @@ Imports System.Windows
|
||||
|
||||
|
||||
'The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
<Assembly: Guid("b4747d9a-5420-4702-8e86-59fa0fb1ad51")>
|
||||
<Assembly: Guid("b4747d9a-5420-4702-8e86-59fa0fb1ad51")>
|
||||
|
||||
' Version information for an assembly consists of the following four values:
|
||||
'
|
||||
@@ -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")>
|
||||
@@ -64,9 +64,9 @@ Namespace My
|
||||
Friend Module MySettingsProperty
|
||||
|
||||
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
|
||||
Friend ReadOnly Property Settings() As Global.Supervisor.Plugin.FiveLakes.My.MySettings
|
||||
Friend ReadOnly Property Settings() As Global.Effector.Plugin.FiveLakes.My.MySettings
|
||||
Get
|
||||
Return Global.Supervisor.Plugin.FiveLakes.My.MySettings.Default
|
||||
Return Global.Effector.Plugin.FiveLakes.My.MySettings.Default
|
||||
End Get
|
||||
End Property
|
||||
End Module
|
||||
@@ -0,0 +1,21 @@
|
||||
<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 PluginUIVM}">
|
||||
<TabControl SelectedIndex="{Binding SelPage}"
|
||||
Style="{StaticResource NoHeader_TabControl}">
|
||||
<TabItem Name="DoorList"
|
||||
Header="DoorList">
|
||||
<local:DoorListPageV DataContext="{StaticResource DoorListVM}"/>
|
||||
</TabItem>
|
||||
<TabItem Name="Machine"
|
||||
Header="Machine">
|
||||
<local:MachinePageV DataContext="{StaticResource MachinePageVM}"/>
|
||||
</TabItem>
|
||||
<TabItem Name="Statistics"
|
||||
Header="Statistics">
|
||||
<local:StatisticsPageV DataContext="{StaticResource StatisticsPageVM}"/>
|
||||
</TabItem>
|
||||
</TabControl>
|
||||
</Grid>
|
||||
@@ -1,13 +1,13 @@
|
||||
Imports System.ComponentModel.Composition
|
||||
Imports Supervisor.Plugin.Interface
|
||||
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 Supervisor.Plugin.Interface
|
||||
Imports Effector.Plugin.Interface
|
||||
Imports Effector.Plugin.Lib
|
||||
|
||||
Public Class FiveLakesUIVM
|
||||
Public Class PluginUIVM
|
||||
Inherits VMBase
|
||||
|
||||
Public Enum Pages As Integer
|
||||
@@ -48,11 +49,11 @@ Public Class FiveLakesUIVM
|
||||
If GetPrivateProfileString(S_DATA, K_DATAROOT, "", m_sDataRoot, m_sDataRoot & "\" & DAT_FILE_NAME) = 0 Then
|
||||
m_sDataRoot = System.AppDomain.CurrentDomain.BaseDirectory
|
||||
End If
|
||||
m_sDataRoot &= "\" & "Plugin\Supervisor.Plugin.FiveLakes"
|
||||
m_sDataRoot &= "\" & "Plugin\Effector.Plugin.FiveLakes"
|
||||
' 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
|
||||
|
After Width: | Height: | Size: 542 B |
|
After Width: | Height: | Size: 484 B |
|
After Width: | Height: | Size: 608 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 773 B |
|
After Width: | Height: | Size: 358 B |
|
After Width: | Height: | Size: 328 B |
|
After Width: | Height: | Size: 547 B |
|
After Width: | Height: | Size: 730 B |
|
After Width: | Height: | Size: 626 B |
|
After Width: | Height: | Size: 424 B |
|
After Width: | Height: | Size: 452 B |
|
After Width: | Height: | Size: 767 B |
|
After Width: | Height: | Size: 390 B |
|
After Width: | Height: | Size: 175 B |
|
After Width: | Height: | Size: 685 B |
|
After Width: | Height: | Size: 237 B |
|
After Width: | Height: | Size: 668 B |
@@ -1,15 +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:Supervisor.Plugin.FiveLakes"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<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>
|
||||
@@ -20,6 +23,7 @@
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="1*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Image Source="{Binding sMachineImagePath}"
|
||||
Stretch="Uniform"/>
|
||||
@@ -45,35 +49,35 @@
|
||||
</Grid.RowDefinitions>
|
||||
<Border Grid.Column="1"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[0].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Visibility="{Binding nMachineIndex, Converter={StaticResource VariableNameToVisibilityConverter}, ConverterParameter=WP_PR_00}"
|
||||
Style="{StaticResource Door}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[0].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="3"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[1].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Visibility="{Binding nMachineIndex, Converter={StaticResource VariableNameToVisibilityConverter}, ConverterParameter=WP_PR_01}"
|
||||
Style="{StaticResource Door}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[1].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="5"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[2].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Visibility="{Binding nMachineIndex, Converter={StaticResource VariableNameToVisibilityConverter}, ConverterParameter=WP_PR_02}"
|
||||
Style="{StaticResource Door}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[2].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="7"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[3].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Visibility="{Binding nMachineIndex, Converter={StaticResource VariableNameToVisibilityConverter}, ConverterParameter=WP_PR_03}"
|
||||
Style="{StaticResource Door}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[3].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
</Border>
|
||||
<Border Grid.Column="9"
|
||||
Grid.Row="1"
|
||||
Visibility="{Binding VariableList[4].sValue, Converter={StaticResource StringToVisibilityConverter}}"
|
||||
Visibility="{Binding nMachineIndex, Converter={StaticResource VariableNameToVisibilityConverter}, ConverterParameter=WP_PR_04}"
|
||||
Style="{StaticResource Door}">
|
||||
<TextBlock Text="{Binding DoorOnMachineArray[4].nId}"
|
||||
Style="{StaticResource MachDrawVar_TextBlock}"/>
|
||||
@@ -114,7 +118,7 @@
|
||||
<TextBlock Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
Text="Id"/>
|
||||
<TextBox Grid.Column="1"
|
||||
<TextBlock Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
Text="{Binding nId}"/>
|
||||
<TextBlock Grid.Column="0"
|
||||
@@ -205,68 +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>-->
|
||||
<Button Grid.Row="1"
|
||||
Content="Ok"
|
||||
Command="{Binding Ok_Command}"/>
|
||||
<StackPanel Grid.Row="1"
|
||||
Orientation="Horizontal"
|
||||
Margin="20"
|
||||
HorizontalAlignment="Center">
|
||||
<Button Content="Ok"
|
||||
Command="{Binding Ok_Command}"
|
||||
Margin="0,0,10,0"
|
||||
Visibility="{Binding OkBtn_Visibility}"
|
||||
Style="{StaticResource Restart_Button}"/>
|
||||
<Button Grid.Column="1"
|
||||
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
|
||||
@@ -0,0 +1,824 @@
|
||||
Imports Newtonsoft.Json
|
||||
Imports Newtonsoft.Json.Linq
|
||||
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
|
||||
|
||||
Friend Event m_CloseWindow(bDialogResult As Boolean)
|
||||
|
||||
Private m_sTitle As String = ""
|
||||
Public ReadOnly Property sTitle As String
|
||||
Get
|
||||
Return m_sTitle
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_nMachineIndex As Integer = 1
|
||||
Public ReadOnly Property nMachineIndex As Integer
|
||||
Get
|
||||
Return m_nMachineIndex
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_RestartDoorList As ObservableCollection(Of RestartDoor)
|
||||
Public ReadOnly Property RestartDoorList As ObservableCollection(Of RestartDoor)
|
||||
Get
|
||||
Return m_RestartDoorList
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sMachineImagePath As String
|
||||
Public ReadOnly Property sMachineImagePath As String
|
||||
Get
|
||||
Return m_sMachineImagePath
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'Private m_DoorOnMachineArray(4) As RestartDoor
|
||||
'Public ReadOnly Property DoorOnMachineArray As RestartDoor()
|
||||
' Get
|
||||
' Return m_DoorOnMachineArray
|
||||
' End Get
|
||||
'End Property
|
||||
|
||||
Private m_DoorOnMachineArray As New ObservableCollection(Of RestartDoor)
|
||||
Public ReadOnly Property DoorOnMachineArray As ObservableCollection(Of RestartDoor)
|
||||
Get
|
||||
Return m_DoorOnMachineArray
|
||||
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
|
||||
|
||||
#Region "CONSTRUCTOR"
|
||||
|
||||
Sub New(nMachineIndex As Integer)
|
||||
m_nMachineIndex = nMachineIndex
|
||||
m_sTitle = "Machine " & m_nMachineIndex
|
||||
If Map.refSupervisorFunction.PlgGetPrivateProfileInt(S_NC, K_NC_SIMULATE, 0) > 0 Then
|
||||
For nIndex = 0 To 4
|
||||
Dim dValue As Double = GetPluginPrivateProfileDouble(S_DEBUG, K_DOORPRESENCE & "M" & m_nMachineIndex & "P" & nIndex, 0)
|
||||
WriteVariableValueToName(nMachineIndex, "@WP_PR_0" & nIndex.ToString(), dValue)
|
||||
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) = 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
|
||||
For nIndex As Integer = 0 To 4
|
||||
m_DoorOnMachineArray.Add(Nothing)
|
||||
Next
|
||||
|
||||
' leggo presenze porta
|
||||
For nPositionIndex As Integer = 4 To 0 Step -1
|
||||
Dim dWPValue As Double = 0
|
||||
GetVariableValueFromName(nMachineIndex, "@WP_PR_0" & nPositionIndex.ToString(), dWPValue)
|
||||
If dWPValue <> 0 Then
|
||||
' verifico indice
|
||||
Dim nCircindex As Integer = 0
|
||||
GetVariableValueFromName(nMachineIndex, "@DOORN_S" & nPositionIndex.ToString(), nCircindex)
|
||||
If nCircindex <> 0 Then
|
||||
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)
|
||||
|
||||
' Dim JsonLuaDoorList As List(Of JsonLuaDoor) = JsonConvert.DeserializeObject(Of List(Of JsonLuaDoor))(sReadedFile)
|
||||
' JsonLuaDoorList = JsonLuaDoorList.OrderBy(Of Integer)(Function(x) x.nCircIndex).ToList()
|
||||
|
||||
' m_RestartDoorList = New ObservableCollection(Of RestartDoor)((From JsonLuaDoor In Map.refDoorListPageVM.DoorList
|
||||
' Select New RestartDoor(JsonLuaDoor)).ToList())
|
||||
' For JsonLuaDoorIndex = 0 To JsonLuaDoorList.Count - 1
|
||||
' Dim JsonLuaDoor As JsonLuaDoor = JsonLuaDoorList(JsonLuaDoorIndex)
|
||||
' Dim RestartDoor As RestartDoor = m_RestartDoorList.FirstOrDefault(Function(x) x.nId = JsonLuaDoor.nId)
|
||||
' If Not IsNothing(RestartDoor) Then
|
||||
' RestartDoor.Update(JsonLuaDoor)
|
||||
' End If
|
||||
|
||||
|
||||
' Next
|
||||
|
||||
'End If
|
||||
|
||||
' carico immagine della macchina
|
||||
Dim sResourcesDirPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, K_RESOURCESDIR, "", sResourcesDirPath)
|
||||
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
|
||||
|
||||
#Region "METHODS"
|
||||
|
||||
Public Shared Function GetVariableValueFromName(nMachIndex As Integer, sName As String, ByRef nValue As Integer) As Boolean
|
||||
Dim Variable As Variable = Map.refMachinePageVM.VariableList.FirstOrDefault(Function(x) x.nMachine = nMachIndex AndAlso x.sName = sName)
|
||||
If IsNothing(Variable) Then Return False
|
||||
Dim nIndex As Integer = 0
|
||||
If Not Integer.TryParse(Variable.sIndex, nIndex) Then Return False
|
||||
Return Map.refSupervisorFunction.ComReadShortVar(nIndex, nValue, nMachIndex)
|
||||
End Function
|
||||
|
||||
Public Shared Function GetVariableValueFromName(nMachIndex As Integer, sName As String, ByRef dValue As Double) As Boolean
|
||||
Dim Variable As Variable = Map.refMachinePageVM.VariableList.FirstOrDefault(Function(x) x.nMachine = nMachIndex AndAlso x.sName = sName)
|
||||
If IsNothing(Variable) Then Return False
|
||||
Dim nIndex As Integer = 0
|
||||
If Not Integer.TryParse(Variable.sIndex, nIndex) Then Return False
|
||||
Return Map.refSupervisorFunction.ComReadDoubleVar(nIndex, dValue, nMachIndex)
|
||||
End Function
|
||||
|
||||
Public Shared Function WriteVariableValueToName(nMachIndex As Integer, sName As String, nValue As Integer) As Boolean
|
||||
Dim Variable As Variable = Map.refMachinePageVM.VariableList.FirstOrDefault(Function(x) x.nMachine = nMachIndex AndAlso x.sName = sName)
|
||||
If IsNothing(Variable) Then Return False
|
||||
Dim nIndex As Integer = 0
|
||||
If Not Integer.TryParse(Variable.sIndex, nIndex) Then Return False
|
||||
Return Map.refSupervisorFunction.ComWriteShortVar(nIndex, nValue, nMachIndex)
|
||||
End Function
|
||||
|
||||
Public Shared Function WriteVariableValueToName(nMachIndex As Integer, sName As String, dValue As Double) As Boolean
|
||||
Dim Variable As Variable = Map.refMachinePageVM.VariableList.FirstOrDefault(Function(x) x.nMachine = nMachIndex AndAlso x.sName = sName)
|
||||
If IsNothing(Variable) Then Return False
|
||||
Dim nIndex As Integer = 0
|
||||
If Not Integer.TryParse(Variable.sIndex, nIndex) Then Return False
|
||||
Return Map.refSupervisorFunction.ComWriteDoubleVar(nIndex, dValue, nMachIndex)
|
||||
End Function
|
||||
|
||||
#End Region ' METHODS
|
||||
|
||||
#Region "COMMANDS"
|
||||
|
||||
#Region "Ok"
|
||||
|
||||
Public ReadOnly Property Ok_Command As ICommand
|
||||
Get
|
||||
If m_cmdOk Is Nothing Then
|
||||
m_cmdOk = New Command(AddressOf Ok)
|
||||
End If
|
||||
Return m_cmdOk
|
||||
End Get
|
||||
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"
|
||||
|
||||
Public ReadOnly Property Empty_Command As ICommand
|
||||
Get
|
||||
If m_cmdEmpty Is Nothing Then
|
||||
m_cmdEmpty = New Command(AddressOf Empty)
|
||||
End If
|
||||
Return m_cmdEmpty
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub Empty()
|
||||
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
|
||||
|
||||
#End Region ' Empty
|
||||
|
||||
#End Region ' COMMANDS
|
||||
|
||||
End Class
|
||||
|
||||
Public Class StateToVisibilityConverter
|
||||
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 Integer Then Return Visibility.Collapsed
|
||||
Return If(value > 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 VariableNameToVisibilityConverter
|
||||
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 Integer Then Return Visibility.Collapsed
|
||||
If IsNothing(parameter) OrElse Not TypeOf parameter Is String OrElse String.IsNullOrWhiteSpace(parameter) Then Return Visibility.Collapsed
|
||||
Dim nMachineIndex As Integer = 0
|
||||
If Not Integer.TryParse(value, nMachineIndex) Then Return Visibility.Collapsed
|
||||
Dim dWPValue As Double = 0
|
||||
RestartWndVM.GetVariableValueFromName(nMachineIndex, "@" & parameter, dWPValue)
|
||||
Return If(dWPValue = 1 OrElse dWPValue = 2 OrElse dWPValue = 3, 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 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
|
||||
|
||||
Private m_nId As Integer = -1
|
||||
Public ReadOnly Property nId As Integer
|
||||
Get
|
||||
Return m_nId
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_nCircIndex As Integer = -1
|
||||
Public ReadOnly Property nCircIndex As Integer
|
||||
Get
|
||||
Return m_nCircIndex
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_nState As Integer = 0
|
||||
Public ReadOnly Property nState As Integer
|
||||
Get
|
||||
Return m_nState
|
||||
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
|
||||
|
||||
Public Property SelDoorState As IdNameStruct
|
||||
Get
|
||||
Return m_DoorStateList.FirstOrDefault(Function(x) x.Id = m_nState)
|
||||
End Get
|
||||
Set(value As IdNameStruct)
|
||||
m_nState = value.Id
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private m_sDoorCode As String = ""
|
||||
Public ReadOnly Property sDoorCode As String
|
||||
Get
|
||||
Return m_sDoorCode
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sDoorDescription As String = ""
|
||||
Public ReadOnly Property sDoorDescription As String
|
||||
Get
|
||||
Return m_sDoorDescription
|
||||
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_sCSVName As String = ""
|
||||
Public ReadOnly Property sCSVName As String
|
||||
Get
|
||||
Return m_sCSVName
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sM1CNPath As String = ""
|
||||
Public ReadOnly Property sM1CNPath As String
|
||||
Get
|
||||
Return m_sM1CNPath
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sM2CNPath As String = ""
|
||||
Public ReadOnly Property sM2CNPath As String
|
||||
Get
|
||||
Return m_sM2CNPath
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_dtLoadTime As DateTime
|
||||
Public ReadOnly Property sLoadTime As String
|
||||
Get
|
||||
Return m_dtLoadTime.ToString("yy/MM/dd HH:mm:ss")
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Sub New(Id As Integer, IndiceCirc As Integer, Stato As Integer, CodicePorta As String, DescrizionePorta As String, NomeDDF As String, NomeCSV As String,
|
||||
CN_macchina_1 As String, CN_macchina_2 As String, tempo_carico As Long, tempo_inizio_lav_1 As Long, tempo_fine_lav_1 As Long, tempo_inizio_lav_2 As Long,
|
||||
tempo_fine_lav_2 As Long, tempo_scarico As Long)
|
||||
m_nId = Id
|
||||
m_nCircIndex = IndiceCirc
|
||||
m_nState = Stato
|
||||
m_sDoorCode = CodicePorta
|
||||
m_sDoorDescription = DescrizionePorta
|
||||
m_sDDFName = NomeDDF
|
||||
m_sCSVName = NomeCSV
|
||||
m_sM1CNPath = CN_macchina_1
|
||||
m_sM2CNPath = CN_macchina_2
|
||||
m_dtLoadTime = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_carico).ToLocalTime()
|
||||
m_dtMachining1Start = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_inizio_lav_1).ToLocalTime()
|
||||
m_dtMachining1End = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_fine_lav_1).ToLocalTime()
|
||||
m_dtMachining2Start = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_inizio_lav_2).ToLocalTime()
|
||||
m_dtMachining2End = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_fine_lav_2).ToLocalTime()
|
||||
m_dtUnloadTime = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_scarico).ToLocalTime()
|
||||
End Sub
|
||||
|
||||
Sub New(Door As Door)
|
||||
m_nId = Door.nId
|
||||
m_nCircIndex = 0
|
||||
m_nState = 0
|
||||
m_sDDFName = Door.sDDFName
|
||||
m_sCSVName = Door.sCSVName
|
||||
m_sM1CNPath = ""
|
||||
m_sM2CNPath = ""
|
||||
m_dtLoadTime = DateTime.MinValue
|
||||
m_dtMachining1Start = DateTime.MinValue
|
||||
m_dtMachining1End = DateTime.MinValue
|
||||
m_dtMachining2Start = DateTime.MinValue
|
||||
m_dtMachining2End = DateTime.MinValue
|
||||
m_dtUnloadTime = DateTime.MinValue
|
||||
End Sub
|
||||
|
||||
Friend Sub New(JsonLuaDoor As JsonLuaDoor)
|
||||
m_nId = JsonLuaDoor.nId
|
||||
m_nCircIndex = JsonLuaDoor.nCircIndex
|
||||
m_nState = JsonLuaDoor.nState
|
||||
m_sDDFName = JsonLuaDoor.sDDFName
|
||||
m_sCSVName = JsonLuaDoor.sCSVName
|
||||
m_sM1CNPath = JsonLuaDoor.sM1CNPath
|
||||
m_sM2CNPath = JsonLuaDoor.sM2CNPath
|
||||
m_dtLoadTime = JsonLuaDoor.dtLoadTime
|
||||
m_dtMachining1Start = JsonLuaDoor.dtMachining1Start
|
||||
m_dtMachining1End = JsonLuaDoor.dtMachining1End
|
||||
m_dtMachining2Start = JsonLuaDoor.dtMachining2Start
|
||||
m_dtMachining2End = JsonLuaDoor.dtMachining2End
|
||||
m_dtUnloadTime = JsonLuaDoor.dtUnloadTime
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
@@ -3,7 +3,7 @@
|
||||
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:Supervisor.Plugin.FiveLakes"
|
||||
xmlns:local="clr-namespace:Effector.Plugin.FiveLakes"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="450" d:DesignWidth="800">
|
||||
<Grid>
|
||||
@@ -0,0 +1,334 @@
|
||||
<ResourceDictionary x:Class="Dictionary"
|
||||
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"
|
||||
xmlns:sys="clr-namespace:System;assembly=mscorlib"
|
||||
>
|
||||
|
||||
<!--
|
||||
Assign a Key to every Panel ViewModel to use
|
||||
it in xaml file(ProjectView.xaml).
|
||||
-->
|
||||
<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-->
|
||||
|
||||
<!--#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}" />
|
||||
|
||||
<!--#BC373E-->
|
||||
<!--
|
||||
<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="Effector_Purple_Color" R="167" G="76" B="119" A="255"/>
|
||||
<SolidColorBrush x:Key="Effector_Purple" Color="{StaticResource Effector_Purple_Color}" />-->
|
||||
|
||||
<!--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-->
|
||||
<PopupAnimation x:Key="{x:Static SystemParameters.MenuPopupAnimationKey}">None</PopupAnimation>
|
||||
|
||||
<!--convertert per visibilita' stringa di testo con misure in StatusBar--><!--
|
||||
<PrintApp:StringToVisibilityConverter x:Key="StringToVisibilityConverter"/>-->
|
||||
|
||||
<GridLength x:Key="TitleBarHeight">30</GridLength>
|
||||
<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">
|
||||
<Setter Property="BorderBrush" Value="Gray"/>
|
||||
<Setter Property="BorderThickness" Value="2"/>
|
||||
</Style>
|
||||
<Style x:Key="Door" TargetType="Border">
|
||||
<Setter Property="BorderBrush" Value="SaddleBrown"/>
|
||||
<Setter Property="BorderThickness" Value="5"/>
|
||||
<Setter Property="Background" Value="SandyBrown"/>
|
||||
</Style>
|
||||
<Style x:Key="CutOutScrap" TargetType="Border">
|
||||
<Setter Property="Margin" Value="35,10,10,10"/>
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="Background" Value="SandyBrown"/>
|
||||
</Style>
|
||||
<Style x:Key="Advancement_Button" TargetType="Button">
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
|
||||
</Style>
|
||||
<Style x:Key="Sensor" TargetType="Ellipse">
|
||||
<Setter Property="Height" Value="{Binding ActualWidth, RelativeSource={RelativeSource Self}}"/>
|
||||
</Style>
|
||||
<Style x:Key="MachDrawVar_TextBlock" TargetType="TextBlock">
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
<Style x:Key="MachDrawVar_CheckBox" TargetType="CheckBox">
|
||||
<Setter Property="IsHitTestVisible" Value="False"/>
|
||||
<Setter Property="Focusable" Value="False"/>
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
</Style>
|
||||
|
||||
</ResourceDictionary>
|
||||
@@ -0,0 +1,156 @@
|
||||
Imports System.ComponentModel.Composition
|
||||
Imports System.Globalization
|
||||
Imports Effector.Plugin.Interface
|
||||
|
||||
<Export(GetType(IPluginControl))>
|
||||
<ExportMetadata("Name", "Dictionary")>
|
||||
Public Class Dictionary
|
||||
Inherits ResourceDictionary
|
||||
Implements IPluginControl
|
||||
|
||||
Public Shared ReadOnly MySceneHostVM As String = "MySceneHostVM"
|
||||
|
||||
#Region "Colors"
|
||||
|
||||
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_Effector_Orange
|
||||
' End Get
|
||||
'End Property
|
||||
|
||||
#End Region ' Colors
|
||||
|
||||
End Class
|
||||
|
||||
Public Class CenterToolTipConverter
|
||||
Implements IMultiValueConverter
|
||||
|
||||
Public Function Convert(ByVal values As Object(), ByVal targetType As Type, ByVal parameter As Object, ByVal culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
|
||||
For Each value In values
|
||||
If TypeOf (value) IsNot Double Then
|
||||
Return Double.NaN
|
||||
End If
|
||||
Next
|
||||
Dim dPlacementTarget As Double = CDbl(values(0))
|
||||
Dim dToolTip As Double = CDbl(values(1))
|
||||
Return (dPlacementTarget / 2.0) - (dToolTip / 2.0)
|
||||
End Function
|
||||
|
||||
Public Function ConvertBack(ByVal value As Object, ByVal targetTypes As Type(), ByVal parameter As Object, ByVal culture As CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
|
||||
Throw New NotSupportedException()
|
||||
End Function
|
||||
|
||||
End Class
|
||||
@@ -1,7 +1,8 @@
|
||||
Imports System.Globalization
|
||||
Imports Newtonsoft.Json
|
||||
Imports Newtonsoft.Json.Converters
|
||||
Imports Supervisor.Plugin.FiveLakes.Door
|
||||
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
|
||||
@@ -1,8 +1,8 @@
|
||||
Imports Supervisor.Plugin.Interface
|
||||
Imports Effector.Plugin.Interface
|
||||
|
||||
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
|
||||
@@ -0,0 +1,3 @@
|
||||
param([string]$ProjectDir, [string]$ProjectPath);
|
||||
|
||||
Copy-Item -Path c:\EgtProg\Effector\Effector*.exe $ProjectDir\..\Exe
|
||||
@@ -1,37 +0,0 @@
|
||||
'----------------------------------------------------------------------------
|
||||
' EgalTech 2015-2024
|
||||
'----------------------------------------------------------------------------
|
||||
' File : ConstIni.vb Data : 08.05.24 Versione : 2.6e1
|
||||
' Contenuto : Modulo costanti sezione e chiavi per file Ini.
|
||||
'
|
||||
'
|
||||
'
|
||||
' Modifiche : 08.05.24 ES Creazione modulo.
|
||||
'
|
||||
'
|
||||
'----------------------------------------------------------------------------
|
||||
Module ConstIni
|
||||
|
||||
Public Const INI_FILE_NAME As String = "Supervisor.Plugin.FiveLakes.ini"
|
||||
|
||||
Public Const S_GENERAL As String = "General"
|
||||
Public Const K_BACKUPDIR As String = "BackupDir"
|
||||
Public Const K_RESOURCESDIR As String = "ResourcesDir"
|
||||
|
||||
Public Const S_CSV As String = "CSV"
|
||||
Public Const K_DDFNAME As String = "DDFName"
|
||||
Public Const K_QUANTITY As String = "Quantity"
|
||||
Public Const K_HEIGHT As String = "Height"
|
||||
Public Const K_WIDTH As String = "Width"
|
||||
Public Const K_THICKNESS As String = "Thickness"
|
||||
|
||||
Public Const S_DEBUG As String = "Debug"
|
||||
Public Const K_VARIABLELIST As String = "VariableList"
|
||||
Public Const K_VARIABLEONDRAW As String = "VariableOnDraw"
|
||||
Public Const K_MACHINECOMMANDS As String = "MachineCommands"
|
||||
Public Const K_DOORCIRCLIST As String = "DoorCircList"
|
||||
|
||||
Public Const S_NC As String = "NC"
|
||||
Public Const K_NC_SIMULATE As String = "NcSimulate"
|
||||
|
||||
End Module
|
||||
@@ -1,98 +0,0 @@
|
||||
<Grid x:Class="DoorListPageV"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<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"
|
||||
ItemsSource="{Binding DoorList}"
|
||||
SelectedItem="{Binding SelDoor}"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserSortColumns="False">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header=""
|
||||
Binding="{Binding nId}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Line"
|
||||
Binding="{Binding nCSVLine}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="DDF"
|
||||
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"/>
|
||||
<DataGridTextColumn Header="Width"
|
||||
Binding="{Binding dWidth}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Thickness"
|
||||
Binding="{Binding dThickness}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Csv"
|
||||
Binding="{Binding sCSVName}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Production State"
|
||||
Binding="{Binding nProdState}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Load Time"
|
||||
Binding="{Binding sLoadTime}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Machining 1 Start"
|
||||
Binding="{Binding sMachining1Start}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Machining 1 End"
|
||||
Binding="{Binding sMachining1End}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Machining 2 Start"
|
||||
Binding="{Binding sMachining2Start}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Machining 2 End"
|
||||
Binding="{Binding sMachining2End}"
|
||||
Width="Auto"/>
|
||||
<DataGridTextColumn Header="Unload Time"
|
||||
Binding="{Binding sUnloadTime}"
|
||||
Width="Auto"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
@@ -1,858 +0,0 @@
|
||||
Imports System.Collections.ObjectModel
|
||||
Imports System.IO
|
||||
Imports Newtonsoft.Json
|
||||
Imports System.Windows.Threading
|
||||
Imports System.Text.RegularExpressions
|
||||
|
||||
Public Class DoorListPageVM
|
||||
Inherits VMBase
|
||||
|
||||
Private m_BackupTimer As New DispatcherTimer
|
||||
Private m_RefreshGraphicsTimer As New DispatcherTimer
|
||||
Private m_ExecProcessManager As ExecProcessManager
|
||||
|
||||
Private m_DoorList As New ObservableCollection(Of Door)
|
||||
Public ReadOnly Property DoorList As ObservableCollection(Of Door)
|
||||
Get
|
||||
Return m_DoorList
|
||||
End Get
|
||||
End Property
|
||||
Private m_SelDoor As Door
|
||||
Public Property SelDoor As Door
|
||||
Get
|
||||
Return m_SelDoor
|
||||
End Get
|
||||
Set(value As Door)
|
||||
m_SelDoor = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private m_bExecButton_IsEnabled As Boolean = True
|
||||
Public ReadOnly Property bExecButton_IsEnabled As Boolean
|
||||
Get
|
||||
Return m_bExecButton_IsEnabled
|
||||
End Get
|
||||
End Property
|
||||
Private Sub SetExecButtonIsEnabled(bValue As Boolean)
|
||||
m_bExecButton_IsEnabled = bValue
|
||||
NotifyPropertyChanged(NameOf(bExecButton_IsEnabled))
|
||||
End Sub
|
||||
Private m_nModifyIndex As Integer = 0
|
||||
Private m_nBackupindex As Integer = 0
|
||||
Private m_bWritingBackup As Boolean = False
|
||||
|
||||
' Definizione comandi
|
||||
Private m_cmdOpenCSV As ICommand
|
||||
Private m_cmdSkipDoor As ICommand
|
||||
Private m_cmdMoveUp As ICommand
|
||||
Private m_cmdMoveDown As ICommand
|
||||
Private m_cmdDelete As ICommand
|
||||
Private m_cmdDeleteAll As ICommand
|
||||
Private m_cmdProduce As ICommand
|
||||
Private m_cmdProduceAll As ICommand
|
||||
Private m_cmdResetProductionQueue As ICommand
|
||||
Private m_cmdVerify As ICommand
|
||||
|
||||
#Region "CONSTRUCTOR"
|
||||
|
||||
Sub New()
|
||||
' imposto riferimento in Map
|
||||
Map.SetRefDoorListPageVM(Me)
|
||||
Dim sBackupDirPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "BackupDir", "", sBackupDirPath)
|
||||
Dim sBackupFilePath As String = sBackupDirPath & "\Backup.json"
|
||||
Read(sBackupFilePath)
|
||||
m_BackupTimer.Interval = New TimeSpan(0, 0, 1)
|
||||
AddHandler m_BackupTimer.Tick, AddressOf BackupTimer_Tick
|
||||
m_RefreshGraphicsTimer.Interval = New TimeSpan(0, 0, 1)
|
||||
AddHandler m_RefreshGraphicsTimer.Tick, AddressOf RefreshGraphicsTimer_Tick
|
||||
m_BackupTimer.Start()
|
||||
m_RefreshGraphicsTimer.Start()
|
||||
End Sub
|
||||
#End Region ' CONSTRUCTOR
|
||||
|
||||
#Region "METHODS"
|
||||
|
||||
Friend Function ExecCAMProcess(sDDFName As String) As Boolean
|
||||
' lancio esecuzione programma
|
||||
Dim sCamExePath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "CAMExePath", "", sCamExePath)
|
||||
Dim sMainLuaPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "MainLUA", "", sMainLuaPath)
|
||||
Dim sDDFDirPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "DDFDir", "", sDDFDirPath)
|
||||
Dim sDDFFilePath As String = sDDFDirPath & "\" & sDDFName
|
||||
Return Map.refSupervisorFunction.PlgExecProcess(sCamExePath, sMainLuaPath, sDDFFilePath)
|
||||
End Function
|
||||
|
||||
Friend Function ExecCAMProcessAsync(sDDFName As String) As Boolean
|
||||
' lancio esecuzione programma
|
||||
Dim sCamExePath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "CAMExePath", "", sCamExePath)
|
||||
Dim sMainLuaPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "MainLUA", "", sMainLuaPath)
|
||||
Dim sDDFDirPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "DDFDir", "", sDDFDirPath)
|
||||
Dim sDDFFilePath As String = sDDFDirPath & "\" & sDDFName
|
||||
Return Map.refSupervisorFunction.PlgExecProcessAsync(sCamExePath, sMainLuaPath, sDDFFilePath)
|
||||
End Function
|
||||
|
||||
Public Sub Read(FilePath As String)
|
||||
If Not File.Exists(FilePath) Then Return
|
||||
Dim sReadedFile As String = File.ReadAllText(FilePath)
|
||||
Dim JsonDoorList As List(Of JsonDoor) = JsonConvert.DeserializeObject(Of List(Of JsonDoor))(sReadedFile)
|
||||
JsonDoorList = JsonDoorList.OrderBy(Of Integer)(Function(x) x.nListIndex).ToList()
|
||||
|
||||
m_DoorList = New ObservableCollection(Of Door)((From JsonDoor In JsonDoorList
|
||||
Select New Door(JsonDoor)).ToList())
|
||||
End Sub
|
||||
|
||||
Public Sub Write(FilePath As String)
|
||||
Dim JsonDoorList As New List(Of JsonDoor)
|
||||
For nDoorIndex As Integer = 0 To m_DoorList.Count - 1
|
||||
JsonDoorList.Add(New JsonDoor(nDoorIndex + 1, m_DoorList(nDoorIndex)))
|
||||
Next
|
||||
Dim JsonFromWindow As String = JsonConvert.SerializeObject(JsonDoorList, Formatting.Indented)
|
||||
If File.Exists(FilePath) Then
|
||||
Dim sBackupFilePath As String = Path.ChangeExtension(FilePath, ".bck")
|
||||
If File.Exists(sBackupFilePath) Then
|
||||
Try
|
||||
File.Delete(sBackupFilePath)
|
||||
Catch ex As Exception
|
||||
Map.refSupervisorFunction.PlgOutLog("Error! Impossible deleting backup file!")
|
||||
End Try
|
||||
End If
|
||||
Try
|
||||
File.Move(FilePath, sBackupFilePath)
|
||||
Catch ex As Exception
|
||||
Map.refSupervisorFunction.PlgOutLog("Error! Impossible renaming backup file!")
|
||||
End Try
|
||||
End If
|
||||
File.WriteAllText(FilePath, JsonFromWindow)
|
||||
End Sub
|
||||
|
||||
Private Sub WriteBackupCmd()
|
||||
If m_bWritingBackup Then Return
|
||||
m_bWritingBackup = True
|
||||
m_nBackupindex = m_nModifyIndex
|
||||
Dim sBackupDirPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, K_BACKUPDIR, "", sBackupDirPath)
|
||||
Dim sBackupFilePath As String = sBackupDirPath & "\Backup.json"
|
||||
Write(sBackupFilePath)
|
||||
m_bWritingBackup = False
|
||||
End Sub
|
||||
|
||||
Friend Sub WriteBackup()
|
||||
m_nModifyIndex += 1
|
||||
End Sub
|
||||
|
||||
Private Sub BackupTimer_Tick(sender As Object, e As EventArgs)
|
||||
If m_nBackupindex < m_nModifyIndex Then
|
||||
WriteBackupCmd()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub RefreshGraphicsTimer_Tick(sender As Object, e As EventArgs)
|
||||
If IsNothing(m_ExecProcessManager) Then Return
|
||||
' ciclo su coda risultati
|
||||
Dim ArgumentsResult As ProcessArgsResult = m_ExecProcessManager.ArgumentsResultDequeue
|
||||
While Not IsNothing(ArgumentsResult)
|
||||
' aggiorno risultato sulla porta
|
||||
Dim CurrRequestDoor As Door = m_DoorList.FirstOrDefault(Function(x) x.nId = ArgumentsResult.ProcessArgs.nId)
|
||||
If Not IsNothing(CurrRequestDoor) Then
|
||||
CurrRequestDoor.SetState(If(ArgumentsResult.nResult = 0, Door.DoorStates.VERIFIED, Door.DoorStates.VERIFICATION_FAILED))
|
||||
End If
|
||||
WriteBackup()
|
||||
ArgumentsResult = m_ExecProcessManager.ArgumentsResultDequeue
|
||||
End While
|
||||
If Not bExecButton_IsEnabled AndAlso m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.STOPPED Then
|
||||
SetExecButtonIsEnabled(True)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Friend Function GetNextDoor() As Door
|
||||
Dim NextDoor As Door = m_DoorList.FirstOrDefault(Function(x) x.nState = Door.DoorStates.READY_FOR_PRODUCTION)
|
||||
If Not IsNothing(NextDoor) Then
|
||||
NextDoor.SetState(Door.DoorStates.ON_LOAD_STATION)
|
||||
WriteBackup()
|
||||
End If
|
||||
Return NextDoor
|
||||
End Function
|
||||
|
||||
#End Region ' METHODS
|
||||
|
||||
#Region "COMMANDS"
|
||||
|
||||
#Region "OpenCSV"
|
||||
|
||||
Public ReadOnly Property OpenCSV_Command As ICommand
|
||||
Get
|
||||
If m_cmdOpenCSV Is Nothing Then
|
||||
m_cmdOpenCSV = New Command(AddressOf OpenCSV)
|
||||
End If
|
||||
Return m_cmdOpenCSV
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub OpenCSV()
|
||||
Dim sDir As String = String.Empty
|
||||
'GetMainPrivateProfileString(S_GENERAL, K_LASTIMPDIR, "", sDir)
|
||||
Dim OpenFileDialog As New Microsoft.Win32.OpenFileDialog() With {
|
||||
.DefaultExt = ".csv",
|
||||
.Filter = "CSV (*.csv)|*.csv",
|
||||
.InitialDirectory = If(Directory.Exists(sDir), sDir, ""),
|
||||
.CheckFileExists = True,
|
||||
.ValidateNames = True}
|
||||
If OpenFileDialog.ShowDialog() Then
|
||||
Dim sCSVPath As String = OpenFileDialog.FileName
|
||||
Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(sCSVPath)
|
||||
MyReader.TextFieldType = FileIO.FieldType.Delimited
|
||||
MyReader.SetDelimiters(";")
|
||||
' leggo intestazione
|
||||
Dim Headers As String() = MyReader.ReadFields()
|
||||
Dim sDDFName As String = ""
|
||||
Dim sQuantityName As String = ""
|
||||
Dim sHeightName As String = ""
|
||||
Dim sWidthName As String = ""
|
||||
Dim sThicknessName As String = ""
|
||||
GetPluginPrivateProfileString(S_CSV, K_DDFNAME, K_DDFNAME, sDDFName)
|
||||
GetPluginPrivateProfileString(S_CSV, K_QUANTITY, "", sQuantityName)
|
||||
GetPluginPrivateProfileString(S_CSV, K_HEIGHT, "", sHeightName)
|
||||
GetPluginPrivateProfileString(S_CSV, K_WIDTH, "", sWidthName)
|
||||
GetPluginPrivateProfileString(S_CSV, K_THICKNESS, "", sThicknessName)
|
||||
Dim nDDFNameIndex As Integer = Array.IndexOf(Headers, sDDFName)
|
||||
Dim nQuantityNameIndex As Integer = Array.IndexOf(Headers, sQuantityName)
|
||||
Dim nHeightNameIndex As Integer = Array.IndexOf(Headers, sHeightName)
|
||||
Dim nWidthNameIndex As Integer = Array.IndexOf(Headers, sWidthName)
|
||||
Dim nThicknessNameIndex As Integer = Array.IndexOf(Headers, sThicknessName)
|
||||
If nDDFNameIndex = -1 Then
|
||||
Dim sMessage As String = "Error! DDFName column not found! Csv file will not be read!"
|
||||
' egtoutlog(sMessage)
|
||||
MessageBox.Show(sMessage, "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||
Return
|
||||
End If
|
||||
Dim Values As String()
|
||||
Dim nLineIndex As Integer = 1
|
||||
Dim sLineErrorList As String = ""
|
||||
While Not MyReader.EndOfData
|
||||
Try
|
||||
Values = MyReader.ReadFields()
|
||||
Dim nQuantity As Integer = 1
|
||||
If nQuantityNameIndex >= 0 AndAlso nQuantityNameIndex < Values.Count Then
|
||||
If Not Integer.TryParse(Values(nQuantityNameIndex), nQuantity) OrElse nQuantity < 1 Then
|
||||
nQuantity = 1
|
||||
Dim sLine As String = ""
|
||||
For nValueIndex = 0 To Values.Count - 1
|
||||
sLine &= Values(nValueIndex) & If(nValueIndex < Values.Count, ";", "")
|
||||
Next
|
||||
sLineErrorList &= "Quantity not readable in line " & sLine & ". This line will be skipped"
|
||||
Continue While
|
||||
End If
|
||||
End If
|
||||
Dim dWidth As Double = 0
|
||||
If nWidthNameIndex >= 0 AndAlso nWidthNameIndex < Values.Count Then
|
||||
If Not StringToDouble(Values(nWidthNameIndex), dWidth) OrElse dWidth < 0 Then
|
||||
dWidth = 0
|
||||
End If
|
||||
End If
|
||||
Dim dHeight As Double = 0
|
||||
If nHeightNameIndex >= 0 AndAlso nHeightNameIndex < Values.Count Then
|
||||
If Not StringToDouble(Values(nHeightNameIndex), dHeight) OrElse dHeight < 0 Then
|
||||
dHeight = 0
|
||||
End If
|
||||
End If
|
||||
Dim dThickness As Double = 0
|
||||
If nThicknessNameIndex >= 0 AndAlso nThicknessNameIndex < Values.Count Then
|
||||
If Not StringToDouble(Values(nThicknessNameIndex), dThickness) OrElse dThickness < 0 Then
|
||||
dThickness = 0
|
||||
End If
|
||||
End If
|
||||
For nQuantityIndex = 1 To nQuantity
|
||||
Dim nId As Integer = 1
|
||||
If m_DoorList.Count > 0 Then
|
||||
Dim nMaxId As Integer = m_DoorList.Max(Of Integer)(Function(x) x.nId)
|
||||
'If nMaxId < 100 Then
|
||||
nId = nMaxId + 1
|
||||
'End If
|
||||
End If
|
||||
Dim NewDoor As New Door(nId, nLineIndex, Values(nDDFNameIndex), Path.GetFileName(sCSVPath),
|
||||
1, dWidth, dHeight, dThickness, Headers, Values)
|
||||
m_DoorList.Add(NewDoor)
|
||||
Next
|
||||
nLineIndex += 1
|
||||
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
|
||||
Dim sMessage As String = "Line " & ex.Message & "is not valid and will be skipped."
|
||||
' egtoutlog(sMessage)
|
||||
sLineErrorList &= Environment.NewLine & ex.Message
|
||||
End Try
|
||||
End While
|
||||
If Not String.IsNullOrWhiteSpace(sLineErrorList) Then
|
||||
MessageBox.Show("The following lines are not valid and have been skipped:" & sLineErrorList, "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||
End If
|
||||
End Using
|
||||
Dim sCamExePath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "CAMExePath", "", sCamExePath)
|
||||
Dim sMainLuaPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "MainPipeLUA", "", sMainLuaPath)
|
||||
Dim bStartExecProcessManager As Boolean = False
|
||||
If IsNothing(m_ExecProcessManager) Then
|
||||
bStartExecProcessManager = True
|
||||
m_ExecProcessManager = New ExecProcessManager(sCamExePath, """" & sMainLuaPath & """")
|
||||
'm_ExecProcessManager.SetPostProcess(AddressOf ExecProcessManager_PostProcess)
|
||||
AddHandler m_ExecProcessManager.m_AllArgsProcessed, AddressOf ExecProcessManager_AllArgsProcessed
|
||||
m_ExecProcessManager.SetMaxCamInstances(3)
|
||||
End If
|
||||
Dim sDDFDirPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "DDFDir", "", sDDFDirPath)
|
||||
For Each Door In m_DoorList
|
||||
If Door.nState = Door.DoorStates.LOADED_FROM_CSV Then
|
||||
Dim sDDFFilePath As String = sDDFDirPath & "\" & Door.sDDFName
|
||||
m_ExecProcessManager.ArgumentsEnqueue(New ProcessArgs(Door.nId, sDDFFilePath))
|
||||
End If
|
||||
Next
|
||||
If bStartExecProcessManager OrElse m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.STOPPED Then
|
||||
m_ExecProcessManager.StartExecutionThread()
|
||||
SetExecButtonIsEnabled(False)
|
||||
End If
|
||||
End If
|
||||
WriteBackup()
|
||||
End Sub
|
||||
|
||||
Public Sub ExecProcessManager_AllArgsProcessed()
|
||||
m_ExecProcessManager.StopExecutionThread()
|
||||
End Sub
|
||||
|
||||
Public Sub ExecProcessManager_PostProcess(ProcessArgsResult As ProcessArgsResult)
|
||||
' verifico file di risultati
|
||||
Dim sDDFDirPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "DDFDir", "", sDDFDirPath)
|
||||
Dim sDDFFilePath As String = sDDFDirPath & "\" & ProcessArgsResult.ProcessArgs.sArgs
|
||||
Dim sTxtFilePath As String = Path.ChangeExtension(sDDFDirPath, ".txt")
|
||||
If Not File.Exists(sTxtFilePath) Then
|
||||
ProcessArgsResult.SetResult(-1)
|
||||
Return
|
||||
End If
|
||||
Dim TxtFileLines As String() = File.ReadAllLines(sTxtFilePath)
|
||||
For nLineIndex As Integer = 0 To TxtFileLines.Count - 1
|
||||
Dim Match As Match = Regex.Match(TxtFileLines(nLineIndex), "\s*Err\s*=\s*(\d*)\s*")
|
||||
If Not IsNothing(Match) AndAlso Not IsNothing(Match.Groups(1)) Then
|
||||
Dim sResult As String = Match.Groups(1).Value
|
||||
Dim nResult As Integer = -2
|
||||
If Integer.TryParse(sResult, nResult) Then
|
||||
ProcessArgsResult.SetResult(nResult)
|
||||
Else
|
||||
ProcessArgsResult.SetResult(-2)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
|
||||
#End Region ' OpenCSV
|
||||
|
||||
#Region "SkipDoor"
|
||||
|
||||
Public ReadOnly Property SkipDoor_Command As ICommand
|
||||
Get
|
||||
If m_cmdSkipDoor Is Nothing Then
|
||||
m_cmdSkipDoor = New Command(AddressOf SkipDoor)
|
||||
End If
|
||||
Return m_cmdSkipDoor
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub SkipDoor()
|
||||
If IsNothing(SelDoor) OrElse (SelDoor.nState <> Door.DoorStates.VERIFIED AndAlso SelDoor.nState <> Door.DoorStates.SKIPPED) Then Return
|
||||
SelDoor.SetState(If(SelDoor.nState = Door.DoorStates.VERIFIED, Door.DoorStates.SKIPPED, Door.DoorStates.VERIFIED))
|
||||
WriteBackup()
|
||||
End Sub
|
||||
|
||||
#End Region ' SkipDoor
|
||||
|
||||
#Region "MoveUp"
|
||||
|
||||
Public ReadOnly Property MoveUp_Command As ICommand
|
||||
Get
|
||||
If m_cmdMoveUp Is Nothing Then
|
||||
m_cmdMoveUp = New Command(AddressOf MoveUp)
|
||||
End If
|
||||
Return m_cmdMoveUp
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub MoveUp()
|
||||
If IsNothing(SelDoor) Then Return
|
||||
Dim nOldIndex As Integer = m_DoorList.IndexOf(SelDoor)
|
||||
If nOldIndex = 0 Then Return
|
||||
If m_DoorList(nOldIndex - 1).nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return
|
||||
m_DoorList.Move(nOldIndex, nOldIndex - 1)
|
||||
WriteBackup()
|
||||
End Sub
|
||||
|
||||
#End Region ' MoveUp
|
||||
|
||||
#Region "MoveDown"
|
||||
|
||||
Public ReadOnly Property MoveDown_Command As ICommand
|
||||
Get
|
||||
If m_cmdMoveDown Is Nothing Then
|
||||
m_cmdMoveDown = New Command(AddressOf MoveDown)
|
||||
End If
|
||||
Return m_cmdMoveDown
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub MoveDown()
|
||||
If IsNothing(SelDoor) OrElse SelDoor.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return
|
||||
Dim nOldIndex As Integer = m_DoorList.IndexOf(SelDoor)
|
||||
If nOldIndex = m_DoorList.Count - 1 Then Return
|
||||
m_DoorList.Move(nOldIndex, nOldIndex + 1)
|
||||
WriteBackup()
|
||||
End Sub
|
||||
|
||||
#End Region ' MoveDown
|
||||
|
||||
#Region "Delete"
|
||||
|
||||
Public ReadOnly Property Delete_Command As ICommand
|
||||
Get
|
||||
If m_cmdDelete Is Nothing Then
|
||||
m_cmdDelete = New Command(AddressOf Delete)
|
||||
End If
|
||||
Return m_cmdDelete
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub Delete()
|
||||
If IsNothing(SelDoor) OrElse SelDoor.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return
|
||||
If MessageBox.Show("Are you sure you want to delete the selected door?", "Info", MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then
|
||||
m_DoorList.Remove(SelDoor)
|
||||
WriteBackup()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
#End Region ' Delete
|
||||
|
||||
#Region "DeleteAll"
|
||||
|
||||
Public ReadOnly Property DeleteAll_Command As ICommand
|
||||
Get
|
||||
If m_cmdDeleteAll Is Nothing Then
|
||||
m_cmdDeleteAll = New Command(AddressOf DeleteAll)
|
||||
End If
|
||||
Return m_cmdDeleteAll
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub DeleteAll()
|
||||
If m_DoorList.Count = 0 Then Return
|
||||
If MessageBox.Show("Are you sure you want to delete all the doors?", "Info", MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then
|
||||
For nDoorIndex = m_DoorList.Count - 1 To 0 Step -1
|
||||
Dim Door As Door = m_DoorList(nDoorIndex)
|
||||
If Door.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Continue For
|
||||
m_DoorList.Remove(Door)
|
||||
Next
|
||||
WriteBackup()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
#End Region ' DeleteAll
|
||||
|
||||
#Region "Produce"
|
||||
|
||||
Public ReadOnly Property Produce_Command As ICommand
|
||||
Get
|
||||
If m_cmdProduce Is Nothing Then
|
||||
m_cmdProduce = New Command(AddressOf Produce)
|
||||
End If
|
||||
Return m_cmdProduce
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub Produce()
|
||||
If IsNothing(SelDoor) OrElse SelDoor.nState = Door.DoorStates.SKIPPED OrElse
|
||||
SelDoor.nState = Door.DoorStates.VERIFICATION_FAILED OrElse
|
||||
SelDoor.nState >= Door.DoorStates.READY_FOR_PRODUCTION Then Return
|
||||
' la sposto dopo l'ultima da produrre
|
||||
Dim nNewIndex As Integer = m_DoorList.IndexOf(m_DoorList.FirstOrDefault(Function(x) x.nState < Door.DoorStates.READY_FOR_PRODUCTION))
|
||||
Dim nOldIndex As Integer = m_DoorList.IndexOf(SelDoor)
|
||||
Dim SelectedDoor As Door = m_SelDoor
|
||||
m_DoorList.Move(nOldIndex, nNewIndex)
|
||||
SelectedDoor.SetState(Door.DoorStates.READY_FOR_PRODUCTION)
|
||||
WriteBackup()
|
||||
End Sub
|
||||
|
||||
#End Region ' Produce
|
||||
|
||||
#Region "ProduceAll"
|
||||
|
||||
Public ReadOnly Property ProduceAll_Command As ICommand
|
||||
Get
|
||||
If m_cmdProduceAll Is Nothing Then
|
||||
m_cmdProduceAll = New Command(AddressOf ProduceAll)
|
||||
End If
|
||||
Return m_cmdProduceAll
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub ProduceAll()
|
||||
If IsNothing(SelDoor) Then Return
|
||||
WriteBackup()
|
||||
End Sub
|
||||
|
||||
#End Region ' ProduceAll
|
||||
|
||||
#Region "ResetProductionQueue"
|
||||
|
||||
Public ReadOnly Property ResetProductionQueue_Command As ICommand
|
||||
Get
|
||||
If m_cmdResetProductionQueue Is Nothing Then
|
||||
m_cmdResetProductionQueue = New Command(AddressOf ResetProductionQueue)
|
||||
End If
|
||||
Return m_cmdResetProductionQueue
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub ResetProductionQueue()
|
||||
For Each Door In m_DoorList
|
||||
If Door.nState = Door.DoorStates.READY_FOR_PRODUCTION Then
|
||||
Door.SetState(Door.DoorStates.VERIFIED)
|
||||
End If
|
||||
Next
|
||||
WriteBackup()
|
||||
End Sub
|
||||
|
||||
#End Region ' ResetProductionQueue
|
||||
|
||||
#Region "Verify"
|
||||
|
||||
Public ReadOnly Property Verify_Command As ICommand
|
||||
Get
|
||||
If m_cmdVerify Is Nothing Then
|
||||
m_cmdVerify = New Command(AddressOf Verify)
|
||||
End If
|
||||
Return m_cmdVerify
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub Verify()
|
||||
Dim sCamExePath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "CAMExePath", "", sCamExePath)
|
||||
Dim sMainLuaPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "MainPipeLUA", "", sMainLuaPath)
|
||||
Dim bStartExecProcessManager As Boolean = False
|
||||
If IsNothing(m_ExecProcessManager) Then
|
||||
bStartExecProcessManager = True
|
||||
m_ExecProcessManager = New ExecProcessManager(sCamExePath, """" & sMainLuaPath & """")
|
||||
'm_ExecProcessManager.SetPostProcess(AddressOf ExecProcessManager_PostProcess)
|
||||
AddHandler m_ExecProcessManager.m_AllArgsProcessed, AddressOf ExecProcessManager_AllArgsProcessed
|
||||
m_ExecProcessManager.SetMaxCamInstances(3)
|
||||
End If
|
||||
Dim sDDFDirPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, "DDFDir", "", sDDFDirPath)
|
||||
For Each Door In m_DoorList
|
||||
If Door.nState = Door.DoorStates.LOADED_FROM_CSV Or Door.nState = Door.DoorStates.VERIFICATION_FAILED Then
|
||||
Dim sDDFFilePath As String = sDDFDirPath & "\" & Door.sDDFName
|
||||
m_ExecProcessManager.ArgumentsEnqueue(New ProcessArgs(Door.nId, sDDFFilePath))
|
||||
End If
|
||||
Next
|
||||
If bStartExecProcessManager OrElse m_ExecProcessManager.ExecutionThreadStatus = ExecProcessManager.ExecutionThreadStatuses.STOPPED Then
|
||||
m_ExecProcessManager.StartExecutionThread()
|
||||
SetExecButtonIsEnabled(False)
|
||||
End If
|
||||
WriteBackup()
|
||||
End Sub
|
||||
|
||||
#End Region ' Verify
|
||||
|
||||
#End Region ' COMMANDS
|
||||
|
||||
End Class
|
||||
|
||||
Public Class Door
|
||||
Inherits VMBase
|
||||
|
||||
Public Enum DoorStates As Integer
|
||||
NULL = 0
|
||||
LOADED_FROM_CSV = 1
|
||||
VERIFIED = 10
|
||||
VERIFICATION_FAILED = 11
|
||||
SKIPPED = 20
|
||||
READY_FOR_PRODUCTION = 30
|
||||
ON_LOAD_STATION = 31
|
||||
MACHINE_1_START = 33
|
||||
MACHINE_1_END = 34
|
||||
MACHINE_2_START = 35
|
||||
MACHINE_2_END = 35
|
||||
PRODUCED = 36
|
||||
SCRAP = 40
|
||||
End Enum
|
||||
|
||||
Public Enum DoorProdStates As Integer
|
||||
NOT_INIT = 0
|
||||
IMPORTED = 1
|
||||
SENT_1 = 2
|
||||
START_MACHINING_1 = 3
|
||||
MACHINED_1 = 4
|
||||
SENT_2 = 5
|
||||
START_MACHINING_2 = 6
|
||||
MACHINED_2 = 7
|
||||
UNLOADED = 8
|
||||
End Enum
|
||||
|
||||
Private m_nId As Integer
|
||||
Public ReadOnly Property nId As Integer
|
||||
Get
|
||||
Return m_nId
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_nCSVLine As Integer
|
||||
Public ReadOnly Property nCSVLine As Integer
|
||||
Get
|
||||
Return m_nCSVLine
|
||||
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_nQuantity As Integer
|
||||
Public ReadOnly Property nQuantity As Integer
|
||||
Get
|
||||
Return m_nQuantity
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_dWidth As Double
|
||||
Public ReadOnly Property dWidth As Double
|
||||
Get
|
||||
Return m_dWidth
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_dHeight As Double
|
||||
Public ReadOnly Property dHeight As Double
|
||||
Get
|
||||
Return m_dHeight
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_dThickness As Double
|
||||
Public ReadOnly Property dThickness As Double
|
||||
Get
|
||||
Return m_dThickness
|
||||
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_CustomerParameters As New List(Of CustomerParameter)
|
||||
Public ReadOnly Property CustomerParameters As List(Of CustomerParameter)
|
||||
Get
|
||||
Return m_CustomerParameters
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_nState As DoorStates = DoorStates.LOADED_FROM_CSV
|
||||
Public ReadOnly Property nState As DoorStates
|
||||
Get
|
||||
Return m_nState
|
||||
End Get
|
||||
End Property
|
||||
Friend Sub SetState(value As DoorStates, Optional bUpdate As Boolean = True)
|
||||
m_nState = value
|
||||
If bUpdate Then NotifyPropertyChanged(NameOf(nState))
|
||||
End Sub
|
||||
|
||||
#Region "Statistics"
|
||||
|
||||
Private m_nProdState As DoorProdStates = DoorProdStates.NOT_INIT
|
||||
Public ReadOnly Property nProdState As DoorProdStates
|
||||
Get
|
||||
Return m_nProdState
|
||||
End Get
|
||||
End Property
|
||||
Friend Sub SetProdState(value As DoorProdStates)
|
||||
m_nProdState = value
|
||||
Select Case value
|
||||
Case DoorProdStates.START_MACHINING_1
|
||||
SetState(DoorStates.MACHINE_1_START)
|
||||
Case DoorProdStates.MACHINED_1
|
||||
SetState(DoorStates.MACHINE_1_END)
|
||||
Case DoorProdStates.START_MACHINING_2
|
||||
SetState(DoorStates.MACHINE_2_START)
|
||||
Case DoorProdStates.MACHINED_2
|
||||
SetState(DoorStates.MACHINE_2_END)
|
||||
Case DoorProdStates.UNLOADED
|
||||
SetState(DoorStates.PRODUCED)
|
||||
End Select
|
||||
NotifyPropertyChanged(NameOf(nProdState))
|
||||
End Sub
|
||||
|
||||
Private m_dtLoadTime As DateTime = DateTime.MinValue
|
||||
Friend ReadOnly Property dtLoadTime As DateTime
|
||||
Get
|
||||
Return m_dtLoadTime
|
||||
End Get
|
||||
End Property
|
||||
Public ReadOnly Property sLoadTime As String
|
||||
Get
|
||||
Return If(m_dtLoadTime <> DateTime.MinValue, m_dtLoadTime.ToString("yy/MM/dd hh:mm:ss"), "")
|
||||
End Get
|
||||
End Property
|
||||
Friend Sub SetLoadTime(LoadTime As Long)
|
||||
m_dtLoadTime = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(LoadTime).ToLocalTime()
|
||||
NotifyPropertyChanged(NameOf(sLoadTime))
|
||||
End Sub
|
||||
|
||||
Private m_dtMachining1Start As DateTime = DateTime.MinValue
|
||||
Friend ReadOnly Property dtMachining1Start As DateTime
|
||||
Get
|
||||
Return m_dtMachining1Start
|
||||
End Get
|
||||
End Property
|
||||
Public ReadOnly Property sMachining1Start As String
|
||||
Get
|
||||
Return If(m_dtMachining1Start <> DateTime.MinValue, m_dtMachining1Start.ToString("yy/MM/dd hh:mm:ss"), "")
|
||||
End Get
|
||||
End Property
|
||||
Friend Sub SetMachining1Start(Machining1Start As Long)
|
||||
m_dtMachining1Start = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Machining1Start).ToLocalTime()
|
||||
NotifyPropertyChanged(NameOf(sMachining1Start))
|
||||
End Sub
|
||||
|
||||
Private m_dtMachining1End As DateTime = DateTime.MinValue
|
||||
Friend ReadOnly Property dtMachining1End As DateTime
|
||||
Get
|
||||
Return m_dtMachining1End
|
||||
End Get
|
||||
End Property
|
||||
Public ReadOnly Property sMachining1End As String
|
||||
Get
|
||||
Return If(m_dtMachining1End <> DateTime.MinValue, m_dtMachining1End.ToString("yy/MM/dd hh:mm:ss"), "")
|
||||
End Get
|
||||
End Property
|
||||
Friend Sub SetMachining1End(Machining1End As Long)
|
||||
m_dtMachining1End = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Machining1End).ToLocalTime()
|
||||
NotifyPropertyChanged(NameOf(sMachining1End))
|
||||
End Sub
|
||||
|
||||
Private m_dtMachining2Start As DateTime = DateTime.MinValue
|
||||
Friend ReadOnly Property dtMachining2Start As DateTime
|
||||
Get
|
||||
Return m_dtMachining2Start
|
||||
End Get
|
||||
End Property
|
||||
Public ReadOnly Property sMachining2Start As String
|
||||
Get
|
||||
Return If(m_dtMachining2Start <> DateTime.MinValue, m_dtMachining2Start.ToString("yy/MM/dd hh:mm:ss"), "")
|
||||
End Get
|
||||
End Property
|
||||
Friend Sub SetMachining2Start(Machining2Start As Long)
|
||||
m_dtMachining2Start = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Machining2Start).ToLocalTime()
|
||||
NotifyPropertyChanged(NameOf(sMachining2Start))
|
||||
End Sub
|
||||
|
||||
Private m_dtMachining2End As DateTime = DateTime.MinValue
|
||||
Friend ReadOnly Property dtMachining2End As DateTime
|
||||
Get
|
||||
Return m_dtMachining2End
|
||||
End Get
|
||||
End Property
|
||||
Public ReadOnly Property sMachining2End As String
|
||||
Get
|
||||
Return If(m_dtMachining2End <> DateTime.MinValue, m_dtMachining2End.ToString("yy/MM/dd hh:mm:ss"), "")
|
||||
End Get
|
||||
End Property
|
||||
Friend Sub SetMachining2End(Machining2End As Long)
|
||||
m_dtMachining2End = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Machining2End).ToLocalTime()
|
||||
NotifyPropertyChanged(NameOf(sMachining2End))
|
||||
End Sub
|
||||
|
||||
Private m_dtUnloadTime As DateTime = DateTime.MinValue
|
||||
Friend ReadOnly Property dtUnloadTime As DateTime
|
||||
Get
|
||||
Return m_dtUnloadTime
|
||||
End Get
|
||||
End Property
|
||||
Public ReadOnly Property sUnloadTime As String
|
||||
Get
|
||||
Return If(m_dtUnloadTime <> DateTime.MinValue, m_dtUnloadTime.ToString("yy/MM/dd hh:mm:ss"), "")
|
||||
End Get
|
||||
End Property
|
||||
Friend Sub SetUnloadTime(UnloadTime As Long)
|
||||
m_dtUnloadTime = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(UnloadTime).ToLocalTime()
|
||||
NotifyPropertyChanged(NameOf(sUnloadTime))
|
||||
End Sub
|
||||
|
||||
#End Region ' Statistics
|
||||
|
||||
Sub New(nId As Integer, nCSVLine As Integer, sDDFName As String, sCSVName As String, nQuantity As Integer, dWidth As Double, dHeight As Double, dThickness As Double, HeaderList As String(), ValueList As String())
|
||||
m_nId = nId
|
||||
m_nCSVLine = nCSVLine
|
||||
m_sDDFName = sDDFName
|
||||
m_sCSVName = sCSVName
|
||||
m_nQuantity = nQuantity
|
||||
m_dHeight = dHeight
|
||||
m_dWidth = dWidth
|
||||
m_dThickness = dThickness
|
||||
If Not IsNothing(HeaderList) AndAlso HeaderList.Count > 0 AndAlso Not IsNothing(ValueList) AndAlso ValueList.Count > 0 Then
|
||||
For nParamIndex = 0 To Math.Max(HeaderList.Count, ValueList.Count) - 1
|
||||
m_CustomerParameters.Add(New CustomerParameter(If(HeaderList.Count > nParamIndex, HeaderList(nParamIndex), ""), If(ValueList.Count > nParamIndex, ValueList(nParamIndex), "")))
|
||||
Next
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub New(JsonDoor As JsonDoor)
|
||||
m_nId = JsonDoor.nId
|
||||
m_nCSVLine = JsonDoor.nCSVLine
|
||||
m_sDDFName = JsonDoor.sDDFName
|
||||
m_sCSVName = JsonDoor.sCSVName
|
||||
m_nQuantity = JsonDoor.nQuantity
|
||||
m_dHeight = JsonDoor.dHeight
|
||||
m_dWidth = JsonDoor.dWidth
|
||||
m_dThickness = JsonDoor.dThickness
|
||||
m_nState = JsonDoor.nState
|
||||
m_CustomerParameters = JsonDoor.CustomerParameters
|
||||
m_nProdState = JsonDoor.nProdState
|
||||
m_dtLoadTime = JsonDoor.dtLoadTime
|
||||
m_dtMachining1Start = JsonDoor.dtMachining1Start
|
||||
m_dtMachining1End = JsonDoor.dtMachining1End
|
||||
m_dtMachining2Start = JsonDoor.dtMachining2Start
|
||||
m_dtMachining2End = JsonDoor.dtMachining2End
|
||||
m_dtUnloadTime = JsonDoor.dtUnloadTime
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
|
||||
Public Class CustomerParameter
|
||||
|
||||
Private m_sHeader As String
|
||||
Public ReadOnly Property sHeader As String
|
||||
Get
|
||||
Return m_sHeader
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sValue As String
|
||||
Public ReadOnly Property sValue As String
|
||||
Get
|
||||
Return m_sValue
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Sub New(sHeader As String, sValue As String)
|
||||
m_sHeader = sHeader
|
||||
m_sValue = sValue
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
@@ -1,32 +0,0 @@
|
||||
<Grid x:Class="FiveLakesUI"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:Supervisor.Plugin.FiveLakes"
|
||||
DataContext="{StaticResource FiveLakesUIVM}">
|
||||
<TabControl SelectedIndex="{Binding SelPage}">
|
||||
<TabControl.ItemContainerStyle>
|
||||
<Style TargetType="TabItem">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
</Style>
|
||||
</TabControl.ItemContainerStyle>
|
||||
<TabItem Name="DoorList"
|
||||
Header="DoorList">
|
||||
<local:DoorListPageV DataContext="{StaticResource DoorListVM}"/>
|
||||
</TabItem>
|
||||
<TabItem Name="Machine"
|
||||
Header="Machine">
|
||||
<local:MachinePageV DataContext="{StaticResource MachinePageVM}"/>
|
||||
</TabItem>
|
||||
<TabItem Name="Statistics"
|
||||
Header="Statistics">
|
||||
<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>
|
||||
@@ -1,52 +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 ResultQueueCount}"/>
|
||||
</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>
|
||||
|
||||
</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,52 +0,0 @@
|
||||
Imports System.Windows.Threading
|
||||
Imports System.Collections.ObjectModel
|
||||
|
||||
Public Class ProcessManagerVM
|
||||
Inherits VMBase
|
||||
|
||||
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
|
||||
|
||||
Sub New(ExecProcessManager As ExecProcessManager)
|
||||
m_ExecProcessManager = ExecProcessManager
|
||||
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))
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
|
||||
@@ -1,338 +0,0 @@
|
||||
Imports Newtonsoft.Json
|
||||
Imports System.Collections.ObjectModel
|
||||
Imports System.Globalization
|
||||
Imports System.IO
|
||||
|
||||
Public Class RestartWndVM
|
||||
Inherits VMBase
|
||||
|
||||
Friend Event m_CloseWindow(bDialogResult As Boolean)
|
||||
|
||||
' Definizione comandi
|
||||
Private m_cmdOk As ICommand
|
||||
|
||||
Private m_RestartDoorList As ObservableCollection(Of RestartDoor)
|
||||
Public ReadOnly Property RestartDoorList As ObservableCollection(Of RestartDoor)
|
||||
Get
|
||||
Return m_RestartDoorList
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sMachineImagePath As String
|
||||
Public ReadOnly Property sMachineImagePath As String
|
||||
Get
|
||||
Return m_sMachineImagePath
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'Private m_DoorOnMachineArray(4) As RestartDoor
|
||||
'Public ReadOnly Property DoorOnMachineArray As RestartDoor()
|
||||
' Get
|
||||
' Return m_DoorOnMachineArray
|
||||
' End Get
|
||||
'End Property
|
||||
|
||||
Private m_DoorOnMachineArray As New ObservableCollection(Of RestartDoor)
|
||||
Public ReadOnly Property DoorOnMachineArray As ObservableCollection(Of RestartDoor)
|
||||
Get
|
||||
Return m_DoorOnMachineArray
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public ReadOnly Property VariableList As ObservableCollection(Of Variable)
|
||||
Get
|
||||
Return Map.refMachinePageVM.VariableList
|
||||
End Get
|
||||
End Property
|
||||
|
||||
#Region "CONSTRUCTOR"
|
||||
|
||||
Sub New()
|
||||
Dim sBackupFilePath As String = ""
|
||||
GetPluginPrivateProfileString("General", "BackupDir", "", sBackupFilePath)
|
||||
sBackupFilePath &= "\LuaBackup.json"
|
||||
|
||||
Dim JsonLuaDoorList As List(Of JsonLuaDoor)
|
||||
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()
|
||||
End If
|
||||
|
||||
' creo posti in lista descrizioni
|
||||
For nIndex As Integer = 0 To 4
|
||||
m_DoorOnMachineArray.Add(Nothing)
|
||||
Next
|
||||
|
||||
' leggo presenze porta
|
||||
For nPositionIndex As Integer = 4 To 0 Step -1
|
||||
If GetVariableFromName(1, "@WP_PR_0" & nPositionIndex.ToString()).dValue <> 0 Then
|
||||
' verifico indice
|
||||
Dim nCircindex As Integer = GetVariableFromName(1, "@DOORN_S" & nPositionIndex.ToString()).nValue
|
||||
If nCircindex <> 0 Then
|
||||
m_DoorOnMachineArray(nPositionIndex) = New RestartDoor(JsonLuaDoorList(nCircindex - 1))
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
NotifyPropertyChanged(NameOf(DoorOnMachineArray))
|
||||
|
||||
|
||||
'If File.Exists(sBackupFilePath) Then
|
||||
' Dim sReadedFile As String = File.ReadAllText(sBackupFilePath)
|
||||
|
||||
' Dim JsonLuaDoorList As List(Of JsonLuaDoor) = JsonConvert.DeserializeObject(Of List(Of JsonLuaDoor))(sReadedFile)
|
||||
' JsonLuaDoorList = JsonLuaDoorList.OrderBy(Of Integer)(Function(x) x.nCircIndex).ToList()
|
||||
|
||||
' m_RestartDoorList = New ObservableCollection(Of RestartDoor)((From JsonLuaDoor In Map.refDoorListPageVM.DoorList
|
||||
' Select New RestartDoor(JsonLuaDoor)).ToList())
|
||||
' For JsonLuaDoorIndex = 0 To JsonLuaDoorList.Count - 1
|
||||
' Dim JsonLuaDoor As JsonLuaDoor = JsonLuaDoorList(JsonLuaDoorIndex)
|
||||
' Dim RestartDoor As RestartDoor = m_RestartDoorList.FirstOrDefault(Function(x) x.nId = JsonLuaDoor.nId)
|
||||
' If Not IsNothing(RestartDoor) Then
|
||||
' RestartDoor.Update(JsonLuaDoor)
|
||||
' End If
|
||||
|
||||
|
||||
' Next
|
||||
|
||||
'End If
|
||||
|
||||
|
||||
|
||||
' se macchina 1
|
||||
Dim sResourcesDirPath As String = ""
|
||||
GetPluginPrivateProfileString(S_GENERAL, K_RESOURCESDIR, "", sResourcesDirPath)
|
||||
m_sMachineImagePath = sResourcesDirPath & "\Multiax-C1223Ripartenza.png"
|
||||
End Sub
|
||||
|
||||
#End Region ' CONSTRUCTOR
|
||||
|
||||
#Region "METHODS"
|
||||
|
||||
Private Function GetVariableFromName(nMachIndex As Integer, sName As String) As Variable
|
||||
Return Map.refMachinePageVM.VariableList.FirstOrDefault(Function(x) x.nMachine = nMachIndex AndAlso x.sName = sName)
|
||||
End Function
|
||||
#End Region ' METHODS
|
||||
|
||||
#Region "COMMANDS"
|
||||
|
||||
#Region "Ok"
|
||||
|
||||
Public ReadOnly Property Ok_Command As ICommand
|
||||
Get
|
||||
If m_cmdOk Is Nothing Then
|
||||
m_cmdOk = New Command(AddressOf Ok)
|
||||
End If
|
||||
Return m_cmdOk
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub Ok()
|
||||
RaiseEvent m_CloseWindow(True)
|
||||
End Sub
|
||||
|
||||
#End Region ' Ok
|
||||
|
||||
#End Region ' COMMANDS
|
||||
|
||||
End Class
|
||||
|
||||
Public Class StateToVisibilityConverter
|
||||
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 Integer Then Return Visibility.Collapsed
|
||||
Return If(value > 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 RestartDoor
|
||||
Inherits VMBase
|
||||
|
||||
Private m_nId As Integer = -1
|
||||
Public ReadOnly Property nId As Integer
|
||||
Get
|
||||
Return m_nId
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_nCircIndex As Integer = -1
|
||||
Public ReadOnly Property nCircIndex As Integer
|
||||
Get
|
||||
Return m_nCircIndex
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_nState As Integer = 0
|
||||
Public ReadOnly Property nState As Integer
|
||||
Get
|
||||
Return m_nState
|
||||
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
|
||||
|
||||
Public Property SelDoorState As IdNameStruct
|
||||
Get
|
||||
Return m_DoorStateList.FirstOrDefault(Function(x) x.Id = m_nState)
|
||||
End Get
|
||||
Set(value As IdNameStruct)
|
||||
m_nState = value.Id
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private m_sDoorCode As String = ""
|
||||
Public ReadOnly Property sDoorCode As String
|
||||
Get
|
||||
Return m_sDoorCode
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sDoorDescription As String = ""
|
||||
Public ReadOnly Property sDoorDescription As String
|
||||
Get
|
||||
Return m_sDoorDescription
|
||||
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_sCSVName As String = ""
|
||||
Public ReadOnly Property sCSVName As String
|
||||
Get
|
||||
Return m_sCSVName
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sM1CNPath As String = ""
|
||||
Public ReadOnly Property sM1CNPath As String
|
||||
Get
|
||||
Return m_sM1CNPath
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_sM2CNPath As String = ""
|
||||
Public ReadOnly Property sM2CNPath As String
|
||||
Get
|
||||
Return m_sM2CNPath
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private m_dtLoadTime As DateTime
|
||||
Public ReadOnly Property sLoadTime As String
|
||||
Get
|
||||
Return m_dtLoadTime.ToString("yy/MM/dd HH:mm:ss")
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
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")
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Sub New(Id As Integer, IndiceCirc As Integer, Stato As Integer, CodicePorta As String, DescrizionePorta As String, NomeDDF As String, NomeCSV As String,
|
||||
CN_macchina_1 As String, CN_macchina_2 As String, tempo_carico As Long, tempo_inizio_lav_1 As Long, tempo_fine_lav_1 As Long, tempo_inizio_lav_2 As Long,
|
||||
tempo_fine_lav_2 As Long, tempo_scarico As Long)
|
||||
m_nId = Id
|
||||
m_nCircIndex = IndiceCirc
|
||||
m_nState = Stato
|
||||
m_sDoorCode = CodicePorta
|
||||
m_sDoorDescription = DescrizionePorta
|
||||
m_sDDFName = NomeDDF
|
||||
m_sCSVName = NomeCSV
|
||||
m_sM1CNPath = CN_macchina_1
|
||||
m_sM2CNPath = CN_macchina_2
|
||||
m_dtLoadTime = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_carico).ToLocalTime()
|
||||
m_dtMachining1Start = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_inizio_lav_1).ToLocalTime()
|
||||
m_dtMachining1End = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_fine_lav_1).ToLocalTime()
|
||||
m_dtMachining2Start = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_inizio_lav_2).ToLocalTime()
|
||||
m_dtMachining2End = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_fine_lav_2).ToLocalTime()
|
||||
m_dtUnloadTime = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tempo_scarico).ToLocalTime()
|
||||
End Sub
|
||||
|
||||
Sub New(Door As Door)
|
||||
m_nId = Door.nId
|
||||
m_nCircIndex = 0
|
||||
m_nState = 0
|
||||
m_sDDFName = Door.sDDFName
|
||||
m_sCSVName = Door.sCSVName
|
||||
m_sM1CNPath = ""
|
||||
m_sM2CNPath = ""
|
||||
m_dtLoadTime = DateTime.MinValue
|
||||
m_dtMachining1Start = DateTime.MinValue
|
||||
m_dtMachining1End = DateTime.MinValue
|
||||
m_dtMachining2Start = DateTime.MinValue
|
||||
m_dtMachining2End = DateTime.MinValue
|
||||
m_dtUnloadTime = DateTime.MinValue
|
||||
End Sub
|
||||
|
||||
Friend Sub New(JsonLuaDoor As JsonLuaDoor)
|
||||
m_nId = JsonLuaDoor.nId
|
||||
m_nCircIndex = JsonLuaDoor.nCircIndex
|
||||
m_nState = JsonLuaDoor.nState
|
||||
m_sDDFName = JsonLuaDoor.sDDFName
|
||||
m_sCSVName = JsonLuaDoor.sCSVName
|
||||
m_sM1CNPath = JsonLuaDoor.sM1CNPath
|
||||
m_sM2CNPath = JsonLuaDoor.sM2CNPath
|
||||
m_dtLoadTime = JsonLuaDoor.dtLoadTime
|
||||
m_dtMachining1Start = JsonLuaDoor.dtMachining1Start
|
||||
m_dtMachining1End = JsonLuaDoor.dtMachining1End
|
||||
m_dtMachining2Start = JsonLuaDoor.dtMachining2Start
|
||||
m_dtMachining2End = JsonLuaDoor.dtMachining2End
|
||||
m_dtUnloadTime = JsonLuaDoor.dtUnloadTime
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
@@ -1,155 +0,0 @@
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
|
||||
<RootNamespace>Supervisor.Plugin.FiveLakes</RootNamespace>
|
||||
<AssemblyName>Supervisor.Plugin.FiveLakes</AssemblyName>
|
||||
<OutputType>Library</OutputType>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<MyType>Custom</MyType>
|
||||
<Deterministic>true</Deterministic>
|
||||
<ProjectGuid>{7C77F537-8235-40AB-B24A-4E71CFB96D2C}</ProjectGuid>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<DefineDebug>true</DefineDebug>
|
||||
<DefineTrace>true</DefineTrace>
|
||||
<IncrementalBuild>true</IncrementalBuild>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DocumentationFile>Supervisor.Plugin.FiveLakes.xml</DocumentationFile>
|
||||
<NoWarn>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<DefineDebug>false</DefineDebug>
|
||||
<DefineTrace>true</DefineTrace>
|
||||
<IncrementalBuild>false</IncrementalBuild>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DocumentationFile>Supervisor.Plugin.FiveLakes.xml</DocumentationFile>
|
||||
<NoWarn>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OptionExplicit>On</OptionExplicit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OptionCompare>Binary</OptionCompare>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OptionStrict>Off</OptionStrict>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OptionInfer>On</OptionInfer>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="EgtWPFLib48">
|
||||
<HintPath>..\..\..\EgtProg\DllD32\EgtWPFLib48.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Supervisor.Plugin.Interface">
|
||||
<HintPath>..\..\Supervisor\Supervisor.Plugin.Interface\bin\Debug\Supervisor.Plugin.Interface.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xaml">
|
||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Import Include="System.Threading.Tasks" />
|
||||
<Import Include="System.Linq" />
|
||||
<Import Include="System.Xml.Linq" />
|
||||
<Import Include="Microsoft.VisualBasic" />
|
||||
<Import Include="System" />
|
||||
<Import Include="System.Collections" />
|
||||
<Import Include="System.Collections.Generic" />
|
||||
<Import Include="System.Diagnostics" />
|
||||
<Import Include="System.Windows" />
|
||||
<Import Include="System.Windows.Controls" />
|
||||
<Import Include="System.Windows.Data" />
|
||||
<Import Include="System.Windows.Documents" />
|
||||
<Import Include="System.Windows.Input" />
|
||||
<Import Include="System.Windows.Shapes" />
|
||||
<Import Include="System.Windows.Media" />
|
||||
<Import Include="System.Windows.Media.Imaging" />
|
||||
<Import Include="System.Windows.Navigation" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DoorList\DoorListV.xaml.vb">
|
||||
<DependentUpon>DoorListV.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="DoorList\DoorListVM.vb" />
|
||||
<Compile Include="FiveLakesUI.xaml.vb">
|
||||
<DependentUpon>FiveLakesUI.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FiveLakesUIVM.vb" />
|
||||
<Compile Include="MainMenu\MainMenuV.xaml.vb">
|
||||
<DependentUpon>MainMenuV.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="MainMenu\MainMenuVM.vb" />
|
||||
<Compile Include="My Project\AssemblyInfo.vb">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="My Project\Resources.Designer.vb">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="My Project\Settings.Designer.vb">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<Compile Include="Utility\Command.vb" />
|
||||
<Compile Include="Utility\Dictionary.xaml.vb" />
|
||||
<Compile Include="Utility\VMBase.vb" />
|
||||
<EmbeddedResource Include="My Project\Resources.resx">
|
||||
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
|
||||
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||
</EmbeddedResource>
|
||||
<None Include="My Project\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Page Include="DoorList\DoorListV.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="FiveLakesUI.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="MainMenu\MainMenuV.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="Utility\Dictionary.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<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>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>copy $(TargetPath) c:\EgtData\Supervisor\Plugin\Supervisor.Plugin.FiveLakes\Supervisor.Plugin.FiveLakes.dll
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -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
|
||||
@@ -1,105 +0,0 @@
|
||||
<ResourceDictionary x:Class="Dictionary"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:Supervisor.Plugin.FiveLakes"
|
||||
xmlns:sys="clr-namespace:System;assembly=mscorlib"
|
||||
>
|
||||
|
||||
<!--
|
||||
Assign a Key to every Panel ViewModel to use
|
||||
it in xaml file(ProjectView.xaml).
|
||||
-->
|
||||
<local:FiveLakesUIVM x:Key="FiveLakesUIVM"/>
|
||||
<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" />
|
||||
|
||||
<!--#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}" />
|
||||
<!--#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}" />
|
||||
|
||||
<!--Colori per EgtWPFLib5-->
|
||||
<SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/>
|
||||
|
||||
<!--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-->
|
||||
<PopupAnimation x:Key="{x:Static SystemParameters.MenuPopupAnimationKey}">None</PopupAnimation>
|
||||
|
||||
<!--convertert per visibilita' stringa di testo con misure in StatusBar--><!--
|
||||
<PrintApp:StringToVisibilityConverter x:Key="StringToVisibilityConverter"/>-->
|
||||
|
||||
<GridLength x:Key="TitleBarHeight">30</GridLength>
|
||||
<Thickness x:Key="WindowBorder_Thickness">2</Thickness>
|
||||
<sys:Double x:Key="WindowBorder_Height">2</sys:Double>
|
||||
|
||||
<!--Stili per disegno macchina con porte-->
|
||||
|
||||
<Style x:Key="Table" TargetType="Border">
|
||||
<Setter Property="BorderBrush" Value="Gray"/>
|
||||
<Setter Property="BorderThickness" Value="2"/>
|
||||
</Style>
|
||||
<Style x:Key="Door" TargetType="Border">
|
||||
<Setter Property="BorderBrush" Value="SaddleBrown"/>
|
||||
<Setter Property="BorderThickness" Value="5"/>
|
||||
<Setter Property="Background" Value="SandyBrown"/>
|
||||
</Style>
|
||||
<Style x:Key="Advancement_Button" TargetType="Button">
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
|
||||
</Style>
|
||||
<Style x:Key="Sensor" TargetType="Ellipse">
|
||||
<Setter Property="Height" Value="{Binding ActualWidth, RelativeSource={RelativeSource Self}}"/>
|
||||
</Style>
|
||||
<Style x:Key="MachDrawVar_TextBlock" TargetType="TextBlock">
|
||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
<Style x:Key="MachDrawVar_CheckBox" TargetType="CheckBox">
|
||||
<Setter Property="IsHitTestVisible" Value="False"/>
|
||||
<Setter Property="Focusable" Value="False"/>
|
||||
<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>
|
||||
@@ -1,108 +0,0 @@
|
||||
Imports System.ComponentModel.Composition
|
||||
Imports System.Globalization
|
||||
Imports Supervisor.Plugin.Interface
|
||||
|
||||
<Export(GetType(IPluginControl))>
|
||||
<ExportMetadata("Name", "Dictionary")>
|
||||
Public Class Dictionary
|
||||
Inherits ResourceDictionary
|
||||
Implements IPluginControl
|
||||
|
||||
Public Shared ReadOnly MySceneHostVM As String = "MySceneHostVM"
|
||||
|
||||
#Region "Colors"
|
||||
|
||||
'Private m_Omag_Red As SolidColorBrush = Brushes.Red
|
||||
'Public ReadOnly Property Omag_Red As SolidColorBrush
|
||||
' Get
|
||||
' Return m_Omag_Red
|
||||
' 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
|
||||
|
||||
Public Class CenterToolTipConverter
|
||||
Implements IMultiValueConverter
|
||||
|
||||
Public Function Convert(ByVal values As Object(), ByVal targetType As Type, ByVal parameter As Object, ByVal culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
|
||||
For Each value In values
|
||||
If TypeOf (value) IsNot Double Then
|
||||
Return Double.NaN
|
||||
End If
|
||||
Next
|
||||
Dim dPlacementTarget As Double = CDbl(values(0))
|
||||
Dim dToolTip As Double = CDbl(values(1))
|
||||
Return (dPlacementTarget / 2.0) - (dToolTip / 2.0)
|
||||
End Function
|
||||
|
||||
Public Function ConvertBack(ByVal value As Object, ByVal targetTypes As Type(), ByVal parameter As Object, ByVal culture As CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
|
||||
Throw New NotSupportedException()
|
||||
End Function
|
||||
|
||||
End Class
|
||||
@@ -1,711 +0,0 @@
|
||||
Imports System.IO
|
||||
Imports System.Threading
|
||||
Imports MS.Internal
|
||||
Imports Supervisor.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,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
|
||||
@@ -1,3 +0,0 @@
|
||||
param([string]$ProjectDir, [string]$ProjectPath);
|
||||
|
||||
Copy-Item -Path c:\EgtProg\Supervisor\Supervisor*.exe $ProjectDir\..\Exe
|
||||