First Commit
This commit is contained in:
63
.gitattributes
vendored
Normal file
63
.gitattributes
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Set default behavior to automatically normalize line endings.
|
||||||
|
###############################################################################
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set default behavior for command prompt diff.
|
||||||
|
#
|
||||||
|
# This is need for earlier builds of msysgit that does not have it on by
|
||||||
|
# default for csharp files.
|
||||||
|
# Note: This is only used by command line
|
||||||
|
###############################################################################
|
||||||
|
#*.cs diff=csharp
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set the merge driver for project and solution files
|
||||||
|
#
|
||||||
|
# Merging from the command prompt will add diff markers to the files if there
|
||||||
|
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||||
|
# the diff markers are never inserted). Diff markers may cause the following
|
||||||
|
# file extensions to fail to load in VS. An alternative would be to treat
|
||||||
|
# these files as binary and thus will always conflict and require user
|
||||||
|
# intervention with every merge. To do so, just uncomment the entries below
|
||||||
|
###############################################################################
|
||||||
|
#*.sln merge=binary
|
||||||
|
#*.csproj merge=binary
|
||||||
|
#*.vbproj merge=binary
|
||||||
|
#*.vcxproj merge=binary
|
||||||
|
#*.vcproj merge=binary
|
||||||
|
#*.dbproj merge=binary
|
||||||
|
#*.fsproj merge=binary
|
||||||
|
#*.lsproj merge=binary
|
||||||
|
#*.wixproj merge=binary
|
||||||
|
#*.modelproj merge=binary
|
||||||
|
#*.sqlproj merge=binary
|
||||||
|
#*.wwaproj merge=binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# behavior for image files
|
||||||
|
#
|
||||||
|
# image files are treated as binary by default.
|
||||||
|
###############################################################################
|
||||||
|
#*.jpg binary
|
||||||
|
#*.png binary
|
||||||
|
#*.gif binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# diff behavior for common document formats
|
||||||
|
#
|
||||||
|
# Convert binary document formats to text before diffing them. This feature
|
||||||
|
# is only available from the command line. Turn it on by uncommenting the
|
||||||
|
# entries below.
|
||||||
|
###############################################################################
|
||||||
|
#*.doc diff=astextplain
|
||||||
|
#*.DOC diff=astextplain
|
||||||
|
#*.docx diff=astextplain
|
||||||
|
#*.DOCX diff=astextplain
|
||||||
|
#*.dot diff=astextplain
|
||||||
|
#*.DOT diff=astextplain
|
||||||
|
#*.pdf diff=astextplain
|
||||||
|
#*.PDF diff=astextplain
|
||||||
|
#*.rtf diff=astextplain
|
||||||
|
#*.RTF diff=astextplain
|
||||||
363
.gitignore
vendored
Normal file
363
.gitignore
vendored
Normal file
@@ -0,0 +1,363 @@
|
|||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.rsuser
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Mono auto generated files
|
||||||
|
mono_crash.*
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
[Ww][Ii][Nn]32/
|
||||||
|
[Aa][Rr][Mm]/
|
||||||
|
[Aa][Rr][Mm]64/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Oo]ut/
|
||||||
|
[Ll]og/
|
||||||
|
[Ll]ogs/
|
||||||
|
|
||||||
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUnit
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
nunit-*.xml
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
# ASP.NET Scaffolding
|
||||||
|
ScaffoldingReadMe.txt
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_h.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.iobj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.ipdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*_wpftmp.csproj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Coverlet is a free, cross platform Code Coverage Tool
|
||||||
|
coverage*.json
|
||||||
|
coverage*.xml
|
||||||
|
coverage*.info
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# NuGet Symbol Packages
|
||||||
|
*.snupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/[Pp]ackages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
*.appx
|
||||||
|
*.appxbundle
|
||||||
|
*.appxupload
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!?*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Including strong name files can present a security risk
|
||||||
|
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||||
|
#*.snk
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
ServiceFabricBackup/
|
||||||
|
*.rptproj.bak
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
*.ndf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
*.rptproj.rsuser
|
||||||
|
*- [Bb]ackup.rdl
|
||||||
|
*- [Bb]ackup ([0-9]).rdl
|
||||||
|
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# CodeRush personal settings
|
||||||
|
.cr/personal
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
||||||
|
|
||||||
|
# MSBuild Binary and Structured Log
|
||||||
|
*.binlog
|
||||||
|
|
||||||
|
# NVidia Nsight GPU debugger configuration file
|
||||||
|
*.nvuser
|
||||||
|
|
||||||
|
# MFractors (Xamarin productivity tool) working folder
|
||||||
|
.mfractor/
|
||||||
|
|
||||||
|
# Local History for Visual Studio
|
||||||
|
.localhistory/
|
||||||
|
|
||||||
|
# BeatPulse healthcheck temp database
|
||||||
|
healthchecksdb
|
||||||
|
|
||||||
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
|
MigrationBackup/
|
||||||
|
|
||||||
|
# Ionide (cross platform F# VS Code tools) working folder
|
||||||
|
.ionide/
|
||||||
|
|
||||||
|
# Fody - auto-generated XML schema
|
||||||
|
FodyWeavers.xsd
|
||||||
8
FileHandler.cs
Normal file
8
FileHandler.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
public class Class1
|
||||||
|
{
|
||||||
|
public Class1()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
27
daq_testing.sln
Normal file
27
daq_testing.sln
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 16
|
||||||
|
VisualStudioVersion = 16.0.34114.132
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "daq_testing", "daq_testing\daq_testing.csproj", "{F871696A-881E-4EDB-BC23-EC1DCBA11A5A}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{243C241C-A1C9-4B6A-9C4D-39BD27E7C89A}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{F871696A-881E-4EDB-BC23-EC1DCBA11A5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{F871696A-881E-4EDB-BC23-EC1DCBA11A5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{F871696A-881E-4EDB-BC23-EC1DCBA11A5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{F871696A-881E-4EDB-BC23-EC1DCBA11A5A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {22F2AE7D-9D35-4763-B4FF-A7A83930B0D9}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
14
daq_testing/App.config
Normal file
14
daq_testing/App.config
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
||||||
40
daq_testing/DataTableHelper.cs
Normal file
40
daq_testing/DataTableHelper.cs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace WindowsFormsApp5
|
||||||
|
{
|
||||||
|
public static class DataTableHelper
|
||||||
|
{
|
||||||
|
public static DataTable ToDataTable<T>(List<T> items)
|
||||||
|
{
|
||||||
|
var dataTable = new DataTable(typeof(T).Name);
|
||||||
|
|
||||||
|
// Get all properties of the class
|
||||||
|
PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
||||||
|
|
||||||
|
// Create DataTable columns based on properties
|
||||||
|
foreach (var prop in properties)
|
||||||
|
{
|
||||||
|
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add rows to DataTable
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
var values = new object[properties.Length];
|
||||||
|
for (int i = 0; i < properties.Length; i++)
|
||||||
|
{
|
||||||
|
values[i] = properties[i].GetValue(item, null);
|
||||||
|
}
|
||||||
|
dataTable.Rows.Add(values);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dataTable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
43
daq_testing/FileHandler.cs
Normal file
43
daq_testing/FileHandler.cs
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.IO;
|
||||||
|
using daq_testing;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
public class FileHandler
|
||||||
|
{
|
||||||
|
private readonly string filePath;
|
||||||
|
|
||||||
|
public FileHandler(string filePath)
|
||||||
|
{
|
||||||
|
this.filePath = filePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BindingList<PslineConfig> LoadData()
|
||||||
|
{
|
||||||
|
if (File.Exists(filePath))
|
||||||
|
{
|
||||||
|
var jsonData = File.ReadAllText(filePath);
|
||||||
|
var data = JsonConvert.DeserializeObject<List<PslineConfig>>(jsonData);
|
||||||
|
return new BindingList<PslineConfig>(data ?? new List<PslineConfig>());
|
||||||
|
}
|
||||||
|
return new BindingList<PslineConfig>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PslineConfig> GetPslineConfig()
|
||||||
|
{
|
||||||
|
if (File.Exists(filePath))
|
||||||
|
{
|
||||||
|
var jsonData = File.ReadAllText(filePath);
|
||||||
|
var data = JsonConvert.DeserializeObject<List<PslineConfig>>(jsonData);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
return new List<PslineConfig>();
|
||||||
|
}
|
||||||
|
public void SaveData(BindingList<PslineConfig> data)
|
||||||
|
{
|
||||||
|
var jsonData = JsonConvert.SerializeObject(data, Formatting.Indented);
|
||||||
|
File.WriteAllText(filePath, jsonData);
|
||||||
|
}
|
||||||
|
}
|
||||||
145
daq_testing/Instrument.cs
Normal file
145
daq_testing/Instrument.cs
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Agilent.Agilent34970.Interop;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public class Instrument
|
||||||
|
{
|
||||||
|
|
||||||
|
public Agilent34970 DAQInstrument = new Agilent34970();
|
||||||
|
|
||||||
|
public string ResourceDesc { get; set; }
|
||||||
|
public string InitOptions { get; set; }
|
||||||
|
public bool IdQuery { get; set; }
|
||||||
|
public bool Reset { get; set; }
|
||||||
|
public string ScanList { get; set; }
|
||||||
|
|
||||||
|
public string SerialNumber { get; set; }
|
||||||
|
|
||||||
|
public Instrument()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CheckCardConfig ()
|
||||||
|
{
|
||||||
|
const int NUMBEROFCARDS = 3;
|
||||||
|
string cardType;
|
||||||
|
|
||||||
|
for (int card = 0; card < NUMBEROFCARDS; card++)
|
||||||
|
{
|
||||||
|
|
||||||
|
cardType = DAQInstrument.System.CardType[0];
|
||||||
|
Console.WriteLine($"Cardtype slot {card}: {cardType}");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool InitializeInstrument ()
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
this.InitOptions = "QueryInstrStatus=true, Simulate=true, DriverSetup= Model=, Trace=false, TraceName=c:\\temp\\traceOut";
|
||||||
|
#else
|
||||||
|
this.InitOptions = "QueryInstrStatus=true, Simulate=false, DriverSetup= Model=, Trace=false, TraceName=c:\\temp\\traceOut";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
this.IdQuery = true;
|
||||||
|
this.Reset = true;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DAQInstrument.Initialize(ResourceDesc, IdQuery, Reset, InitOptions);
|
||||||
|
GetSerialNumber();
|
||||||
|
//CheckCardConfig();
|
||||||
|
Console.WriteLine("Driver Initialized");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Cannot Initialize Instrument");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GetSerialNumber ()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SerialNumber = DAQInstrument.Identity.Description;
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
SerialNumber = null;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public string DummyList()
|
||||||
|
{
|
||||||
|
List<string> myList = new List<string>();
|
||||||
|
string joinedlist;
|
||||||
|
//Sled 1
|
||||||
|
for (int i = 101; i < 139 +1; i++)
|
||||||
|
{
|
||||||
|
myList.Add(i.ToString());
|
||||||
|
}
|
||||||
|
//Sled 2
|
||||||
|
//for (int i = 201; i < 240 + 1; i++)
|
||||||
|
//{
|
||||||
|
// myList.Add(i.ToString());
|
||||||
|
//}
|
||||||
|
//Sled 3
|
||||||
|
//for (int i = 301; i < 340 + 1; i++)
|
||||||
|
//{
|
||||||
|
// myList.Add(i.ToString());
|
||||||
|
//}
|
||||||
|
|
||||||
|
joinedlist = string.Join(",", myList);
|
||||||
|
|
||||||
|
return joinedlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetScanlist()
|
||||||
|
{
|
||||||
|
//string scanList ="@" + DummyList();
|
||||||
|
//this.ScanList = "@121:140,221:240,321:340";
|
||||||
|
//this.ScanList = "101:120";
|
||||||
|
this.ScanList = ScanList;
|
||||||
|
// Console.WriteLine(String.Format("@{0}",scanList));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ConfigInstrument()
|
||||||
|
{
|
||||||
|
SetScanlist();
|
||||||
|
DAQInstrument.Voltage.DCVoltage.Configure(ScanList, 10, 0.01);
|
||||||
|
//DAQInstrument.Voltage.DCVoltage.AutoRangeListConfig(ScanList, true);
|
||||||
|
DAQInstrument.Scan.SweepCount = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] GetMeasurementByScanList (string scanList)
|
||||||
|
{
|
||||||
|
this.ScanList = scanList;
|
||||||
|
string[] result;
|
||||||
|
DAQInstrument.Scan.Initiate();
|
||||||
|
DAQInstrument.System.WaitForOperationComplete(10000); // Wait for scan to complete
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result = DAQInstrument.Scan.Fetch();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
125
daq_testing/MainForm.Designer.cs
generated
Normal file
125
daq_testing/MainForm.Designer.cs
generated
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
partial class MainForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.panelRight = new System.Windows.Forms.Panel();
|
||||||
|
this.btnInstrument = new System.Windows.Forms.Button();
|
||||||
|
this.btnConfigPslines = new System.Windows.Forms.Button();
|
||||||
|
this.btnMeasure = new System.Windows.Forms.Button();
|
||||||
|
this.btn_MeasureHeader = new System.Windows.Forms.Button();
|
||||||
|
this.btnDMM = new System.Windows.Forms.Button();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// panelRight
|
||||||
|
//
|
||||||
|
this.panelRight.Location = new System.Drawing.Point(190, 12);
|
||||||
|
this.panelRight.Name = "panelRight";
|
||||||
|
this.panelRight.Size = new System.Drawing.Size(1347, 795);
|
||||||
|
this.panelRight.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// btnInstrument
|
||||||
|
//
|
||||||
|
this.btnInstrument.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.btnInstrument.Name = "btnInstrument";
|
||||||
|
this.btnInstrument.Size = new System.Drawing.Size(134, 51);
|
||||||
|
this.btnInstrument.TabIndex = 1;
|
||||||
|
this.btnInstrument.Text = "INSTRUMENT";
|
||||||
|
this.btnInstrument.UseVisualStyleBackColor = true;
|
||||||
|
this.btnInstrument.Click += new System.EventHandler(this.btnInstrument_Click);
|
||||||
|
//
|
||||||
|
// btnConfigPslines
|
||||||
|
//
|
||||||
|
this.btnConfigPslines.Location = new System.Drawing.Point(12, 69);
|
||||||
|
this.btnConfigPslines.Name = "btnConfigPslines";
|
||||||
|
this.btnConfigPslines.Size = new System.Drawing.Size(134, 51);
|
||||||
|
this.btnConfigPslines.TabIndex = 2;
|
||||||
|
this.btnConfigPslines.Text = "CONFIG PSLINES";
|
||||||
|
this.btnConfigPslines.UseVisualStyleBackColor = true;
|
||||||
|
this.btnConfigPslines.Click += new System.EventHandler(this.btnConfigPslines_Click);
|
||||||
|
//
|
||||||
|
// btnMeasure
|
||||||
|
//
|
||||||
|
this.btnMeasure.Location = new System.Drawing.Point(12, 126);
|
||||||
|
this.btnMeasure.Name = "btnMeasure";
|
||||||
|
this.btnMeasure.Size = new System.Drawing.Size(134, 51);
|
||||||
|
this.btnMeasure.TabIndex = 3;
|
||||||
|
this.btnMeasure.Text = "MEASURE";
|
||||||
|
this.btnMeasure.UseVisualStyleBackColor = true;
|
||||||
|
this.btnMeasure.Click += new System.EventHandler(this.btnMeasure_Click);
|
||||||
|
//
|
||||||
|
// btn_MeasureHeader
|
||||||
|
//
|
||||||
|
this.btn_MeasureHeader.Location = new System.Drawing.Point(12, 183);
|
||||||
|
this.btn_MeasureHeader.Name = "btn_MeasureHeader";
|
||||||
|
this.btn_MeasureHeader.Size = new System.Drawing.Size(134, 51);
|
||||||
|
this.btn_MeasureHeader.TabIndex = 4;
|
||||||
|
this.btn_MeasureHeader.Text = "MEASURE_ HEADER";
|
||||||
|
this.btn_MeasureHeader.UseVisualStyleBackColor = true;
|
||||||
|
this.btn_MeasureHeader.Click += new System.EventHandler(this.btn_MeasureHeader_Click);
|
||||||
|
//
|
||||||
|
// btnDMM
|
||||||
|
//
|
||||||
|
this.btnDMM.Location = new System.Drawing.Point(12, 240);
|
||||||
|
this.btnDMM.Name = "btnDMM";
|
||||||
|
this.btnDMM.Size = new System.Drawing.Size(134, 51);
|
||||||
|
this.btnDMM.TabIndex = 5;
|
||||||
|
this.btnDMM.Text = "DMM";
|
||||||
|
this.btnDMM.UseVisualStyleBackColor = true;
|
||||||
|
this.btnDMM.Click += new System.EventHandler(this.btnDMM_Click);
|
||||||
|
//
|
||||||
|
// MainForm
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(1443, 817);
|
||||||
|
this.Controls.Add(this.btnDMM);
|
||||||
|
this.Controls.Add(this.btn_MeasureHeader);
|
||||||
|
this.Controls.Add(this.btnMeasure);
|
||||||
|
this.Controls.Add(this.btnConfigPslines);
|
||||||
|
this.Controls.Add(this.btnInstrument);
|
||||||
|
this.Controls.Add(this.panelRight);
|
||||||
|
this.Name = "MainForm";
|
||||||
|
this.Text = "Advanced HTOL Voltage Verifier";
|
||||||
|
this.Load += new System.EventHandler(this.Form1_Load);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Panel panelRight;
|
||||||
|
private System.Windows.Forms.Button btnInstrument;
|
||||||
|
private System.Windows.Forms.Button btnConfigPslines;
|
||||||
|
private System.Windows.Forms.Button btnMeasure;
|
||||||
|
private System.Windows.Forms.Button btn_MeasureHeader;
|
||||||
|
private System.Windows.Forms.Button btnDMM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
784
daq_testing/MainForm.cs
Normal file
784
daq_testing/MainForm.cs
Normal file
@@ -0,0 +1,784 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public partial class MainForm : Form
|
||||||
|
{
|
||||||
|
public Instrument DAQ;
|
||||||
|
List<PslineMapping> pslineMapping;
|
||||||
|
List<PslineConfig> pslineConfigs;
|
||||||
|
UserControlMeasure MeasureUserControl = new UserControlMeasure();
|
||||||
|
UserControlPslineConfig PslineConfigUserControl = new UserControlPslineConfig();
|
||||||
|
UserControlInstrument InstrumentUsercontrol = new UserControlInstrument();
|
||||||
|
UserControlMeasureHeader MeasureHeaderUsercontrol = new UserControlMeasureHeader();
|
||||||
|
|
||||||
|
UserControlDMM DMMUserControl = new UserControlDMM();
|
||||||
|
|
||||||
|
public List<PslineMapping> DaqSled1List = new List<PslineMapping>();
|
||||||
|
public List<PslineMapping> DaqSled2List = new List<PslineMapping>();
|
||||||
|
public List<PslineMapping> DaqSled3List = new List<PslineMapping>();
|
||||||
|
|
||||||
|
List<Result> Results = new List<Result>();
|
||||||
|
//public string DataloggerSerial { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public List<PslineMapping> MeasuredPositionList = new List<PslineMapping>();
|
||||||
|
public List<PslineMapping> MeasuredHeaderPinsPositionList = new List<PslineMapping>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public MainForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
btnMeasure.Enabled = false;
|
||||||
|
btnConfigPslines.Enabled = false;
|
||||||
|
|
||||||
|
this.WindowState = FormWindowState.Maximized;
|
||||||
|
|
||||||
|
DAQ = new Instrument();
|
||||||
|
GetMapping();
|
||||||
|
GetPsLineConfigFromJson();
|
||||||
|
//GetPsLineConfigFromCsv();
|
||||||
|
//GetDefaultPsLineConfig();
|
||||||
|
|
||||||
|
panelRight.Controls.Add(InstrumentUsercontrol);
|
||||||
|
panelRight.Controls.Add(PslineConfigUserControl);
|
||||||
|
panelRight.Controls.Add(MeasureUserControl);
|
||||||
|
panelRight.Controls.Add(MeasureHeaderUsercontrol);
|
||||||
|
panelRight.Controls.Add(DMMUserControl);
|
||||||
|
|
||||||
|
|
||||||
|
PslineConfigUserControl.Data = pslineConfigs;
|
||||||
|
|
||||||
|
panelRight.Controls[0].Show();
|
||||||
|
panelRight.Controls[1].Hide();
|
||||||
|
panelRight.Controls[2].Hide();
|
||||||
|
panelRight.Controls[3].Hide();
|
||||||
|
panelRight.Controls[4].Hide();
|
||||||
|
|
||||||
|
|
||||||
|
InstrumentUsercontrol.InstrumentConnectButtonClicked += ConnectInstrument;
|
||||||
|
PslineConfigUserControl.UpdateBtnClick += UpdateButton;
|
||||||
|
|
||||||
|
MeasureUserControl.MeasureButtonClick += Measure;
|
||||||
|
MeasureUserControl.ClearAllMeasurementsBtnClick += ClearAllMeasurements;
|
||||||
|
|
||||||
|
MeasureHeaderUsercontrol.MeasureButtonClick += MeasureHeader;
|
||||||
|
MeasureHeaderUsercontrol.ClearAllMeasurementsBtnClick += ClearAllMeasurementsHeader;
|
||||||
|
MeasureHeaderUsercontrol.PopuplateHeaderEvent += PopulateHeaders;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PopulateHeaders(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public List<Result> FakeResults()
|
||||||
|
{
|
||||||
|
List<Result> results = new List<Result>();
|
||||||
|
Random random = new Random();
|
||||||
|
for (int i = 1; i < 40; i++)
|
||||||
|
{
|
||||||
|
Result result = new Result() {
|
||||||
|
ID = i,
|
||||||
|
PsLine = random.Next(4)+1,
|
||||||
|
Position = i,
|
||||||
|
TimeStamp = DateTime.Now,
|
||||||
|
Value =(random.NextDouble()+0.1)*2 ,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
results.Add(result);
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
public List<Result> FakeResultsHeader()
|
||||||
|
{
|
||||||
|
List<Result> results = new List<Result>();
|
||||||
|
Random random = new Random();
|
||||||
|
for (int i = 1; i < 40; i++)
|
||||||
|
{
|
||||||
|
Result result = new Result()
|
||||||
|
{
|
||||||
|
ID = i,
|
||||||
|
PsLine = random.Next(4) + 1,
|
||||||
|
Position = i,
|
||||||
|
TimeStamp = DateTime.Now,
|
||||||
|
Value = (random.NextDouble() + 0.1) * 2,
|
||||||
|
BiB = MeasureHeaderUsercontrol.BiBID,
|
||||||
|
DriverID = "Simulation Driver",
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
results.Add(result);
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ConnectInstrument(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DAQ.ResourceDesc = InstrumentUsercontrol.VisaAddress;
|
||||||
|
|
||||||
|
if (DAQ.InitializeInstrument())
|
||||||
|
{
|
||||||
|
InstrumentUsercontrol.SetConnectButtonActive();
|
||||||
|
MeasureUserControl.DataloggerSerial = DAQ.SerialNumber;
|
||||||
|
btnConfigPslines.Enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
InstrumentUsercontrol.SetConnectButtonNonActive();
|
||||||
|
btnConfigPslines.Enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateButton(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
btnMeasure.Enabled = true;
|
||||||
|
GetPsLineConfigFromJson();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Measure(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
PositionListToDataloggerChannels();
|
||||||
|
//var data = DAQ.GetMeasurementByScanList(scanlist);
|
||||||
|
GetDataFromDaq();
|
||||||
|
MeasureUserControl.PopulateVoltage( this.Results);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
public void MeasureHeader( object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
var headerList = MeasureHeaderUsercontrol.CheckedItems;
|
||||||
|
HeaderPinsListToDataloggerChannels(headerList);
|
||||||
|
#if DEBUG
|
||||||
|
this.Results = FakeResultsHeader();
|
||||||
|
#else
|
||||||
|
GetDataFromDaqHeader();
|
||||||
|
#endif
|
||||||
|
MeasureHeaderUsercontrol.PopulateVoltage(this.Results);
|
||||||
|
|
||||||
|
}
|
||||||
|
public void ClearAllMeasurements(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult dialogResult = MessageBox.Show("Are you sure?", "Clear All Measurements", MessageBoxButtons.YesNo);
|
||||||
|
if (dialogResult == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
//do something
|
||||||
|
foreach (var result in Results)
|
||||||
|
{
|
||||||
|
result.Value = 0.0;
|
||||||
|
}
|
||||||
|
MeasureUserControl.PopulateVoltage(this.Results);
|
||||||
|
}
|
||||||
|
else if (dialogResult == DialogResult.No)
|
||||||
|
{
|
||||||
|
//do something else
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
public void ClearAllMeasurementsHeader(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult dialogResult = MessageBox.Show("Are you sure?", "Clear All Measurements", MessageBoxButtons.YesNo);
|
||||||
|
if (dialogResult == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
//do something
|
||||||
|
this.Results.Clear();
|
||||||
|
MeasureHeaderUsercontrol.PopulateVoltage(this.Results);
|
||||||
|
}
|
||||||
|
else if (dialogResult == DialogResult.No)
|
||||||
|
{
|
||||||
|
//do something else
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
public void GetDataFromDaq()
|
||||||
|
{
|
||||||
|
if (DaqSled1List.Count >=1)
|
||||||
|
{
|
||||||
|
List<string> sled1 = new List<string>();
|
||||||
|
foreach (var item in DaqSled1List)
|
||||||
|
{
|
||||||
|
sled1.Add(item.daqchannel.ToString());
|
||||||
|
}
|
||||||
|
Console.WriteLine("bla");
|
||||||
|
string scanlist = String.Join(",", sled1);
|
||||||
|
DAQ.ScanList = scanlist;
|
||||||
|
DAQ.ConfigInstrument();
|
||||||
|
var datasled1 = DAQ.GetMeasurementByScanList(scanlist);
|
||||||
|
SaveResults(DaqSled1List, datasled1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DaqSled2List.Count >= 1)
|
||||||
|
{
|
||||||
|
List<string> sled2 = new List<string>();
|
||||||
|
foreach (var item in DaqSled2List)
|
||||||
|
{
|
||||||
|
sled2.Add(item.daqchannel.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
string scanlist = String.Join(",", sled2);
|
||||||
|
DAQ.ScanList = scanlist;
|
||||||
|
DAQ.ConfigInstrument();
|
||||||
|
var datasled2 = DAQ.GetMeasurementByScanList(scanlist);
|
||||||
|
SaveResults(DaqSled2List, datasled2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DaqSled3List.Count >= 1)
|
||||||
|
{
|
||||||
|
List<string> sled3 = new List<string>();
|
||||||
|
foreach (var item in DaqSled3List)
|
||||||
|
{
|
||||||
|
sled3.Add(item.daqchannel.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
string scanlist = String.Join(",", sled3);
|
||||||
|
DAQ.ScanList = scanlist;
|
||||||
|
DAQ.ConfigInstrument();
|
||||||
|
var datasled3 = DAQ.GetMeasurementByScanList(scanlist);
|
||||||
|
SaveResults(DaqSled3List, datasled3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string fileName = string.Format("{0}_Result.json", MeasureUserControl.ProjectNumber);
|
||||||
|
string jsonString = JsonSerializer.Serialize(this.Results);
|
||||||
|
File.WriteAllText(fileName, jsonString);
|
||||||
|
}
|
||||||
|
public void GetDataFromDaqHeaderOld()
|
||||||
|
{
|
||||||
|
if (DaqSled1List.Count >= 1)
|
||||||
|
{
|
||||||
|
List<string> sled1 = new List<string>();
|
||||||
|
foreach (var item in DaqSled1List)
|
||||||
|
{
|
||||||
|
sled1.Add(item.daqchannel.ToString());
|
||||||
|
}
|
||||||
|
Console.WriteLine("bla");
|
||||||
|
string scanlist = String.Join(",", sled1);
|
||||||
|
DAQ.ScanList = scanlist;
|
||||||
|
DAQ.ConfigInstrument();
|
||||||
|
var datasled1 = DAQ.GetMeasurementByScanList(scanlist);
|
||||||
|
SaveResultsHeader(DaqSled1List, datasled1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string fileName = string.Format("{0}_Result.json", MeasureUserControl.ProjectNumber);
|
||||||
|
string jsonString = JsonSerializer.Serialize(this.Results);
|
||||||
|
File.WriteAllText(fileName, jsonString);
|
||||||
|
}
|
||||||
|
public void ShowContinueMessageBox()
|
||||||
|
{
|
||||||
|
// Display the message box
|
||||||
|
DialogResult result = MessageBox.Show("Please move header", "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Question);
|
||||||
|
|
||||||
|
// Check the result
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
// User clicked Yes
|
||||||
|
MessageBox.Show("You chose to continue.");
|
||||||
|
// Add your logic to continue here
|
||||||
|
}
|
||||||
|
else if (result == DialogResult.No)
|
||||||
|
{
|
||||||
|
// User clicked No
|
||||||
|
MessageBox.Show("You chose not to continue.");
|
||||||
|
// Add your logic for cancellation here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void GetDataFromDaqHeader()
|
||||||
|
{
|
||||||
|
if (DaqSled1List.Count >= 1)
|
||||||
|
{
|
||||||
|
List<string> sled1 = new List<string>();
|
||||||
|
foreach (var item in DaqSled1List)
|
||||||
|
{
|
||||||
|
sled1.Add(item.daqchannel.ToString());
|
||||||
|
}
|
||||||
|
//Console.WriteLine("bla");
|
||||||
|
//string scanlist = String.Join(",", sled1);
|
||||||
|
List<string> value = new List<string>();
|
||||||
|
|
||||||
|
|
||||||
|
var maxChannel = DaqSled1List.Max(x => x.position);
|
||||||
|
Console.WriteLine(maxChannel);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (maxChannel>9)
|
||||||
|
{
|
||||||
|
List<PslineMapping> list1 = DaqSled1List.Where(x => x.position <= 9).ToList();
|
||||||
|
List<PslineMapping> list2 = DaqSled1List.Where(x => x.position > 9).ToList();
|
||||||
|
|
||||||
|
foreach (var item in list2)
|
||||||
|
{
|
||||||
|
DAQ.DAQInstrument.Voltage.DCVoltage.AutoRange[item.daqchannel] = true;
|
||||||
|
value.Add(DAQ.DAQInstrument.Measure.DCVoltMeasure(item.daqchannel.ToString(),10, 0.01)[0].ToString());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowContinueMessageBox();
|
||||||
|
|
||||||
|
foreach (var item in list1)
|
||||||
|
{
|
||||||
|
DAQ.DAQInstrument.Voltage.DCVoltage.AutoRange[item.daqchannel] = true;
|
||||||
|
value.Add(DAQ.DAQInstrument.Measure.DCVoltMeasure(item.daqchannel.ToString(), 10, 0.01)[0].ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var item in DaqSled1List)
|
||||||
|
{
|
||||||
|
DAQ.DAQInstrument.Voltage.DCVoltage.AutoRange[item.daqchannel] = true;
|
||||||
|
value.Add(DAQ.DAQInstrument.Measure.DCVoltMeasure(item.daqchannel.ToString(), 10, 0.01)[0].ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var datasled1 = value.ToArray();
|
||||||
|
SaveResultsHeader(DaqSled1List, datasled1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string fileName = string.Format("{0}_Result.json", MeasureUserControl.ProjectNumber);
|
||||||
|
string jsonString = JsonSerializer.Serialize(this.Results);
|
||||||
|
File.WriteAllText(fileName, jsonString);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveResults(List<PslineMapping> DaqSledList, string[] data)
|
||||||
|
{
|
||||||
|
List<PslineMapping> SortedDaqSledList = DaqSledList.OrderBy(o => o.daqchannel).ToList();
|
||||||
|
|
||||||
|
int counter = 0;
|
||||||
|
foreach (var item in SortedDaqSledList)
|
||||||
|
{
|
||||||
|
CheckIfItemExists(item);
|
||||||
|
|
||||||
|
var powerSupplyEnabled = pslineConfigs.Where(x => x.Psline == item.psline).Any(x => x.Enabled);
|
||||||
|
|
||||||
|
if (powerSupplyEnabled)
|
||||||
|
{
|
||||||
|
double measuredVoltage = Convert.ToDouble(data[counter]);
|
||||||
|
//if (Math.Abs(measuredVoltage) < 0.1) { measuredVoltage = 0.0; }
|
||||||
|
|
||||||
|
Result result = new Result()
|
||||||
|
{
|
||||||
|
Position = item.position,
|
||||||
|
PsLine = item.psline,
|
||||||
|
TimeStamp = DateTime.UtcNow,
|
||||||
|
MeasureLocation = MeasureUserControl.MeasurementLocation,
|
||||||
|
BiB = MeasureHeaderUsercontrol.BiBID,
|
||||||
|
Value = measuredVoltage
|
||||||
|
};
|
||||||
|
Results.Add(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveResultsHeader(List<PslineMapping> DaqSledList, string[] data)
|
||||||
|
{
|
||||||
|
// List<PslineMapping> SortedDaqSledList = DaqSledList.OrderBy(o => o.daqchannel).ToList();
|
||||||
|
List<PslineMapping> SortedDaqSledList = DaqSledList.OrderBy(o => o.position).ToList();
|
||||||
|
int counter = 0;
|
||||||
|
foreach (var item in SortedDaqSledList)
|
||||||
|
{
|
||||||
|
CheckIfItemExistsHeader(item);
|
||||||
|
|
||||||
|
//var powerSupplyEnabled = pslineConfigs.Where(x => x.Psline == item.psline).Any(x => x.Enabled);
|
||||||
|
|
||||||
|
if (1==1)
|
||||||
|
//if (powerSupplyEnabled)
|
||||||
|
{
|
||||||
|
double measuredVoltage = Convert.ToDouble(data[counter]);
|
||||||
|
//if (Math.Abs(measuredVoltage) < 0.1) { measuredVoltage = 0.0; }
|
||||||
|
|
||||||
|
Result result = new Result()
|
||||||
|
{
|
||||||
|
ID = Results.Select(x => x.ID).DefaultIfEmpty(0).Max() + 1,
|
||||||
|
Position = Convert.ToInt16(MeasureHeaderUsercontrol.CurrentMeasurePosition),
|
||||||
|
PsLine = item.position,
|
||||||
|
DriverID = MeasureHeaderUsercontrol.DriverID,
|
||||||
|
BiB = MeasureHeaderUsercontrol.BiBID,
|
||||||
|
Description = pslineConfigs.Where(x => x.Psline == item.position).Select(x => x.Description).First(),
|
||||||
|
TimeStamp = DateTime.UtcNow,
|
||||||
|
MeasureLocation = MeasureHeaderUsercontrol.MeasurementLocation ?? "N/A",
|
||||||
|
Value = measuredVoltage
|
||||||
|
};
|
||||||
|
Results.Add(result);
|
||||||
|
Console.WriteLine("HELLO?");
|
||||||
|
}
|
||||||
|
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CheckIfItemExists(PslineMapping item)
|
||||||
|
{
|
||||||
|
Results.RemoveAll(x => x.Position == item.position & x.PsLine == item.psline);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CheckIfItemExistsHeader(PslineMapping item)
|
||||||
|
{
|
||||||
|
//Results.RemoveAll(x => x.Position == item.position & x.PsLine == Convert.ToInt16(MeasureHeaderUsercontrol.CurrentMeasurePosition));
|
||||||
|
Results.RemoveAll(x => x.PsLine == item.position & x.Position == Convert.ToInt32(MeasureHeaderUsercontrol.CurrentMeasurePosition) & x.BiB == MeasureHeaderUsercontrol.BiBID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HeaderPinsListToDataloggerChannelsOld(List<int> positionList)
|
||||||
|
{
|
||||||
|
MeasuredPositionList.Clear();
|
||||||
|
|
||||||
|
int prevPosition = 0;
|
||||||
|
foreach (PslineMapping mapping in pslineMapping)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (positionList.Contains(mapping.position))
|
||||||
|
{
|
||||||
|
if (mapping.position != prevPosition)
|
||||||
|
{
|
||||||
|
MeasuredPositionList.Add(mapping);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
prevPosition = mapping.position;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Console.WriteLine("bla");
|
||||||
|
DaqSled1List.Clear();
|
||||||
|
foreach (var position in MeasuredPositionList)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (position.daqchannel > 0 & position.daqchannel < 141)
|
||||||
|
{
|
||||||
|
DaqSled1List.Add(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DaqSled2List.Clear();
|
||||||
|
foreach (var position in MeasuredPositionList)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (position.daqchannel > 200 & position.daqchannel < 241)
|
||||||
|
{
|
||||||
|
DaqSled2List.Add(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DaqSled3List.Clear();
|
||||||
|
foreach (var position in MeasuredPositionList)
|
||||||
|
{
|
||||||
|
if (position.daqchannel > 300 & position.daqchannel < 341)
|
||||||
|
{
|
||||||
|
DaqSled3List.Add(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void HeaderPinsListToDataloggerChannels(List<int> positionList)
|
||||||
|
{
|
||||||
|
MeasuredPositionList.Clear();
|
||||||
|
Dictionary<int, int> HeaderMapping = new Dictionary<int, int>()
|
||||||
|
{
|
||||||
|
{1,101 },
|
||||||
|
{2,121 },
|
||||||
|
{3,102 },
|
||||||
|
{4,122 },
|
||||||
|
{5,103 },
|
||||||
|
{6,123 },
|
||||||
|
{7,104 },
|
||||||
|
{8,124 },
|
||||||
|
{9,105 },
|
||||||
|
|
||||||
|
}; //headerpin,daqchannel
|
||||||
|
|
||||||
|
foreach (var position in positionList)
|
||||||
|
{
|
||||||
|
const int HEADERSIZE = 9;
|
||||||
|
PslineMapping mapping= new PslineMapping();
|
||||||
|
mapping.position = position;
|
||||||
|
if (position > HEADERSIZE)
|
||||||
|
{
|
||||||
|
HeaderMapping.TryGetValue(position - HEADERSIZE, out mapping.daqchannel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HeaderMapping.TryGetValue(position, out mapping.daqchannel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MeasuredPositionList.Add(mapping);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Console.WriteLine("bla");
|
||||||
|
DaqSled1List.Clear();
|
||||||
|
foreach (var position in MeasuredPositionList)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (position.daqchannel > 0 & position.daqchannel < 141)
|
||||||
|
{
|
||||||
|
DaqSled1List.Add(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PositionListToDataloggerChannels()
|
||||||
|
{
|
||||||
|
MeasuredPositionList.Clear();
|
||||||
|
var positionList = MeasureUserControl.PositionList;
|
||||||
|
foreach (PslineMapping mapping in pslineMapping)
|
||||||
|
{
|
||||||
|
if(positionList.Contains(mapping.position))
|
||||||
|
{
|
||||||
|
MeasuredPositionList.Add(mapping);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Console.WriteLine("bla");
|
||||||
|
DaqSled1List.Clear();
|
||||||
|
foreach (var position in MeasuredPositionList)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(position.daqchannel > 0 & position.daqchannel < 141)
|
||||||
|
{
|
||||||
|
DaqSled1List.Add(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DaqSled2List.Clear();
|
||||||
|
foreach (var position in MeasuredPositionList)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (position.daqchannel > 200 & position.daqchannel < 241)
|
||||||
|
{
|
||||||
|
DaqSled2List.Add(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DaqSled3List.Clear();
|
||||||
|
foreach (var position in MeasuredPositionList)
|
||||||
|
{
|
||||||
|
if (position.daqchannel > 300 & position.daqchannel < 341)
|
||||||
|
{
|
||||||
|
DaqSled3List.Add(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GetPsLineConfigFromJson()
|
||||||
|
{
|
||||||
|
string filePath = @"c:\configs\data.json";
|
||||||
|
var fileHandler = new FileHandler(filePath);
|
||||||
|
|
||||||
|
pslineConfigs = fileHandler.GetPslineConfig();
|
||||||
|
MeasureUserControl.pslineConfigs = pslineConfigs;
|
||||||
|
MeasureHeaderUsercontrol.pslineConfigs = pslineConfigs;
|
||||||
|
|
||||||
|
}
|
||||||
|
public void GetPsLineConfigFromCsv()
|
||||||
|
{
|
||||||
|
string path = Path.Combine(Directory.GetParent(System.IO.Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName, "pslineconfig.csv");
|
||||||
|
pslineConfigs = File.ReadAllLines(path)
|
||||||
|
.Skip(1)
|
||||||
|
.Select(v => PslineConfig.GetPslineConfigFromCsv(v))
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
MeasureUserControl.pslineConfigs = pslineConfigs;
|
||||||
|
}
|
||||||
|
public void GetDefaultPsLineConfig()
|
||||||
|
{
|
||||||
|
|
||||||
|
pslineConfigs = new List<PslineConfig>();
|
||||||
|
|
||||||
|
PslineConfig pc1 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 1,
|
||||||
|
Description = "vcc1",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = true
|
||||||
|
};
|
||||||
|
PslineConfig pc2 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 2,
|
||||||
|
Description = "vcc2",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = true
|
||||||
|
};
|
||||||
|
PslineConfig pc3 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 3,
|
||||||
|
Description = "vcc3",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = true
|
||||||
|
};
|
||||||
|
PslineConfig pc4 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 4,
|
||||||
|
Description = "vcc4",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = true
|
||||||
|
};
|
||||||
|
PslineConfig pc5 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 5,
|
||||||
|
Description = "vcc5",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = true
|
||||||
|
};
|
||||||
|
PslineConfig pc6 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 6,
|
||||||
|
Description = "vcc5",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = false
|
||||||
|
};
|
||||||
|
PslineConfig pc7 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 7,
|
||||||
|
Description = "vcc7",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = true
|
||||||
|
};
|
||||||
|
PslineConfig pc8 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 8,
|
||||||
|
Description = "vcc8",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = true
|
||||||
|
};
|
||||||
|
PslineConfig pc9 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 9,
|
||||||
|
Description = "vcc9",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = true
|
||||||
|
};
|
||||||
|
PslineConfig pc10 = new PslineConfig()
|
||||||
|
{
|
||||||
|
Psline = 10,
|
||||||
|
Description = "vcc10",
|
||||||
|
Setpoint = 1.00,
|
||||||
|
Tolerance = 1.00,
|
||||||
|
Enabled = false
|
||||||
|
};
|
||||||
|
|
||||||
|
pslineConfigs.Add(pc1);
|
||||||
|
pslineConfigs.Add(pc2);
|
||||||
|
pslineConfigs.Add(pc3);
|
||||||
|
pslineConfigs.Add(pc4);
|
||||||
|
pslineConfigs.Add(pc5);
|
||||||
|
pslineConfigs.Add(pc6);
|
||||||
|
pslineConfigs.Add(pc7);
|
||||||
|
pslineConfigs.Add(pc8);
|
||||||
|
pslineConfigs.Add(pc9);
|
||||||
|
pslineConfigs.Add(pc10);
|
||||||
|
|
||||||
|
MeasureUserControl.pslineConfigs = pslineConfigs;
|
||||||
|
|
||||||
|
}
|
||||||
|
private void GetMapping()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//string path = Path.Combine(Directory.GetParent(System.IO.Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName, "pslinemapping.csv");
|
||||||
|
string path = @"c:\configs\pslinemapping.csv";
|
||||||
|
pslineMapping = File.ReadAllLines(path)
|
||||||
|
.Skip(1)
|
||||||
|
.Select(v => PslineMapping.FromCsv(v))
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void Form1_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnInstrument_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
panelRight.Controls[0].Show();
|
||||||
|
panelRight.Controls[1].Hide();
|
||||||
|
panelRight.Controls[2].Hide();
|
||||||
|
panelRight.Controls[3].Hide();
|
||||||
|
panelRight.Controls[4].Hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnConfigPslines_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
panelRight.Controls[1].Show();
|
||||||
|
panelRight.Controls[0].Hide();
|
||||||
|
panelRight.Controls[2].Hide();
|
||||||
|
panelRight.Controls[3].Hide();
|
||||||
|
panelRight.Controls[4].Hide();
|
||||||
|
|
||||||
|
PslineConfigUserControl.OnUpdateBtnClick(EventArgs.Empty);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnMeasure_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
panelRight.Controls[2].Show();
|
||||||
|
panelRight.Controls[0].Hide();
|
||||||
|
panelRight.Controls[1].Hide();
|
||||||
|
panelRight.Controls[3].Hide();
|
||||||
|
panelRight.Controls[4].Hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btn_MeasureHeader_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
panelRight.Controls[3].Show();
|
||||||
|
panelRight.Controls[0].Hide();
|
||||||
|
panelRight.Controls[1].Hide();
|
||||||
|
panelRight.Controls[2].Hide();
|
||||||
|
panelRight.Controls[4].Hide();
|
||||||
|
MeasureHeaderUsercontrol.PopulateMeasureHeader();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnDMM_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
panelRight.Controls[4].Show();
|
||||||
|
panelRight.Controls[0].Hide();
|
||||||
|
panelRight.Controls[1].Hide();
|
||||||
|
panelRight.Controls[2].Hide();
|
||||||
|
panelRight.Controls[3].Hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
daq_testing/MainForm.resx
Normal file
120
daq_testing/MainForm.resx
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
20
daq_testing/MeasuredPosition.cs
Normal file
20
daq_testing/MeasuredPosition.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public class MeasuredPosition
|
||||||
|
{
|
||||||
|
public int Position { get; set; }
|
||||||
|
public int PsLine { get; set; }
|
||||||
|
public int DaqChannel { get; set; }
|
||||||
|
|
||||||
|
public MeasuredPosition()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
25
daq_testing/OpenTK.dll.config
Normal file
25
daq_testing/OpenTK.dll.config
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<configuration>
|
||||||
|
<dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
|
||||||
|
<dllmap os="linux" dll="glu32.dll" target="libGLU.so.1"/>
|
||||||
|
<dllmap os="linux" dll="openal32.dll" target="libopenal.so.1"/>
|
||||||
|
<dllmap os="linux" dll="alut.dll" target="libalut.so.0"/>
|
||||||
|
<dllmap os="linux" dll="opencl.dll" target="libOpenCL.so"/>
|
||||||
|
<dllmap os="linux" dll="libX11" target="libX11.so.6"/>
|
||||||
|
<dllmap os="linux" dll="libXi" target="libXi.so.6"/>
|
||||||
|
<dllmap os="linux" dll="SDL2.dll" target="libSDL2-2.0.so.0"/>
|
||||||
|
<dllmap os="osx" dll="opengl32.dll" target="/System/Library/Frameworks/OpenGL.framework/OpenGL"/>
|
||||||
|
<dllmap os="osx" dll="openal32.dll" target="/System/Library/Frameworks/OpenAL.framework/OpenAL" />
|
||||||
|
<dllmap os="osx" dll="alut.dll" target="/System/Library/Frameworks/OpenAL.framework/OpenAL" />
|
||||||
|
<dllmap os="osx" dll="libGLES.dll" target="/System/Library/Frameworks/OpenGLES.framework/OpenGLES" />
|
||||||
|
<dllmap os="osx" dll="libGLESv1_CM.dll" target="/System/Library/Frameworks/OpenGLES.framework/OpenGLES" />
|
||||||
|
<dllmap os="osx" dll="libGLESv2.dll" target="/System/Library/Frameworks/OpenGLES.framework/OpenGLES" />
|
||||||
|
<dllmap os="osx" dll="opencl.dll" target="/System/Library/Frameworks/OpenCL.framework/OpenCL"/>
|
||||||
|
<dllmap os="osx" dll="SDL2.dll" target="libSDL2.dylib"/>
|
||||||
|
<!-- XQuartz compatibility (X11 on Mac) -->
|
||||||
|
<dllmap os="osx" dll="libGL.so.1" target="/usr/X11/lib/libGL.dylib"/>
|
||||||
|
<dllmap os="osx" dll="libX11" target="/usr/X11/lib/libX11.dylib"/>
|
||||||
|
<dllmap os="osx" dll="libXcursor.so.1" target="/usr/X11/lib/libXcursor.dylib"/>
|
||||||
|
<dllmap os="osx" dll="libXi" target="/usr/X11/lib/libXi.dylib"/>
|
||||||
|
<dllmap os="osx" dll="libXinerama" target="/usr/X11/lib/libXinerama.dylib"/>
|
||||||
|
<dllmap os="osx" dll="libXrandr.so.2" target="/usr/X11/lib/libXrandr.dylib"/>
|
||||||
|
</configuration>
|
||||||
22
daq_testing/Program.cs
Normal file
22
daq_testing/Program.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
Application.EnableVisualStyles();
|
||||||
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
Application.Run(new MainForm());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
36
daq_testing/Properties/AssemblyInfo.cs
Normal file
36
daq_testing/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("daq_testing")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("daq_testing")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("f871696a-881e-4edb-bc23-ec1dcba11a5a")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
70
daq_testing/Properties/Resources.Designer.cs
generated
Normal file
70
daq_testing/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
namespace daq_testing.Properties
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources
|
||||||
|
{
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ((resourceMan == null))
|
||||||
|
{
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("daq_testing.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
117
daq_testing/Properties/Resources.resx
Normal file
117
daq_testing/Properties/Resources.resx
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
29
daq_testing/Properties/Settings.Designer.cs
generated
Normal file
29
daq_testing/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
namespace daq_testing.Properties
|
||||||
|
{
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
7
daq_testing/Properties/Settings.settings
Normal file
7
daq_testing/Properties/Settings.settings
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
||||||
38
daq_testing/PslineConfig.cs
Normal file
38
daq_testing/PslineConfig.cs
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public class PslineConfig
|
||||||
|
{
|
||||||
|
public int Psline { get; set; }
|
||||||
|
public string Description { get; set; }
|
||||||
|
public double Setpoint { get; set; }
|
||||||
|
public double Tolerance { get; set; }
|
||||||
|
public bool Enabled { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public PslineConfig()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PslineConfig GetPslineConfigFromCsv(string csvLine)
|
||||||
|
{
|
||||||
|
string[] values = csvLine.Split(',');
|
||||||
|
PslineConfig pslineConfig = new PslineConfig ();
|
||||||
|
pslineConfig.Psline = Convert.ToInt16(values[0]);
|
||||||
|
pslineConfig.Description = Convert.ToString(values[1]);
|
||||||
|
pslineConfig.Setpoint = Convert.ToDouble(values[2]);
|
||||||
|
pslineConfig.Tolerance = Convert.ToDouble(values[3]);
|
||||||
|
pslineConfig.Enabled = Convert.ToBoolean(values[4]);
|
||||||
|
return pslineConfig;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
25
daq_testing/PslineMapping.cs
Normal file
25
daq_testing/PslineMapping.cs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public class PslineMapping
|
||||||
|
{
|
||||||
|
public int position;
|
||||||
|
public int psline;
|
||||||
|
public int daqchannel;
|
||||||
|
|
||||||
|
public static PslineMapping FromCsv(string csvLine)
|
||||||
|
{
|
||||||
|
string[] values = csvLine.Split(',');
|
||||||
|
PslineMapping pslineMapping = new PslineMapping();
|
||||||
|
pslineMapping.position = Convert.ToInt16(values[0]);
|
||||||
|
pslineMapping.psline = Convert.ToInt16(values[1]);
|
||||||
|
pslineMapping.daqchannel = Convert.ToInt16(values[2]);
|
||||||
|
return pslineMapping;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
32
daq_testing/Result.cs
Normal file
32
daq_testing/Result.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public class Result
|
||||||
|
{
|
||||||
|
public int ID { get; set; }
|
||||||
|
public DateTime TimeStamp { get; set; }
|
||||||
|
public int PsLine { get; set; }
|
||||||
|
public string Description { get; set; }
|
||||||
|
public int Position { get; set; }
|
||||||
|
public double Value { get; set; }
|
||||||
|
public string MeasureLocation { get; set; }
|
||||||
|
|
||||||
|
public string DriverID { get; set; }
|
||||||
|
public int BiB { get; set; }
|
||||||
|
|
||||||
|
public Result()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
100
daq_testing/UserControlDMM.Designer.cs
generated
Normal file
100
daq_testing/UserControlDMM.Designer.cs
generated
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
partial class UserControlDMM
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.lbMeasurementValue = new System.Windows.Forms.Label();
|
||||||
|
this.btnMonitor = new System.Windows.Forms.Button();
|
||||||
|
this.formsPlot1 = new ScottPlot.WinForms.FormsPlot();
|
||||||
|
this.tbDataloggerChannel = new System.Windows.Forms.TextBox();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// lbMeasurementValue
|
||||||
|
//
|
||||||
|
this.lbMeasurementValue.AutoSize = true;
|
||||||
|
this.lbMeasurementValue.Font = new System.Drawing.Font("Courier New", 48F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.lbMeasurementValue.Location = new System.Drawing.Point(65, 32);
|
||||||
|
this.lbMeasurementValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.lbMeasurementValue.Name = "lbMeasurementValue";
|
||||||
|
this.lbMeasurementValue.Size = new System.Drawing.Size(325, 85);
|
||||||
|
this.lbMeasurementValue.TabIndex = 0;
|
||||||
|
this.lbMeasurementValue.Text = "0.0000";
|
||||||
|
//
|
||||||
|
// btnMonitor
|
||||||
|
//
|
||||||
|
this.btnMonitor.Location = new System.Drawing.Point(609, 559);
|
||||||
|
this.btnMonitor.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||||
|
this.btnMonitor.Name = "btnMonitor";
|
||||||
|
this.btnMonitor.Size = new System.Drawing.Size(199, 86);
|
||||||
|
this.btnMonitor.TabIndex = 1;
|
||||||
|
this.btnMonitor.Text = "Monitor";
|
||||||
|
this.btnMonitor.UseVisualStyleBackColor = true;
|
||||||
|
this.btnMonitor.Click += new System.EventHandler(this.btnMonitor_ClickAsync);
|
||||||
|
//
|
||||||
|
// formsPlot1
|
||||||
|
//
|
||||||
|
this.formsPlot1.DisplayScale = 0F;
|
||||||
|
this.formsPlot1.Location = new System.Drawing.Point(59, 134);
|
||||||
|
this.formsPlot1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||||
|
this.formsPlot1.Name = "formsPlot1";
|
||||||
|
this.formsPlot1.Size = new System.Drawing.Size(749, 391);
|
||||||
|
this.formsPlot1.TabIndex = 2;
|
||||||
|
//
|
||||||
|
// tbDataloggerChannel
|
||||||
|
//
|
||||||
|
this.tbDataloggerChannel.Location = new System.Drawing.Point(921, 48);
|
||||||
|
this.tbDataloggerChannel.Name = "tbDataloggerChannel";
|
||||||
|
this.tbDataloggerChannel.Size = new System.Drawing.Size(100, 22);
|
||||||
|
this.tbDataloggerChannel.TabIndex = 3;
|
||||||
|
this.tbDataloggerChannel.Text = "101";
|
||||||
|
//
|
||||||
|
// UserControlDMM
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.Controls.Add(this.tbDataloggerChannel);
|
||||||
|
this.Controls.Add(this.formsPlot1);
|
||||||
|
this.Controls.Add(this.btnMonitor);
|
||||||
|
this.Controls.Add(this.lbMeasurementValue);
|
||||||
|
this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||||
|
this.Name = "UserControlDMM";
|
||||||
|
this.Size = new System.Drawing.Size(1167, 682);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Label lbMeasurementValue;
|
||||||
|
private System.Windows.Forms.Button btnMonitor;
|
||||||
|
private ScottPlot.WinForms.FormsPlot formsPlot1;
|
||||||
|
private System.Windows.Forms.TextBox tbDataloggerChannel;
|
||||||
|
}
|
||||||
|
}
|
||||||
159
daq_testing/UserControlDMM.cs
Normal file
159
daq_testing/UserControlDMM.cs
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using ScottPlot;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public partial class UserControlDMM : UserControl
|
||||||
|
{
|
||||||
|
public double MeasurementValue { get; set; }
|
||||||
|
|
||||||
|
// Control variables
|
||||||
|
private bool isMonitoring = false;
|
||||||
|
private List<double> dataPoints = new List<double>();
|
||||||
|
private List<double> timePoints = new List<double>();
|
||||||
|
private double time = 0;
|
||||||
|
private const int MaxPoints = 100;
|
||||||
|
|
||||||
|
// Tolerance band values
|
||||||
|
private double UpperTolerance = 1.0;
|
||||||
|
private double LowerTolerance = -1.0;
|
||||||
|
|
||||||
|
// Histogram parameters
|
||||||
|
private int NumBins = 20; // Number of bins for the histogram
|
||||||
|
private double MaxVoltage = 1; // Maximum possible voltage for histogram scaling
|
||||||
|
private double MinVoltage = -1; // Minimum possible voltage for histogram scaling
|
||||||
|
|
||||||
|
public UserControlDMM()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
// Initialize the graph
|
||||||
|
formsPlot1.Plot.Title("Real-Time Voltage");
|
||||||
|
formsPlot1.Plot.YLabel("Voltage (V)");
|
||||||
|
formsPlot1.Plot.XLabel("Time (s)");
|
||||||
|
formsPlot1.Refresh();
|
||||||
|
|
||||||
|
// Set up the tolerance band once
|
||||||
|
UpdateToleranceBand();
|
||||||
|
|
||||||
|
}
|
||||||
|
private void UpdateToleranceBand()
|
||||||
|
{
|
||||||
|
// Generate tolerance band data
|
||||||
|
double[] xs = new double[MaxPoints];
|
||||||
|
double[] upperValues = new double[MaxPoints];
|
||||||
|
double[] lowerValues = new double[MaxPoints];
|
||||||
|
|
||||||
|
for (int i = 0; i < MaxPoints; i++)
|
||||||
|
{
|
||||||
|
xs[i] = i;
|
||||||
|
upperValues[i] = UpperTolerance;
|
||||||
|
lowerValues[i] = LowerTolerance;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the tolerance band as a shaded region between lower and upper bounds
|
||||||
|
var fill = formsPlot1.Plot.Add.FillY(
|
||||||
|
xs: xs,
|
||||||
|
ys1: lowerValues,
|
||||||
|
ys2: upperValues
|
||||||
|
);
|
||||||
|
fill.FillColor = Colors.Green.WithAlpha(20);
|
||||||
|
fill.LineColor = Colors.Green;
|
||||||
|
fill.MarkerColor = Colors.Green;
|
||||||
|
fill.LineWidth = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private async void btnMonitor_ClickAsync(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var mainForm = this.FindForm() as MainForm;
|
||||||
|
if (mainForm == null) return;
|
||||||
|
|
||||||
|
formsPlot1.Plot.Clear();
|
||||||
|
dataPoints.Clear();
|
||||||
|
timePoints.Clear();
|
||||||
|
|
||||||
|
// Toggle the monitoring state
|
||||||
|
isMonitoring = !isMonitoring;
|
||||||
|
|
||||||
|
if (isMonitoring)
|
||||||
|
{
|
||||||
|
// Change button text to indicate stopping
|
||||||
|
btnMonitor.Text = "Stop Monitoring";
|
||||||
|
|
||||||
|
// Start the monitoring configuration
|
||||||
|
mainForm.DAQ.DAQInstrument.Voltage.DCVoltage.AutoRangeListConfig(tbDataloggerChannel.Text, true);
|
||||||
|
mainForm.DAQ.DAQInstrument.Voltage.DCVoltage.Configure(tbDataloggerChannel.Text, 10, 0.01);
|
||||||
|
mainForm.DAQ.DAQInstrument.Route.Monitor = Convert.ToInt32(tbDataloggerChannel.Text);
|
||||||
|
mainForm.DAQ.DAQInstrument.Route.MonitorEnable = true;
|
||||||
|
|
||||||
|
Stopwatch sw = new Stopwatch();
|
||||||
|
|
||||||
|
// Start the loop
|
||||||
|
while (isMonitoring)
|
||||||
|
{
|
||||||
|
|
||||||
|
sw.Start();
|
||||||
|
// Get the voltage value
|
||||||
|
double voltage = mainForm.DAQ.DAQInstrument.Route.MonitorData;
|
||||||
|
|
||||||
|
// Update the Label
|
||||||
|
lbMeasurementValue.Text = $"{voltage:F3} V";
|
||||||
|
|
||||||
|
// Update the data points
|
||||||
|
dataPoints.Add(voltage);
|
||||||
|
timePoints.Add(time);
|
||||||
|
|
||||||
|
if (dataPoints.Count > 100) // Limit to 100 points for better performance
|
||||||
|
{
|
||||||
|
dataPoints.RemoveAt(0);
|
||||||
|
timePoints.RemoveAt(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear previous plots
|
||||||
|
formsPlot1.Plot.Clear();
|
||||||
|
|
||||||
|
// Re-add the tolerance band
|
||||||
|
// UpdateToleranceBand();
|
||||||
|
// Update the histogram and plot
|
||||||
|
|
||||||
|
// Add the updated scatter plot
|
||||||
|
formsPlot1.Plot.Add.ScatterPoints(timePoints.ToArray(), dataPoints.ToArray());
|
||||||
|
|
||||||
|
// Autoscroll: Set X-axis to show the latest MaxPoints data
|
||||||
|
formsPlot1.Plot.Axes.SetLimits(timePoints[0], timePoints[timePoints.Count - 1]);
|
||||||
|
|
||||||
|
|
||||||
|
// Refresh the plot
|
||||||
|
formsPlot1.Refresh();
|
||||||
|
|
||||||
|
// Increment time
|
||||||
|
time += 0.100;
|
||||||
|
|
||||||
|
// Wait asynchronously for 100 ms
|
||||||
|
await Task.Delay(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Change button text to indicate starting
|
||||||
|
btnMonitor.Text = "Start Monitoring";
|
||||||
|
|
||||||
|
// Stop the monitoring
|
||||||
|
mainForm.DAQ.DAQInstrument.Route.MonitorEnable = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
daq_testing/UserControlDMM.resx
Normal file
120
daq_testing/UserControlDMM.resx
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
140
daq_testing/UserControlInstrument.Designer.cs
generated
Normal file
140
daq_testing/UserControlInstrument.Designer.cs
generated
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
partial class UserControlInstrument
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UserControlInstrument));
|
||||||
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
|
this.tbVisaAddress = new System.Windows.Forms.TextBox();
|
||||||
|
this.btnConnectInstrument = new System.Windows.Forms.Button();
|
||||||
|
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||||
|
this.cmbComPorts = new System.Windows.Forms.ComboBox();
|
||||||
|
this.btnSearch = new System.Windows.Forms.Button();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// label1
|
||||||
|
//
|
||||||
|
this.label1.AutoSize = true;
|
||||||
|
this.label1.Location = new System.Drawing.Point(23, 22);
|
||||||
|
this.label1.Name = "label1";
|
||||||
|
this.label1.Size = new System.Drawing.Size(59, 13);
|
||||||
|
this.label1.TabIndex = 0;
|
||||||
|
this.label1.Text = "Datalogger";
|
||||||
|
//
|
||||||
|
// label2
|
||||||
|
//
|
||||||
|
this.label2.AutoSize = true;
|
||||||
|
this.label2.Location = new System.Drawing.Point(23, 74);
|
||||||
|
this.label2.Name = "label2";
|
||||||
|
this.label2.Size = new System.Drawing.Size(68, 13);
|
||||||
|
this.label2.TabIndex = 1;
|
||||||
|
this.label2.Text = "VisaAddress:";
|
||||||
|
//
|
||||||
|
// tbVisaAddress
|
||||||
|
//
|
||||||
|
this.tbVisaAddress.Location = new System.Drawing.Point(98, 74);
|
||||||
|
this.tbVisaAddress.Name = "tbVisaAddress";
|
||||||
|
this.tbVisaAddress.Size = new System.Drawing.Size(159, 20);
|
||||||
|
this.tbVisaAddress.TabIndex = 2;
|
||||||
|
this.tbVisaAddress.Text = "Search for Comport";
|
||||||
|
//
|
||||||
|
// btnConnectInstrument
|
||||||
|
//
|
||||||
|
this.btnConnectInstrument.Location = new System.Drawing.Point(182, 120);
|
||||||
|
this.btnConnectInstrument.Name = "btnConnectInstrument";
|
||||||
|
this.btnConnectInstrument.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.btnConnectInstrument.TabIndex = 3;
|
||||||
|
this.btnConnectInstrument.Text = "CONNECT";
|
||||||
|
this.btnConnectInstrument.UseVisualStyleBackColor = true;
|
||||||
|
this.btnConnectInstrument.Click += new System.EventHandler(this.btnConnectInstrument_Click);
|
||||||
|
//
|
||||||
|
// pictureBox1
|
||||||
|
//
|
||||||
|
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
|
||||||
|
this.pictureBox1.InitialImage = null;
|
||||||
|
this.pictureBox1.Location = new System.Drawing.Point(52, 170);
|
||||||
|
this.pictureBox1.Margin = new System.Windows.Forms.Padding(2);
|
||||||
|
this.pictureBox1.Name = "pictureBox1";
|
||||||
|
this.pictureBox1.Size = new System.Drawing.Size(205, 102);
|
||||||
|
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||||
|
this.pictureBox1.TabIndex = 4;
|
||||||
|
this.pictureBox1.TabStop = false;
|
||||||
|
//
|
||||||
|
// cmbComPorts
|
||||||
|
//
|
||||||
|
this.cmbComPorts.FormattingEnabled = true;
|
||||||
|
this.cmbComPorts.Location = new System.Drawing.Point(98, 47);
|
||||||
|
this.cmbComPorts.Name = "cmbComPorts";
|
||||||
|
this.cmbComPorts.Size = new System.Drawing.Size(159, 21);
|
||||||
|
this.cmbComPorts.TabIndex = 5;
|
||||||
|
this.cmbComPorts.SelectedIndexChanged += new System.EventHandler(this.cmbComPorts_SelectedIndexChanged);
|
||||||
|
//
|
||||||
|
// btnSearch
|
||||||
|
//
|
||||||
|
this.btnSearch.Location = new System.Drawing.Point(285, 47);
|
||||||
|
this.btnSearch.Name = "btnSearch";
|
||||||
|
this.btnSearch.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.btnSearch.TabIndex = 6;
|
||||||
|
this.btnSearch.Text = "Search";
|
||||||
|
this.btnSearch.UseVisualStyleBackColor = true;
|
||||||
|
this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);
|
||||||
|
//
|
||||||
|
// UserControlInstrument
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.Controls.Add(this.btnSearch);
|
||||||
|
this.Controls.Add(this.cmbComPorts);
|
||||||
|
this.Controls.Add(this.pictureBox1);
|
||||||
|
this.Controls.Add(this.btnConnectInstrument);
|
||||||
|
this.Controls.Add(this.tbVisaAddress);
|
||||||
|
this.Controls.Add(this.label2);
|
||||||
|
this.Controls.Add(this.label1);
|
||||||
|
this.Name = "UserControlInstrument";
|
||||||
|
this.Size = new System.Drawing.Size(371, 303);
|
||||||
|
this.Load += new System.EventHandler(this.UserControlInstrument_Load);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Label label1;
|
||||||
|
private System.Windows.Forms.Label label2;
|
||||||
|
private System.Windows.Forms.TextBox tbVisaAddress;
|
||||||
|
private System.Windows.Forms.Button btnConnectInstrument;
|
||||||
|
private System.Windows.Forms.PictureBox pictureBox1;
|
||||||
|
private System.Windows.Forms.ComboBox cmbComPorts;
|
||||||
|
private System.Windows.Forms.Button btnSearch;
|
||||||
|
}
|
||||||
|
}
|
||||||
93
daq_testing/UserControlInstrument.cs
Normal file
93
daq_testing/UserControlInstrument.cs
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO.Ports;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public partial class UserControlInstrument : UserControl
|
||||||
|
{
|
||||||
|
public event EventHandler InstrumentConnectButtonClicked;
|
||||||
|
public string VisaAddress { get => tbVisaAddress.Text; set => VisaAddress = value; }
|
||||||
|
|
||||||
|
|
||||||
|
private protected void OnInsturmentConnectButtonClicked ( EventArgs e)
|
||||||
|
{
|
||||||
|
InstrumentConnectButtonClicked?.Invoke(this, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserControlInstrument()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
#if DEBUG
|
||||||
|
btnConnectInstrument.Enabled = true;
|
||||||
|
#else
|
||||||
|
btnConnectInstrument.Enabled = false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load available COM ports into ComboBox
|
||||||
|
private void LoadComPorts()
|
||||||
|
{
|
||||||
|
string[] ports = SerialPort.GetPortNames();
|
||||||
|
cmbComPorts.Items.Clear();
|
||||||
|
foreach (string port in ports)
|
||||||
|
{
|
||||||
|
cmbComPorts.Items.Add(port);
|
||||||
|
}
|
||||||
|
if (cmbComPorts.Items.Count > 0)
|
||||||
|
{
|
||||||
|
cmbComPorts.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void UserControlInstrument_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnConnectInstrument_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
OnInsturmentConnectButtonClicked(EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetConnectButtonActive()
|
||||||
|
{
|
||||||
|
btnConnectInstrument.BackColor = Color.Green;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetConnectButtonNonActive()
|
||||||
|
{
|
||||||
|
btnConnectInstrument.BackColor = Color.Red;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSearch_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
LoadComPorts();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cmbComPorts_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (cmbComPorts.SelectedItem != null)
|
||||||
|
{
|
||||||
|
string selectedPort = cmbComPorts.SelectedItem.ToString();
|
||||||
|
string address = $"ASRL{selectedPort.Substring(3)}::INSTR";
|
||||||
|
Console.WriteLine(address);
|
||||||
|
tbVisaAddress.Text = address;
|
||||||
|
btnConnectInstrument.Enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Please select a COM port.", "No COM Port Selected", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
519
daq_testing/UserControlInstrument.resx
Normal file
519
daq_testing/UserControlInstrument.resx
Normal file
@@ -0,0 +1,519 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwg
|
||||||
|
JC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy
|
||||||
|
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGWA1IDASIAAhEBAxEB/8QA
|
||||||
|
HAABAAEFAQEAAAAAAAAAAAAAAAECAwQFBgcI/8QAURAAAgEDAQQFBgcMCQMEAgMAAAECAwQRIQUSMUEG
|
||||||
|
E1FhkRQiUnGBkhUWFzJTk6EHIzM0QlRVYnKxwdEkNUNERYKUouElY3Nkg6PxdPAmNlb/xAAYAQEBAQEB
|
||||||
|
AAAAAAAAAAAAAAAAAQIDBP/EAB8RAQEBAQEAAgMBAQAAAAAAAAABEQISAyETMVFBYf/aAAwDAQACEQMR
|
||||||
|
AD8A9/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAB
|
||||||
|
kZQADKGUABGUMoCQRlDeXaBII3l2kOcVxaAqBR1kPSXiOth6cfECsFHWw9KPiOth6S8QKwUdZD0l4k9Z
|
||||||
|
H0l4gVAp6yPavEb8e1eIFQKd+Pahvx7UBUCnfXaTvICQRvLtG8u0CQRvLtG8u0CQRvLtGUBIIyhlASCM
|
||||||
|
oZQEgjKGUBIIyhlASCMoZQEgjKGUBIIyhlASCMoZQEgjKGUBIIyhlASBlDKAAZQygAGUMoABlDKAAZGQ
|
||||||
|
AGRkABkZAAZGQAGRkABkZAAZGQAGRkABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwr3alvZL
|
||||||
|
E5Zl6KKdp38bK3bT++S+ajhb283pNyereQOkqdKYfkQwW/jR+qji5XOuhQ7nKMjtH0pb5IofSeXf7xxj
|
||||||
|
uJdpHXsDs30mn3+8UvpNJdvicgrhpalMq7bA7H4zNv8AK8SJdJf2veON67vDrZA7B9JFz3vEfGOL7fE4
|
||||||
|
/rmFXZR176Qx7/Eh7fXY/E5HrmHcNsg674fj2S8Q9vw5xficj14dfQDrvh+nn5n2j4fpej9pyPXkOs/U
|
||||||
|
B2C2/S9H7R8PUux+Jx3XYHXgdj8PUex+JK2/RxwePWcb1wVfTDA7L4wUccH7xV8P0ux+Jxjq4wR12nED
|
||||||
|
tPjBRzz8SfjBS7/eOK67tHX68WB2q6QUe2XiVLpBR/W944jygdc+15Gjtn0hoRzmUl62T8YqP6z/AMxx
|
||||||
|
CuHgjr3niB2/xioZx5yfrJ+MNH0peJw/Xvmx1zA7j4wUlzl4h9IaSXzpL2nEdfhY9o655A7f4x0c/Pl4
|
||||||
|
j4x0fTl4nDdboh13rA7n4x0c/Pn4k/GKlj58zheuZPXtAdz8YqWfnS8SfjFS5yn4nC9ePKJLmB3Xxhpc
|
||||||
|
pT8SX0ho+nPxOE8pk+bIddpjR3Xxho+nPxHxgoY/CT8ThPKMakOs+edddUB3nxioJfhJ+I+MVD6SficE
|
||||||
|
6/eR1/eB3/xiofST8SfjFQX9pPxOAVZvnoR17bS5AegrpHQbwp1GH0ioenNe04NVt1Zz6il132gd98Y6
|
||||||
|
HpzD6R0OPWTOA699o69gd/8AGWj6c/ax8ZaGM9ZM4B15PmR1z7Ro9A+MtBP8LPXvHxlofSyPPuubQdUa
|
||||||
|
PQfjLQ+lnkfGWj9LNHnvXPt1J66Q0eg/GWj9LIj4y0fpZnn7rSWdctDrXniNHoHxlopfhZk/GWl9LM89
|
||||||
|
dZ9oVVjR6F8ZaOPwsyPjNR+lmefdcwq2QPQfjNR+lmPjLR+lmeeuq+0nrmNHoPxmo/SzI+M9L6SZ5/10
|
||||||
|
u0dc1kaPQPjPS+kmH0opJZ6yZ5/10sEOq2B6B8aKXHrJk/Gmj9JI89dVkOqNHofxpo/STI+NFH6WeTzz
|
||||||
|
rZEdcyaPRfjRR+kn4ofGqgv7Soedqq2Q6ss6NjR6N8aqH0lTwJXSqh9LP2o8566WOOER5Q9cMaPS10qo
|
||||||
|
fSad8S/DpPbPjL7Dy1V5ekyVcTzpJ+Jdo9cobesazUeuUW+02UaiaymmjxON1VjrvvPrOo6M9KakK0bS
|
||||||
|
7nmm9Iyb+aWUejqRJi06yklqX4yyUVgAAAAAAAAAAAAAAAAAAAAAAAAAAAABDeESWq0t2nKXYsgcVt69
|
||||||
|
dW7nhvCeEcvXq5m8s2+0571Wb9Zoqj1MiM5D0LFa5hb0ZVJvRHG33T9UridO1o9ao/lN4TfYgO5yRzPN
|
||||||
|
5fdE2g/m2lFeuTZR8oe08LNrQz+09RlHpZHE82+UTaK/ulDH7TJX3Rb7OtjR99jKa9IGTzj5RbzGHY0/
|
||||||
|
WqjIX3RL38ypt/8AkGUej5aCZ5z8ot5+Y08/+QP7ot7+Y0l/7jGUejaht4wecfKLf4/EqL/zsh/dFv3w
|
||||||
|
sqHvMZR6R2EHnEvuh3/Kzoe8yPlD2hh/0Oh7zGUekJjQ83+UTaC/udv4sj5RNo/mdv4sZR6S2gmebfKH
|
||||||
|
tH8zt/FlUfuh3u7LesqOeWJMZR6MOZ5z8ol/+ZUPeY+UW+/MaPvMZR6NnLI4nnfyiX2Mqxoe+wvui3mV
|
||||||
|
mxo47psZR6KR7Dzt/dFvl/caPvsj5Rb5/wByo+8x5o9E9RPM87+UW8x+I0s/tsfKLd8fIaXvsZR6IDzx
|
||||||
|
fdFu+LsKT/zsj5Q7x/3Kl77GUeh5G8jzt/dDvPzGl77I+US7/MaXvsZR6LvLjkKSb4nnPyh3f5jS99kr
|
||||||
|
7olznWxp47pjKPRd7vGe887+UO51xYQ98fKHcfmMPfGUeiZGTzr5Q7r8xh74+UK6/MqfvsZR6LntGTzv
|
||||||
|
5Q7n8xhn9sL7odzlZsYY/bGUeiN6EOR54/uh3GMeQQ98P7oVfGlhFP8AbJlHoEp45kynvYy29ObPPV90
|
||||||
|
G4z51jHHdMldPrqTbjZw3eWZ6lyj0ByRGTzx/dAus/iVP3yflBul/cqfvjKPQt8KSyee/KDdZ/Eqfvh/
|
||||||
|
dBufzGHvjKPQ3UTQ31k89+UKtj8Qj74+UGvzsI++Mo9C30FJdp598oVXP4hH6wqX3Qqu7nyBZ5+eTKPQ
|
||||||
|
N9Eb5wC+6FPGuz19YH90GT4WH+8uUd85rAUlpk4D5Qp/o9fWD5QZ/mH+8mUd+pa5Jcl2nn/ygS/MHn/y
|
||||||
|
In5QpY/q/X/yIuUd9vrtI30cD8oMuWz3n9tErp++Vi/fRMo71zwlrxDmuRwC+6BL8wfvlXygt/4e/rBl
|
||||||
|
HeqcVxI30cH8oMuezn9YR8oMv0f/APIMo73rE+ZO+sHA/KC/0d/8hPyhPH9XvP8A5EMo73fQc0zgX90F
|
||||||
|
/o9++gvugvOtg/fRco71VM8yd9HA/KC1/h799E/KD/6CWf20Mo71S0G8u04L5Qf/AEEvfRPyg6fiEvfR
|
||||||
|
Mo7ty9RG8cL8f4vjYy95E/H+On9Cn7yLlHctriN7Q4f5QIfmVT3kPlAhnWyqY/aRMo7jeKcpnFLp/S52
|
||||||
|
VX3kXF09tedrW9mBlHZpoq0OPh08sXJKVCtFdu6ng6LZm07TatLrbSqpY4rsH2M5rJZ3pU6kWsrXiXsp
|
||||||
|
st1EmQembA2k7rZlGcn5y81+w6KjV3kefdFqzjYyXZM7O0q5SOkG4i8lRapyyi6AAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAxL6e5a1ZdkWZZrtqyxYVn+qB59fzzKbNPU+w2d7LiauerMjnuldeVDZVSUXhqD/ceTrPg
|
||||||
|
epdMnjY1XPDdPL8rdNcpVOSOGr4cWOeMZN10Z6NXXSfaM7eg6So0Eq13OpUUeroJ+dLHF4SeiNI1FWnU
|
||||||
|
oYVWlUhKUVKMZxabT4NZ5Pkzd9KOiO0+iNSwhtLqm72h1sHSeVF84PvWV4nrPSborb9PdqdF9u7Dq0J7
|
||||||
|
LhincVZPc+8U5ZTw+zDXai70wstmfdF2JYX+yr6hWs9nbQk7uq5bnV0Evvr17Ek+9cCarwPIZ2+z9ndG
|
||||||
|
ts/dXlabOUK/R+4jVqUY7s4qCVJvg8PzZLJt7Xo3sO12ze2dXZlrVsrHYkbu3vrl1J072UnF9fLc13dW
|
||||||
|
lFcMajUeY41xkPTid7sex6NbaudsRure1t/gya2i6ljGpCncWsVidJRn5yy93DfazIlsjZF/0WqTsNh2
|
||||||
|
sLxbPd9cUbnraNzS87PWUZPMJ0lFrEc5evMarzknU9V2x0f2PsTaVzVtNiWFbyjbT2fFX8p+T2lJU4yw
|
||||||
|
93VOTk9XnHIt1uhWxKcrCldQttl1vjFUtZ0qlSpX62mtxqlGSjr87i0uI0eW8ic8j0G7p7Fs+jPSO7j0
|
||||||
|
Z2bOvs3aq2fRnPrM7k3Pzn52slhYPPeGnHvKitY7SMZ0XEzth0K1xtyyo29jSv60qy3LSrLEKz9FvK09
|
||||||
|
p6FtXovZbU+Aat7Stdi9YqyvnUpxtKk3DXcjDOMclLOvEDy547Rp2nr95sLZtDb9OpT2PZx39i79rTjT
|
||||||
|
8op0qkZa1KkI6zTWilh5Zjz2VZW/TyGzrbZmynbVtnwvtpdbbb6tlBNzdOLfmbyxpyyNHlHtIZ6dsKNh
|
||||||
|
tq1v9tWHRuxrVa21aNqrPqN+NvavTKjyb1zIy9l9Fdg2W0Ns1bulZysLnaE7Gz8rrKKhTXz502/nSjJp
|
||||||
|
LHYNHk3BkrtyZm1dl3GxdrXWzLuLjWtqjpvPNcn7VhmEBLeSGsFXIpAgkAoYXaAHwApbKWw2UkVVkjJA
|
||||||
|
AqyMkZADJKZBKXMA3qMkMATljeIAEoqba0KBzCKs6EZIICpyTkpBBORkggoqyMlIIKsjJSSBOSVLD7X3
|
||||||
|
lBIRKkM8yAVU7wi9SkEFWRvFIKKt59pG8QAKmxkpAEtk5KQBORkgAVZIyQAKk+OoyQQBVkZKSQKskplB
|
||||||
|
L0ArTOn6D3VSj0hp0U8QrwcWu1rVHLI3vRGWOlOz3+u/3MlHq81ipJLtKJcCup+Fl6ylrQ5K33Ruo92t
|
||||||
|
BPkn9p2ljUykcF0ef9LlBab0WdrYS4G5+h0lCWUZS4GFbPRGYuBRIAAAAAAAAAAAAAAAAAAAAAAAAAAP
|
||||||
|
gajbkt3Z1XHPCNs+BpekDxs+XrQHAXj495rpmfdvUwZ8NMGRy3TN52NW/Z/ieXZxE9R6YLOyLiKfCDPK
|
||||||
|
5M1ylMmXs/al7sqrXqWNw6M7ihO2qNJPepy+dHXtMLIyaR6V0V6dWOxvuVbY2PWruO0oOpTsqWHmcaqw
|
||||||
|
2nyw3I4vZfSPaexthbU2NZ1YRs9pwjC4Uo5lp6L5ZWj7jU5GRisi0vLmwuI3FnXqUK0E1GpTlutJrDWe
|
||||||
|
9NozLTpFtrZ8aEbLa95QjbwdKj1dRrcg3lxXdnXBq84GQjPrba2pcXdzdV9oXFS4uqXU16kp+dUhp5rf
|
||||||
|
NaLQuS6RbZlsiOynta8+D4rdjb9a91Rznd9WeXA1g0A3FDpVt+0u7m6obZvade6alXn1uetaWE5J6Nrt
|
||||||
|
MartratecJ19pXVWcLh3UZTqNtVnxn+1ojBzhaEZAy6m0b2rQuKFS7rTpXFZV60HPKqVF+U+168TGKcj
|
||||||
|
OgG86KWFttPpLaWl3CrUoSU5ShSm4zluwckk1qtUdTedDKe1d7aM7u9o0FRt5+TXjdapTU8b8N99nLTm
|
||||||
|
ef0LqtaV4XFtWqUa0HmFSnLdlF9zMh7Y2m1XztG7flEt+tmq31j7ZdpB1O3OjdfYezbnblntS8Stbt2l
|
||||||
|
CNRShVVLLjHEs9q4LQ2N90GnQ+D6vl95bSr2dSW0673qspTUVJqMVq01JLD7GcLX2vtG6pOjcbQua1Jz
|
||||||
|
33CdRtOXHPrKqW2Np0Lh16O0bqnWlPrHONVpueMZ9eNAOttuht5a2vX2u3atG4qRxKFGlOGYPe3debe4
|
||||||
|
8x4rJWuglS7p21jPaE41aMKtROpGUlndjJRjB/NeZa9py1HpJtW32e7GF7W6rro14Sc25Uppt5i3wzl5
|
||||||
|
7S0tv7WVaVVbTu1Unvb0uteXnjnwQHY1+iVrcU/KK9xd1LyVNRlCrUbW91G+m5tZWvLs0Mdfc83a25Pb
|
||||||
|
EIw3FFzdtJfft7d3EvRzjzuDOR+F9o9XOn5fc7k1ia6x4axu6+zQrqbb2pWnGVXaV1OUYRpxcqreIxeY
|
||||||
|
r2PUfY7K36I7KnsmrTqxuntWnbqU/vm7GM9zfe6msSwnHMW08FuX3PJWMY1r2+hVpVKMpU1Si4ttR3s+
|
||||||
|
yOHjvORW29qKndU1tG6VO7/GI9Y8VdMa+wpltfaE1FSvrlqMXGKdR6JpRf2JIv2Owl0FsqO14QltCtO0
|
||||||
|
lcunCm6ElUlTS86Tmlupp8uaNZHovRpba2lYSr1LqFLZc761qUouLnonDMcZ56o00ukG2JQlCW1bxwlN
|
||||||
|
VHHrXhySwm+9LQs0drX9vfU76je16d3Sio06ym96MUsJJ9mOQHZ1+gdsr5So3klR6+EFazi+slFbim3P
|
||||||
|
GE8z4YOb6SbJttkV7OnbVqlVV7ZVp9ZHG696UcLtXmmCts7SU3UV/c77m5t9Y8uTabftaT9iLFxeXF3G
|
||||||
|
lG4r1KqpRcae/LO6m84XtbYFggAAAAoQTyIAlDmQSBIGgCIyCRgCASOYEAqwsEBUAkhgACAJIKkQ+IEA
|
||||||
|
lgCBkYADIGBgAAMAABqAAXetAAAwMBAABRcQCcAQCcDQCASABBOAARJAyBVlm66Lz3Okli1x6z+BpVxN
|
||||||
|
x0Zw+kNkn9J/AD1uf4V+pMh8CZ/hX6kQzirP2JLG0aazjLwdtYvEsdhwey57l/Rf6yO3s5ffH6zXI6e1
|
||||||
|
eiNhHgau0eiNnDgaFQAAAAAAAAAAAAAAAAAAAAAAAAAAh8DQdI5Ysku2Rv5cDnOkr/o0PWxRwt29TDnj
|
||||||
|
dwZl1qzDnomzI5Ppjn4Irrtgzy2XA9R6ZabIrafkM8tZrlKpGQDSAyQAJyMkACUxkglASg01yJhxK84W
|
||||||
|
qImrWvYOHIr1KZcQqGwFqS84epRCZOQ+BHMBkjJVqMZWo0U5ROSkq7AIGUTq2UviBORkLKWSrXOM97Ap
|
||||||
|
IJejC1AgLBVl/wACHy1AALUa6gOAJfApAkLiidQnzAPR8CUUt66FS4AQNCSHxAAlLTI7OGqAciCWQllg
|
||||||
|
Q9AVcu8jgBBBVjIfEgRIa14krgRxRQBOO4cQIwiGNMkpaZAgFXPGCnngAOYC49gBgnTtGgVAJ0fMYQBD
|
||||||
|
A5hhAYJ3XgpAkEEgCCVq3n2DtADBAyFVEEDIE5yCABUtOBuOjaz0isf2/wCBp0bbo6//AOQ2Ov8AaAev
|
||||||
|
S/CexEyRE/wif6qKmcVTZtRu6bfKSZ3Vstyu1nOpwdB4rxa7UdzbPNXPbg1yOls3oja0+BqLN6I21Pgj
|
||||||
|
QuAAAAAAAAAAAAAAAAAAAAAAAyABS6kY8ZJetlqd5Qhxqx8QL0uBzPSWS6mEc66s29XalBaRzL1HPbcm
|
||||||
|
5reerZKOSuu5mDN54mbdPD7zBZBynTL+qK3Zus8uZ6l00X/SKv7LPLWa5SqQAaQZAAAnkQiSAkGiSWBC
|
||||||
|
46E6kcOYbRQee0jIbyOYBFSC4DTgAzyZSvnZ5EvgguJAIfPOhOhD0TKI0zoTz7iEVY4gMtdyKdMInHPk
|
||||||
|
U4AqXBYD14L1sY4ZJ7PXqBS8doXBpcRzZKWgB55EaaZJa0IkAXEldmCEs59ROEA5a82RpkPgglqBOeI5
|
||||||
|
66YWgxpxHbkCH2LgTzIKuOoBPVfaQ1rowuPdgLAE50D+0JcCGgJeHz4ELg/UQ8ZeCVwAnvGjSXB8Q+eC
|
||||||
|
GgCJ5EL1cCprhqBT295D0GuNeIWrAnOozr6gR2pgQ+CeSrsRSloVfuAPu4sjTeyTrlEYAnKIRDXeSgHB
|
||||||
|
ZGM4yOC/mMZx3gE233D+YTy+4cNf3gOWofEckxzAneW6Uk4ZAAkIAFqQNc6DmFAAAGOeUOYQE6AglAVR
|
||||||
|
9ZtOjr3ekWz+zrkapG16P7vxgsM6LrogewVMOS44wiMYWERV0n7ETntOKppY6+PrO4oSzKm/1EcNTf32
|
||||||
|
PrPQKFOD2dRqYxNRWprkbqyeiNxSeiNHYz0RuqL0NC+AAAAAAAAAAAAAAAAAAABDegGNfXLtraVRfO4I
|
||||||
|
0E72tNveqyee8z9u1MUYRzxkaFzfEIyXWk+Ms+tlPWrtMbezrkb2Xgov9ay3tKbqWsJvi8lveyxea2NL
|
||||||
|
PYyUjmbv5xhy1ZmXXzjDkZVy/TL+qavZus8sfA9T6Y/1RW/ZZ5Ya4SqeZBPMGkUgkhASicEEogAkgoLi
|
||||||
|
TpkRWQ4rtIIWCOOpUooYQEcu8dmpD4jXsKJzo+0hMZHECXrzIzqMZGAHMEE4YDkHxYxghLPcBVnhrw5E
|
||||||
|
aLmMd43e8CHwRKeVxIaxjXI4gTz4jiskYHPABE9nDQglpgM+ohPUYwSlkBjvWSc6JEYGAI5k8yBusCVw
|
||||||
|
wVJdxTqSpNAVyWeBRqm+wnLftKWmA0x6wuGhGCcMBr3E6YemSMMjgBUmGm0iBhvkA4vVELj3DHdgICXn
|
||||||
|
UctSGhhgHjJVz0KABUspEEYfYTzADTxGNQkAz3jTtGE+QeAGRlE5Q0wBD48SOehOnYODAZzxRBPeAIJZ
|
||||||
|
HMAASgAZBJAAABUoAAEbXYGXt+xwv7aJqzZ7A/r6xf8A3kB7DN+cvUhyIn85Y7EGjiqKf4Res7ad6rXZ
|
||||||
|
NtBp9ZUinH2cTiKb++x9ZvOkVy6FnspZxmnJmoNzR2xVhwqYRm0ukF1HGKq9qRwUNotLWRfhtB6LLzjT
|
||||||
|
DND0GHSS5WMum/WjY7O227quqNSMU2tGmeaw2m8rMuXA2WzNq9VfUZt5xNfaB6gp5K0zW0rhN8TMpzyg
|
||||||
|
L4IXAkAAAAAAAAAAABTJlRbqMDn9tzzOmvWzUPR47DP2vVj5Qk2lhGu6xf8A6ipVX2EFLqcX/AOaeMJ8
|
||||||
|
AKsecvXgvbXkuqjhJYXJGLvyTzh6F7aFRVbaE1omnzM0jmLv55hyepmXbzIw5cSK5jpjj4IrcMODPK+R
|
||||||
|
6t0uhv7JqrHGLSPMXQknhmuUrFaeSVF5Mjqu4lUZJ/NZpGNujcMnqZcosK3n6OAMfcKlFvkZHk08cvAl
|
||||||
|
WtTuAxnDBTumZ5NPsCtpdr8AMWKw8hr15Mt0JY/4LbozXICxgjBe6uWPmtEdW+xgY7ixhmR1b7CNx9gF
|
||||||
|
jDGq5F/c7iNxgWcsZLu4+wh032AWu8ZZc3H2Ebj7Bgtt5JTKtx9g3H2ARlDJO6MAUyeSE8FeCYwzyAo7
|
||||||
|
NCC/u6cilx7hBbS7ifYXVF89CHEC3jTgRwZdUdCnd1Apz3DJW4kbvcBQN4q3SN0CFIgr3e4br7BgjIzz
|
||||||
|
JwTu5WgFPEcCrd7hgClyIbyTgYAhPDyTnUlLQYApYKt3uJS7gKckFXMNCi3yKsonA3X2ARkIrUX2Fag+
|
||||||
|
wCy+ISfYX9zuJ3McgLGG+Q3WXtzXgNx9gFjGrCWjRfcO4bryBZ3eAcWXZU5LkFB9jGizuvsGH2F7q32B
|
||||||
|
wkNFncG48l1wl2MjceRoo3WTusr3WVKLAs7jI3GZG5zG6Bj7kuwKL7DI6t6aDq2uTCsfDIMjcfYNx54A
|
||||||
|
WFxNlsJZ25ZLOPv0TFVN8kbLYdJ/Dllpj76gPWZ8Uu5BsmosTZDRyVTT/Cx9Z0PSSzoVuitO9lKflFpu
|
||||||
|
qnh6NSkk00c/S/Cr1nR9I6sIdDpUpTip1HTUYt6vzs/wEHBxqOL4suRrPjngzHw+wrSeTQyoV5Z48jLo
|
||||||
|
3Di01pjVGtimi9TbXtA9es7rfUJZ4xT+w3lvUykcfsqtvWlrLtoxz4HT2c8pFG3i9Cot03oi4AAAAAAA
|
||||||
|
AAAAAsVX5r9TL5jVn5r9TA5HaVX+kyXsMPrMt95VtOT8sljtMJz1CVlupvYT5rQh1FkxOs15tFPWd+nE
|
||||||
|
oy3Vbwy9cPe2dQfan+81ym5NLteDb7Rpwo29OnTTUIrCTJSOYu/nGFLj3GbdcTClnJlWm29a1ry06i2j
|
||||||
|
v1Z6RTeMv2mno9Btu1op/B0G3rnrYnVxSlfUE/SOzsKa3FoJR5TH7nm3+WzYfXQLq+510hz/AFbTx/8A
|
||||||
|
kQR7PTpx7C/Gmuw1qY8Qf3OekT/wyn/qYD5OekXPZsP9TA9x6tdgVOPYhpjw75OukP6Mj/qID5OukOP6
|
||||||
|
sj/qIHuXVR7COqj2DTHhz+510h/Ri/1ECn5OukK/wrP/AL8D3Pqo+iFSj2DTHhq+5z0h/Ri+vgRP7nnS
|
||||||
|
GOq2TKX7NaDPdOqj2Dqo9iGmPCF9z7pFLV7GqL11YIr+TvpC/wDCX9bA9z6mOOCHUx7ENMeFfJ10i/RL
|
||||||
|
+tgR8nXSH9EP62B7r1UfRQ6mPojTHhL+530i/RD+tgR8nXSHnseX1kD3fqo+ih1S7Bpjwj5O+kOmNjz+
|
||||||
|
sgQ/uedIv0NP6yB7x1MewdVHsGmPBfk86RfoWfvwHyedIc/1JV96B7z1UfRHUx7ENMeCP7n3SL9CVfeh
|
||||||
|
/Mj5PukXPYdbxh/M986ldg6mPYNMeB/J9t/9BVvGJWvud7aaTlsqcG+T3dD3nqo9gdGPYNMeD/J1trls
|
||||||
|
uXgjHfQLb+WvgC5evFKL/ifQHVR7B1SwNMfP3xC28v8AALrP7Mf5kfEbbyk38Xrp57YR/mfQXVIjqkNM
|
||||||
|
fPvxF28+PR+79yP8w+ge3f0Bde4v5n0F1UR1S7Bpj58fQXbqWuwLv2QX8yl9CNu//wCfvPq1/M+heqQ6
|
||||||
|
tDTHzx8Sdt4//r999Uv5lL6G7aWnxev/AKn/AJPojq+8bne/EaY+c5dEdrx47Av1/wCyW5dF9pxTb2Df
|
||||||
|
vHJUD6R3H6UvEndfpS8Rpj5n+L97jL2FtFeu3ZT8A3r/AMEv8/8A47PprEvTl4jz/Tl4jTHzRHo9fzmo
|
||||||
|
rYW0n3q2eC7HortVrMdhbQWf/Tn0k1N/ly8SNyXOT8WNMfN/xU2thL4A2h/pwuiW1Xx2DtD/AE7PpDcb
|
||||||
|
/Kl4kbj9J+I0x85LodtX9AbQ/wBOH0P2v+gL/wCo/wCT6N6t9r8SOr734jTHzmuh213/AIBtD6gq+Ju1
|
||||||
|
3/gF/wDUf8n0V1fe/EdX3vxGmPnT4mbY/QN/9R/yPibtn9A3/wBR/wAn0X1fex1fexpj50fQza/6Bv8A
|
||||||
|
6grp9CNq1G87EuoacZ0sH0P1fe/EOn3saY+e/iJtX9FV/q2W59Ctrwlj4FvJ6cY0co+iOq72Oqfa/EaY
|
||||||
|
+dPiftf9B3/1DIfRHa6aXwHfZf8A2GfRvVvtfiR1b9J+I9GPnT4obXT/AKkv/ZQZHxR2trnYl/8AUM+j
|
||||||
|
er04vxHVvtfiTTHzk+iO1cL/AKLf/UMh9Edprjsa++oZ9HdW/SfiNx+lLxLpj5w+KW0v0NffUMfFTaON
|
||||||
|
dj3/ANQz6P3Jek/EbsvSl4smmPm/4q7QX+EX31Eg+i20E/6ovvqJH0huy9KXixuy9KXiNMfNz6LbRUXL
|
||||||
|
4Jvcf+CRR8W779FXv+nkfSm5L0pZ9Y3Z+nLxGmPmv4tX74bJvP8ATyJ+LG0P0VefUSPpPdl6UvEjdl6U
|
||||||
|
vEaY+bvixtD9F3f1Eg+jV/Hjsu6X/sSPpHdl6UvEbs/Tl4jTHzcujV8/8NuvqJfyJ+LV9+jrr6mX8j6P
|
||||||
|
3ZP8qXiN2XpS8S6Y+b30bvl/h119TImXRu+g8S2dc5/8Mj6O3JcpPPrI3Hj58vEnox83/F67z+IXP1Mi
|
||||||
|
PgC6/Mbn6mR9IbkvSfiUunLC8+XiPRj5xewrr8yufqpGRsvZVehtiznK0rqKqptyptJH0BOlJ585+JgX
|
||||||
|
tH+i1MtvEWPRjj66xUehaeC/cfhH6jHb7jCopfho+sy+mOvwUtNKEnnHeYtL8NH1m56VbOnW2VZ38ZxU
|
||||||
|
bdKlKHPzuDLBxiRUosrUGlw9hKjhGhSol2mteOAot9pcjHVesDvNjb3wfaya0cML2HWWUtEcpsf+pbPu
|
||||||
|
lJfuOnsXoijeUnoi8WKL0L4AAAAAAAAAAADGr8DJMestAOH2vDF5I12NTbbcW7fM1LYSqWiMfuJbIbAR
|
||||||
|
wpxeeDTbN3tOUZ0Iyi009U0aJvuz3G0m87Its8ov95KRoLnjgw5cTLuvnIw5cSKt01/TqK7ztLH5qOMp
|
||||||
|
fj9H1nZ2PzUSDb0y/HgWKRfRRUSQSAwMEkMACG0iN9AVAp3xvAVAjPeAGASAIwCSABBOSxVuadLSUtfR
|
||||||
|
XEC8MmnuekFjbSxVuKFP9uqkW6XSbZtaSULy1k3yjWWRsG8Bi07ylUS87GeDfB+0yE+YEkkEgAAALEr2
|
||||||
|
zhJxld20ZLjGVWKaL5alb0JNuVCi29W5U1qBR5dZvhe2v18f5hXdo+F3bfXR/mRK1tedrb/VRKXZ2b42
|
||||||
|
ds//AGY/yAquL22tbKpd1asfJ6ay5w87PJJY4vJbo39OcFKvCpZyc9yMLrEHJ8sa6i4sra5sJ2U6ahQm
|
||||||
|
uFLzd15ymscHnUw6+xKd44SutoXlxUinBznu5lB4zHGMLgtVqBlXO1bG1pucrmnOSqRpdXSkpT3pPCWP
|
||||||
|
WXIXtrJQzcUYSnHeUJ1EpY9WTChsCypToSg6qdF5isrXz9/Xt1ZgU+jO5eVoOUHYzhuQeW6kHj5yWMbz
|
||||||
|
ejfDCQHQO5t1NQdzQU22lF1Em2uOhVTq0qtONWnVpTpy+bNTTi/UzUro7Zvyp1alWtO4hOnOpLCa3nvN
|
||||||
|
xwtHlIv0Nk2dCyjaVaFK4pxk54qU01l88AbHMfSh7yGnJx95Gv8AgjZX6Ms/qUPgfZP6MtPqkBsfavEG
|
||||||
|
JbbOsLWr1tvZUKNRJrepwSfqyZQE4GAAIwMZ4Ikt1qVOvSlSqwU6clhxfMC5uS9Fjcl6L8DXPYuy/wAx
|
||||||
|
gv8APJfxKXsXZefxNfWT/mBs9yXovwI3ZZxuvJrPgbZnK0fsrT/mZFpa21jKTt6ThvNOWZylnx4ARb7U
|
||||||
|
sbu6nbW1x1tSGU3GD3MrilLGHj1mZuvGcGhhsW5hs2ey4bSj8HxbdKk6C3lmW9uzefOjnR9qZTR6MUYV
|
||||||
|
IVJ3DnOO7jzNIJSk5RjrpF72MdiA38cTipQalFrKcXlMt9dS8pdtvrrlBVHD9VvGTQ0ui1GnaulOtHfj
|
||||||
|
bRt6U6dPd3N2Te9jOrecMzNmbJ+DbidXyhTc4OPVxhuxhmW9iKzpHsQG33ZeixuS9F+BrHsfZrbboVMt
|
||||||
|
5b8oqL+JHwPs36Cr/qan8wNpuy9F+Aaa4xa9aNX8DbNz+Bq/6mp/MvUNmWVvWjWo06kZx4N15yXg3gDN
|
||||||
|
AAAAAMAEpZ4AQCdx8yiVSlF4c1n1gSCIzpzTcXnBLSwAILM69GnLdlUin3smNSMtYyUvUwLxBTvlWV2g
|
||||||
|
CMEshgRgoksorfEhkFt6rs5GvvNbGs2sYTRsJGFf/iVb9kDh7j8JJmOy/Xf3ySLD7iCaP4ZaczqdvrPR
|
||||||
|
ZrPGdL95ytFN1o+s3PSWpPes6G/JU+pUpQT0bzxLBzap/q/aVdXjkXlHBKiaFpUy5ClqXFEuQjqQdVsz
|
||||||
|
zdk2q/Wk/wBx0lg9Ec3ZaWNpH9Vv7TorDgjQ39B6IyTFocDKXAAAAAAAAAAAABYrcC+Wa3ADjukUcXUX
|
||||||
|
2o0bZ0fSSGXSnjic44gRkpbKmiloIjVtRXFvCN1fUPJbCnQ3t5wWN5Liaannr6b/AF0b7bGkF7SVXLXX
|
||||||
|
Ew3xMu6fnGJLiQW6Wt/R9Z2dj81HF0vx+hntO0sfmokG2pGQjHpGRHgaFRJBJBJYr1JQilFZlJ7sVyyX
|
||||||
|
mWqqzVo/toCzKwU/xm7qt8402oxXdnmW3si1+kvPrv8Agp2va1rmNPqFmcJNrMko5/WT4owadvta2ScZ
|
||||||
|
yqKEpTw6qaeZZxh64xolyA2HwRaY/C3ntrf8FE9lVIres9oV4T5KvicH68LKMF7M2hSvVc0KybjDG7KW
|
||||||
|
PO3XmXZjL4ersNjYUq1OVSVXrPO3MdZJSlotc404gNnXc7mjNVqap16NR0qsE8qMl2dxnLU5/Zkprbm3
|
||||||
|
E293yx48Eb9CCSQAIAAGt2rtBWVCTWd7GdFl+Hac5Vo1LnMr+pJb2vktKbiorsnJat+rC9Zttq05O8hN
|
||||||
|
8IyUjVSk97LfPLb1OPfV3GeqtQt7Sj+Cs7anpxVJfvwU1aVGosVLehNc06cX/A39xdWVfdc61CdRJ7kZ
|
||||||
|
ZdGL046Jp9xYqz2TCjTlCNCrUjF6YaUnpjK8R5/6y52nbq1e9s+rKznnO5HMqM+6VN6Y71hnTbC2u7+n
|
||||||
|
OlWp9VcUXirS3spN8JRfOL5Gjuup8rrKg/vG+9z1cinZ05U+kVs45zKjKM/VlY+0cdWXGpXdpklEXlJl
|
||||||
|
Z2aSAQAfAp3HVk1v7kUsya4+pE8iaWkp/sp49oFt21vl5pyf7UmR5NbfRR8Wc5Gx6QWtOlKnfOrJUlB7
|
||||||
|
+rit7Lf60uKz2YL85dIN+tu7qhiO4kl5zTWcPkms+oDeO2tvol7z/mWLimranKtTm92CzKMnnTu7zBUt
|
||||||
|
tVKqhLFCMXrPzWpceHdwRNN3/wAB3Xwi06+4+EcY01S7UKNjTqKfzXo9St5xhYy3hZNbs+cuphryRsU/
|
||||||
|
Oh+0iQVStaWfvsp1Jc/O3UvYinya2+j/AN7/AJmNtVX0qtJ2Ut1reU20njOMPD58TVVH0hhObpzUt6cM
|
||||||
|
70E4xik02ktct4yijeu2t/o/9z/mRK1ptfe5TpvlhtrwZrHLbcNxp06rm570WlHqktY47d5adz1J2O9q
|
||||||
|
zqSntJbvmuMVw56ZXbgDOoVnLehLG/CW7LHDJko1FOTjtS776r/cjaQeUILgBDAnJDBD4AWKrnOTjGfV
|
||||||
|
xik5Sxl+pfzMV0qcpf2s331Hn7DIqPDrduI/xNRtSFWrToKnGtUoqrm4p0ZYnOG68Jf5sMozOqo9k/rJ
|
||||||
|
fzHVUU8pVNP+5L+ZzdOr0kjCtRgt6dJKMetimkms5UvyprJsrOW1fKYO7lF0XlSioKOMLSXbnIwbKVSd
|
||||||
|
st/rJSpp+cpcY+0z4yT5mpvnjZ9xjlFfvRk2dRumvUQZlSclHEcb0nurL595jVKa3sTq1JvnuvdX2F6o
|
||||||
|
/wAH/wCRGNVbzPGrw8Lv5CCOrpxxpUX+dlPVUv8AufWM5y3j0itYU6TcKm/VUqlSWZqMccO3V5z2aCVf
|
||||||
|
pFVpyhOjKlGVXzZU4JyS0ai9eGN7zu4uDpNyUfwVWpF+jN7y/mZVtcKrBPhJNqSzwaMeL89YMWym1c11
|
||||||
|
y62RBu08kluD0LiAAEATFbzxwJqVerju04b0nyzjxEGk2WbmW5Bz1xweFw7wMecn/a1Osl2LSK9XaUdZ
|
||||||
|
2JL1IobXHKafNEZWSilVpU9qRWfNqUsv1p4NlvZiamSzf0X2U3+82a4EFirJKmk8atvgYslDOdxZ7Y+b
|
||||||
|
+4u1ZZgu6TX2lltAVqtVp8H1keafHxM2nUUoqS4NGulONNKUtE9Elxl6jJtd5Qalo2847CDOTzqGUxeh
|
||||||
|
UBDIJIZRRIwNoP8AoNb9kzpcDA2k8WFb9kg4iu/vssljJer/AIVlh+sgrofh4+s2/SShUU7W43H1TpKG
|
||||||
|
938cGot9biOe06jpFJ/AFvHOnWx0/wArLByiXaVJeJSitGhVEuQ4lCRepxzJEHTW+lOhHspo6GwWiNFF
|
||||||
|
LroxSxuxjHwRv7BaI0N3Q4GUY9BaGQAAAAAAAAAAAAtVVoXSiotAOd27S6y1jLnGWDmpUWnwO0u4KdGp
|
||||||
|
B81lI525q2Vst64m6WXhPdzqBqXTZS6ZsIV9mV5btPaNtv8AoSnuv7S87ByWYYmu2LyQaWUH3m0uXKWz
|
||||||
|
LWU5NycPOb5kVLKa/IZcv6cqNjQpy0cY4fcKOZucbxiSMu6WJGJLVkFFP8fo+s7Ox+aji6f4/R9Z2tj8
|
||||||
|
xEg2tIyEY9IyEaFRJAIJKZ041IuLXt7CoMDArVdoUH97jRrx5dZmMvFGM9pbSX+GUNP+8zIqXFeFzWUY
|
||||||
|
RnBST87K0wlheJiPaVeMoxlb05y3G24trXXRZ9Wpr8dT1Ir+E9oZx8F0fbWZbq3u2qy3aFG1tP8Aua1J
|
||||||
|
L1Z0yTVurm1uZdfCElKSiqcJPCWMvGmrJ+EZb1BdVTkqksZhP5uuMa/ldw/HU9xOy7CFjRcIylOUpOc5
|
||||||
|
zeZTk+Lb7TbR4FKgk36ytGWlSBAAAADGubZVovtwc5eWlShNvdbj2r+J1Zaq0oTXnRT9ZnrmdJZriXUj
|
||||||
|
nG9HvyW5VYLjUisd+p1VfZNtVeXBGN8BWilncMfi/wCp5c2puo8UqbnLt4RX8zcbG2VKlV8predUk8tv
|
||||||
|
TL5ew21HZ9Cl82CMuFNLgb54kWTFyHAucSlLCKlwNKY72SyAAKZSlBuag5xaxJLiueUVB8GBiu8tk3vV
|
||||||
|
VF895NNMjy60+nh4lypTUnniWXQinwXgT7E+XWi/vNMx7u7hXt6lG3i5Ka3ZTawornx4sv8AUpckHSWV
|
||||||
|
4Ci1a092CS4IzcNx0xlNNZ5stwgo8C8hILNS6pKT6xunLnGS/cynyu2+np+JdnBSWGtCw7eOfmrwAq8s
|
||||||
|
tfp6fvFLv7aPzZ9Y/Rgm2ynyePorwHUpcFj1IfYxqEJSr1KsklKct5pcjY09EWoUki9FNFFzOgIJABgA
|
||||||
|
YtypwbmoOcJRSlu6uLXPHNGvdzb5w60F3N4aNy+DMarQjN5aT9gGv8poYz11P3kR5Vb/AE9L3jKdrD0Y
|
||||||
|
+A8mhn5sfBD7GDWmrmk6NJOUZNKU+CS4+1mbbQ3UljBX1CfsL0IboEVIzlSbppOompRT4PHI19W6oxqO
|
||||||
|
NSXVSzrGosG1X2FFWmprEln1oDVeVW+Wuvp+reJ8pofT0/XvGXK0pv8AIj4FPktP0I+A+xjeV0E/Nn1j
|
||||||
|
z8yHnMmzpSjJymsSk22uzJlRt1HhFLuSwXIUlHgQXqfBIulEVgqKJGSAAG9px1HIgDFq20JNuDlTk+Lj
|
||||||
|
wfsMWdG4j82VKf7Sa/cbF4KHFNkGBSp1Ouc6sYRljdShLOnbkzVJYIdNZ5jq13gY1aFXMlBRlFy3k3LG
|
||||||
|
Mrhgtxo1XxqKK7Ir+Zn9XHvKerSYGNTt6dKTmotzfGUnl+JkQT4circRWkBVHgVZKUSAIZJDAoka/aWt
|
||||||
|
hW9RnyNftN/0Ct6hRxNdffZFhl+t+FkWGQXLVZuI+s3nSO5qYtrNKPVKEareNW+BpLb8PH1o3226DqXd
|
||||||
|
u0m/vEUWDQKD7y5GmzPhZSf5LMmnsyrLhTfgaGrVNmXaUHOvTWM5kjO8ip0399q0oftTWTKt6dGi5VI+
|
||||||
|
durKfaQZFGXWV5Sa4s6KxWiOeso5kjprKOiNDa0VoXy1SWiLoAAAAAAAAAAACmS0KiHwAwK8fO1OS29a
|
||||||
|
79rXgl50fOXrR2VxHKNHtOlv+d6S19YHkm06anKM1FYks8DJ2bcyjSi4TlCS0e62i9ta3dKpUpY+ZLT1
|
||||||
|
M1VnV6uvKDeFLX2kR21hf3TqUoq4m02sqTybzbi8xM5HZ9ZpprCa1R1G0qrr2NvVl86cN54IrmLrGEkY
|
||||||
|
j7jKueJiyeOAFuH9YUPWdrY/MRxVP+saPrO1sfmRJBtaZfiWKZfXI0KwQSQSCCQBAbS46FDqxzomwKln
|
||||||
|
Aev/ANFKqrmsFWc8NQGCSOJIAAAACGBE5qKbeiXExKlW4bTjTpwi+dWTy/YjJny9aMOtJupJ51Apcrrl
|
||||||
|
Ut+/KkUt3fp23hI1Vxt1297VoTtJulTqqLrJ+bu7rcn601jHMqjt63nVjT6m4Um0p6JqGXhZa7e4uDYu
|
||||||
|
reQ16mlVj2UptS8HoZVvXhXpKpBvD7Vhr1mOm0zGs6zW0b2m35qraL/KiDcplSLcXkrAkDJAElEqmJKM
|
||||||
|
IynOXCMSomi2pVXzcVr7QLMqd0/yaEe5zbf2IpdG77bf3pfyMXam2qOyp01WpVpxqQnJOms4axiL75N4
|
||||||
|
Qjtu1nQrVPvjnQpRq1aShmUE1lac8/wAyOpu/wD0/vS/kWZ1K1KUVc0tzeeFOL3o5/h7SzPblGN9b2vV
|
||||||
|
VPv8ITU3pu7/AAyjL2jLGzLl8cQb9pKq6uJMpKMW3wRh2Vw6tGLk9cIzFrOC4+ciy7EQ43E0pQpKMXwd
|
||||||
|
SWM+ziUOnddlD33/ACMmpLNRt8W+ZppbfjTupUKltUUutVOME/Pa18/d9HTigM/qbrso+8/5FEo3NNNy
|
||||||
|
pRku2nLP2cTDpdJdnV1GVOVacZN4kqTwksed6vORt1LVAY9OcZxUovKfBl1Gto1mr26p/kxrPBsYPQQV
|
||||||
|
oAASQ2CmXAC3Vrqm1FRlKb4Rist/yRjzrXL4UIR7pVdfsLjk4yrtejFZ7tdDWXF5Ond0bahRVWtWUpre
|
||||||
|
nuJRjjLz26oDM627z+Bo/W/8EOrd5/AUn6qv/Bp10js1CcqsasHDKmoQ31Fpvzcri3utl6123ZXl6rSj
|
||||||
|
Obrbu8/N81aZw3wzgo2dO7zVVOrTnSnL5u9hqXqa0z3GXFp6o1d7NxsaslxjiSz25RmW9brIJvnqQZFS
|
||||||
|
caUJTm0opZbZjSuK8tads91rKlUko59nEuVXmVLOq6yOntMe5qyiqlRJzlFOWFxYEurdfQUvrf8AgjrL
|
||||||
|
rP4Cl9aaOh0psa9SUYwqqMfykt7K0SaS4rL3fWmXH0ksafXOqq9ONKSjvOm3vSefNWOaw8ruLg3HlNWn
|
||||||
|
rVoSUecoyUkvWZVOSmlKLTT4NczEp1FPclF5jJJp9qZZsK7U6tJ8I1JJeJKNsirJRF5JAqz3kE5KcgCM
|
||||||
|
hsgAVxozks4wu1mTQt8JTmteS7DHv9p0LKcaOJ1rmSzG3pLMmu19i72BEqGOZQ4Y5mDUudoVXmUqNuvQ
|
||||||
|
gusl48PAsSneJZ8qnL100NGy4EbxrFtCtS/DU1UiudPSS9nMy6VencU9+lNTg+a/j2EGTklMtRlnjxLi
|
||||||
|
KK0SUIqTAnBS9CckNgUS4Gt2q/8Ap9X2Gxka3av9X1fYQcXW/CMsywXa34R+sstkF21/GI+s7Hbly7PZ
|
||||||
|
FvVhTpzlvKPnLP5LOOtH/SI+s6HpVeQjaWtluvfSjWbfDGMIo5y86RbRimqdeNLvhBJnOXu1b68r7tW9
|
||||||
|
uJxSw11jSL93Wit58lxNdaU+suFlcXllwb/Zdup3FtSay878m9XpwO7xu20Vp58v3HMdHaHWXFWu1ovM
|
||||||
|
i/UdTNxnWjGPCCx7SjOsYao6W0jhI0lhT4HQ20MJFGbBaFZEeBIAAAAAAAAAAAAABYqxymaq7p71Oaxq
|
||||||
|
tUbmayjXXMMPOMgecdJLXduIVsaTW5J9/I4uunSq70eMXk9T29YKvaVIKOq1ieZ3scy3sNPGq7+ZErZ2
|
||||||
|
FdPDT0ktGdlW12NYvtpfxZ51suticqb/ACdV6j0Le3+juzpcc0mv9zJVaG5eq0MWRlXOjMR8wLdP+sqP
|
||||||
|
rO2sfmI4mn/WNL1nbWPzESDa09S+ixSZfiaFRJBJAInNRjkkxq8m6m7ySANubzIrUKs1mnRnNdqWniX7
|
||||||
|
G3jVm5VFmEeXay7tK/haW8kpqNVrzI4JbJNo106kqEsV6dSl3zXmv2l2D14GXb3VG9oaOM8pKcWufejW
|
||||||
|
NKyv/JM/epw36Odca6x9g2X7gzk+YEfmZBQBAAkhgAUTXmt66GvqPM21qnzNkYVxaU5yco5hLtg8AYrj
|
||||||
|
FppxWr3npxfaW4W9vTio06NOCXBRj35K5Wk0/wANW94jyWp9LV94aLiedXy4sxbOO/eXNZawqVW4vtWE
|
||||||
|
i67JS+e5z7pSePAyaNHca7louwDLhoXMluCwi4uAEggnIAiMlFyTeMxWO/UkpnFTjhrQC3OnCc96UIuW
|
||||||
|
HHL7HxRbpW1GhLepUowbWG0uK7+0t1KdWL8ytUS7M5LWLlf28/BDaMidrQqV1XnSjKosJSfdw8CnaM18
|
||||||
|
H14tpOcXFet8izi4enXz8EUeTyclKblOS4OTy16iKqs4bkEsYaSyZ6e64yfBSTZj0obqSMlcC4iZvV4e
|
||||||
|
j5mJKwtJTnOVvTcpvLbWuf4E1aMk26dScO5PQsSV0v7xPwQEvZNi61Kp5PBOlvbiXBZxl49iM+L1/ea1
|
||||||
|
eVfTz8ERKnVqLFWrOa7M4Q0WqKU725qJ5jOq3FrmbWnwMOlR3OSS7jMitCQXEySlaEookpZIAxKzUZ1I
|
||||||
|
51cYtd6NfcW9C5UVXpRmovMc8mbetShWhuzWVya4r1GuqWdSLe5XqJdmjAxHs6yct/yampbrjlLGhNCy
|
||||||
|
tLaanQoU6UlHdW4saF129f6aXuohUK/Drpe6hopvXmyqR4OeIrveUZVpHdjjsLMbXE95uUpcpSecGZRh
|
||||||
|
urGMATWe7CE28RjUi23yWSxOTU20+ehmpJrDSaaw0zBrWLTzRq1Ka7E8r7QMSFhZ0sdXbUoYSit2ONE9
|
||||||
|
7HjqUVNnWVVuU7am3J5fHV5zn16l121yv7zL3EU9RcfnEvcRdGRDEWkuC+wxrNffqk1wlUbRX5LKS++1
|
||||||
|
Kk16L0X2GTRpbmElhdiMjNpvQuFqKeC4iichojIYEF62pqdRN/NiWMmbb+bS9eoGLtrac7ChSp28I1L2
|
||||||
|
6n1NtTlwcsZcn+rFZb9RgW1nTs4TfWSq1qj3q9xP51WXa+7sXIx4VVf9KdpXMtYWEY2VFck2lOo/XrFe
|
||||||
|
wzauqxyJqqJyXLQtSy1xfsKa1fqkor5z+wsKrOTzvGdCrFS0f/JhOVSzqyr0Y5b+dH6Rdj7zZL75HXj2
|
||||||
|
mLVhnK4P9zAz6NenWpQrUnvU5LMX3GVCW8jRbMqOnXuLR/Ni1VguzPFerOpt6UuKNRGSiShMqTKJIZJD
|
||||||
|
Aoka3azxs+r7DZSehrdrf1fV9hBxVX8Iyyy9V+fIsNEF+zWbmK7zM6Y1FHaVKPFq1hkw7LW4iu1jpvUx
|
||||||
|
t3c4btvSX+0sHI3lXMlBPi+BfsY7kHUS1Wi9fI1291teUuT0R0OxrR3N5Qpfkx8+X8DQ7LYltGzsYb3Z
|
||||||
|
vP1mxtYb0s9pamtynGmktdWZ9lSy0Ubmxp6I3lCOEa6zp4SNtTjhAXVwAAAAAAAAAAAAAAABDWhiXEMp
|
||||||
|
mYWqkcoDQ3dLfhl/k6ew8v6SWPku0JrGIVfOi/1uZ61cww88uZyXSfZnlljJRx1kNYsg8vjPye5jPknh
|
||||||
|
+o9KspdZ0T2dLsU4/wC5nmtdavKxJcUeg9HZufQWx5uFWtD2ZX8yUjX3WrMR8e4zLnR+0xHx0ILdL+s6
|
||||||
|
XidrY/MRxVLPwnS7TtLH5kRP2NtSZkRMenwL8WaFZJARBJiVM9fIyyxWg8qXsAz7CSVGa55MG4jRjtG5
|
||||||
|
jd6RrRSjJ9nYmV0KsqTUl4dpkVLm1qQ++uPqmuBLNGFbdXU2pOpbr7zGmoykuEmY22Jp7YsYL50Kc5Sx
|
||||||
|
2PCM2rtK1oU92gutlyhTWF48EamhTqV7udzValWqY3nHgkuEV3IkitzReaWX2AJblNLmyDSJIAAAEAG8
|
||||||
|
GPVuaNN4nOKfZnP7i5PVYy1l4bRjyqdW3GmlFcPNQFDvaHpP3WUu+tk/wn+1lKvoTcFG4jJ1E3BKWsl2
|
||||||
|
oudbP0n4jBEL22qS3Y1ob3ZnD+0yI4yYtTdrLcqwjUi+KkslrZ9xida3bb6io4RbeXjCa/eBtEVFEXoV
|
||||||
|
ZAkEACopb014c8hsiMIVZydVb0YJNRfBvtYFiV1QTw6sPEtu5t/pYma68ae7HMIJvditFl9i7yY1t+O9
|
||||||
|
BqSfNAYPlNv9LErhKE9YyTXcZfWPHDTvRg38adOhO6hFQqUlnMdN5dj7R+hfWCrJZpVFOKkuZNRtxUU8
|
||||||
|
ZaWVyAVa9Km8VKkIvvkWHe2r/vFP3g1TpSap04pZxndy33t9o619i8EXBHllr9PT94rhWo1HiFSEvU0U
|
||||||
|
OpLHBe6i3OFKs8VKcXr85LDT7U0TBmxwVo11jc9ZGdKUsypTcG+3HP1mwQFfEBAAOAyUtgS2Y1S5t02n
|
||||||
|
Wpr/ADIVIxqSn1nnQgliGcJt832+o199eKzpUuqt6LnWqqlTjLEI5eXlvGi0AzHdW301P3kQrq2bwq9N
|
||||||
|
v9pGnqdIbWhdSsq9BO7io5hRipxcm0t1Pt1XHtL1htShtG4r06dqo06cYtTqRj5+crRcuAwbeLi1lNNd
|
||||||
|
xcSSNVW3LWKuaUercWt+Mfmzi3jVGyp1FOOU8rkBdbx3I117ti1tIOU6kElxlKWEvaa7pDtadDdtbaHW
|
||||||
|
XFWShTp5xvSfa+SS1fcjnZW1CFTrK8o3tzzrVVmEX2QhwS+06cfHe2eupG1n01sXPFHrK/fQoTqJe1LA
|
||||||
|
h00scrrlUpJ86tCcF4tGDW8tp01OpTuKcFHeUpQcVulpeVypzqRhWdOMd6Ukm0l2+o6/g5/rH5L/AB1t
|
||||||
|
ltazvoKdGrCcXzjJNGwSXI82WI1VWpPqaq1VSnpn1rg0dhsDarvKLp1Y7tWDxJLhnk13M5d/HeW+ep03
|
||||||
|
iKikqyc2gjIIAGbSfmRMIyKc/veOYHNbDmvKNuRfzltarn1Yjj7DaTk3NmmqSezOmt7by0obVpRu6DfB
|
||||||
|
1ILdqR9eEmbVzTxLtRlWDXbdxLOuCqmsldalvS31x5imsYWCC/TiY9ysVGZaajHLMGrJzm2llt6JAYdu
|
||||||
|
38YFFYX9FbfvG4i8SNNsZq6vtobQi1Kk5K1oSXCSh86S7t549jNtvedgs/Qy4SLiZjQkXosqLpDIyMlF
|
||||||
|
Mnoa3a7/AOn1fYbGXA1m1v6uq+wg4yq/vki0y5V+fItPXBBk2Gt1D1mt+6BcNdJrqCeqhTh/sRttmLN5
|
||||||
|
TXbJHNdN6rrdN9qrOVTqqmvZFFg1NtFPV/NXE7/otYulau5qrEqurz2f/Rx+x7J315ToJeYmpTPStxUL
|
||||||
|
eFGHNcjQuQ++1nJLRvT1G8saPDQ1dnSy0dHZUcJaFGytqeEjOitCzRjhGQuAAAAAAAAAAAAAAAAAApkt
|
||||||
|
CoAYFzTymae5o70JJ+31HQ1Y5Rqrmm4veSA8h6VbKdlfyrRj96qvwZv+ikt/oVKP0d7UXsaTN7tzZdPa
|
||||||
|
NjUptatZT7zRdE6NS32Hta0qJqdG7hJr1xa/gSjGu1qzEa0M271kzCfAyKKGu1KT7jsbJ+ajjrd42nD9
|
||||||
|
k6+yfmoQbimX4mNTZfTNC5yJKMkpkFQevEjJGQCjj1FM6akV8hnAGN5HvMv06MKXHiVbzxjJTkCpvL7y
|
||||||
|
UUZJTKKskEZIyBOcAjJAET0x6zAqSxUbWmGZ8o7ycW9Gau4p3FNtxjGqu94ZBqauwqdTyjduatNVZNw3
|
||||||
|
NHSi08xXdltlmPRyMVQ3bytDqseZBvdk86vjzWhsnXuE9bX/AORfyI8orv8Aur+sX8i6M1TWe4wbPK2n
|
||||||
|
fPtrv9yJ626l82lCn+tKW9j1F2zt3Rb1csvLlLi32kG2pvzUXMlqDK8gV5BTkZAqZNN4VR9yKGUVN9Le
|
||||||
|
ptJ4xh8H3AYG1dmPac7d+Uzoq3k6lPdWfvnKXs18WYK2DX69SlfyVLq9zq4Jx0zl8GbGV5ODe/bTffGS
|
||||||
|
KfhD/wBNV8UTRj09ixp3flEa895T3kt6WF52eGezQztqPOyrr9hlj4Q0/F6niizcVq13TdJxVOm35yzm
|
||||||
|
Uu4WqvWUn1UfUjLnwi/1kY1BbqRkuKqQ3eGefYVHO7V2dfXW0vK7XaLoShSdGNPdbi0/nN9/DD5GG9jb
|
||||||
|
WhZRoW+13TcVHdym8Szq0+LXDGTeV+vpye9S6xdsHj7Cw7mp+bVfFDRr5bL2mnLc2rOW9vayz5s2sKS9
|
||||||
|
XY9NSrZuzL+22hb17vaDuIUqcopOTzl/Y138TN8pn+a1fsJVe4k/vdDcfpTecewaIsm1e3XZ10uHsN5B
|
||||||
|
5RqbOh1S4uTbbcn+U3xZs4PCIL6YyU50GSirJDehAAx6jw63Z5v7jnduXlejUt6NO2jXoTTlWUqe8klK
|
||||||
|
KWexat6a6HQ3NKcouVNrOMOLejNZOrUg/Ptqvsw0BoKW2aEJQrLYcaSlV3N5LM8LhpxzlfuMrY+0pXN5
|
||||||
|
HGzqFnCvTlUm02pzknw9eGbHynDyrasn2qCQ8pfK1rZzn5q4+JdMXdpSzs6vybSX+5GVZze4lyMCaq3M
|
||||||
|
VCcerpZTazlyxy7jYW8cRRkc5tylKltOjdy0gpyi2+W9HCfqyavecaicnJYabeNVj953F3ZwuqUozgpK
|
||||||
|
SxJPg0cntDYtzazbox62lyjnzo+3mj0fF8kkyuffNv3G0rdIrSMp1afX1bipHzqkqeItb0cpwbazhPUQ
|
||||||
|
6S2dGVGNCNelRjVcpYgniO7JaLnhtadxyc5Spv75TqwffB/wKFU3n5sZyfZus6Zx/Wd6Xqst6rNqTlmT
|
||||||
|
e844b78cvUbHo/OcdqxceG6k8GFbWNxcTS3GkdRsnZitFvNee/sMfL8ksyNcc2Xa38Hpgr9hbhoVJnnd
|
||||||
|
FTAyRkCSqEsMoyEBg7e2T8M2EKdGqqF9b1FWs67/ALOou39VrRmm2XtryqpVtLmk7baFDS5tZcYv0o9s
|
||||||
|
XyaOmlwyarbGx7DbcaflcJwuKX4G7oPcq0vU+a7noSzRV1ia3ovK7UOsftNDLZ3SbZ8n5LdWO1aS4OtJ
|
||||||
|
0KuO/imU+VdKGt34vUU8fOnfR3f3Gcqt3Ko5Pi36jUXd3Vv7upsjZdReU4xdXMdY2sHxy/Ta4IpWy9sX
|
||||||
|
6xtPaVO0oPjQ2frOXc6j4L1I29nb2uzrONnY28KFCGqhDm+1vi33sZ/TV63t6FlaUbW2huUKMFCEexLt
|
||||||
|
7yqLyW3PJKkaRkxZeizFiy9GWgF9MnJaUireASZrdrP/AKdWXqM+Tya3ar/6dWfq/eKOPq/PZaZcm/Pk
|
||||||
|
UNZINjsOHWbToR7ZpfajjOkc+v6W7YqLXevaqXsk0d50Xjv7atk/pIvw1OV2Ns2W2dv3d5OK6qVxUn3P
|
||||||
|
MmywdB0V2VGytFXqrEprLN5BdbVcuXL1E1fvUVbwxjCzgybSjlo2NhY0OGh0NrSwkYFlQwlobqjDCAvQ
|
||||||
|
WEVkJYRIAAAAAAAAAAAAAAAAAAAUyWTEuKWUzNLU45QHPXFPdbzndNarONHy6pCOOujFy9aOiuqGU9DU
|
||||||
|
1YySqRfBwZKONvF5zNczaXqxNo1sjIxlJU7+nJvGh1thVThE4+5pyliceMTZ7L2i4wUai3ZIDtKU8oyV
|
||||||
|
PRGlt7yMop7y4a6mZG5j6S8S6NhvFSkjCVwsLVeJPXrtXiNGZvkb5i9eu1eJHlEfSXiBmbxG+YvlEc/O
|
||||||
|
XiOvj6S8UBl75G8YvXx7ftHXrt19YGVvDeMXr4+kvEdeu37QMreG8YvXx7R1yAyd4bxjdch1yAyd4onr
|
||||||
|
xLPXLhzHWoBKlFvgU9SuwOqh1qAKnHPAqjBR4FHWodagL6eCrODH6zUOqu8DI3id4xlUKus9YF/eMXaN
|
||||||
|
1UoW33iLncTlu044zntK+s9o6zg+faWWb9la2e16SlmUN6M3ospOOmqft0E7yVNvesprCy8TWmmf3Gwl
|
||||||
|
1b404+2KDlHnFeBr1z/Gcv8AWuu6s41akadxRt406Kqx62Oeszy/+tSFtCLjS3aD35yUZRlNLc1xqbGX
|
||||||
|
Vz3d+EJOOsd6KePUUuNKTk5U4Ny4txWX6xvP+wyrsUloVplreQ30YaRctq3qTisyjFtI1lS9UKlGMIwr
|
||||||
|
KpTi3uSS3ZPt+3Q2nWItqlRUXHqae63vNbi1faalk/aWX/Gqo39SdRQ8n6xyaUVFqL1z2vXgZ9rOndUe
|
||||||
|
tpxahlpN88cftL0qdKUXHq4rse7w9RMFGnTjCCe7FYQ6vN/UJL/qqMEuCLy0LO/gnrDKryZOSx1i7R1m
|
||||||
|
AL+SM4ZZ6wdYgLzZZnTjLkT1iyUuaAodFdhT1Eewub6I3yCjqknwLkY40Kd9PtHWYKL+SHGM9JJd+Sz1
|
||||||
|
qHW8HngBr6nksrWnWrUJLrHLEYreeFxfqXEx5LZ0YqfVzdNy3I1HB7sn3PsM3yKzy31PF5+e/wCZE7Kz
|
||||||
|
m8yo6ZykpNJPuXBG94ZzpVaU4yt6dRU1DeinurkZcYpFmDhThGEFiMVhLsRX1qRitMhPBVkxetRPWogy
|
||||||
|
ckbxj9b3jrUBkbxO8lqzG60OomBlZLc6cZrsZbVVYwOtAtzoz4ppliVKp2RMiVVItTqpAWerlzkQ8JYR
|
||||||
|
E6y7TGncxXNAXskqRgyu4p/OIV5HtQG0jMuxmauN5FvRl2N1HtA2SmTvGArpPmT5QnzAzZTWDWbWnjZ1
|
||||||
|
Xt0/eXJXKxoazaVyqlHq0+eX3CjQ1PwkvWQ3lCTy89pCWupBvujSxduazmNOcv8Aay9suyp7J2dGMY4k
|
||||||
|
14sdHd2nRuastEqe7n16F7LrTxl7i+ajUgrowdSblLVt5ZvbK34aGFZ2+WtDobOhhLQ0Mu2pYS0NhCOC
|
||||||
|
1ShhF9LAEgAAAAAAAAAAAAAAAAAAAABDWSQBj1aeUzV3FHEn3po3UloYVxTymB5ztGOKsjUSWp1G37N0
|
||||||
|
7h1EnuT1T5Z5o5qpFxbMCw0VRaitEilsjkTRdVR8sE9fLh/Ex29ckZRRleUTxq34jyifa/Exd9Ih1FkD
|
||||||
|
L8pnnRvxKfKZ9r8TG30HNEGR5TPHF+I8pn/+sxlNZEprHEoyPK6i5vxHldXOknn9oxN9do312kGX5ZV9
|
||||||
|
J+I8sq+k/ExOsWOJT1kcgZvltVflyXtKfhGt6UscnkxZSTXEjfjkDNV9Wwnvy94eXVs6yl4mF1ifMOpH
|
||||||
|
BRm+XVvTl7xHl9b0pe8zCc12jfXaQZrv63pS95lPwhV9KXvMw99PmRvcgMz4Qq+lL3mS9o1V+VP3mYO8
|
||||||
|
u4byKM9bSrenP3mQtpV9c1J6frMwN7teEN8DYLalf6SfvFS2rcL+1qe8zW72nEb7INn8L3H0tT3h8MXS
|
||||||
|
4VKj7t41m9xIUkmBtVtq5Tx1lRvjneHwxdpa1quvDzjVby7Q3llG1e2LrOevq+8Htm64ddU8TV76G/zA
|
||||||
|
2vw3d5/DzyPhy7+nn4mp3yN9EG2+HLv6eoPhy8f9vV8UalyQ3l2gbV7ausP+kVSlbcusfh6vtZq888hy
|
||||||
|
WQNt8N3efw9Qn4dvFwrT+w1CkN7OoG3+Hrz6afgiH0gvEsqrI1CeUTo+IGzfSHaHKp9pVHpBfvO9Ufdg
|
||||||
|
1GcPRk73eBuPh29+mmvAj4cvfp5/Yane7wpd4G1e2rvnXqeJTLbN2/7xU8TVuY3u8DZPa90/7er4kfC1
|
||||||
|
z9NWf+Y1uRv4zrxA2D2rcP8AtqvvB7TuW8ddV941zkTvAZ/wjX+mq++yPhGuuFar77MLRviNMgZq2ncc
|
||||||
|
61b3yfhS4WM1qvvGAxkDY/C1w/7Wp7xD2vc8qs/E12UM6gbJbVufpp+8T8K3Cf4ab/zGubyM9oGy+Fbj
|
||||||
|
lVn7xPwrc/Sz8TWKWpLnlJPCwgNmtrXP0s/En4Wufpp+Jq95c2SpLkwNhLalz9NPxLUto3L4Vp+JiuS5
|
||||||
|
sozzIL07u5l/eKnvFl1az166pn1htMpaaSeHh8Cihyqv+2n4kJ1fpp+JUsDPaBO9VSS66fiXYVq8f7af
|
||||||
|
iWs5RKwBkRurhY+/zLkbyvnWtPxMWOhUvWBlO7qtPNSb9pE68qiw3p+8sLUlJcwJyV4XaW3hF2knOSWO
|
||||||
|
YHQ7PW5syaT1nJI2FrRy1oY9Gj1NvRoteevOmuxvl4G5saOcaG4M+yt+Ghu6FLCRjWlHCWhs4RwiiqKw
|
||||||
|
VAAAAAAAAAAAAAAAAAAAAAAAAAACxVjlF8omsgaO+oKcJRlFSi+KZyd7siDbdKW7+rL+Z3dxS3kzS3Vp
|
||||||
|
nOhMHEVNmXENdzPqaZjzsrhf2UvYjqK9m8vQxoW7hWhLHBk8jkJ1sZ81lqVfXRPQyK7UasovRp4Md1I6
|
||||||
|
mRNJ1ribhRpSlJLLSXBFyVperV21TwyZGx/OuLlrlCK+03UKWTUmjmnbXmv9Gq+6zHq1alGbhOnOMlya
|
||||||
|
wdkrd9hz22N2F7KL5Y/chZg1buHjO6yPKJSaioSbbwklxK3KJdsmpX1BL6SP7yCOou2vxer7pHk95+b1
|
||||||
|
fdZ1MKeS/G3b5F8ji6quKKTqUKkU+DcWi110n+TI6rbdPq9mty4byRzO/D1EswW+ukuTKlOpLhTn7rJ3
|
||||||
|
4a8DqrZylbUcSeOrjz7hJo5TNX6OfuspdScZYcZJ9mDt405vm/ErjTqJ6SepfI4Tr32MdfJcmXas4ddN
|
||||||
|
frMo34JciCulG4uIOdGhUqRWjcY5K/JL5/3ar7ptthS37WslwVRcPUbiFHJZByLs75f3ar7pj1J1aM9y
|
||||||
|
rCUJLk1g7tWz7DmOkG7Da0451jGKx7BZg1HX57SqNSU5qEYtybwljiTvRMvZSjPa9vjVpyl4RZBb8mvO
|
||||||
|
VtV9xlHVXWfxet7jOvhTbMhU6j/Kl4l8jiOpuvzet7jJ6m6/N631bO46qp6UvEdVU9KXiPI4fqbv82rf
|
||||||
|
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
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
1200
daq_testing/UserControlMeasure.Designer.cs
generated
Normal file
1200
daq_testing/UserControlMeasure.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
977
daq_testing/UserControlMeasure.cs
Normal file
977
daq_testing/UserControlMeasure.cs
Normal file
@@ -0,0 +1,977 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Excel = Microsoft.Office.Interop.Excel;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public partial class UserControlMeasure : UserControl
|
||||||
|
{
|
||||||
|
public List<int> PositionList { get; set; }
|
||||||
|
public string ProjectNumber { get => tbProjectNumber.Text; set => tbProjectNumber.Text = value; }
|
||||||
|
public string MeasurementLocation { get => lbLocation.SelectedItem.ToString(); }
|
||||||
|
|
||||||
|
public event EventHandler MeasureButtonClick;
|
||||||
|
|
||||||
|
public event EventHandler ClearAllMeasurementsBtnClick;
|
||||||
|
|
||||||
|
public string DataloggerSerial { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public List<Result> results = new List<Result>();
|
||||||
|
|
||||||
|
|
||||||
|
public List<PslineConfig> pslineConfigs = new List<PslineConfig>();
|
||||||
|
|
||||||
|
public void OnClearAllMeasurementsBtnClick(EventArgs e)
|
||||||
|
{
|
||||||
|
ClearAllMeasurementsBtnClick?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void OnMeasureButtonClick(EventArgs e)
|
||||||
|
{
|
||||||
|
MeasureButtonClick?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserControlMeasure()
|
||||||
|
{
|
||||||
|
|
||||||
|
InitializeComponent();
|
||||||
|
//PopulateButtons();
|
||||||
|
InitializePositions();
|
||||||
|
lbLocation.SetSelected(0, true);
|
||||||
|
progressBar.Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void InitializePositions()
|
||||||
|
{
|
||||||
|
int posCounter = 0;
|
||||||
|
foreach (var control in flowLayoutPanelPositionButtons.Controls)
|
||||||
|
{
|
||||||
|
if (control is CheckBox)
|
||||||
|
{
|
||||||
|
posCounter++;
|
||||||
|
CheckBox cb = (CheckBox)control;
|
||||||
|
cb.Name = string.Format("{0:00}", posCounter);
|
||||||
|
cb.Checked = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void OnPositionButtonClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
CheckBox checkbox = (CheckBox)sender;
|
||||||
|
UpdatePositionList();
|
||||||
|
foreach (var item in PositionList)
|
||||||
|
{
|
||||||
|
Console.WriteLine(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdatePositionList()
|
||||||
|
|
||||||
|
{
|
||||||
|
List<string> positionList = new List<string>();
|
||||||
|
|
||||||
|
foreach (var control in flowLayoutPanelPositionButtons.Controls)
|
||||||
|
{
|
||||||
|
if (control is CheckBox)
|
||||||
|
{
|
||||||
|
CheckBox checkbox = (CheckBox)control;
|
||||||
|
if (checkbox.Checked)
|
||||||
|
{
|
||||||
|
positionList.Add(checkbox.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
PositionList = positionList.Select(int.Parse).ToList();
|
||||||
|
Console.WriteLine("bla");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void PopulateButtons()
|
||||||
|
{
|
||||||
|
const int MAXPOSITIONS = 40;
|
||||||
|
flowLayoutPanelPositionButtons.Controls.Clear();
|
||||||
|
for (int position = 1; position < MAXPOSITIONS + 1; position++)
|
||||||
|
{
|
||||||
|
CheckBox checkBox = new CheckBox();
|
||||||
|
checkBox.Height = 120;
|
||||||
|
checkBox.Width = 70;
|
||||||
|
|
||||||
|
checkBox.Name = string.Format("Position_{0}", position);
|
||||||
|
checkBox.Text = string.Format("P{0}", position);
|
||||||
|
checkBox.Appearance = Appearance.Button;
|
||||||
|
checkBox.Click += OnPositionButtonClicked;
|
||||||
|
flowLayoutPanelPositionButtons.Controls.Add(checkBox);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnMeasure_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<string> GenFakeList()
|
||||||
|
{
|
||||||
|
List<string> values = new List<string>();
|
||||||
|
|
||||||
|
Random rnd = new Random();
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
double dummyvalue = rnd.NextDouble();
|
||||||
|
values.Add(string.Format("{0:0.00}",dummyvalue));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double GetResultValueByPositionAndPsline(int position, int Psline)
|
||||||
|
{
|
||||||
|
double value = 99999999;
|
||||||
|
foreach (var result in this.results)
|
||||||
|
{
|
||||||
|
if ((result.Position == position) & (Psline == result.PsLine))
|
||||||
|
{
|
||||||
|
value = result.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void PopulateVoltage( List<Result> Results)
|
||||||
|
{
|
||||||
|
this.results = Results;
|
||||||
|
|
||||||
|
|
||||||
|
lvRow1Front.View = View.Details;
|
||||||
|
lvRow2Front.View = View.Details;
|
||||||
|
lvRow3Front.View = View.Details;
|
||||||
|
lvRow4Front.View = View.Details;
|
||||||
|
lvRow5Front.View = View.Details;
|
||||||
|
|
||||||
|
|
||||||
|
lvRow1Front.Items.Clear();
|
||||||
|
lvRow2Front.Items.Clear();
|
||||||
|
lvRow3Front.Items.Clear();
|
||||||
|
lvRow4Front.Items.Clear();
|
||||||
|
lvRow5Front.Items.Clear();
|
||||||
|
|
||||||
|
lvRow1Back.View = View.Details;
|
||||||
|
lvRow2Back.View = View.Details;
|
||||||
|
lvRow3Back.View = View.Details;
|
||||||
|
lvRow4Back.View = View.Details;
|
||||||
|
lvRow5Back.View = View.Details;
|
||||||
|
|
||||||
|
lvRow1Back.Items.Clear();
|
||||||
|
lvRow2Back.Items.Clear();
|
||||||
|
lvRow3Back.Items.Clear();
|
||||||
|
lvRow4Back.Items.Clear();
|
||||||
|
lvRow5Back.Items.Clear();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var result in results)
|
||||||
|
{
|
||||||
|
if (result.Position == 1 & result.PsLine !=1)
|
||||||
|
{
|
||||||
|
|
||||||
|
lvRow1Front.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}",result.PsLine,result.Value) }));
|
||||||
|
lvRow1Front.Items[lvRow1Front.Items.Count-1].BackColor = GetPassFailColor(result);
|
||||||
|
|
||||||
|
}
|
||||||
|
if (result.Position == 9 & result.PsLine != 1)
|
||||||
|
{
|
||||||
|
lvRow2Front.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}", result.PsLine, result.Value) }));
|
||||||
|
lvRow2Front.Items[lvRow2Front.Items.Count - 1].BackColor = GetPassFailColor(result);
|
||||||
|
}
|
||||||
|
if (result.Position == 17 & result.PsLine != 1)
|
||||||
|
{
|
||||||
|
lvRow3Front.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}", result.PsLine, result.Value) }));
|
||||||
|
lvRow3Front.Items[lvRow3Front.Items.Count - 1].BackColor = GetPassFailColor(result);
|
||||||
|
}
|
||||||
|
if (result.Position == 25 & result.PsLine != 1)
|
||||||
|
{
|
||||||
|
lvRow4Front.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}", result.PsLine, result.Value) }));
|
||||||
|
lvRow4Front.Items[lvRow4Front.Items.Count - 1].BackColor = GetPassFailColor(result);
|
||||||
|
}
|
||||||
|
if (result.Position == 33 & result.PsLine != 1)
|
||||||
|
{
|
||||||
|
lvRow5Front.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}", result.PsLine, result.Value) }));
|
||||||
|
lvRow5Front.Items[lvRow5Front.Items.Count - 1].BackColor = GetPassFailColor(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.Position == 8 & result.PsLine != 1)
|
||||||
|
{
|
||||||
|
lvRow1Back.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}", result.PsLine, result.Value) }));
|
||||||
|
lvRow1Back.Items[lvRow1Back.Items.Count - 1].BackColor = GetPassFailColor(result);
|
||||||
|
}
|
||||||
|
if (result.Position == 16 & result.PsLine != 1)
|
||||||
|
{
|
||||||
|
lvRow2Back.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}", result.PsLine, result.Value) }));
|
||||||
|
lvRow2Back.Items[lvRow2Back.Items.Count - 1].BackColor = GetPassFailColor(result);
|
||||||
|
}
|
||||||
|
if (result.Position == 24 & result.PsLine != 1)
|
||||||
|
{
|
||||||
|
lvRow3Back.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}", result.PsLine, result.Value) }));
|
||||||
|
lvRow3Back.Items[lvRow3Back.Items.Count - 1].BackColor = GetPassFailColor(result);
|
||||||
|
}
|
||||||
|
if (result.Position == 32 & result.PsLine != 1)
|
||||||
|
{
|
||||||
|
lvRow4Back.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}", result.PsLine, result.Value) }));
|
||||||
|
lvRow4Back.Items[lvRow4Back.Items.Count - 1].BackColor = GetPassFailColor(result);
|
||||||
|
}
|
||||||
|
if (result.Position == 40 & result.PsLine != 1)
|
||||||
|
{
|
||||||
|
lvRow5Back.Items.Add(new ListViewItem(new string[] { string.Format("PS:{0}:{1:0.00}", result.PsLine, result.Value) }));
|
||||||
|
lvRow5Back.Items[lvRow5Back.Items.Count - 1].BackColor = GetPassFailColor(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var control in flowLayoutPanelPositionButtons.Controls)
|
||||||
|
{
|
||||||
|
if (control is CheckBox)
|
||||||
|
{
|
||||||
|
CheckBox checkbox = (CheckBox)control;
|
||||||
|
|
||||||
|
int position = Convert.ToInt32(checkbox.Name);
|
||||||
|
int psline = 1;
|
||||||
|
|
||||||
|
var value = GetResultValueByPositionAndPsline(position, psline);
|
||||||
|
var isInTolerance = CheckIfWithinTolerance(psline,value);
|
||||||
|
|
||||||
|
if (isInTolerance)
|
||||||
|
{
|
||||||
|
|
||||||
|
checkbox.ForeColor = Color.Green;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
checkbox.ForeColor = Color.Red;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkbox.Text = String.Format("Pos:{0} {1:0.000}V", position, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color GetPassFailColor(Result result)
|
||||||
|
{
|
||||||
|
var isInTolerance = CheckIfWithinTolerance(result.PsLine, result.Value);
|
||||||
|
if (isInTolerance)
|
||||||
|
{
|
||||||
|
return Color.Green;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Color.Red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CheckIfWithinTolerance(int psline, double value)
|
||||||
|
{
|
||||||
|
var tolerances = this.pslineConfigs.Where(x => x.Psline == psline).Select(x => x.Tolerance).ToList();
|
||||||
|
var setpoints = this.pslineConfigs.Where(x => x.Psline == psline).Select(x => x.Setpoint).ToList();
|
||||||
|
|
||||||
|
var tolerance = tolerances[0]/100;
|
||||||
|
var setpoint = setpoints[0];
|
||||||
|
|
||||||
|
var upperlimit = setpoint + (tolerance * setpoint);
|
||||||
|
var lowerlimit = setpoint - (tolerance * setpoint);
|
||||||
|
|
||||||
|
if ( value < upperlimit & value > lowerlimit)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnRow1_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> {0,1,2,3,4,5,6,7};
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnRow1.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnRow2_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 8, 9, 10, 11, 12, 13, 14, 15 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnRow2.Checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnRow3_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 16, 17, 18, 19, 20, 21, 22, 23 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnRow3.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnRow4_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 24, 25, 26, 27, 28, 29, 30, 31 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnRow4.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnRow5_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 32, 33, 34, 35, 36, 37, 38, 39 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnRow5.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnCol1_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 0,8,16,24,32 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnCol1.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bntCol2_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 1, 9, 17, 25, 33 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = bntCol2.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnCol3_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 2, 10, 18, 26, 34 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnCol3.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnCol4_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 3, 11, 19, 27, 35 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnCol4.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnCol5_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 4, 12, 20, 28, 36 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnCol5.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnCol6_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 5, 13, 21, 29, 37 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnCol6.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnCol7_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 6, 14, 22, 30, 38 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnCol7.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnCol8_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<int> buttons = new List<int> { 7, 15, 23, 31, 39 };
|
||||||
|
foreach (int button in buttons)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)flowLayoutPanelPositionButtons.Controls[button];
|
||||||
|
cb.Checked = btnCol8.Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnAll_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
btnRow1.Checked = btnAll.Checked;
|
||||||
|
btnRow2.Checked = btnAll.Checked;
|
||||||
|
btnRow3.Checked = btnAll.Checked;
|
||||||
|
btnRow4.Checked = btnAll.Checked;
|
||||||
|
btnRow5.Checked = btnAll.Checked;
|
||||||
|
|
||||||
|
btnCol1.Checked = btnAll.Checked;
|
||||||
|
bntCol2.Checked = btnAll.Checked;
|
||||||
|
btnCol3.Checked = btnAll.Checked;
|
||||||
|
btnCol4.Checked = btnAll.Checked;
|
||||||
|
btnCol5.Checked = btnAll.Checked;
|
||||||
|
btnCol6.Checked = btnAll.Checked;
|
||||||
|
btnCol7.Checked = btnAll.Checked;
|
||||||
|
btnCol8.Checked = btnAll.Checked;
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var control in flowLayoutPanelPositionButtons.Controls)
|
||||||
|
{
|
||||||
|
if (control is CheckBox)
|
||||||
|
{
|
||||||
|
CheckBox cb = (CheckBox)control;
|
||||||
|
cb.Checked = btnAll.Checked;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lvRow1Front_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSaveToExcel_Click_old(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// Path to the desired Excel file (the file we want to check)
|
||||||
|
string filePath = string.Format(@"C:\configs\P{0}_sub{1}.xlsx", tbProjectNumber.Text, tbSub.Text);
|
||||||
|
//string filePath = @"C:\configs\" + tbProjectNumber.Text + ".xlsx";
|
||||||
|
|
||||||
|
// Path to the source file that will be copied if the target file doesn't exist
|
||||||
|
string sourceFilePath = @"C:\configs\P240262-3 RF_JESD22-6-A108 appendix.xlsx"; ;
|
||||||
|
|
||||||
|
// Check if the file exists
|
||||||
|
if (!File.Exists(filePath))
|
||||||
|
{
|
||||||
|
// If the file doesn't exist, copy the source file to the desired path
|
||||||
|
File.Copy(sourceFilePath, filePath);
|
||||||
|
Console.WriteLine($"File did not exist. Copied from {sourceFilePath} to {filePath}.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("File exists, proceeding to open.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create Excel Application instance
|
||||||
|
Excel.Application excelApp = new Excel.Application();
|
||||||
|
|
||||||
|
// Set the application to be invisible (optional)
|
||||||
|
excelApp.Visible = true;
|
||||||
|
excelApp.DisplayAlerts = false;
|
||||||
|
|
||||||
|
// Open the Excel workbook
|
||||||
|
Excel.Workbook workbook = excelApp.Workbooks.Open(filePath);
|
||||||
|
|
||||||
|
// Check if workbook "monkey" exists and open it
|
||||||
|
bool workbookFound = false;
|
||||||
|
string copiedSheetName = "";
|
||||||
|
|
||||||
|
foreach (Excel.Worksheet sheet in workbook.Sheets)
|
||||||
|
{
|
||||||
|
if (sheet.Name == "TEMPLATE")
|
||||||
|
{
|
||||||
|
Console.WriteLine("Workbook 'TEMPLATE' found. You can start editing.");
|
||||||
|
|
||||||
|
// Copy the sheet
|
||||||
|
sheet.Copy(After: workbook.Sheets[workbook.Sheets.Count]);
|
||||||
|
Excel.Worksheet copiedSheet = (Excel.Worksheet)workbook.Sheets[workbook.Sheets.Count];
|
||||||
|
copiedSheet.Name = "BIB" + workbook.Sheets.Count.ToString();
|
||||||
|
copiedSheetName = copiedSheet.Name;
|
||||||
|
Console.WriteLine("Sheet copied and renamed");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Excel.Worksheet sheet in workbook.Sheets)
|
||||||
|
{
|
||||||
|
workbookFound = true;
|
||||||
|
if (sheet.Name == copiedSheetName)
|
||||||
|
{
|
||||||
|
WriteDataToExcel(sheet,progressBar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Save the workbook if the sheet was found and edited
|
||||||
|
if (workbookFound)
|
||||||
|
{
|
||||||
|
workbook.Save();
|
||||||
|
Console.WriteLine("Changes saved successfully.");
|
||||||
|
MessageBox.Show("Results Saved Successfully");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Workbook 'monkey' not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the workbook and quit Excel application
|
||||||
|
workbook.Close();
|
||||||
|
excelApp.Quit();
|
||||||
|
|
||||||
|
// Release COM objects to avoid memory leaks
|
||||||
|
ReleaseObject(workbook);
|
||||||
|
ReleaseObject(excelApp);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
private bool SheetExists(Excel.Workbook workbook, string sheetName)
|
||||||
|
{
|
||||||
|
foreach (Excel.Worksheet sheet in workbook.Sheets)
|
||||||
|
{
|
||||||
|
if (sheet.Name.Equals(sheetName, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSaveToExcel_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
string filePath = $@"C:\configs\P{tbProjectNumber.Text}_sub{tbSub.Text}_step{tbStep.Text}.xlsx";
|
||||||
|
string sourceFilePath = $@"C:\configs\P240262-3 RF_JESD22-6-A108 appendix.xlsx";
|
||||||
|
|
||||||
|
if (!File.Exists(filePath))
|
||||||
|
{
|
||||||
|
File.Copy(sourceFilePath, filePath);
|
||||||
|
Console.WriteLine($"File did not exist. Copied from {sourceFilePath} to {filePath}.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("File exists, proceeding to open.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Excel.Application excelApp = new Excel.Application
|
||||||
|
{
|
||||||
|
Visible = false,
|
||||||
|
DisplayAlerts = false
|
||||||
|
};
|
||||||
|
|
||||||
|
Excel.Workbook workbook = excelApp.Workbooks.Open(filePath);
|
||||||
|
string copiedSheetName = "";
|
||||||
|
|
||||||
|
List<string> AllSheetNamesInWorkbook = new List<string>();
|
||||||
|
AllSheetNamesInWorkbook.Clear();
|
||||||
|
|
||||||
|
foreach (Excel.Worksheet sheet in workbook.Sheets)
|
||||||
|
{
|
||||||
|
AllSheetNamesInWorkbook.Add(sheet.Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Excel.Worksheet sheet in workbook.Sheets)
|
||||||
|
{
|
||||||
|
if (sheet.Name == "TEMPLATE")
|
||||||
|
{
|
||||||
|
Console.WriteLine("Workbook 'TEMPLATE' found. You can start editing.");
|
||||||
|
sheet.Copy(After: workbook.Sheets[workbook.Sheets.Count]);
|
||||||
|
Excel.Worksheet copiedSheet = (Excel.Worksheet)workbook.Sheets[workbook.Sheets.Count];
|
||||||
|
|
||||||
|
char postfix = 'A';
|
||||||
|
copiedSheetName = $@"BIB{tbBibID.Text}_{postfix}";
|
||||||
|
|
||||||
|
while (AllSheetNamesInWorkbook.Contains(copiedSheetName))
|
||||||
|
{
|
||||||
|
postfix += (char) 1;
|
||||||
|
copiedSheetName = $@"BIB{tbBibID.Text}_{postfix}";
|
||||||
|
}
|
||||||
|
copiedSheet.Name = copiedSheetName;
|
||||||
|
|
||||||
|
Console.WriteLine("Sheet copied and renamed");
|
||||||
|
/*
|
||||||
|
// Copy conditional formatting
|
||||||
|
Excel.Range sourceRange = sheet.UsedRange;
|
||||||
|
Excel.Range targetRange = copiedSheet.UsedRange;
|
||||||
|
|
||||||
|
//sourceRange.Copy();
|
||||||
|
//targetRange.PasteSpecial(Excel.XlPasteType.xlPasteFormats);
|
||||||
|
|
||||||
|
sourceRange.Copy(Type.Missing); // Still needed for PasteSpecial to work sometimes
|
||||||
|
targetRange.PasteSpecial(
|
||||||
|
Excel.XlPasteType.xlPasteFormats,
|
||||||
|
Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,
|
||||||
|
false, false);
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(copiedSheetName))
|
||||||
|
{
|
||||||
|
Excel.Worksheet sheet = workbook.Sheets[copiedSheetName];
|
||||||
|
WriteDataToExcel(sheet,progressBar);
|
||||||
|
workbook.Save();
|
||||||
|
Console.WriteLine("Changes saved successfully.");
|
||||||
|
MessageBox.Show("Results Saved Successfully");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Workbook 'TEMPLATE' not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
workbook.Close();
|
||||||
|
excelApp.Quit();
|
||||||
|
|
||||||
|
ReleaseObject(workbook);
|
||||||
|
ReleaseObject(excelApp);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long GetUnixTimestamp()
|
||||||
|
{
|
||||||
|
DateTimeOffset now = DateTimeOffset.Now;
|
||||||
|
return now.ToUnixTimeSeconds();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Utility function to release COM objects
|
||||||
|
static void ReleaseObject(object obj)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
|
||||||
|
obj = null;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
obj = null;
|
||||||
|
Console.WriteLine("Unable to release object: " + ex.ToString());
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void WriteDataToExcel(Excel.Worksheet sheet, ProgressBar progressBar)
|
||||||
|
{
|
||||||
|
// Initialize the progress bar
|
||||||
|
progressBar.Minimum = 0;
|
||||||
|
progressBar.Maximum = results.Count;
|
||||||
|
progressBar.Value = 0;
|
||||||
|
|
||||||
|
progressBar.Visible = true;
|
||||||
|
|
||||||
|
foreach (var result in results)
|
||||||
|
{
|
||||||
|
//PS1
|
||||||
|
if (result.Position == 1 & result.PsLine == 1) { sheet.Cells[8, 3] = result.Value; }
|
||||||
|
if (result.Position == 2 & result.PsLine == 1) { sheet.Cells[8, 4] = result.Value; }
|
||||||
|
if (result.Position == 3 & result.PsLine == 1) { sheet.Cells[8, 5] = result.Value; }
|
||||||
|
if (result.Position == 4 & result.PsLine == 1) { sheet.Cells[8, 6] = result.Value; }
|
||||||
|
if (result.Position == 5 & result.PsLine == 1) { sheet.Cells[8, 7] = result.Value; }
|
||||||
|
if (result.Position == 6 & result.PsLine == 1) { sheet.Cells[8, 8] = result.Value; }
|
||||||
|
if (result.Position == 7 & result.PsLine == 1) { sheet.Cells[8, 9] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 1) { sheet.Cells[8, 10] = result.Value; }
|
||||||
|
|
||||||
|
if (result.Position == 9 & result.PsLine == 1) { sheet.Cells[9, 3] = result.Value; }
|
||||||
|
if (result.Position == 10 & result.PsLine == 1) { sheet.Cells[9, 4] = result.Value; }
|
||||||
|
if (result.Position == 11 & result.PsLine == 1) { sheet.Cells[9, 5] = result.Value; }
|
||||||
|
if (result.Position == 12 & result.PsLine == 1) { sheet.Cells[9, 6] = result.Value; }
|
||||||
|
if (result.Position == 13 & result.PsLine == 1) { sheet.Cells[9, 7] = result.Value; }
|
||||||
|
if (result.Position == 14 & result.PsLine == 1) { sheet.Cells[9, 8] = result.Value; }
|
||||||
|
if (result.Position == 15 & result.PsLine == 1) { sheet.Cells[9, 9] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 1) { sheet.Cells[9, 10] = result.Value; }
|
||||||
|
|
||||||
|
if (result.Position == 17 & result.PsLine == 1) { sheet.Cells[10, 3] = result.Value; }
|
||||||
|
if (result.Position == 18 & result.PsLine == 1) { sheet.Cells[10, 4] = result.Value; }
|
||||||
|
if (result.Position == 19 & result.PsLine == 1) { sheet.Cells[10, 5] = result.Value; }
|
||||||
|
if (result.Position == 20 & result.PsLine == 1) { sheet.Cells[10, 6] = result.Value; }
|
||||||
|
if (result.Position == 21 & result.PsLine == 1) { sheet.Cells[10, 7] = result.Value; }
|
||||||
|
if (result.Position == 22 & result.PsLine == 1) { sheet.Cells[10, 8] = result.Value; }
|
||||||
|
if (result.Position == 23 & result.PsLine == 1) { sheet.Cells[10, 9] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 1) { sheet.Cells[10, 10] = result.Value; }
|
||||||
|
|
||||||
|
if (result.Position == 25 & result.PsLine == 1) { sheet.Cells[11, 3] = result.Value; }
|
||||||
|
if (result.Position == 26 & result.PsLine == 1) { sheet.Cells[11, 4] = result.Value; }
|
||||||
|
if (result.Position == 27 & result.PsLine == 1) { sheet.Cells[11, 5] = result.Value; }
|
||||||
|
if (result.Position == 28 & result.PsLine == 1) { sheet.Cells[11, 6] = result.Value; }
|
||||||
|
if (result.Position == 29 & result.PsLine == 1) { sheet.Cells[11, 7] = result.Value; }
|
||||||
|
if (result.Position == 30 & result.PsLine == 1) { sheet.Cells[11, 8] = result.Value; }
|
||||||
|
if (result.Position == 31 & result.PsLine == 1) { sheet.Cells[11, 9] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 1) { sheet.Cells[11, 10] = result.Value; }
|
||||||
|
|
||||||
|
if (result.Position == 33 & result.PsLine == 1) { sheet.Cells[12, 3] = result.Value; }
|
||||||
|
if (result.Position == 34 & result.PsLine == 1) { sheet.Cells[12, 4] = result.Value; }
|
||||||
|
if (result.Position == 35 & result.PsLine == 1) { sheet.Cells[12, 5] = result.Value; }
|
||||||
|
if (result.Position == 36 & result.PsLine == 1) { sheet.Cells[12, 6] = result.Value; }
|
||||||
|
if (result.Position == 37 & result.PsLine == 1) { sheet.Cells[12, 7] = result.Value; }
|
||||||
|
if (result.Position == 38 & result.PsLine == 1) { sheet.Cells[12, 8] = result.Value; }
|
||||||
|
if (result.Position == 39 & result.PsLine == 1) { sheet.Cells[12, 9] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 1) { sheet.Cells[12, 10] = result.Value; }
|
||||||
|
|
||||||
|
//PS2
|
||||||
|
if (result.Position == 1 & result.PsLine == 2) { sheet.Cells[8, 11] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 2) { sheet.Cells[8, 12] = result.Value; }
|
||||||
|
if (result.Position == 9 & result.PsLine == 2) { sheet.Cells[9, 11] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 2) { sheet.Cells[9, 12] = result.Value; }
|
||||||
|
if (result.Position == 17 & result.PsLine == 2) { sheet.Cells[10, 11] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 2) { sheet.Cells[10, 12] = result.Value; }
|
||||||
|
if (result.Position == 25 & result.PsLine == 2) { sheet.Cells[11, 11] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 2) { sheet.Cells[11, 12] = result.Value; }
|
||||||
|
if (result.Position == 33 & result.PsLine == 2) { sheet.Cells[12, 11] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 2) { sheet.Cells[12, 12] = result.Value; }
|
||||||
|
|
||||||
|
//PS3
|
||||||
|
if (result.Position == 1 & result.PsLine == 3) { sheet.Cells[8, 13] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 3) { sheet.Cells[8, 14] = result.Value; }
|
||||||
|
if (result.Position == 9 & result.PsLine == 3) { sheet.Cells[9, 13] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 3) { sheet.Cells[9, 14] = result.Value; }
|
||||||
|
if (result.Position == 17 & result.PsLine == 3) { sheet.Cells[10, 13] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 3) { sheet.Cells[10, 14] = result.Value; }
|
||||||
|
if (result.Position == 25 & result.PsLine == 3) { sheet.Cells[11, 13] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 3) { sheet.Cells[11, 14] = result.Value; }
|
||||||
|
if (result.Position == 33 & result.PsLine == 3) { sheet.Cells[12, 13] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 3) { sheet.Cells[12, 14] = result.Value; }
|
||||||
|
|
||||||
|
//PS4
|
||||||
|
if (result.Position == 1 & result.PsLine == 4) { sheet.Cells[8, 15] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 4) { sheet.Cells[8, 16] = result.Value; }
|
||||||
|
if (result.Position == 9 & result.PsLine == 4) { sheet.Cells[9, 15] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 4) { sheet.Cells[9, 16] = result.Value; }
|
||||||
|
if (result.Position == 17 & result.PsLine == 4) { sheet.Cells[10, 15] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 4) { sheet.Cells[10, 16] = result.Value; }
|
||||||
|
if (result.Position == 25 & result.PsLine == 4) { sheet.Cells[11, 15] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 4) { sheet.Cells[11, 16] = result.Value; }
|
||||||
|
if (result.Position == 33 & result.PsLine == 4) { sheet.Cells[12, 15] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 4) { sheet.Cells[12, 16] = result.Value; }
|
||||||
|
|
||||||
|
//PS5
|
||||||
|
if (result.Position == 1 & result.PsLine == 5) { sheet.Cells[8, 17] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 5) { sheet.Cells[8, 18] = result.Value; }
|
||||||
|
if (result.Position == 9 & result.PsLine == 5) { sheet.Cells[9, 17] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 5) { sheet.Cells[9, 18] = result.Value; }
|
||||||
|
if (result.Position == 17 & result.PsLine == 5) { sheet.Cells[10, 17] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 5) { sheet.Cells[10, 18] = result.Value; }
|
||||||
|
if (result.Position == 25 & result.PsLine == 5) { sheet.Cells[11, 17] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 5) { sheet.Cells[11, 18] = result.Value; }
|
||||||
|
if (result.Position == 33 & result.PsLine == 5) { sheet.Cells[12, 17] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 5) { sheet.Cells[12, 18] = result.Value; }
|
||||||
|
|
||||||
|
//PS6
|
||||||
|
if (result.Position == 1 & result.PsLine == 6) { sheet.Cells[26, 3] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 6) { sheet.Cells[26, 4] = result.Value; }
|
||||||
|
if (result.Position == 9 & result.PsLine == 6) { sheet.Cells[27, 3] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 6) { sheet.Cells[27, 4] = result.Value; }
|
||||||
|
if (result.Position == 17 & result.PsLine == 6) { sheet.Cells[28, 3] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 6) { sheet.Cells[28, 4] = result.Value; }
|
||||||
|
if (result.Position == 25 & result.PsLine == 6) { sheet.Cells[29, 3] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 6) { sheet.Cells[29, 4] = result.Value; }
|
||||||
|
if (result.Position == 33 & result.PsLine == 6) { sheet.Cells[30, 3] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 6) { sheet.Cells[30, 4] = result.Value; }
|
||||||
|
|
||||||
|
//PS7
|
||||||
|
if (result.Position == 1 & result.PsLine == 7) { sheet.Cells[26, 5] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 7) { sheet.Cells[26, 6] = result.Value; }
|
||||||
|
if (result.Position == 9 & result.PsLine == 7) { sheet.Cells[27, 5] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 7) { sheet.Cells[27, 6] = result.Value; }
|
||||||
|
if (result.Position == 17 & result.PsLine == 7) { sheet.Cells[28, 5] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 7) { sheet.Cells[28, 6] = result.Value; }
|
||||||
|
if (result.Position == 25 & result.PsLine == 7) { sheet.Cells[29, 5] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 7) { sheet.Cells[29, 6] = result.Value; }
|
||||||
|
if (result.Position == 33 & result.PsLine == 7) { sheet.Cells[30, 5] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 7) { sheet.Cells[30, 6] = result.Value; }
|
||||||
|
|
||||||
|
//PS8
|
||||||
|
if (result.Position == 1 & result.PsLine == 8) { sheet.Cells[26, 7] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 8) { sheet.Cells[26, 8] = result.Value; }
|
||||||
|
if (result.Position == 9 & result.PsLine == 8) { sheet.Cells[27, 7] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 8) { sheet.Cells[27, 8] = result.Value; }
|
||||||
|
if (result.Position == 17 & result.PsLine == 8) { sheet.Cells[28, 7] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 8) { sheet.Cells[28, 8] = result.Value; }
|
||||||
|
if (result.Position == 25 & result.PsLine == 8) { sheet.Cells[29, 7] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 8) { sheet.Cells[29, 8] = result.Value; }
|
||||||
|
if (result.Position == 33 & result.PsLine == 8) { sheet.Cells[30, 7] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 8) { sheet.Cells[30, 8] = result.Value; }
|
||||||
|
|
||||||
|
//PS9
|
||||||
|
if (result.Position == 1 & result.PsLine == 9) { sheet.Cells[26, 9] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 9) { sheet.Cells[26, 10] = result.Value; }
|
||||||
|
if (result.Position == 9 & result.PsLine == 9) { sheet.Cells[27, 9] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 9) { sheet.Cells[27, 10] = result.Value; }
|
||||||
|
if (result.Position == 17 & result.PsLine == 9) { sheet.Cells[28, 9] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 9) { sheet.Cells[28, 10] = result.Value; }
|
||||||
|
if (result.Position == 25 & result.PsLine == 9) { sheet.Cells[29, 9] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 9) { sheet.Cells[29, 10] = result.Value; }
|
||||||
|
if (result.Position == 33 & result.PsLine == 9) { sheet.Cells[30, 9] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 9) { sheet.Cells[30, 10] = result.Value; }
|
||||||
|
|
||||||
|
//PS10
|
||||||
|
if (result.Position == 1 & result.PsLine == 10) { sheet.Cells[26, 11] = result.Value; }
|
||||||
|
if (result.Position == 8 & result.PsLine == 10) { sheet.Cells[26, 12] = result.Value; }
|
||||||
|
if (result.Position == 9 & result.PsLine == 10) { sheet.Cells[27, 11] = result.Value; }
|
||||||
|
if (result.Position == 16 & result.PsLine == 10) { sheet.Cells[27, 12] = result.Value; }
|
||||||
|
if (result.Position == 17 & result.PsLine == 10) { sheet.Cells[28, 11] = result.Value; }
|
||||||
|
if (result.Position == 24 & result.PsLine == 10) { sheet.Cells[28, 12] = result.Value; }
|
||||||
|
if (result.Position == 25 & result.PsLine == 10) { sheet.Cells[29, 11] = result.Value; }
|
||||||
|
if (result.Position == 32 & result.PsLine == 10) { sheet.Cells[29, 12] = result.Value; }
|
||||||
|
if (result.Position == 33 & result.PsLine == 10) { sheet.Cells[30, 11] = result.Value; }
|
||||||
|
if (result.Position == 40 & result.PsLine == 10) { sheet.Cells[30, 12] = result.Value; }
|
||||||
|
|
||||||
|
// Update the progress bar
|
||||||
|
progressBar.Value++;
|
||||||
|
|
||||||
|
}
|
||||||
|
sheet.Unprotect();
|
||||||
|
WritePsuConfigData(sheet);
|
||||||
|
WriteStaticData(sheet);
|
||||||
|
|
||||||
|
|
||||||
|
progressBar.Visible = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
private void WriteStaticData(Excel.Worksheet sheet)
|
||||||
|
{
|
||||||
|
sheet.Cells[57, 17] = DateTime.UtcNow.ToString();
|
||||||
|
sheet.Cells[58, 17] = DataloggerSerial;
|
||||||
|
sheet.Cells[59, 17] = tbProjectNumber.Text;
|
||||||
|
sheet.Cells[60, 17] = tbBibID.Text;
|
||||||
|
sheet.Cells[61, 17] = tbDriverID.Text;
|
||||||
|
sheet.Cells[62, 17] = lbLocation.SelectedItem.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WritePsuConfigData(Excel.Worksheet sheet)
|
||||||
|
{
|
||||||
|
foreach (var psuline in pslineConfigs)
|
||||||
|
{
|
||||||
|
switch (psuline.Psline)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
sheet.Cells[5, 3] = psuline.Description;
|
||||||
|
sheet.Cells[6, 3] = psuline.Setpoint;
|
||||||
|
sheet.Cells[7, 3] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sheet.Cells[5, 11] = psuline.Description;
|
||||||
|
sheet.Cells[6, 11] = psuline.Setpoint;
|
||||||
|
sheet.Cells[7, 11] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sheet.Cells[5, 13] = psuline.Description;
|
||||||
|
sheet.Cells[6, 13] = psuline.Setpoint;
|
||||||
|
sheet.Cells[7, 13] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
sheet.Cells[5, 15] = psuline.Description;
|
||||||
|
sheet.Cells[6, 15] = psuline.Setpoint;
|
||||||
|
sheet.Cells[7, 15] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
sheet.Cells[5, 17] = psuline.Description;
|
||||||
|
sheet.Cells[6, 17] = psuline.Setpoint;
|
||||||
|
sheet.Cells[7, 17] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
sheet.Cells[23, 3] = psuline.Description;
|
||||||
|
sheet.Cells[24, 3] = psuline.Setpoint;
|
||||||
|
sheet.Cells[25, 3] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
sheet.Cells[23, 5] = psuline.Description;
|
||||||
|
sheet.Cells[24, 5] = psuline.Setpoint;
|
||||||
|
sheet.Cells[25, 5] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
sheet.Cells[23, 7] = psuline.Description;
|
||||||
|
sheet.Cells[24, 7] = psuline.Setpoint;
|
||||||
|
sheet.Cells[25, 7] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
sheet.Cells[23, 9] = psuline.Description;
|
||||||
|
sheet.Cells[24, 9] = psuline.Setpoint;
|
||||||
|
sheet.Cells[25, 9] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
sheet.Cells[23, 11] = psuline.Description;
|
||||||
|
sheet.Cells[24, 11] = psuline.Setpoint;
|
||||||
|
sheet.Cells[25, 11] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
sheet.Cells[23, 13] = psuline.Description;
|
||||||
|
sheet.Cells[24, 13] = psuline.Setpoint;
|
||||||
|
sheet.Cells[25, 13] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
sheet.Cells[23, 15] = psuline.Description;
|
||||||
|
sheet.Cells[24, 15] = psuline.Setpoint;
|
||||||
|
sheet.Cells[25, 15] = psuline.Tolerance/100;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void button1_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
OnClearAllMeasurementsBtnClick(EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnMeasure_Click_1(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
UpdatePositionList();
|
||||||
|
OnMeasureButtonClick(EventArgs.Empty);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UserControlMeasure_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
daq_testing/UserControlMeasure.resx
Normal file
120
daq_testing/UserControlMeasure.resx
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
379
daq_testing/UserControlMeasureHeader.Designer.cs
generated
Normal file
379
daq_testing/UserControlMeasureHeader.Designer.cs
generated
Normal file
@@ -0,0 +1,379 @@
|
|||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
partial class UserControlMeasureHeader
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.dataGridView1 = new System.Windows.Forms.DataGridView();
|
||||||
|
this.lbLocation = new System.Windows.Forms.ListBox();
|
||||||
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
|
this.tbBibID = new System.Windows.Forms.TextBox();
|
||||||
|
this.tbDriverID = new System.Windows.Forms.TextBox();
|
||||||
|
this.tbStep = new System.Windows.Forms.TextBox();
|
||||||
|
this.label5 = new System.Windows.Forms.Label();
|
||||||
|
this.label4 = new System.Windows.Forms.Label();
|
||||||
|
this.tbSub = new System.Windows.Forms.TextBox();
|
||||||
|
this.tbProjectNumber = new System.Windows.Forms.TextBox();
|
||||||
|
this.label3 = new System.Windows.Forms.Label();
|
||||||
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
|
this.btnMeasure = new System.Windows.Forms.Button();
|
||||||
|
this.btnSaveToExcel = new System.Windows.Forms.Button();
|
||||||
|
this.btnClearAllMeasurements = new System.Windows.Forms.Button();
|
||||||
|
this.btnNextPosition = new System.Windows.Forms.Button();
|
||||||
|
this.tbCurrentPosition = new System.Windows.Forms.TextBox();
|
||||||
|
this.label7 = new System.Windows.Forms.Label();
|
||||||
|
this.lbMeasuredPins = new System.Windows.Forms.CheckedListBox();
|
||||||
|
this.btnInvertListboxMeasuredPins = new System.Windows.Forms.Button();
|
||||||
|
this.label8 = new System.Windows.Forms.Label();
|
||||||
|
this.tbIncrement = new System.Windows.Forms.TextBox();
|
||||||
|
this.lbIncrement = new System.Windows.Forms.Label();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// dataGridView1
|
||||||
|
//
|
||||||
|
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||||
|
this.dataGridView1.Location = new System.Drawing.Point(421, 161);
|
||||||
|
this.dataGridView1.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.dataGridView1.Name = "dataGridView1";
|
||||||
|
this.dataGridView1.RowHeadersWidth = 51;
|
||||||
|
this.dataGridView1.Size = new System.Drawing.Size(1265, 471);
|
||||||
|
this.dataGridView1.TabIndex = 0;
|
||||||
|
this.dataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick);
|
||||||
|
//
|
||||||
|
// lbLocation
|
||||||
|
//
|
||||||
|
this.lbLocation.FormattingEnabled = true;
|
||||||
|
this.lbLocation.ItemHeight = 16;
|
||||||
|
this.lbLocation.Items.AddRange(new object[] {
|
||||||
|
"BENCH DEV1",
|
||||||
|
"BENCH DEV2",
|
||||||
|
"CUBE1 UPPER",
|
||||||
|
"CUBE2 LOWER",
|
||||||
|
"MSL UPPER",
|
||||||
|
"MSL LOWER"});
|
||||||
|
this.lbLocation.Location = new System.Drawing.Point(137, 161);
|
||||||
|
this.lbLocation.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.lbLocation.Name = "lbLocation";
|
||||||
|
this.lbLocation.Size = new System.Drawing.Size(136, 100);
|
||||||
|
this.lbLocation.TabIndex = 25;
|
||||||
|
//
|
||||||
|
// label6
|
||||||
|
//
|
||||||
|
this.label6.AutoSize = true;
|
||||||
|
this.label6.Location = new System.Drawing.Point(25, 161);
|
||||||
|
this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.label6.Name = "label6";
|
||||||
|
this.label6.Size = new System.Drawing.Size(62, 17);
|
||||||
|
this.label6.TabIndex = 24;
|
||||||
|
this.label6.Text = "Location";
|
||||||
|
//
|
||||||
|
// tbBibID
|
||||||
|
//
|
||||||
|
this.tbBibID.Location = new System.Drawing.Point(137, 89);
|
||||||
|
this.tbBibID.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tbBibID.Name = "tbBibID";
|
||||||
|
this.tbBibID.Size = new System.Drawing.Size(57, 22);
|
||||||
|
this.tbBibID.TabIndex = 23;
|
||||||
|
this.tbBibID.Text = "1";
|
||||||
|
//
|
||||||
|
// tbDriverID
|
||||||
|
//
|
||||||
|
this.tbDriverID.Location = new System.Drawing.Point(137, 57);
|
||||||
|
this.tbDriverID.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tbDriverID.Name = "tbDriverID";
|
||||||
|
this.tbDriverID.Size = new System.Drawing.Size(57, 22);
|
||||||
|
this.tbDriverID.TabIndex = 22;
|
||||||
|
this.tbDriverID.Text = "1";
|
||||||
|
//
|
||||||
|
// tbStep
|
||||||
|
//
|
||||||
|
this.tbStep.Location = new System.Drawing.Point(329, 25);
|
||||||
|
this.tbStep.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tbStep.Name = "tbStep";
|
||||||
|
this.tbStep.Size = new System.Drawing.Size(39, 22);
|
||||||
|
this.tbStep.TabIndex = 21;
|
||||||
|
this.tbStep.Text = "1";
|
||||||
|
//
|
||||||
|
// label5
|
||||||
|
//
|
||||||
|
this.label5.AutoSize = true;
|
||||||
|
this.label5.Location = new System.Drawing.Point(283, 28);
|
||||||
|
this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.label5.Name = "label5";
|
||||||
|
this.label5.Size = new System.Drawing.Size(37, 17);
|
||||||
|
this.label5.TabIndex = 20;
|
||||||
|
this.label5.Text = "Step";
|
||||||
|
//
|
||||||
|
// label4
|
||||||
|
//
|
||||||
|
this.label4.AutoSize = true;
|
||||||
|
this.label4.Location = new System.Drawing.Point(204, 28);
|
||||||
|
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.label4.Name = "label4";
|
||||||
|
this.label4.Size = new System.Drawing.Size(33, 17);
|
||||||
|
this.label4.TabIndex = 19;
|
||||||
|
this.label4.Text = "Sub";
|
||||||
|
//
|
||||||
|
// tbSub
|
||||||
|
//
|
||||||
|
this.tbSub.Location = new System.Drawing.Point(235, 25);
|
||||||
|
this.tbSub.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tbSub.Name = "tbSub";
|
||||||
|
this.tbSub.Size = new System.Drawing.Size(39, 22);
|
||||||
|
this.tbSub.TabIndex = 18;
|
||||||
|
this.tbSub.Text = "1";
|
||||||
|
//
|
||||||
|
// tbProjectNumber
|
||||||
|
//
|
||||||
|
this.tbProjectNumber.Location = new System.Drawing.Point(137, 25);
|
||||||
|
this.tbProjectNumber.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tbProjectNumber.Name = "tbProjectNumber";
|
||||||
|
this.tbProjectNumber.Size = new System.Drawing.Size(57, 22);
|
||||||
|
this.tbProjectNumber.TabIndex = 17;
|
||||||
|
this.tbProjectNumber.Text = "240000";
|
||||||
|
//
|
||||||
|
// label3
|
||||||
|
//
|
||||||
|
this.label3.AutoSize = true;
|
||||||
|
this.label3.Location = new System.Drawing.Point(25, 92);
|
||||||
|
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.label3.Name = "label3";
|
||||||
|
this.label3.Size = new System.Drawing.Size(29, 17);
|
||||||
|
this.label3.TabIndex = 16;
|
||||||
|
this.label3.Text = "BIB";
|
||||||
|
//
|
||||||
|
// label2
|
||||||
|
//
|
||||||
|
this.label2.AutoSize = true;
|
||||||
|
this.label2.Location = new System.Drawing.Point(25, 63);
|
||||||
|
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.label2.Name = "label2";
|
||||||
|
this.label2.Size = new System.Drawing.Size(59, 17);
|
||||||
|
this.label2.TabIndex = 15;
|
||||||
|
this.label2.Text = "DriverID";
|
||||||
|
//
|
||||||
|
// label1
|
||||||
|
//
|
||||||
|
this.label1.AutoSize = true;
|
||||||
|
this.label1.Location = new System.Drawing.Point(25, 25);
|
||||||
|
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.label1.Name = "label1";
|
||||||
|
this.label1.Size = new System.Drawing.Size(102, 17);
|
||||||
|
this.label1.TabIndex = 14;
|
||||||
|
this.label1.Text = "ProjectNumber";
|
||||||
|
//
|
||||||
|
// btnMeasure
|
||||||
|
//
|
||||||
|
this.btnMeasure.Location = new System.Drawing.Point(958, 671);
|
||||||
|
this.btnMeasure.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.btnMeasure.Name = "btnMeasure";
|
||||||
|
this.btnMeasure.Size = new System.Drawing.Size(141, 71);
|
||||||
|
this.btnMeasure.TabIndex = 53;
|
||||||
|
this.btnMeasure.Text = "Measure";
|
||||||
|
this.btnMeasure.UseVisualStyleBackColor = true;
|
||||||
|
this.btnMeasure.Click += new System.EventHandler(this.btnMeasure_Click);
|
||||||
|
//
|
||||||
|
// btnSaveToExcel
|
||||||
|
//
|
||||||
|
this.btnSaveToExcel.Location = new System.Drawing.Point(1318, 675);
|
||||||
|
this.btnSaveToExcel.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.btnSaveToExcel.Name = "btnSaveToExcel";
|
||||||
|
this.btnSaveToExcel.Size = new System.Drawing.Size(143, 71);
|
||||||
|
this.btnSaveToExcel.TabIndex = 52;
|
||||||
|
this.btnSaveToExcel.Text = "SAVE";
|
||||||
|
this.btnSaveToExcel.UseVisualStyleBackColor = true;
|
||||||
|
this.btnSaveToExcel.Click += new System.EventHandler(this.btnSaveToExcel_Click);
|
||||||
|
//
|
||||||
|
// btnClearAllMeasurements
|
||||||
|
//
|
||||||
|
this.btnClearAllMeasurements.Location = new System.Drawing.Point(1545, 675);
|
||||||
|
this.btnClearAllMeasurements.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.btnClearAllMeasurements.Name = "btnClearAllMeasurements";
|
||||||
|
this.btnClearAllMeasurements.Size = new System.Drawing.Size(141, 71);
|
||||||
|
this.btnClearAllMeasurements.TabIndex = 51;
|
||||||
|
this.btnClearAllMeasurements.Text = "Clear All Measurements";
|
||||||
|
this.btnClearAllMeasurements.UseVisualStyleBackColor = true;
|
||||||
|
this.btnClearAllMeasurements.Click += new System.EventHandler(this.btnClearAllMeasurements_Click);
|
||||||
|
//
|
||||||
|
// btnNextPosition
|
||||||
|
//
|
||||||
|
this.btnNextPosition.Location = new System.Drawing.Point(1108, 671);
|
||||||
|
this.btnNextPosition.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.btnNextPosition.Name = "btnNextPosition";
|
||||||
|
this.btnNextPosition.Size = new System.Drawing.Size(141, 71);
|
||||||
|
this.btnNextPosition.TabIndex = 54;
|
||||||
|
this.btnNextPosition.Text = "Next Position";
|
||||||
|
this.btnNextPosition.UseVisualStyleBackColor = true;
|
||||||
|
this.btnNextPosition.Click += new System.EventHandler(this.btnNextPosition_Click);
|
||||||
|
//
|
||||||
|
// tbCurrentPosition
|
||||||
|
//
|
||||||
|
this.tbCurrentPosition.Location = new System.Drawing.Point(1494, 106);
|
||||||
|
this.tbCurrentPosition.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tbCurrentPosition.Name = "tbCurrentPosition";
|
||||||
|
this.tbCurrentPosition.Size = new System.Drawing.Size(76, 22);
|
||||||
|
this.tbCurrentPosition.TabIndex = 55;
|
||||||
|
this.tbCurrentPosition.Text = "1";
|
||||||
|
//
|
||||||
|
// label7
|
||||||
|
//
|
||||||
|
this.label7.AutoSize = true;
|
||||||
|
this.label7.Location = new System.Drawing.Point(1579, 110);
|
||||||
|
this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.label7.Name = "label7";
|
||||||
|
this.label7.Size = new System.Drawing.Size(109, 17);
|
||||||
|
this.label7.TabIndex = 56;
|
||||||
|
this.label7.Text = "Current Position";
|
||||||
|
//
|
||||||
|
// lbMeasuredPins
|
||||||
|
//
|
||||||
|
this.lbMeasuredPins.FormattingEnabled = true;
|
||||||
|
this.lbMeasuredPins.Items.AddRange(new object[] {
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"4",
|
||||||
|
"5",
|
||||||
|
"6",
|
||||||
|
"7",
|
||||||
|
"8",
|
||||||
|
"9"});
|
||||||
|
this.lbMeasuredPins.Location = new System.Drawing.Point(137, 406);
|
||||||
|
this.lbMeasuredPins.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.lbMeasuredPins.Name = "lbMeasuredPins";
|
||||||
|
this.lbMeasuredPins.Size = new System.Drawing.Size(100, 225);
|
||||||
|
this.lbMeasuredPins.TabIndex = 57;
|
||||||
|
this.lbMeasuredPins.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.lbMeasuredPins_ItemCheck);
|
||||||
|
//
|
||||||
|
// btnInvertListboxMeasuredPins
|
||||||
|
//
|
||||||
|
this.btnInvertListboxMeasuredPins.Location = new System.Drawing.Point(248, 604);
|
||||||
|
this.btnInvertListboxMeasuredPins.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.btnInvertListboxMeasuredPins.Name = "btnInvertListboxMeasuredPins";
|
||||||
|
this.btnInvertListboxMeasuredPins.Size = new System.Drawing.Size(100, 28);
|
||||||
|
this.btnInvertListboxMeasuredPins.TabIndex = 58;
|
||||||
|
this.btnInvertListboxMeasuredPins.Text = "Invert";
|
||||||
|
this.btnInvertListboxMeasuredPins.UseVisualStyleBackColor = true;
|
||||||
|
this.btnInvertListboxMeasuredPins.Click += new System.EventHandler(this.btnInvertListboxMeasuredPins_Click);
|
||||||
|
//
|
||||||
|
// label8
|
||||||
|
//
|
||||||
|
this.label8.AutoSize = true;
|
||||||
|
this.label8.Location = new System.Drawing.Point(137, 383);
|
||||||
|
this.label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.label8.Name = "label8";
|
||||||
|
this.label8.Size = new System.Drawing.Size(101, 17);
|
||||||
|
this.label8.TabIndex = 59;
|
||||||
|
this.label8.Text = "Measured pins";
|
||||||
|
//
|
||||||
|
// tbIncrement
|
||||||
|
//
|
||||||
|
this.tbIncrement.Location = new System.Drawing.Point(1286, 107);
|
||||||
|
this.tbIncrement.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tbIncrement.Name = "tbIncrement";
|
||||||
|
this.tbIncrement.Size = new System.Drawing.Size(76, 22);
|
||||||
|
this.tbIncrement.TabIndex = 60;
|
||||||
|
this.tbIncrement.Text = "1";
|
||||||
|
//
|
||||||
|
// lbIncrement
|
||||||
|
//
|
||||||
|
this.lbIncrement.AutoSize = true;
|
||||||
|
this.lbIncrement.Location = new System.Drawing.Point(1370, 111);
|
||||||
|
this.lbIncrement.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.lbIncrement.Name = "lbIncrement";
|
||||||
|
this.lbIncrement.Size = new System.Drawing.Size(70, 17);
|
||||||
|
this.lbIncrement.TabIndex = 61;
|
||||||
|
this.lbIncrement.Text = "Increment";
|
||||||
|
//
|
||||||
|
// UserControlMeasureHeader
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.Controls.Add(this.lbIncrement);
|
||||||
|
this.Controls.Add(this.tbIncrement);
|
||||||
|
this.Controls.Add(this.label8);
|
||||||
|
this.Controls.Add(this.btnInvertListboxMeasuredPins);
|
||||||
|
this.Controls.Add(this.lbMeasuredPins);
|
||||||
|
this.Controls.Add(this.label7);
|
||||||
|
this.Controls.Add(this.tbCurrentPosition);
|
||||||
|
this.Controls.Add(this.btnNextPosition);
|
||||||
|
this.Controls.Add(this.btnMeasure);
|
||||||
|
this.Controls.Add(this.btnSaveToExcel);
|
||||||
|
this.Controls.Add(this.btnClearAllMeasurements);
|
||||||
|
this.Controls.Add(this.lbLocation);
|
||||||
|
this.Controls.Add(this.label6);
|
||||||
|
this.Controls.Add(this.tbBibID);
|
||||||
|
this.Controls.Add(this.tbDriverID);
|
||||||
|
this.Controls.Add(this.tbStep);
|
||||||
|
this.Controls.Add(this.label5);
|
||||||
|
this.Controls.Add(this.label4);
|
||||||
|
this.Controls.Add(this.tbSub);
|
||||||
|
this.Controls.Add(this.tbProjectNumber);
|
||||||
|
this.Controls.Add(this.label3);
|
||||||
|
this.Controls.Add(this.label2);
|
||||||
|
this.Controls.Add(this.label1);
|
||||||
|
this.Controls.Add(this.dataGridView1);
|
||||||
|
this.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.Name = "UserControlMeasureHeader";
|
||||||
|
this.Size = new System.Drawing.Size(1767, 842);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.DataGridView dataGridView1;
|
||||||
|
private System.Windows.Forms.ListBox lbLocation;
|
||||||
|
private System.Windows.Forms.Label label6;
|
||||||
|
private System.Windows.Forms.TextBox tbBibID;
|
||||||
|
private System.Windows.Forms.TextBox tbDriverID;
|
||||||
|
private System.Windows.Forms.TextBox tbStep;
|
||||||
|
private System.Windows.Forms.Label label5;
|
||||||
|
private System.Windows.Forms.Label label4;
|
||||||
|
private System.Windows.Forms.TextBox tbSub;
|
||||||
|
private System.Windows.Forms.TextBox tbProjectNumber;
|
||||||
|
private System.Windows.Forms.Label label3;
|
||||||
|
private System.Windows.Forms.Label label2;
|
||||||
|
private System.Windows.Forms.Label label1;
|
||||||
|
private System.Windows.Forms.Button btnMeasure;
|
||||||
|
private System.Windows.Forms.Button btnSaveToExcel;
|
||||||
|
private System.Windows.Forms.Button btnClearAllMeasurements;
|
||||||
|
private System.Windows.Forms.Button btnNextPosition;
|
||||||
|
private System.Windows.Forms.TextBox tbCurrentPosition;
|
||||||
|
private System.Windows.Forms.Label label7;
|
||||||
|
private System.Windows.Forms.CheckedListBox lbMeasuredPins;
|
||||||
|
private System.Windows.Forms.Button btnInvertListboxMeasuredPins;
|
||||||
|
private System.Windows.Forms.Label label8;
|
||||||
|
private System.Windows.Forms.TextBox tbIncrement;
|
||||||
|
private System.Windows.Forms.Label lbIncrement;
|
||||||
|
}
|
||||||
|
}
|
||||||
246
daq_testing/UserControlMeasureHeader.cs
Normal file
246
daq_testing/UserControlMeasureHeader.cs
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using WindowsFormsApp5;
|
||||||
|
using Excel = Microsoft.Office.Interop.Excel;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public partial class UserControlMeasureHeader : UserControl
|
||||||
|
{
|
||||||
|
public string ProjectNumber { get => tbProjectNumber.Text; set => tbProjectNumber.Text = value; }
|
||||||
|
public string MeasurementLocation { get => lbLocation.SelectedItem.ToString(); }
|
||||||
|
public string CurrentMeasurePosition { get => tbCurrentPosition.Text; set => tbCurrentPosition.Text = value; }
|
||||||
|
|
||||||
|
public int BiBID
|
||||||
|
{
|
||||||
|
get => int.TryParse(tbBibID.Text, out int result) ? result : 0;
|
||||||
|
set => tbBibID.Text = value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string DriverID
|
||||||
|
{
|
||||||
|
get => tbDriverID.Text;
|
||||||
|
set => tbBibID.Text = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PslineConfig> pslineConfigs = new List<PslineConfig>();
|
||||||
|
|
||||||
|
public List<int> CheckedItems = new List<int>();
|
||||||
|
|
||||||
|
public event EventHandler MeasureButtonClick;
|
||||||
|
public event EventHandler ClearAllMeasurementsBtnClick;
|
||||||
|
public event EventHandler PopuplateHeaderEvent;
|
||||||
|
|
||||||
|
public void PopulateMeasureHeader()
|
||||||
|
{
|
||||||
|
lbMeasuredPins.Items.Clear();
|
||||||
|
foreach (var item in pslineConfigs)
|
||||||
|
{
|
||||||
|
if (item.Enabled)
|
||||||
|
{
|
||||||
|
lbMeasuredPins.Items.Add(item.Psline);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnPopulateHeaderEvent(EventArgs e)
|
||||||
|
{
|
||||||
|
PopuplateHeaderEvent?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
public UserControlMeasureHeader()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
dataGridView1.AutoGenerateColumns = true;
|
||||||
|
PopulateHeaders();
|
||||||
|
lbLocation.SetSelected(0, true);
|
||||||
|
lbMeasuredPins.CheckOnClick = true; // Enables to single click.
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PopulateHeaders ()
|
||||||
|
{
|
||||||
|
OnPopulateHeaderEvent(EventArgs.Empty);
|
||||||
|
}
|
||||||
|
public void OnClearAllMeasurementsBtnClick(EventArgs e)
|
||||||
|
{
|
||||||
|
ClearAllMeasurementsBtnClick?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnMeasureButtonClick(EventArgs e)
|
||||||
|
{
|
||||||
|
MeasureButtonClick?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnMeasure_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
OnMeasureButtonClick(EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnNextPosition_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
int position;
|
||||||
|
int increment;
|
||||||
|
int.TryParse(this.CurrentMeasurePosition,out position);
|
||||||
|
int.TryParse(tbIncrement.Text, out increment);
|
||||||
|
position+=increment;
|
||||||
|
this.CurrentMeasurePosition = position.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PopulateVoltageOld(List<Result> results)
|
||||||
|
{
|
||||||
|
results = results.OrderBy(o => o.PsLine).ToList();
|
||||||
|
|
||||||
|
dataGridView1.DataSource = null;
|
||||||
|
dataGridView1.DataSource = results;
|
||||||
|
dataGridView1.Refresh();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PopulateVoltage(List<Result> results)
|
||||||
|
{
|
||||||
|
// Convert the list to a DataTable
|
||||||
|
var dataTable = DataTableHelper.ToDataTable(results);
|
||||||
|
|
||||||
|
// Bind the DataTable to DataGridView
|
||||||
|
dataGridView1.DataSource = dataTable;
|
||||||
|
|
||||||
|
dataGridView1.CellFormatting += DataGridView_CellFormatting;
|
||||||
|
|
||||||
|
// Enable sorting for all columns
|
||||||
|
foreach (DataGridViewColumn column in dataGridView1.Columns)
|
||||||
|
{
|
||||||
|
column.SortMode = DataGridViewColumnSortMode.Automatic;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort the DataGridView by the first column (assuming it's "ID")
|
||||||
|
if (dataGridView1.Columns.Count > 0)
|
||||||
|
{
|
||||||
|
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
|
||||||
|
{
|
||||||
|
// Check if the column is "Value"
|
||||||
|
if (dataGridView1.Columns[e.ColumnIndex].Name == "Value")
|
||||||
|
{
|
||||||
|
// Get the value from the cell
|
||||||
|
if (e.Value is double value)
|
||||||
|
{
|
||||||
|
// Get Psline
|
||||||
|
var PsLine = (int)dataGridView1.Rows[e.RowIndex].Cells["PsLine"].Value;
|
||||||
|
var tolerance = pslineConfigs.Where(x => x.Psline == PsLine).Select(x => x.Tolerance).FirstOrDefault();
|
||||||
|
// Get setpoint
|
||||||
|
var setpoint = pslineConfigs.Where(x => x.Psline == PsLine).Select(x => x.Setpoint).FirstOrDefault();
|
||||||
|
|
||||||
|
//Calculate limit
|
||||||
|
var limit = setpoint * (tolerance/100);
|
||||||
|
|
||||||
|
// check if exceeding tolerance limit
|
||||||
|
if (Math.Abs(setpoint-value) > limit)
|
||||||
|
{
|
||||||
|
// Change the background color
|
||||||
|
e.CellStyle.BackColor = System.Drawing.Color.Orange;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e.CellStyle.BackColor = System.Drawing.Color.Green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSaveToExcel_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
string filePath = $@"C:\configs\P{tbProjectNumber.Text}_sub{tbSub.Text}_step_{tbStep.Text}_Header.xlsx";
|
||||||
|
string sourceFilePath = @"C:\configs\Header.xlsx";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!File.Exists(filePath))
|
||||||
|
{
|
||||||
|
File.Copy(sourceFilePath, filePath);
|
||||||
|
Console.WriteLine($"File did not exist. Copied from {sourceFilePath} to {filePath}.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("File exists, proceeding to open.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Excel.Application excelApp = new Excel.Application
|
||||||
|
{
|
||||||
|
Visible = true,
|
||||||
|
DisplayAlerts = false
|
||||||
|
};
|
||||||
|
|
||||||
|
Excel.Workbook workbook = excelApp.Workbooks.Open(filePath);
|
||||||
|
|
||||||
|
string copiedSheetName = "Measurements";
|
||||||
|
|
||||||
|
Excel.Worksheet worksheet = workbook.Sheets[1];
|
||||||
|
// Add column headers
|
||||||
|
for (int i = 0; i < dataGridView1.Columns.Count; i++)
|
||||||
|
{
|
||||||
|
worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add rows
|
||||||
|
for (int i = 0; i < dataGridView1.Rows.Count; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < dataGridView1.Columns.Count; j++)
|
||||||
|
{
|
||||||
|
worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
workbook.Save();
|
||||||
|
workbook.Close();
|
||||||
|
excelApp.Quit();
|
||||||
|
|
||||||
|
//ReleaseObject(workbook);
|
||||||
|
//ReleaseObject(excelApp);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lbMeasuredPins_ItemCheck(object sender, ItemCheckEventArgs e)
|
||||||
|
{
|
||||||
|
List<int> checkedItems = new List<int>();
|
||||||
|
foreach (var item in lbMeasuredPins.CheckedItems)
|
||||||
|
{
|
||||||
|
checkedItems.Add(Convert.ToInt32(item));
|
||||||
|
}
|
||||||
|
if (e.NewValue == CheckState.Checked)
|
||||||
|
checkedItems.Add(Convert.ToInt32(lbMeasuredPins.Items[e.Index]));
|
||||||
|
else
|
||||||
|
checkedItems.Remove(Convert.ToInt32(lbMeasuredPins.Items[e.Index]));
|
||||||
|
Console.WriteLine(checkedItems);
|
||||||
|
this.CheckedItems = checkedItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnInvertListboxMeasuredPins_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < lbMeasuredPins.Items.Count; i++)
|
||||||
|
{
|
||||||
|
bool isChecked = lbMeasuredPins.GetItemChecked(i);
|
||||||
|
lbMeasuredPins.SetItemChecked(i, !isChecked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnClearAllMeasurements_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
OnClearAllMeasurementsBtnClick(EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
daq_testing/UserControlMeasureHeader.resx
Normal file
120
daq_testing/UserControlMeasureHeader.resx
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
94
daq_testing/UserControlPslineConfig.Designer.cs
generated
Normal file
94
daq_testing/UserControlPslineConfig.Designer.cs
generated
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
partial class UserControlPslineConfig
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.dgvPslinesConfig = new System.Windows.Forms.DataGridView();
|
||||||
|
this.btnSave = new System.Windows.Forms.Button();
|
||||||
|
this.button1 = new System.Windows.Forms.Button();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dgvPslinesConfig)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// dgvPslinesConfig
|
||||||
|
//
|
||||||
|
this.dgvPslinesConfig.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||||
|
this.dgvPslinesConfig.Location = new System.Drawing.Point(64, 77);
|
||||||
|
this.dgvPslinesConfig.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||||
|
this.dgvPslinesConfig.Name = "dgvPslinesConfig";
|
||||||
|
this.dgvPslinesConfig.RowHeadersWidth = 51;
|
||||||
|
this.dgvPslinesConfig.Size = new System.Drawing.Size(751, 383);
|
||||||
|
this.dgvPslinesConfig.TabIndex = 0;
|
||||||
|
this.dgvPslinesConfig.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvPslinesConfig_CellContentClick);
|
||||||
|
|
||||||
|
//
|
||||||
|
// btnSave
|
||||||
|
//
|
||||||
|
this.btnSave.Location = new System.Drawing.Point(651, 521);
|
||||||
|
this.btnSave.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||||
|
this.btnSave.Name = "btnSave";
|
||||||
|
this.btnSave.Size = new System.Drawing.Size(164, 59);
|
||||||
|
this.btnSave.TabIndex = 1;
|
||||||
|
this.btnSave.Text = "Save";
|
||||||
|
this.btnSave.UseVisualStyleBackColor = true;
|
||||||
|
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
|
||||||
|
//
|
||||||
|
// button1
|
||||||
|
//
|
||||||
|
this.button1.Enabled = false;
|
||||||
|
this.button1.Location = new System.Drawing.Point(715, 468);
|
||||||
|
this.button1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||||
|
this.button1.Name = "button1";
|
||||||
|
this.button1.Size = new System.Drawing.Size(100, 28);
|
||||||
|
this.button1.TabIndex = 2;
|
||||||
|
this.button1.Text = "Update";
|
||||||
|
this.button1.UseVisualStyleBackColor = true;
|
||||||
|
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||||
|
//
|
||||||
|
// UserControlPslineConfig
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.Controls.Add(this.button1);
|
||||||
|
this.Controls.Add(this.btnSave);
|
||||||
|
this.Controls.Add(this.dgvPslinesConfig);
|
||||||
|
this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||||
|
this.Name = "UserControlPslineConfig";
|
||||||
|
this.Size = new System.Drawing.Size(967, 655);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dgvPslinesConfig)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.DataGridView dgvPslinesConfig;
|
||||||
|
private System.Windows.Forms.Button btnSave;
|
||||||
|
private System.Windows.Forms.Button button1;
|
||||||
|
}
|
||||||
|
}
|
||||||
111
daq_testing/UserControlPslineConfig.cs
Normal file
111
daq_testing/UserControlPslineConfig.cs
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace daq_testing
|
||||||
|
{
|
||||||
|
public partial class UserControlPslineConfig : UserControl
|
||||||
|
{
|
||||||
|
private BindingList<PslineConfig> gridData;
|
||||||
|
private FileHandler fileHandler;
|
||||||
|
|
||||||
|
public event EventHandler UpdateBtnClick;
|
||||||
|
|
||||||
|
public void OnUpdateBtnClick(EventArgs e)
|
||||||
|
{
|
||||||
|
LoadDgv();
|
||||||
|
UpdateBtnClick?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PslineConfig> Data { get; set; }
|
||||||
|
public UserControlPslineConfig()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
dgvPslinesConfig.CellContentClick += dgvPslinesConfig_CellContentClick;
|
||||||
|
dgvPslinesConfig.CurrentCellDirtyStateChanged += dgvPslinesConfig_CurrentCellDirtyStateChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void button1_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
LoadDgv();
|
||||||
|
OnUpdateBtnClick(EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadDgv_old()
|
||||||
|
{
|
||||||
|
BindingSource bs = new BindingSource();
|
||||||
|
bs.DataSource = Data;
|
||||||
|
dgvPslinesConfig.DataSource = bs;
|
||||||
|
dgvPslinesConfig.Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadDgv()
|
||||||
|
{
|
||||||
|
string filePath = @"c:\configs\data.json";
|
||||||
|
|
||||||
|
fileHandler = new FileHandler(filePath);
|
||||||
|
// Load data
|
||||||
|
gridData = fileHandler.LoadData();
|
||||||
|
|
||||||
|
// Bind data to DataGridView
|
||||||
|
dgvPslinesConfig.DataSource = gridData;
|
||||||
|
|
||||||
|
// Set column properties
|
||||||
|
dgvPslinesConfig.Columns["Psline"].HeaderText = "Psline";
|
||||||
|
dgvPslinesConfig.Columns["Description"].HeaderText = "Description";
|
||||||
|
dgvPslinesConfig.Columns["Setpoint"].HeaderText = "Setpoint";
|
||||||
|
dgvPslinesConfig.Columns["Tolerance"].HeaderText = "Tolerance";
|
||||||
|
dgvPslinesConfig.Columns["Enabled"].HeaderText = "Enabled";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSave_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
fileHandler.SaveData(gridData);
|
||||||
|
OnUpdateBtnClick(EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dgvPslinesConfig_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.ColumnIndex == dgvPslinesConfig.Columns["Enabled"].Index)
|
||||||
|
{
|
||||||
|
// Check if the Enabled cell was set to true
|
||||||
|
if (Convert.ToBoolean(dgvPslinesConfig.Rows[e.RowIndex].Cells["Enabled"].Value) == true)
|
||||||
|
{
|
||||||
|
// Check for duplicates
|
||||||
|
var pslineValue = dgvPslinesConfig.Rows[e.RowIndex].Cells["Psline"].Value;
|
||||||
|
var hasDuplicate = dgvPslinesConfig.Rows
|
||||||
|
.Cast<DataGridViewRow>()
|
||||||
|
.Where(row => Convert.ToBoolean(row.Cells["Enabled"].Value) == true &&
|
||||||
|
row.Cells["Psline"].Value.Equals(pslineValue) &&
|
||||||
|
row.Index != e.RowIndex) // Exclude the current row
|
||||||
|
.Any();
|
||||||
|
|
||||||
|
if (hasDuplicate)
|
||||||
|
{
|
||||||
|
// Revert the change and notify the user
|
||||||
|
dgvPslinesConfig.Rows[e.RowIndex].Cells["Enabled"].Value = false; // Set back to false
|
||||||
|
MessageBox.Show("Cannot enable this row because a duplicate Psline entry exists.", "Duplicate Entry", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dgvPslinesConfig_CurrentCellDirtyStateChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (dgvPslinesConfig.IsCurrentCellDirty)
|
||||||
|
{
|
||||||
|
dgvPslinesConfig.CommitEdit(DataGridViewDataErrorContexts.Commit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
120
daq_testing/UserControlPslineConfig.resx
Normal file
120
daq_testing/UserControlPslineConfig.resx
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
300
daq_testing/daq_testing.csproj
Normal file
300
daq_testing/daq_testing.csproj
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<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>
|
||||||
|
<ProjectGuid>{F871696A-881E-4EDB-BC23-EC1DCBA11A5A}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<RootNamespace>daq_testing</RootNamespace>
|
||||||
|
<AssemblyName>daq_testing</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
|
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||||
|
<PublishUrl>D:\deploy\</PublishUrl>
|
||||||
|
<Install>false</Install>
|
||||||
|
<InstallFrom>Unc</InstallFrom>
|
||||||
|
<UpdateEnabled>true</UpdateEnabled>
|
||||||
|
<UpdateMode>Foreground</UpdateMode>
|
||||||
|
<UpdateInterval>7</UpdateInterval>
|
||||||
|
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||||
|
<UpdatePeriodically>false</UpdatePeriodically>
|
||||||
|
<UpdateRequired>false</UpdateRequired>
|
||||||
|
<MapFileExtensions>true</MapFileExtensions>
|
||||||
|
<InstallUrl>\\silicium\software\</InstallUrl>
|
||||||
|
<ApplicationRevision>1</ApplicationRevision>
|
||||||
|
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||||
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
|
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||||
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ManifestCertificateThumbprint>8C7D832975646199C4D1F0FE99E67DE3A1873D22</ManifestCertificateThumbprint>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ManifestKeyFile>daq_testing_TemporaryKey.pfx</ManifestKeyFile>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<GenerateManifests>true</GenerateManifests>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<SignManifests>true</SignManifests>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="HarfBuzzSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\HarfBuzzSharp.7.3.0.3\lib\net462\HarfBuzzSharp.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll</HintPath>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</Reference>
|
||||||
|
<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="OpenTK, Version=3.1.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\OpenTK.3.1.0\lib\net20\OpenTK.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="OpenTK.GLControl, Version=3.1.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\OpenTK.GLControl.3.1.0\lib\net20\OpenTK.GLControl.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ScottPlot, Version=5.0.54.0, Culture=neutral, PublicKeyToken=86698dc10387c39e, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ScottPlot.5.0.54\lib\net462\ScottPlot.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ScottPlot.WinForms, Version=5.0.54.0, Culture=neutral, PublicKeyToken=86698dc10387c39e, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ScottPlot.WinForms.5.0.54\lib\net462\ScottPlot.WinForms.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SkiaSharp, Version=2.88.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SkiaSharp.2.88.9\lib\net462\SkiaSharp.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SkiaSharp.HarfBuzz, Version=2.88.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SkiaSharp.HarfBuzz.2.88.9\lib\net462\SkiaSharp.HarfBuzz.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SkiaSharp.Views.Desktop.Common, Version=2.88.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SkiaSharp.Views.Desktop.Common.2.88.9\lib\net462\SkiaSharp.Views.Desktop.Common.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SkiaSharp.Views.WindowsForms, Version=2.88.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SkiaSharp.Views.WindowsForms.2.88.9\lib\net462\SkiaSharp.Views.WindowsForms.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Drawing.Common, Version=4.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Drawing.Common.4.7.3\lib\net461\System.Drawing.Common.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Numerics" />
|
||||||
|
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Text.Json, Version=8.0.0.4, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Text.Json.8.0.4\lib\net462\System.Text.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Deployment" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="DataTableHelper.cs" />
|
||||||
|
<Compile Include="FileHandler.cs" />
|
||||||
|
<Compile Include="MainForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="MainForm.Designer.cs">
|
||||||
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Instrument.cs" />
|
||||||
|
<Compile Include="MeasuredPosition.cs" />
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="PslineConfig.cs" />
|
||||||
|
<Compile Include="PslineMapping.cs" />
|
||||||
|
<Compile Include="Result.cs" />
|
||||||
|
<Compile Include="UserControlDMM.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControlDMM.Designer.cs">
|
||||||
|
<DependentUpon>UserControlDMM.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControlInstrument.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControlInstrument.Designer.cs">
|
||||||
|
<DependentUpon>UserControlInstrument.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControlMeasure.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControlMeasure.Designer.cs">
|
||||||
|
<DependentUpon>UserControlMeasure.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControlMeasureHeader.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControlMeasureHeader.Designer.cs">
|
||||||
|
<DependentUpon>UserControlMeasureHeader.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControlPslineConfig.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControlPslineConfig.Designer.cs">
|
||||||
|
<DependentUpon>UserControlPslineConfig.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<EmbeddedResource Include="MainForm.resx">
|
||||||
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<EmbeddedResource Include="UserControlDMM.resx">
|
||||||
|
<DependentUpon>UserControlDMM.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="UserControlInstrument.resx">
|
||||||
|
<DependentUpon>UserControlInstrument.cs</DependentUpon>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="UserControlMeasure.resx">
|
||||||
|
<DependentUpon>UserControlMeasure.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="UserControlMeasureHeader.resx">
|
||||||
|
<DependentUpon>UserControlMeasureHeader.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="UserControlPslineConfig.resx">
|
||||||
|
<DependentUpon>UserControlPslineConfig.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<None Include="daq_testing_TemporaryKey.pfx" />
|
||||||
|
<None Include="OpenTK.dll.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<COMReference Include="Agilent34970Lib">
|
||||||
|
<Guid>{9C2645D3-6791-4A84-80AA-30E529FA54EF}</Guid>
|
||||||
|
<VersionMajor>1</VersionMajor>
|
||||||
|
<VersionMinor>4</VersionMinor>
|
||||||
|
<Lcid>0</Lcid>
|
||||||
|
<WrapperTool>primary</WrapperTool>
|
||||||
|
<Isolated>False</Isolated>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</COMReference>
|
||||||
|
<COMReference Include="IviDriverLib">
|
||||||
|
<Guid>{47ED5120-A398-11D4-BA58-000064657374}</Guid>
|
||||||
|
<VersionMajor>1</VersionMajor>
|
||||||
|
<VersionMinor>0</VersionMinor>
|
||||||
|
<Lcid>0</Lcid>
|
||||||
|
<WrapperTool>primary</WrapperTool>
|
||||||
|
<Isolated>False</Isolated>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</COMReference>
|
||||||
|
<COMReference Include="VisaComLib">
|
||||||
|
<Guid>{DB8CBF00-D6D3-11D4-AA51-00A024EE30BD}</Guid>
|
||||||
|
<VersionMajor>5</VersionMajor>
|
||||||
|
<VersionMinor>14</VersionMinor>
|
||||||
|
<Lcid>0</Lcid>
|
||||||
|
<WrapperTool>primary</WrapperTool>
|
||||||
|
<Isolated>False</Isolated>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</COMReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>Microsoft .NET Framework 4.7.2 %28x86 and x64%29</ProductName>
|
||||||
|
<Install>true</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||||
|
<Install>false</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<Import Project="..\packages\HarfBuzzSharp.NativeAssets.macOS.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.macOS.targets" Condition="Exists('..\packages\HarfBuzzSharp.NativeAssets.macOS.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.macOS.targets')" />
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('..\packages\HarfBuzzSharp.NativeAssets.macOS.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.macOS.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\HarfBuzzSharp.NativeAssets.macOS.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.macOS.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\HarfBuzzSharp.NativeAssets.Win32.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.Win32.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\HarfBuzzSharp.NativeAssets.Win32.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.Win32.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\SkiaSharp.NativeAssets.macOS.2.88.9\build\net462\SkiaSharp.NativeAssets.macOS.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SkiaSharp.NativeAssets.macOS.2.88.9\build\net462\SkiaSharp.NativeAssets.macOS.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\SkiaSharp.NativeAssets.Win32.2.88.9\build\net462\SkiaSharp.NativeAssets.Win32.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SkiaSharp.NativeAssets.Win32.2.88.9\build\net462\SkiaSharp.NativeAssets.Win32.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\HarfBuzzSharp.NativeAssets.Linux.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.Linux.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\HarfBuzzSharp.NativeAssets.Linux.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.Linux.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\SkiaSharp.NativeAssets.Linux.NoDependencies.2.88.9\build\net462\SkiaSharp.NativeAssets.Linux.NoDependencies.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\SkiaSharp.NativeAssets.Linux.NoDependencies.2.88.9\build\net462\SkiaSharp.NativeAssets.Linux.NoDependencies.targets'))" />
|
||||||
|
</Target>
|
||||||
|
<Import Project="..\packages\HarfBuzzSharp.NativeAssets.Win32.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.Win32.targets" Condition="Exists('..\packages\HarfBuzzSharp.NativeAssets.Win32.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.Win32.targets')" />
|
||||||
|
<Import Project="..\packages\SkiaSharp.NativeAssets.macOS.2.88.9\build\net462\SkiaSharp.NativeAssets.macOS.targets" Condition="Exists('..\packages\SkiaSharp.NativeAssets.macOS.2.88.9\build\net462\SkiaSharp.NativeAssets.macOS.targets')" />
|
||||||
|
<Import Project="..\packages\SkiaSharp.NativeAssets.Win32.2.88.9\build\net462\SkiaSharp.NativeAssets.Win32.targets" Condition="Exists('..\packages\SkiaSharp.NativeAssets.Win32.2.88.9\build\net462\SkiaSharp.NativeAssets.Win32.targets')" />
|
||||||
|
<Import Project="..\packages\HarfBuzzSharp.NativeAssets.Linux.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.Linux.targets" Condition="Exists('..\packages\HarfBuzzSharp.NativeAssets.Linux.7.3.0.3\build\net462\HarfBuzzSharp.NativeAssets.Linux.targets')" />
|
||||||
|
<Import Project="..\packages\SkiaSharp.NativeAssets.Linux.NoDependencies.2.88.9\build\net462\SkiaSharp.NativeAssets.Linux.NoDependencies.targets" Condition="Exists('..\packages\SkiaSharp.NativeAssets.Linux.NoDependencies.2.88.9\build\net462\SkiaSharp.NativeAssets.Linux.NoDependencies.targets')" />
|
||||||
|
</Project>
|
||||||
31
daq_testing/packages.config
Normal file
31
daq_testing/packages.config
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="HarfBuzzSharp" version="7.3.0.3" targetFramework="net472" />
|
||||||
|
<package id="HarfBuzzSharp.NativeAssets.Linux" version="7.3.0.3" targetFramework="net472" />
|
||||||
|
<package id="HarfBuzzSharp.NativeAssets.macOS" version="7.3.0.3" targetFramework="net472" />
|
||||||
|
<package id="HarfBuzzSharp.NativeAssets.Win32" version="7.3.0.3" targetFramework="net472" />
|
||||||
|
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net472" />
|
||||||
|
<package id="Microsoft.Office.Interop.Excel" version="15.0.4795.1001" targetFramework="net472" />
|
||||||
|
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
|
||||||
|
<package id="OpenTK" version="3.1.0" targetFramework="net472" />
|
||||||
|
<package id="OpenTK.GLControl" version="3.1.0" targetFramework="net472" />
|
||||||
|
<package id="ScottPlot" version="5.0.54" targetFramework="net472" />
|
||||||
|
<package id="ScottPlot.WinForms" version="5.0.54" targetFramework="net472" />
|
||||||
|
<package id="SkiaSharp" version="2.88.9" targetFramework="net472" />
|
||||||
|
<package id="SkiaSharp.HarfBuzz" version="2.88.9" targetFramework="net472" />
|
||||||
|
<package id="SkiaSharp.NativeAssets.Linux.NoDependencies" version="2.88.9" targetFramework="net472" />
|
||||||
|
<package id="SkiaSharp.NativeAssets.macOS" version="2.88.9" targetFramework="net472" />
|
||||||
|
<package id="SkiaSharp.NativeAssets.Win32" version="2.88.9" targetFramework="net472" />
|
||||||
|
<package id="SkiaSharp.Views.Desktop.Common" version="2.88.9" targetFramework="net472" />
|
||||||
|
<package id="SkiaSharp.Views.WindowsForms" version="2.88.9" targetFramework="net472" />
|
||||||
|
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
|
||||||
|
<package id="System.Drawing.Common" version="4.7.3" targetFramework="net472" />
|
||||||
|
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
|
||||||
|
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
|
||||||
|
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
|
||||||
|
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net472" />
|
||||||
|
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net472" />
|
||||||
|
<package id="System.Text.Json" version="8.0.4" targetFramework="net472" />
|
||||||
|
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
|
||||||
|
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
|
||||||
|
</packages>
|
||||||
Reference in New Issue
Block a user