From 297fc4938d25d634152b2bf66c2d4e0b7a1d50d3 Mon Sep 17 00:00:00 2001 From: gboedecker <125995107+gboedecker@users.noreply.github.com> Date: Thu, 5 Mar 2026 17:24:18 +0100 Subject: [PATCH 1/3] KPC101 example --- .../KPC101/KPC101_Example/KPC101_Example.sln | 31 ++++ .../KPC101_Example/KPC101_Example/App.config | 6 + .../KPC101_Example/KPC101_Example.csproj | 85 ++++++++++ .../KPC101_Example/KPC101_Example/Program.cs | 156 ++++++++++++++++++ .../KPC101_Example/Properties/AssemblyInfo.cs | 33 ++++ .../bin/x64/Debug/KPC101_Example.exe.config | 6 + ...amework,Version=v4.8.AssemblyAttributes.cs | 4 + ...amework,Version=v4.8.AssemblyAttributes.cs | 4 + ...KPC101_Example.csproj.FileListAbsolute.txt | 13 ++ .../obj/x64/Debug/KPC101_Example.exe.config | 6 + 10 files changed, 344 insertions(+) create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example.sln create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example/App.config create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example/KPC101_Example.csproj create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example/Program.cs create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example/Properties/AssemblyInfo.cs create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example/bin/x64/Debug/KPC101_Example.exe.config create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.csproj.FileListAbsolute.txt create mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.exe.config diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example.sln b/C#/KCube/KPC101/KPC101_Example/KPC101_Example.sln new file mode 100644 index 0000000..8c63ed9 --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36915.13 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KPC101_Example", "KPC101_Example\KPC101_Example.csproj", "{D5ED37A5-9897-42C6-8878-DFB422D01E86}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Debug|x64.ActiveCfg = Debug|x64 + {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Debug|x64.Build.0 = Debug|x64 + {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Release|Any CPU.Build.0 = Release|Any CPU + {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Release|x64.ActiveCfg = Release|x64 + {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {137773C2-34D6-4933-B4B5-F9764B4E479B} + EndGlobalSection +EndGlobal diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/App.config b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/KPC101_Example.csproj b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/KPC101_Example.csproj new file mode 100644 index 0000000..c5d6b9d --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/KPC101_Example.csproj @@ -0,0 +1,85 @@ + + + + + Debug + AnyCPU + {D5ED37A5-9897-42C6-8878-DFB422D01E86} + Exe + KPC101_Example + KPC101_Example + v4.8 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + 7.3 + prompt + true + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + 7.3 + prompt + true + + + + + + + + + + + + False + bin\x64\Debug\Thorlabs.MotionControl.DeviceManagerCLI.dll + + + False + bin\x64\Debug\Thorlabs.MotionControl.GenericPiezoCLI.dll + + + False + bin\x64\Debug\Thorlabs.MotionControl.KCube.PiezoStrainGaugeCLI.dll + + + + + + + + + + + \ No newline at end of file diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/Program.cs b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/Program.cs new file mode 100644 index 0000000..c3e1e8b --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/Program.cs @@ -0,0 +1,156 @@ +// Title: KDC101_Example +// Created Date: 03/05/2026 +// Last Modified Date: 03/05/2023 +// .NET Framework version: 4.8 +// Thorlabs DLL version: 1.14.59 +// Example Description: +// This example demonstrates how to set-up the communication for the Thorlabs +// KPC101 controllers. +using System; +using System.Collections.Generic; +using System.Threading; +using Thorlabs.MotionControl.DeviceManagerCLI; +using Thorlabs.MotionControl.GenericPiezoCLI.Piezo; +using Thorlabs.MotionControl.KCube.PiezoStrainGaugeCLI; + + + +namespace KCP_CStest +{ + internal class Program + { + + static void Main() + { + //SimulationManager.Instance.InitializeSimulations(); Uncomment for simulated device. + + // Get the test KPC101 serial number (e.g. 113000123) + string serialNo = "113000001"; + + try + { + // Tell the device manager to get the list of all devices connected to the computer + DeviceManagerCLI.BuildDeviceList(); + } + catch (Exception ex) + { + // An error occurred - see ex for details + Console.WriteLine("Exception raised by BuildDeviceList {0}", ex); + Console.ReadKey(); + return; + } + + // Get available KCube Piezo Strain Gauge Motors and check our serial number is correct - by using the device prefix + // (i.e. for serial number 113000123, the device prefix is 113) + List serialNumbers = DeviceManagerCLI.GetDeviceList(KCubePiezoStrainGauge.DevicePrefix); + if (!serialNumbers.Contains(serialNo)) + { + // The requested serial number is not a KPC101 or is not connected + Console.WriteLine("{0} is not a valid serial number", serialNo); + Console.ReadKey(); + return; + } + + // Create the KCZ device + KCubePiezoStrainGauge device = KCubePiezoStrainGauge.CreateKCubePiezoStrainGauge(serialNo); + if (device == null) + { + // An error occured + Console.WriteLine("{0} is not a KCubePiezoStrainGauge", serialNo); + Console.ReadKey(); + return; + } + + // Open a connection to the device. + try + { + Console.WriteLine("Opening device {0}", serialNo); + device.Connect(serialNo); + } + catch (Exception) + { + // Connection failed + Console.WriteLine("Failed to open device {0}", serialNo); + Console.ReadKey(); + return; + } + + // Wait for the device settings to initialize - timeout 5000ms + if (!device.IsSettingsInitialized()) + { + try + { + device.WaitForSettingsInitialized(5000); + } + catch (Exception) + { + Console.WriteLine("Settings failed to initialize"); + } + } + + // Start the device polling + // The polling loop requests regular status requests to the motor to ensure the program keeps track of the device. + device.StartPolling(250); + // Needs a delay so that the current enabled state can be obtained + Thread.Sleep(500); + // Enable the channel otherwise any move is ignored + device.EnableDevice(); + // Needs a delay to give time for the device to be enabled + Thread.Sleep(500); + + // Get Piezo configuration + PiezoConfiguration piezoConfiguration = device.GetPiezoConfiguration(serialNo); + // Not used directly in example but illustrates how to obtain device settings + PiezoDeviceSettings currentDeviceSettings = device.PiezoDeviceSettings as PiezoDeviceSettings; + + // Display info about device + DeviceInfo deviceInfo = device.GetDeviceInfo(); + Console.WriteLine("Device {0} = {1}", deviceInfo.SerialNumber, deviceInfo.Name); + + device.SetPositionControlMode(PiezoControlModeTypes.OpenLoop); + + // Max voltage - 75 + Decimal maxVolts = device.GetMaxOutputVoltage(); + + Decimal voltage = 1; + // If a voltage is requested + if ((voltage != 0) && (voltage <= maxVolts)) + { + // Update voltage if required using real world methods + device.SetOutputVoltage(voltage); + + Thread.Sleep(1000); + + Decimal newVolts = device.GetOutputVoltage(); + Console.WriteLine("Voltage set to {0}", newVolts); + } + + Console.WriteLine("Setting Zero"); + device.SetZero(); + Thread.Sleep(1000); + Console.WriteLine("Voltage:{0}", device.GetOutputVoltage()); + Console.WriteLine("Position:{0}", device.GetPosition()); + + device.SetPositionControlMode(PiezoControlModeTypes.CloseLoop); + + + //Set position + Decimal setposition = 1.5m; + device.SetPosition(setposition); + + Thread.Sleep(1000); + + Decimal position = device.GetPosition(); + Console.WriteLine("New Position {0}", position); + + + device.StopPolling(); + + device.Disconnect(true); + Console.WriteLine("Device disconnected"); + //SimulationManager.Instance.UninitializeSimulations(); uncomment for simulated device. + + Console.ReadKey(); + } + } +} diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/Properties/AssemblyInfo.cs b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d1eff41 --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("KPC101_Example")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("DCHSCCM01")] +[assembly: AssemblyProduct("KPC101_Example")] +[assembly: AssemblyCopyright("Copyright © DCHSCCM01 2026")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("d5ed37a5-9897-42c6-8878-dfb422d01e86")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/bin/x64/Debug/KPC101_Example.exe.config b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/bin/x64/Debug/KPC101_Example.exe.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/bin/x64/Debug/KPC101_Example.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..15efebf --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..15efebf --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.csproj.FileListAbsolute.txt b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..f594ac2 --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.csproj.FileListAbsolute.txt @@ -0,0 +1,13 @@ +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\obj\x64\Debug\KPC101_Example.csproj.AssemblyReference.cache +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\obj\x64\Debug\KPC101_Example.csproj.CoreCompileInputs.cache +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\bin\x64\Debug\KPC101_Example.exe.config +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\bin\x64\Debug\KPC101_Example.exe +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\bin\x64\Debug\KPC101_Example.pdb +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\bin\x64\Debug\Thorlabs.MotionControl.PrivateInternal.dll +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\bin\x64\Debug\Thorlabs.MotionControl.Tools.Common.dll +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\bin\x64\Debug\Thorlabs.MotionControl.Tools.Logging.dll +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\bin\x64\Debug\Thorlabs.MotionControl.Tools.WPF.dll +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\obj\x64\Debug\KPC101_E.4EEB1B3A.Up2Date +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\obj\x64\Debug\KPC101_Example.exe +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\obj\x64\Debug\KPC101_Example.pdb +C:\Users\gboedecker\source\repos\KPC101\KPC101_Example\KPC101_Example\obj\x64\Debug\KPC101_Example.exe.config diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.exe.config b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.exe.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From aba7a17a896a10d934bf018c4174d9cd9ae59d20 Mon Sep 17 00:00:00 2001 From: gboedecker <125995107+gboedecker@users.noreply.github.com> Date: Thu, 5 Mar 2026 17:26:54 +0100 Subject: [PATCH 2/3] changed folder --- .../KPC101_Example => }/App.config | 0 .../KPC101_Example => }/KPC101_Example.csproj | 0 .../KPC101/KPC101_Example/KPC101_Example.sln | 31 ------------------- .../KPC101_Example => }/Program.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../bin/x64/Debug/KPC101_Example.exe.config | 0 ...amework,Version=v4.8.AssemblyAttributes.cs | 0 ...amework,Version=v4.8.AssemblyAttributes.cs | 0 ...KPC101_Example.csproj.FileListAbsolute.txt | 0 .../obj/x64/Debug/KPC101_Example.exe.config | 0 10 files changed, 31 deletions(-) rename C#/KCube/KPC101/{KPC101_Example/KPC101_Example => }/App.config (100%) rename C#/KCube/KPC101/{KPC101_Example/KPC101_Example => }/KPC101_Example.csproj (100%) delete mode 100644 C#/KCube/KPC101/KPC101_Example/KPC101_Example.sln rename C#/KCube/KPC101/{KPC101_Example/KPC101_Example => }/Program.cs (100%) rename C#/KCube/KPC101/{KPC101_Example/KPC101_Example => }/Properties/AssemblyInfo.cs (100%) rename C#/KCube/KPC101/{KPC101_Example/KPC101_Example => }/bin/x64/Debug/KPC101_Example.exe.config (100%) rename C#/KCube/KPC101/{KPC101_Example/KPC101_Example => }/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs (100%) rename C#/KCube/KPC101/{KPC101_Example/KPC101_Example => }/obj/x64/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs (100%) rename C#/KCube/KPC101/{KPC101_Example/KPC101_Example => }/obj/x64/Debug/KPC101_Example.csproj.FileListAbsolute.txt (100%) rename C#/KCube/KPC101/{KPC101_Example/KPC101_Example => }/obj/x64/Debug/KPC101_Example.exe.config (100%) diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/App.config b/C#/KCube/KPC101/App.config similarity index 100% rename from C#/KCube/KPC101/KPC101_Example/KPC101_Example/App.config rename to C#/KCube/KPC101/App.config diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/KPC101_Example.csproj b/C#/KCube/KPC101/KPC101_Example.csproj similarity index 100% rename from C#/KCube/KPC101/KPC101_Example/KPC101_Example/KPC101_Example.csproj rename to C#/KCube/KPC101/KPC101_Example.csproj diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example.sln b/C#/KCube/KPC101/KPC101_Example/KPC101_Example.sln deleted file mode 100644 index 8c63ed9..0000000 --- a/C#/KCube/KPC101/KPC101_Example/KPC101_Example.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.14.36915.13 d17.14 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KPC101_Example", "KPC101_Example\KPC101_Example.csproj", "{D5ED37A5-9897-42C6-8878-DFB422D01E86}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Debug|x64.ActiveCfg = Debug|x64 - {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Debug|x64.Build.0 = Debug|x64 - {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Release|Any CPU.Build.0 = Release|Any CPU - {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Release|x64.ActiveCfg = Release|x64 - {D5ED37A5-9897-42C6-8878-DFB422D01E86}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {137773C2-34D6-4933-B4B5-F9764B4E479B} - EndGlobalSection -EndGlobal diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/Program.cs b/C#/KCube/KPC101/Program.cs similarity index 100% rename from C#/KCube/KPC101/KPC101_Example/KPC101_Example/Program.cs rename to C#/KCube/KPC101/Program.cs diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/Properties/AssemblyInfo.cs b/C#/KCube/KPC101/Properties/AssemblyInfo.cs similarity index 100% rename from C#/KCube/KPC101/KPC101_Example/KPC101_Example/Properties/AssemblyInfo.cs rename to C#/KCube/KPC101/Properties/AssemblyInfo.cs diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/bin/x64/Debug/KPC101_Example.exe.config b/C#/KCube/KPC101/bin/x64/Debug/KPC101_Example.exe.config similarity index 100% rename from C#/KCube/KPC101/KPC101_Example/KPC101_Example/bin/x64/Debug/KPC101_Example.exe.config rename to C#/KCube/KPC101/bin/x64/Debug/KPC101_Example.exe.config diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/C#/KCube/KPC101/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs similarity index 100% rename from C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs rename to C#/KCube/KPC101/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/C#/KCube/KPC101/obj/x64/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs similarity index 100% rename from C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs rename to C#/KCube/KPC101/obj/x64/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.csproj.FileListAbsolute.txt b/C#/KCube/KPC101/obj/x64/Debug/KPC101_Example.csproj.FileListAbsolute.txt similarity index 100% rename from C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.csproj.FileListAbsolute.txt rename to C#/KCube/KPC101/obj/x64/Debug/KPC101_Example.csproj.FileListAbsolute.txt diff --git a/C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.exe.config b/C#/KCube/KPC101/obj/x64/Debug/KPC101_Example.exe.config similarity index 100% rename from C#/KCube/KPC101/KPC101_Example/KPC101_Example/obj/x64/Debug/KPC101_Example.exe.config rename to C#/KCube/KPC101/obj/x64/Debug/KPC101_Example.exe.config From ea0b8f86454275844881ed751c6ee63b5246f636 Mon Sep 17 00:00:00 2001 From: Zoe Zhang <120383504+ZiyingZhang313@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:17:46 +0800 Subject: [PATCH 3/3] Add BBD30X XA C# example --- C#/XA/BBD30X/App.config | 6 + C#/XA/BBD30X/BBD30X.csproj | 57 ++++++ C#/XA/BBD30X/Program.cs | 181 ++++++++++++++++++ C#/XA/BBD30X/Properties/AssemblyInfo.cs | 33 ++++ ...amework,Version=v4.8.AssemblyAttributes.cs | 4 + C#/XA/BBD30X/obj/Debug/BBD303.exe.config | 6 + .../Debug/BBD30X.csproj.FileListAbsolute.txt | 10 + C#/XA/BBD30X/obj/Debug/BBD30X.csproj.Up2Date | 0 8 files changed, 297 insertions(+) create mode 100644 C#/XA/BBD30X/App.config create mode 100644 C#/XA/BBD30X/BBD30X.csproj create mode 100644 C#/XA/BBD30X/Program.cs create mode 100644 C#/XA/BBD30X/Properties/AssemblyInfo.cs create mode 100644 C#/XA/BBD30X/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs create mode 100644 C#/XA/BBD30X/obj/Debug/BBD303.exe.config create mode 100644 C#/XA/BBD30X/obj/Debug/BBD30X.csproj.FileListAbsolute.txt create mode 100644 C#/XA/BBD30X/obj/Debug/BBD30X.csproj.Up2Date diff --git a/C#/XA/BBD30X/App.config b/C#/XA/BBD30X/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/C#/XA/BBD30X/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/C#/XA/BBD30X/BBD30X.csproj b/C#/XA/BBD30X/BBD30X.csproj new file mode 100644 index 0000000..20fbafa --- /dev/null +++ b/C#/XA/BBD30X/BBD30X.csproj @@ -0,0 +1,57 @@ + + + + + Debug + AnyCPU + {6F6540DC-4ED9-4D48-BE55-32A5AB2A7A1F} + Exe + BBD303 + BBD303 + v4.8 + 512 + true + true + + + x64 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + ..\..\..\..\..\..\..\Program Files\Thorlabs XA\SDK\.NET Framework (C#)\Libraries\x64\tlmc_xa_dotnet.dll + + + + + + + + + + + \ No newline at end of file diff --git a/C#/XA/BBD30X/Program.cs b/C#/XA/BBD30X/Program.cs new file mode 100644 index 0000000..c811852 --- /dev/null +++ b/C#/XA/BBD30X/Program.cs @@ -0,0 +1,181 @@ +// Title: BBD30X +// Created Date: 03/09/2026 +// Last Modified Date: 03/09/2026 +// .NET FrameworF version: 4.8 +// Thorlabs DLL version: 1.5.0.26490 +// Example Description: +// This example demonstrates how to set-up the communication for the Thorlabs +// BBD30X controllers, home it, and move it by 1 mm or degrees. + +using System; +using Thorlabs.MotionControl.XA; +using Thorlabs.MotionControl.XA.Products; + +namespace BBD30X +{ + class Program + { + //Change this line to match the serial number on your device (format: 103XXXXXX) + private static string _deviceId = "103000001"; + //Select the channel to control ("1", "2", or "3") + private static string _channelNumber = "1"; + + static void Main(string[] args) + { + SystemManager systemManager; + + //Start up XA + try + { + systemManager = SystemManager.Create(); + systemManager.Startup(); + } + catch (Exception ex) + { + Console.WriteLine("Exception: {0}", ex.Message); + return; + } + + //Uncomment this part(and systemManager.RemoveSimulation(bbd303Simulation) at the end on Main) + //If you are using a simulated device + /* + string bbd303Simulation = @"{ + ""PartNumber"": ""BBD303"", + ""SerialNumber"": ""103000001"", + ""Channels"": + [{ ""BayNumber"": ""1"", + ""SerialNumber"": ""104000002"", + ""ActuatorType"": ""DDS220""}, + { + ""BayNumber"": ""2"", + ""SerialNumber"": ""104000003"", + ""ActuatorType"": ""DDS300""}, + { + ""BayNumber"": ""3"", + ""SerialNumber"": ""104000004"", + ""ActuatorType"": ""DDS600""}]}"; + + systemManager.CreateSimulation(bbd303Simulation); + */ + + //Get the device list + System.Collections.Generic.IList devicelist = systemManager.GetDeviceList(); + + // Print all connected devices + Console.WriteLine("Connected devices: {0}", devicelist?.Count ?? 0); + if (devicelist != null && devicelist.Count > 0) + { + int index = 1; + + foreach (var d in devicelist) + { + Console.Write("Device {0}: ", index); + try + { + Console.WriteLine("{0}, Serial Number: {1}",d.DeviceType,d.Device); + + } + catch + { + Console.WriteLine(d?.ToString() ?? ""); + } + + index++; + } + } + else + { + Console.WriteLine("No devices found."); + } + + //Open the BBD30X device + Bbd30x device; + bool ret = systemManager.TryOpenDevice(_deviceId, "", OperatingModes.Default, out device); + if (ret == false) + { + Console.WriteLine("\nFail to open base unit {0}", _deviceId); + systemManager.Shutdown(); + return; + } + else + { + Console.WriteLine("\nBase Unit {0} opened successfully", _deviceId); + } + + //Open the channel + Bbd30xLogicalChannel channel; + string _channelId = _deviceId + "-" + _channelNumber; + ret = systemManager.TryOpenDevice(_channelId, "", OperatingModes.Default, out channel); + if (ret == false) + { + Console.WriteLine("Fail to open channel {0}", channel.DeviceId); + systemManager.Shutdown(); + return; + } + else + { + Console.WriteLine("Channel {0} opened successfully", channel.DeviceId); + } + + try + { + //Enable the device + channel.SetEnableState(EnableState.Enabled, TimeSpan.FromSeconds(1)); + + //Get the stage information + ConnectedProductInfo connectedProductInfo = channel.GetConnectedProductInfo(); + Console.WriteLine("Channel {0} Stage Name:{1}", channel.DeviceId, connectedProductInfo.ProductName); + + //Home the device + Console.WriteLine("Homing"); + channel.Home(TimeSpan.FromSeconds(60)); + Console.WriteLine("Home completed"); + + //Set the distance. Unit: millimeters or degrees depending on the actuator + double distance = 1; + + //Get the unit type of the actuator + Unit deviceUnit = connectedProductInfo.UnitType; + + //Convert the distance to device unit + long posInDeviceUnits = channel.FromPhysicalToDeviceUnit(ScaleType.Distance, deviceUnit, distance); + + //Move the device + Console.WriteLine("Moving to {0} {1}", distance, deviceUnit.ToString()); + channel.Move(MoveMode.Absolute, (int)posInDeviceUnits, TimeSpan.FromSeconds(60)); + Console.WriteLine("Move completed"); + + //Get the current position + int currentPosInDeviceUnits = channel.GetPositionCounter(TimeSpan.FromSeconds(1)); + + //Convert the device unit to physical unit + UnitConversionResult currentPos = channel.FromDeviceUnitToPhysical(ScaleType.Distance, currentPosInDeviceUnits); + Console.WriteLine("Current Position: {0} {1}", currentPos.Value, currentPos.UnitType); + } + catch (Exception ex) + { + Console.WriteLine("Exception: {0}", ex.Message); + } + finally + { + //Close the channel + if (channel != null) + channel.Close(); + + //Close the device + if (device != null) + { + device.Disconnect(); + device.Close(); + } + + //Uncomment this line if you are using Simulations + //systemManager.RemoveSimulation(bbd303Simulation); + + //Shutdown XA + systemManager.Shutdown(); + + } + } + } +} \ No newline at end of file diff --git a/C#/XA/BBD30X/Properties/AssemblyInfo.cs b/C#/XA/BBD30X/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..13774a1 --- /dev/null +++ b/C#/XA/BBD30X/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +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("BBD303")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BBD303")] +[assembly: AssemblyCopyright("Copyright © 2026")] +[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("6f6540dc-4ed9-4d48-be55-32a5ab2a7a1f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/C#/XA/BBD30X/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/C#/XA/BBD30X/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..15efebf --- /dev/null +++ b/C#/XA/BBD30X/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/C#/XA/BBD30X/obj/Debug/BBD303.exe.config b/C#/XA/BBD30X/obj/Debug/BBD303.exe.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/C#/XA/BBD30X/obj/Debug/BBD303.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/C#/XA/BBD30X/obj/Debug/BBD30X.csproj.FileListAbsolute.txt b/C#/XA/BBD30X/obj/Debug/BBD30X.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..385be33 --- /dev/null +++ b/C#/XA/BBD30X/obj/Debug/BBD30X.csproj.FileListAbsolute.txt @@ -0,0 +1,10 @@ +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\bin\Debug\BBD303.exe.config +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\bin\Debug\BBD303.exe +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\bin\Debug\BBD303.pdb +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\bin\Debug\tlmc_xa_dotnet.dll +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\obj\Debug\BBD30X.csproj.AssemblyReference.cache +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\obj\Debug\BBD30X.csproj.CoreCompileInputs.cache +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\obj\Debug\BBD30X.csproj.Up2Date +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\obj\Debug\BBD303.exe +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\obj\Debug\BBD303.pdb +C:\Users\zizhang\OneDrive - THORLABS Inc\Documents\4. SW Project\BBD303 Csharp XA\BBD303\obj\Debug\BBD303.exe.config diff --git a/C#/XA/BBD30X/obj/Debug/BBD30X.csproj.Up2Date b/C#/XA/BBD30X/obj/Debug/BBD30X.csproj.Up2Date new file mode 100644 index 0000000..e69de29