跳转至

示例程序

SDK 在 Samples/Cpp/ 目录下提供 6 个可直接编译运行的 C++ 示例,另含 8 个 C# 示例(其中 5 个与 C++ 示例一一对应:StatusQuery / MotionByCommand / MotionByOneScript / PcoSingleAxis / PcoVector;C/C++ API 为同一套扁平接口,C 客户直接使用这些源码即可,纯 C 编译请加 cl /TC)。

C++ ConsoleExample

路径Samples/Cpp/CLibrary/ConsoleExample/

功能:完整 C++ API 导览:连接 → 使能/回零 → 运动 → 读状态 → 设全局变量 → 运行 OneScript → 断开。连接统一使用 DLLSysConnect

运行前提: - 控制器可达 - 链接 OneSysCore.lib


C++ StatusQuery

路径Samples/Cpp/CLibrary/StatusQuery/

功能:C++ 状态查询示例,发送运动指令后轮询 ONE_AXIS_STATUS_MOVE_DONE 位等待运动完成(与 C 版 StatusQuery 等价)。


C++ MotionByCommand

路径Samples/Cpp/CLibrary/MotionByCommand/

功能:标准运动工作流示例(先设置后运动):ENABLE X 使能 → ABS 绝对模式 → RAMP RATE X 1000 单轴加速度(快速定位用)→ RAMP RATE 1000 矢量加速度(协调运动用)→ XF 50 单轴速度 → F 50 矢量速度 → RAPID X 10 快速定位(同步返回,DWELL 100 稳定)→ LINEAR X 20 矢量协调运动(异步轮询到位)→ 回程 → DISABLE X


C++ MotionByOneScript

路径Samples/Cpp/CLibrary/MotionByOneScript/

功能推荐的 OneScript 工作方式:运动程序保存在项目目录下的外部文件 MotionByOneScript.pgm(构建时自动拷贝到输出目录),程序内容与 MotionByCommand 是同一个工作流,只是改用脚本指令:Enable(X) 使能 → Abs() 绝对模式 → RampRate(X, 1000) 单轴加速度 + RampRate(1000) 矢量加速度 → Feed(X, 50) 单轴速度 + Feed(50) 矢量速度 → Rapid(X, 10) 同步定位(Dwell 稳定)→ Linear(X, 20) 异步协调运动(WaitMotion 等待)→ 回程 → Disable(X)。客户端用 DLLOneScriptLoad 加载、DLLOneScriptRun 启动,然后轮询 DLLOneScriptGetStatus(0=空闲,1=运行,2=暂停)直到程序结束。运动逻辑在控制器侧执行,客户端代码量最小。


C++ PcoSingleAxis

路径Samples/Cpp/CLibrary/PcoSingleAxis/

功能:单轴 PCO 晶圆栅格打标(OneScript 例程 OneScripts/PCO/WaferRaster.pgm 的 C++ 版):ENABLE X YRAPID 到扫描起点 → PCO UNIT 0 / PCO CONFIG X 0.02(X 每 20 µm 触发)/ PCO PULSE X 5 / PCO WINDOW X -25 25 / PCO ARM X → 10 行往复扫描(MOVEABS + 轮询 ONE_AXIS_STATUS_MOVE_DONE,行间 MOVEINC Y 步进)→ PCO DISARM XDISABLE X Y。每行结束用 DLLPcoGetFiredCount 打印累计触发数(自 ARM 起)。


C++ PcoVector

路径Samples/Cpp/CLibrary/PcoVector/

功能:矢量 PCO 体育场轮廓切割(OneScript 例程 OneScripts/PCO/LaserMarking.pgm 的 C++ 版):PCO CONFIGV X Y 0.05 按两轴合成轨迹长度每 0.05 mm 触发;VELOCITY ON 下引入 → PCO ARM X → 轮廓(两条 80 mm 直线 + 两个 R15 半圆,CCW IJ 圆心法)→ PCO DISARM X → 引出过切,全路径相切连续、恒定进给,PCO 指令随任务队列与运动按序执行;结束用 DLLPcoGetFiredCount 打印总触发数。


CSharp ConsoleExample

路径Samples/CSharp/DotNet/ConsoleExample/Program.cs

功能:完整的 .NET SDK 演示程序,展示 Controller 门面类的典型使用模式:连接→使能→回零→运动→读状态→设变量→运行 OneScript→断开。

关键代码片段

controller = Controller.Connect();

controller.Commands.Axes["X", "Y"].Motion.Enable();
controller.Commands.Axes["X", "Y"].Motion.Home();
WaitForMoveDone(controller, "X");
WaitForMoveDone(controller, "Y");

controller.Commands.Motion.MoveAbs("X", 10.0, 10.0);
controller.Commands.Motion.MoveAbs("Y", -10.0, 10.0);

double position = controller.Commands.Status.AxisStatus("X", AxisStatusSignal.PositionFeedback);

controller.Variables.Global.Doubles[0].Value = 100.0;

var script = controller.Tasks[TaskId.T01].OneScript;
script.Load(@"..\..\..\..\OneScripts\programflow.pgm");
script.Run();
Thread.Sleep(1000);
script.Stop();

Controller.Disconnect();

运行前提: - 控制器可达 - OneScripts\programflow.pgm 存在于相对于解决方案的路径 ..\..\..\..\OneScripts\ - Coretech.One.dll 引用路径正确


CSharp ProgramMonitor

路径Samples/CSharp/DotNet/ProgramMonitor/Program.cs

功能:加载并运行 OneScript 程序,轮询 OneScriptStatus(状态、当前行、输出)直到脚本完成或出错。

关键代码片段

controller = Controller.Connect();

var script = controller.Tasks[(TaskId)taskNumber].OneScript;
script.Load(scriptPath);
script.Run();

while (true)
{
    script.RefreshStatus();
    OneScriptStatus status = script.Status;
    Console.WriteLine($"State: {status.State,-10} Line: {status.CurrentLine}");

    if (status.IsCompleted || status.HasError || status.State == OneScriptState.Idle)
        break;
    Thread.Sleep(200);
}

if (script.Status.HasError)
{
    Console.WriteLine($"Program error {script.Status.ErrorCode}: {script.Status.ErrorMessage}");
    script.Stop();
}

运行前提: - 控制器可达 - 可选传入脚本路径参数,默认为 ..\..\..\..\OneScripts\programflow.pgm


CSharp GuiDemo

路径Samples/CSharp/DotNet/GuiDemo/MainWindow.xaml.cs

功能:WPF 图形界面程序,演示如何在桌面应用中集成 SDK:连接按钮、使能/禁用/回零/运动按钮、实时位置反馈显示。

关键代码片段

private void ConnectButton_Click(object sender, RoutedEventArgs e)
{
    controller = Controller.Connect();
    FeedbackTimer_.Start();
}

private void MoveButton_Click(object sender, RoutedEventArgs e)
{
    double position = double.Parse(PositionBox.Text);
    double speed = double.Parse(SpeedBox.Text);
    controller.Commands.Motion.MoveAbs("X", position, speed);
}

private void FeedbackTimer_Tick(object sender, EventArgs e)
{
    double position = Controller_.Commands.Status.AxisStatus("X", AxisStatusSignal.PositionFeedback);
    FeedbackText.Text = $"Position Feedback X: {position:F3}";
}

运行前提: - 控制器可达 - 目标框架 net10.0-windows(包含 WPF) - 轴 "X" 存在于控制器配置中


CSharp StatusQuery

路径Samples/CSharp/DotNet/StatusQuery/Program.cs

功能:状态查询示例(C++ StatusQuery 的 .NET 版):发送运动后轮询 Commands[task].Status.AxisStatus 的运动完成位(bit 0x400000)直到完成,再读取位置反馈。.NET SDK 无事件回调,运动状态/故障一律经状态查询 API 获取。

关键代码片段

controller.Commands.Axes["X"].Motion.Enable();
controller.Commands[LibraryTask].Motion.MoveAbs("X", 5.0, 10.0);

double axisStatus = controller.Commands[LibraryTask].Status.AxisStatus(AxisX, AxisStatusSignal.AxisStatus);
if (((long)axisStatus & 0x400000) != 0) { /* 运动完成 */ }

运行前提: - 控制器可达(默认 127.0.0.1:60049


CSharp MotionByCommand

路径Samples/CSharp/DotNet/MotionByCommand/Program.cs

功能:标准运动工作流示例(C++ MotionByCommand 的 .NET 版):先设置后运动。模态设置词(ABSRAMP RATEXFFDWELL)没有强类型 C# 方法,统一经 Commands[task].Execute(string) 下发——即 C DLLExecute 的 .NET 对应入口。

关键代码片段

controller.Commands[TaskId.T01].Execute("ABS");
controller.Commands[TaskId.T01].Execute("RAMP RATE X 1000");
controller.Commands[TaskId.T01].Execute("XF 50");
controller.Commands[TaskId.T01].Execute("RAPID X 10");

运行前提: - 控制器可达,轴 "X" 存在于控制器配置中


CSharp MotionByOneScript

路径Samples/CSharp/DotNet/MotionByOneScript/Program.cs

功能推荐的 OneScript 工作方式(C++ MotionByOneScript 的 .NET 版):运动程序保存在外部文件 MotionByOneScript.pgm(构建时自动拷贝到输出目录),客户端只用 OneScript.Load 加载、Run 启动,然后轮询 RefreshStatus / Status 直到状态离开 Running,最后 Unload 卸载。

关键代码片段

var script = controller.Tasks[TaskId.T01].OneScript;
script.Load(scriptPath);
script.Run();

OneScriptStatus status;
do
{
    Thread.Sleep(50);
    script.RefreshStatus();
    status = script.Status;
}
while (status.State == OneScriptState.Running);

script.Unload();

运行前提: - 控制器可达 - MotionByOneScript.pgm 随构建拷贝到输出目录


CSharp PcoSingleAxis

路径Samples/CSharp/DotNet/PcoSingleAxis/Program.cs

功能:单轴 PCO 晶圆栅格打标(C++ PcoSingleAxis 的 .NET 版):展示强类型 PCO API(PCO.Unit/Config/Pulse/Window/Arm/Disarm)与点位运动(MoveAbs/MoveInc + 轮询到位);模态词 ABS/INC 无强类型方法,经 Execute(string) 下发。每行结束用 PCO.Count(axis) 打印累计触发数(自 ARM 起)。

关键代码片段

PCOCommands pco = controller.Commands[Task].PCO;
pco.Unit(PcoUnitMode.EngineeringUnits);
pco.Config("X", 0.02);
pco.Pulse("X", 5.0);
pco.Window("X", -25.0, 25.0);
pco.Arm("X");

controller.Commands[Task].Motion.MoveAbs("X", 30.0, 50.0);
Console.WriteLine($"fired = {pco.Count(0)}");

运行前提: - 控制器可达,轴 "X"(扫描)与 "Y"(步进)存在于控制器配置中


CSharp PcoVector

路径Samples/CSharp/DotNet/PcoVector/Program.cs

功能:矢量 PCO 体育场轮廓切割(C++ PcoVector 的 .NET 版):PCO.ConfigVector("X","Y", pitch) 按两轴合成轨迹长度触发;引入→ PCO.Arm → 轮廓(强类型 Linear + CCWCenter IJ 圆心法)→ PCO.Disarm → 引出过切;拐角平滑开关 VELOCITY ON/OFF 无强类型方法,经 Execute(string) 下发。结束用 PCO.Count(axis) 打印总触发数。

关键代码片段

pco.ConfigVector("X", "Y", 0.05);
controller.Commands[Task].Execute("VELOCITY ON");

var motion = controller.Commands[Task].Motion;
motion.Linear(new[] { "X", "Y" }, new[] { 10.0, 0.0 }, 50.0);
pco.Arm("X");
motion.CCWCenter("X", 0.0, "Y", 30.0, 0.0, 15.0, 50.0);
pco.Disarm("X");

运行前提: - 控制器可达,轴 "X" 与 "Y" 同驱且 CountsPerUnit 一致

相关页面