commit ff85fe6e53dcfb83b0303a9e6a2ea881a2101623 Author: gudae Date: Fri Mar 6 17:06:52 2026 +0900 first commit diff --git a/.vs/ProjectEvaluation/measurement_machine.metadata.v9.bin b/.vs/ProjectEvaluation/measurement_machine.metadata.v9.bin new file mode 100644 index 0000000..49c06cd Binary files /dev/null and b/.vs/ProjectEvaluation/measurement_machine.metadata.v9.bin differ diff --git a/.vs/ProjectEvaluation/measurement_machine.projects.v9.bin b/.vs/ProjectEvaluation/measurement_machine.projects.v9.bin new file mode 100644 index 0000000..08548e6 Binary files /dev/null and b/.vs/ProjectEvaluation/measurement_machine.projects.v9.bin differ diff --git a/.vs/ProjectEvaluation/measurement_machine.strings.v9.bin b/.vs/ProjectEvaluation/measurement_machine.strings.v9.bin new file mode 100644 index 0000000..2745667 Binary files /dev/null and b/.vs/ProjectEvaluation/measurement_machine.strings.v9.bin differ diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..3171e6f --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,8 @@ +{ + "ExpandedNodes": [ + "", + "\\measurement_machine" + ], + "SelectedNode": "\\measurement_machine\\MainWindow.xaml", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/measurement_machine.slnx/FileContentIndex/3aa69213-037c-4f16-89d8-a460a46df3df.vsidx b/.vs/measurement_machine.slnx/FileContentIndex/3aa69213-037c-4f16-89d8-a460a46df3df.vsidx new file mode 100644 index 0000000..ab2fb0b Binary files /dev/null and b/.vs/measurement_machine.slnx/FileContentIndex/3aa69213-037c-4f16-89d8-a460a46df3df.vsidx differ diff --git a/.vs/measurement_machine.slnx/v18/.wsuo b/.vs/measurement_machine.slnx/v18/.wsuo new file mode 100644 index 0000000..7b6daa8 Binary files /dev/null and b/.vs/measurement_machine.slnx/v18/.wsuo differ diff --git a/.vs/measurement_machine.slnx/v18/DocumentLayout.json b/.vs/measurement_machine.slnx/v18/DocumentLayout.json new file mode 100644 index 0000000..4b47f4d --- /dev/null +++ b/.vs/measurement_machine.slnx/v18/DocumentLayout.json @@ -0,0 +1,12 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\", + "Documents": [], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [] + } + ] +} \ No newline at end of file diff --git a/.vs/measurement_machine/CopilotIndices/18.3.511.5503/CodeChunks.db b/.vs/measurement_machine/CopilotIndices/18.3.511.5503/CodeChunks.db new file mode 100644 index 0000000..37de6cb Binary files /dev/null and b/.vs/measurement_machine/CopilotIndices/18.3.511.5503/CodeChunks.db differ diff --git a/.vs/measurement_machine/CopilotIndices/18.3.511.5503/SemanticSymbols.db b/.vs/measurement_machine/CopilotIndices/18.3.511.5503/SemanticSymbols.db new file mode 100644 index 0000000..04fe925 Binary files /dev/null and b/.vs/measurement_machine/CopilotIndices/18.3.511.5503/SemanticSymbols.db differ diff --git a/.vs/measurement_machine/DesignTimeBuild/.dtbcache.v2 b/.vs/measurement_machine/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000..128dd7a Binary files /dev/null and b/.vs/measurement_machine/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/measurement_machine/FileContentIndex/dc900abc-a79b-4671-860f-138945b53682.vsidx b/.vs/measurement_machine/FileContentIndex/dc900abc-a79b-4671-860f-138945b53682.vsidx new file mode 100644 index 0000000..2891823 Binary files /dev/null and b/.vs/measurement_machine/FileContentIndex/dc900abc-a79b-4671-860f-138945b53682.vsidx differ diff --git a/.vs/measurement_machine/v17/.futdcache.v2 b/.vs/measurement_machine/v17/.futdcache.v2 new file mode 100644 index 0000000..0cc9fe4 Binary files /dev/null and b/.vs/measurement_machine/v17/.futdcache.v2 differ diff --git a/.vs/measurement_machine/v17/.suo b/.vs/measurement_machine/v17/.suo new file mode 100644 index 0000000..af9981e Binary files /dev/null and b/.vs/measurement_machine/v17/.suo differ diff --git a/.vs/measurement_machine/v17/DocumentLayout.backup.json b/.vs/measurement_machine/v17/DocumentLayout.backup.json new file mode 100644 index 0000000..ae8144b --- /dev/null +++ b/.vs/measurement_machine/v17/DocumentLayout.backup.json @@ -0,0 +1,53 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 0, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "MainWindow.xaml", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml", + "RelativeDocumentMoniker": "measurement_machine\\MainWindow.xaml", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml", + "RelativeToolTip": "measurement_machine\\MainWindow.xaml", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|", + "WhenOpened": "2026-03-06T01:20:07.837Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "MainWindow.xaml.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml.cs", + "RelativeDocumentMoniker": "measurement_machine\\MainWindow.xaml.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml.cs", + "RelativeToolTip": "measurement_machine\\MainWindow.xaml.cs", + "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T01:20:01.516Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.vs/measurement_machine/v17/DocumentLayout.json b/.vs/measurement_machine/v17/DocumentLayout.json new file mode 100644 index 0000000..fee15ee --- /dev/null +++ b/.vs/measurement_machine/v17/DocumentLayout.json @@ -0,0 +1,52 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\temp\\Desktop\\measurement_machine\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurement_machine\\measurement_machine\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurement_machine\\measurement_machine\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 0, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "MainWindow.xaml", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurement_machine\\measurement_machine\\MainWindow.xaml", + "RelativeDocumentMoniker": "measurement_machine\\MainWindow.xaml", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurement_machine\\measurement_machine\\MainWindow.xaml", + "RelativeToolTip": "measurement_machine\\MainWindow.xaml", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|", + "WhenOpened": "2026-03-06T01:20:07.837Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "MainWindow.xaml.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurement_machine\\measurement_machine\\MainWindow.xaml.cs", + "RelativeDocumentMoniker": "measurement_machine\\MainWindow.xaml.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurement_machine\\measurement_machine\\MainWindow.xaml.cs", + "RelativeToolTip": "measurement_machine\\MainWindow.xaml.cs", + "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T01:20:01.516Z" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.vs/measurement_machine/v18/.futdcache.v2 b/.vs/measurement_machine/v18/.futdcache.v2 new file mode 100644 index 0000000..e7c1a5a Binary files /dev/null and b/.vs/measurement_machine/v18/.futdcache.v2 differ diff --git a/.vs/measurement_machine/v18/.suo b/.vs/measurement_machine/v18/.suo new file mode 100644 index 0000000..0751a13 Binary files /dev/null and b/.vs/measurement_machine/v18/.suo differ diff --git a/.vs/measurement_machine/v18/DocumentLayout.backup.json b/.vs/measurement_machine/v18/DocumentLayout.backup.json new file mode 100644 index 0000000..ae0df38 --- /dev/null +++ b/.vs/measurement_machine/v18/DocumentLayout.backup.json @@ -0,0 +1,156 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\persistencemodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\persistencemodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\service\\mitutoyoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\service\\mitutoyoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\service\\inspectionservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\service\\inspectionservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\excelxmlstorageservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\excelxmlstorageservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\service\\serialdeviceservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\service\\serialdeviceservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\measurement_machine.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\measurement_machine.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 1, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "MainWindow.xaml.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml.cs", + "RelativeDocumentMoniker": "measurement_machine\\MainWindow.xaml.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml.cs", + "RelativeToolTip": "measurement_machine\\MainWindow.xaml.cs", + "ViewState": "AgIAAOQDAAAAAAAAAAAAAPkDAAAnAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T01:52:08.403Z", + "IsPinned": true, + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "MainWindow.xaml", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml", + "RelativeDocumentMoniker": "measurement_machine\\MainWindow.xaml", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml*", + "RelativeToolTip": "measurement_machine\\MainWindow.xaml*", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|", + "WhenOpened": "2026-03-06T01:52:08.165Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "ExcelXmlStorageService.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\ExcelXmlStorageService.cs", + "RelativeDocumentMoniker": "measurement_machine\\ExcelXmlStorageService.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\ExcelXmlStorageService.cs", + "RelativeToolTip": "measurement_machine\\ExcelXmlStorageService.cs", + "ViewState": "AgIAAMQAAAAAAAAAAAAAAOcAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T07:45:07.587Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "PersistenceModel.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\PersistenceModel.cs", + "RelativeDocumentMoniker": "measurement_machine\\PersistenceModel.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\PersistenceModel.cs", + "RelativeToolTip": "measurement_machine\\PersistenceModel.cs", + "ViewState": "AgIAAA4AAAAAAAAAAAAuwDEAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T07:44:44.102Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "SerialDeviceService.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\SerialDeviceService.cs", + "RelativeDocumentMoniker": "measurement_machine\\Service\\SerialDeviceService.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\SerialDeviceService.cs", + "RelativeToolTip": "measurement_machine\\Service\\SerialDeviceService.cs", + "ViewState": "AgIAAFIAAAAAAAAAAAAAAHUAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T04:50:06.535Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "measurement_machine", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\measurement_machine.csproj", + "RelativeDocumentMoniker": "measurement_machine\\measurement_machine.csproj", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\measurement_machine.csproj", + "RelativeToolTip": "measurement_machine\\measurement_machine.csproj", + "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", + "WhenOpened": "2026-03-06T02:36:25.215Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "MitutoyoService.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\MitutoyoService.cs", + "RelativeDocumentMoniker": "measurement_machine\\Service\\MitutoyoService.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\MitutoyoService.cs", + "RelativeToolTip": "measurement_machine\\Service\\MitutoyoService.cs", + "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T04:50:36.844Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "InspectionService.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\InspectionService.cs", + "RelativeDocumentMoniker": "measurement_machine\\Service\\InspectionService.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\InspectionService.cs", + "RelativeToolTip": "measurement_machine\\Service\\InspectionService.cs", + "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T04:50:45.32Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.vs/measurement_machine/v18/DocumentLayout.json b/.vs/measurement_machine/v18/DocumentLayout.json new file mode 100644 index 0000000..5c7f64c --- /dev/null +++ b/.vs/measurement_machine/v18/DocumentLayout.json @@ -0,0 +1,156 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\persistencemodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\persistencemodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\service\\mitutoyoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\service\\mitutoyoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\service\\inspectionservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\service\\inspectionservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\excelxmlstorageservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\excelxmlstorageservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\service\\serialdeviceservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\service\\serialdeviceservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|c:\\users\\temp\\desktop\\measurment_machine\\measurement_machine\\measurement_machine\\measurement_machine.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", + "RelativeMoniker": "D:0:0:{5C022D76-A875-4D2C-8133-1B7715D84C23}|measurement_machine\\measurement_machine.csproj|solutionrelative:measurement_machine\\measurement_machine.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 1, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "MainWindow.xaml.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml.cs", + "RelativeDocumentMoniker": "measurement_machine\\MainWindow.xaml.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml.cs", + "RelativeToolTip": "measurement_machine\\MainWindow.xaml.cs", + "ViewState": "AgIAAOQDAAAAAAAAAAAAAPkDAAAnAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T01:52:08.403Z", + "IsPinned": true, + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "MainWindow.xaml", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml", + "RelativeDocumentMoniker": "measurement_machine\\MainWindow.xaml", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\MainWindow.xaml", + "RelativeToolTip": "measurement_machine\\MainWindow.xaml", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|", + "WhenOpened": "2026-03-06T01:52:08.165Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "ExcelXmlStorageService.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\ExcelXmlStorageService.cs", + "RelativeDocumentMoniker": "measurement_machine\\ExcelXmlStorageService.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\ExcelXmlStorageService.cs", + "RelativeToolTip": "measurement_machine\\ExcelXmlStorageService.cs", + "ViewState": "AgIAAMQAAAAAAAAAAAAAAOcAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T07:45:07.587Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "PersistenceModel.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\PersistenceModel.cs", + "RelativeDocumentMoniker": "measurement_machine\\PersistenceModel.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\PersistenceModel.cs", + "RelativeToolTip": "measurement_machine\\PersistenceModel.cs", + "ViewState": "AgIAAA4AAAAAAAAAAAAuwDEAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T07:44:44.102Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "SerialDeviceService.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\SerialDeviceService.cs", + "RelativeDocumentMoniker": "measurement_machine\\Service\\SerialDeviceService.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\SerialDeviceService.cs", + "RelativeToolTip": "measurement_machine\\Service\\SerialDeviceService.cs", + "ViewState": "AgIAAFIAAAAAAAAAAAAAAHUAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T04:50:06.535Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "measurement_machine", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\measurement_machine.csproj", + "RelativeDocumentMoniker": "measurement_machine\\measurement_machine.csproj", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\measurement_machine.csproj", + "RelativeToolTip": "measurement_machine\\measurement_machine.csproj", + "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", + "WhenOpened": "2026-03-06T02:36:25.215Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "MitutoyoService.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\MitutoyoService.cs", + "RelativeDocumentMoniker": "measurement_machine\\Service\\MitutoyoService.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\MitutoyoService.cs", + "RelativeToolTip": "measurement_machine\\Service\\MitutoyoService.cs", + "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T04:50:36.844Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "InspectionService.cs", + "DocumentMoniker": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\InspectionService.cs", + "RelativeDocumentMoniker": "measurement_machine\\Service\\InspectionService.cs", + "ToolTip": "C:\\Users\\temp\\Desktop\\measurment_machine\\measurement_machine\\measurement_machine\\Service\\InspectionService.cs", + "RelativeToolTip": "measurement_machine\\Service\\InspectionService.cs", + "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-03-06T04:50:45.32Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000..bf53b9d Binary files /dev/null and b/.vs/slnx.sqlite differ diff --git a/measurement_machine.sln b/measurement_machine.sln new file mode 100644 index 0000000..893f616 --- /dev/null +++ b/measurement_machine.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36414.22 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "measurement_machine", "measurement_machine\measurement_machine.csproj", "{5C022D76-A875-4D2C-8133-1B7715D84C23}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5C022D76-A875-4D2C-8133-1B7715D84C23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5C022D76-A875-4D2C-8133-1B7715D84C23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5C022D76-A875-4D2C-8133-1B7715D84C23}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5C022D76-A875-4D2C-8133-1B7715D84C23}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4F0BDA05-13D9-4232-880A-CCC47F93233E} + EndGlobalSection +EndGlobal diff --git a/measurement_machine/App.xaml b/measurement_machine/App.xaml new file mode 100644 index 0000000..2a7dd80 --- /dev/null +++ b/measurement_machine/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/measurement_machine/App.xaml.cs b/measurement_machine/App.xaml.cs new file mode 100644 index 0000000..c4fc94c --- /dev/null +++ b/measurement_machine/App.xaml.cs @@ -0,0 +1,14 @@ +using System.Configuration; +using System.Data; +using System.Windows; + +namespace measurement_machine +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } + +} diff --git a/measurement_machine/AssemblyInfo.cs b/measurement_machine/AssemblyInfo.cs new file mode 100644 index 0000000..b0ec827 --- /dev/null +++ b/measurement_machine/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/measurement_machine/ExcelXmlStorageService.cs b/measurement_machine/ExcelXmlStorageService.cs new file mode 100644 index 0000000..4db13f6 --- /dev/null +++ b/measurement_machine/ExcelXmlStorageService.cs @@ -0,0 +1,232 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Security; +using System.Xml.Linq; + +namespace measurement_machine +{ + public static class ExcelXmlStorageService + { + public static void Save(InspectionConfigModel model, string filePath) + { + Directory.CreateDirectory(Path.GetDirectoryName(filePath)!); + + XNamespace ss = "urn:schemas-microsoft-com:office:spreadsheet"; + + var workbook = + new XElement("Workbook", + new XAttribute(XNamespace.Xmlns + "ss", ss), + + new XElement("Worksheet", + new XAttribute(ss + "Name", "Settings"), + new XElement("Table", + Row(ss, "Section", "Key", "Value"), + Row(ss, "Controller", "PortName", model.ControllerPortName), + Row(ss, "Controller", "BaudRate", model.ControllerBaudRate.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Controller", "StartCommand", model.ControllerStartCommand), + Row(ss, "Controller", "StopCommand", model.ControllerStopCommand), + + Row(ss, "Left", "PortName", model.LeftPortName), + Row(ss, "Left", "BaudRate", model.LeftBaudRate.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Left", "ReadCommand", model.LeftReadCommand), + + Row(ss, "Right", "PortName", model.RightPortName), + Row(ss, "Right", "BaudRate", model.RightBaudRate.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Right", "ReadCommand", model.RightReadCommand), + + Row(ss, "Spec", "LeftMinSpec", model.LeftMinSpec.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Spec", "LeftMaxSpec", model.LeftMaxSpec.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Spec", "RightMinSpec", model.RightMinSpec.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Spec", "RightMaxSpec", model.RightMaxSpec.ToString(CultureInfo.InvariantCulture)), + + Row(ss, "Timing", "RelayIdleMs", model.RelayIdleMs.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Timing", "MeasurementTimeoutMs", model.MeasurementTimeoutMs.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Timing", "ResultHoldMs", model.ResultHoldMs.ToString(CultureInfo.InvariantCulture)), + + Row(ss, "Count", "OkCount", model.OkCount.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Count", "NgCount", model.NgCount.ToString(CultureInfo.InvariantCulture)), + Row(ss, "Count", "TotalCount", model.TotalCount.ToString(CultureInfo.InvariantCulture)), + + Row(ss, "Persistence", "SaveFilePath", model.SaveFilePath) + ) + ), + + new XElement("Worksheet", + new XAttribute(ss + "Name", "History"), + new XElement("Table", + Row(ss, "Timestamp", "LeftValue", "RightValue", "Result", "Reason", "ElapsedMs", "LeftRaw", "RightRaw"), + (model.History ?? new List()) + .Select(x => Row( + ss, + x.Timestamp.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture), + x.LeftValue?.ToString(CultureInfo.InvariantCulture) ?? "", + x.RightValue?.ToString(CultureInfo.InvariantCulture) ?? "", + x.Result, + x.Reason, + x.ElapsedMs.ToString(CultureInfo.InvariantCulture), + x.LeftRaw, + x.RightRaw)) + ) + ) + ); + + var doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), workbook); + doc.Save(filePath); + } + + public static InspectionConfigModel? Load(string filePath) + { + if (!File.Exists(filePath)) + return null; + + var doc = XDocument.Load(filePath); + XNamespace ss = "urn:schemas-microsoft-com:office:spreadsheet"; + + var model = new InspectionConfigModel(); + + var worksheets = doc.Descendants("Worksheet").ToList(); + var settingsSheet = worksheets.FirstOrDefault(x => (string?)x.Attribute(ss + "Name") == "Settings"); + var historySheet = worksheets.FirstOrDefault(x => (string?)x.Attribute(ss + "Name") == "History"); + + if (settingsSheet != null) + { + var rows = settingsSheet.Descendants("Row").Skip(1).ToList(); + + foreach (var row in rows) + { + var cells = row.Descendants("Cell") + .Select(c => c.Descendants("Data").FirstOrDefault()?.Value ?? "") + .ToList(); + + if (cells.Count < 3) + continue; + + string section = cells[0]; + string key = cells[1]; + string value = cells[2]; + + ApplySetting(model, section, key, value); + } + } + + if (historySheet != null) + { + var rows = historySheet.Descendants("Row").Skip(1).ToList(); + + foreach (var row in rows) + { + var cells = row.Descendants("Cell") + .Select(c => c.Descendants("Data").FirstOrDefault()?.Value ?? "") + .ToList(); + + if (cells.Count < 8) + continue; + + model.History.Add(new InspectionHistoryItem + { + Timestamp = DateTime.TryParse(cells[0], out var dt) ? dt : DateTime.MinValue, + LeftValue = TryParseNullableDouble(cells[1]), + RightValue = TryParseNullableDouble(cells[2]), + Result = cells[3], + Reason = cells[4], + ElapsedMs = int.TryParse(cells[5], out var ms) ? ms : 0, + LeftRaw = cells[6], + RightRaw = cells[7] + }); + } + } + + return model; + } + + private static void ApplySetting(InspectionConfigModel model, string section, string key, string value) + { + switch (section) + { + case "Controller": + if (key == "PortName") model.ControllerPortName = value; + else if (key == "BaudRate") model.ControllerBaudRate = ParseInt(value, 9600); + else if (key == "StartCommand") model.ControllerStartCommand = value; + else if (key == "StopCommand") model.ControllerStopCommand = value; + break; + + case "Left": + if (key == "PortName") model.LeftPortName = value; + else if (key == "BaudRate") model.LeftBaudRate = ParseInt(value, 9600); + else if (key == "ReadCommand") model.LeftReadCommand = value; + break; + + case "Right": + if (key == "PortName") model.RightPortName = value; + else if (key == "BaudRate") model.RightBaudRate = ParseInt(value, 9600); + else if (key == "ReadCommand") model.RightReadCommand = value; + break; + + case "Spec": + if (key == "LeftMinSpec") model.LeftMinSpec = ParseDouble(value, 0); + else if (key == "LeftMaxSpec") model.LeftMaxSpec = ParseDouble(value, 100); + else if (key == "RightMinSpec") model.RightMinSpec = ParseDouble(value, 0); + else if (key == "RightMaxSpec") model.RightMaxSpec = ParseDouble(value, 100); + break; + + case "Timing": + if (key == "RelayIdleMs") model.RelayIdleMs = ParseInt(value, 100); + else if (key == "MeasurementTimeoutMs") model.MeasurementTimeoutMs = ParseInt(value, 1000); + else if (key == "ResultHoldMs") model.ResultHoldMs = ParseInt(value, 100); + break; + + case "Count": + if (key == "OkCount") model.OkCount = ParseInt(value, 0); + else if (key == "NgCount") model.NgCount = ParseInt(value, 0); + else if (key == "TotalCount") model.TotalCount = ParseInt(value, 0); + break; + + case "Persistence": + if (key == "SaveFilePath") model.SaveFilePath = value; + break; + } + } + + private static XElement Row(XNamespace ss, params string[] values) + { + return new XElement("Row", + values.Select(v => + new XElement("Cell", + new XElement("Data", + new XAttribute(ss + "Type", "String"), + Escape(v))))); + } + + private static string Escape(string text) + { + return SecurityElement.Escape(text) ?? ""; + } + + private static int ParseInt(string text, int fallback) + { + return int.TryParse(text, NumberStyles.Integer, CultureInfo.InvariantCulture, out var value) + ? value + : fallback; + } + + private static double ParseDouble(string text, double fallback) + { + return double.TryParse(text, NumberStyles.Float, CultureInfo.InvariantCulture, out var value) + ? value + : fallback; + } + + private static double? TryParseNullableDouble(string text) + { + if (string.IsNullOrWhiteSpace(text)) + return null; + + return double.TryParse(text, NumberStyles.Float, CultureInfo.InvariantCulture, out var value) + ? value + : null; + } + } +} \ No newline at end of file diff --git a/measurement_machine/MainWindow.xaml b/measurement_machine/MainWindow.xaml new file mode 100644 index 0000000..8f77e50 --- /dev/null +++ b/measurement_machine/MainWindow.xaml @@ -0,0 +1,995 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +