当前位置:首页 > 技术 > 正文内容

Aerotech A3200 任务与程序管理接口详解

访客 技术 2026年7月18日 2

Aerotech.A3200.Tasks 命名空间是 A3200 控制器 .NET SDK 中用于程序调度和任务监控的核心模块。通过该命名空间,开发者可以精确控制控制器内部 32 个任务栈的运行状态,并管理已加载到内存中的程序文件。

核心类与枚举概览

名称 类型 描述
LoadedProgram 表示已加载到控制器内存中的程序实例。
Task 表示控制器的执行任务槽,提供运行、停止和调试程序的接口。
Program 提供对特定任务中运行程序的具体控制,如加载、启动和队列操作。
TaskStatus 包含任务的实时状态信息,包括错误、警告和运行模式。
TaskState 枚举 定义任务的当前状态(如 Idle, Running, Error 等)。
PathKind 枚举 指定程序路径的类型(源代码 Source 或 二进制 Object)。

已加载程序 (LoadedProgram) 的管理

LoadedProgram 类主要用于维护控制器内存中的程序文件。通过该类,可以查询程序与任务的关联关系,并执行卸载操作以释放内存。

方法与属性

  • Unload(): 从控制器内存中完全移除该程序。
  • AssociatedTasks: 返回一个集合,包含所有当前正在关联或运行该程序的任务。
  • Name: 获取程序在控制器上的文件名。

代码示例:程序清理逻辑

try {
    // 建立与 A3200 控制器的连接
    Controller a3200 = Controller.Connect();

    // 检查并卸载指定的特定程序
    const string fileName = "motion_script.pgm";
    if (a3200.LoadedPrograms.Contains(fileName)) {
        var targetPgm = a3200.LoadedPrograms[fileName];
        // 在卸载前确保停止所有相关任务
        foreach (Task activeTask in targetPgm.AssociatedTasks) {
            activeTask.Program.Stop();
        }
        targetPgm.Unload();
    }

    // 批量停止所有任务并清空内存程序
    foreach (LoadedProgram pgm in a3200.LoadedPrograms) {
        pgm.Unload(); 
    }

    Controller.Disconnect();
} catch (Exception error) {
    Console.WriteLine("操作失败: " + error.Message);
}

程序执行与队列模式 (Program)

Program 类是 Task 对象的子属性,负责执行具体的加载和运行指令。除了常规的 Run() 方法外,它还支持队列模式(Queue Mode),允许动态地向控制器发送运动指令流。

关键方法

  • InitializeQueue(): 将当前任务切换至指令队列模式。
  • Load(path): 编译并关联程序到任务,但不立即执行。
  • Run(path): 一键完成编译、加载并启动程序。
  • Stop(): 终止当前任务中程序的运行。

代码示例:指令队列模式应用

try {
    Controller controller = Controller.Connect();
    // 获取 1 号任务句柄
    Task task1 = controller.Tasks[TaskId.T01];

    // 切换到队列模式
    task1.Program.InitializeQueue();

    // 设置增量运动模式
    controller.Commands.Motion.Setup.Incremental();
    controller.Commands[TaskId.T01].Motion.Enable("X");

    // 循环向队列中推送运动指令
    for (int step = 0; step < 500; step++) {
        bool commandSent = false;
        while (!commandSent) {
            try {
                // 发送直线运动指令:轴 X,距离 2mm,速度 50mm/s
                controller.Commands[TaskId.T01].Motion.Linear("X", 2, 50);
                commandSent = true;
            } catch (QueueBufferFullException) {
                // 如果缓冲区已满,等待 5 毫秒后重试
                System.Threading.Thread.Sleep(5);
            }
        }
    }

    // 监控队列执行进度,直到所有指令运行完毕
    while (!task1.Status.QueueStatus.QueueBufferEmpty) {
        System.Threading.Thread.Sleep(20);
    }

    // 停止队列并释放任务
    task1.Program.Stop();
    Controller.Disconnect();
} catch (Exception ex) {
    Console.WriteLine("异常详情: " + ex.ToString());
}

任务位置信息 (ProgramFilePoint)

当需要进行断点调试或精确定位程序执行行号时,可以使用 ProgramFilePoint 类。它记录了程序在源代码或二进制文件中的具体位置。

成员 说明
LineNumber 当前执行到的行号。
FileName 程序文件的完整路径或名称。
PathKind 指示定位是基于源码还是编译后的二进制文件。
标签: AerotechA3200

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。