ICommand 视觉、运控522

ICommand

一、RelayCommand 到底是干嘛的?

一句话:它就是个 「方法包装器」 ,把你 ViewModel 里的普通方法(比如 Connect()),包装成 XAML 里 Button 能绑定的 ICommand 接口对象。

核心目的:让 UI 控件(按钮)能调用 ViewModel 里的方法,实现 MVVM 的解耦。

本质:就是实现了 ICommand 接口的一个简单类。

二、必记的「核心骨架」

1. 第一步:实现 ICommand 接口

csharp 复制代码
public class RelayCommand : ICommand
{
    // 接口要求的3个成员
    public bool CanExecute(object parameter); // 判断能不能执行
    public void Execute(object parameter);     // 真正执行的逻辑
    public event EventHandler CanExecuteChanged; // 执行状态变化通知
}

2. 第二步:定义 2 个私有字段(存要执行的方法)

csharp 复制代码
// 要执行的方法(比如你的 Connect())
private readonly Action _execute;
// 判断能不能执行的方法(可选,比如按钮是否禁用)
private readonly Func<bool> _canExecute;

3. 第三步:写 2 个构造函数(适配你的调用方式)

csharp 复制代码
// ① 单参数:只传要执行的方法,默认永远可以执行(最常用)
public RelayCommand(Action execute)
{
    _execute = execute ?? throw new ArgumentNullException(nameof(execute));
    _canExecute = () => true; // 默认永远可执行
}

// ② 双参数:同时传"执行方法"和"能否执行的判断"
public RelayCommand(Action execute, Func<bool> canExecute)
{
    _execute = execute ?? throw new ArgumentNullException(nameof(execute));
    _canExecute = canExecute ?? throw new ArgumentNullException(nameof(canExecute));
}

4. 第四步:实现接口方法(把逻辑交给字段)

csharp 复制代码
// 能否执行:调用 _canExecute 方法
public bool CanExecute(object parameter) => _canExecute();

// 执行:调用 _execute 方法
public void Execute(object parameter) => _execute();

// 状态变化通知:用 CommandManager 绑定(固定写法,背下来就行)
public event EventHandler CanExecuteChanged
{
    add => CommandManager.RequerySuggested += value;
    remove => CommandManager.RequerySuggested -= value;
}

接口 + 2字段 + 2构造 + 3方法 + 1事件

1 接口:实现 ICommand

2 字段:_execute + _canExecute

2 构造:单参数(Action)+ 双参数(Action + Func)

3 方法:CanExecute / Execute / CanExecuteChanged(事件)

1 固定写法:CommandManager.RequerySuggested

Halcon视觉

一、前置核心配置(第一步必做)

1. DLL 引用要求

必须引用 2 类库

HalconDotNet.dll:C# 托管桥接库(项目右键→添加引用)

halcon.dll(及依赖):C++ 底层算法库(直接放进程序运行目录)

关键设置:原生 DLL 属性 → 复制到输出目录 = 如果较新则复制

作用:没有 DLL,C# 完全调用不了 Halcon 任何功能

2. 项目平台 强制设为 x64(唯一正确选项)

必须这么做的 4 个原因

Halcon 底层是 64 位 C++ 编写,不支持 32 位系统

默认 Any CPU 会自动适配 32/64 位,必报 DLL 找不到

机器视觉图像占用内存大,64 位程序内存空间更大,不溢出

工业相机、轴卡等设备 SDK 全是 64 位,统一位数兼容

二、核心代码固定流程(死死记住 4 步)

csharp 复制代码
// 1. 引用命名空间
using HalconDotNet;

// 按钮点击事件
private void btn_Click(object sender, RoutedEventArgs e)
{
    // UI线程异步绘图(必加,防卡顿/报错)
    Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() =>
    {
        // ① 读取图像:创建HImage对象,加载图片
        HImage image = new HImage("fabrik");

        // ② 设置显示区域:适配图片尺寸,完整显示
        HalconViewer.HalconWindow.SetPart(0, 0, 511, 511);

        // ③ 显示图像:绘制到界面控件
        HalconViewer.HalconWindow.DispImage(image);

        // ④ 手动释放资源:必须加!防内存泄漏
        image.Dispose();
    }));
}

四、高频报错坑点 + 规避方法(必记)

报错:DLL 找不到 / 无法加载程序集

原因:

缺少 halcon.dll 原生库

DLL 没有复制到输出目录

项目平台不是 x64

解决:

补全 DLL + 设置复制属性

项目属性→生成→目标平台强制 x64

运动控制基础概念

一、轴卡控制

基本定义

安装在工控机内的运动控制板卡,是上位机与电机之间的指令中转硬件。

核心作用

接收 C# 上位机下发的运动指令,解析后驱动伺服、步进电机完成机械动作,同时采集设备运行状态回传上位机。

市面常用型号

固高、雷赛、新代(工控面试高频提及固高轴卡)

执行链路

上位机下发指令 → 轴卡接收解析 → 驱动电机运转

二、点位移动

按照预设坐标控制设备精准走位,分为三种常用模式

绝对定位:以设备机械原点为基准,移动到固定坐标位置

相对定位:以设备当前所在位置为基准,偏移指定距离

原点回归:设备复位校准基准位置,消除累计定位误差

三、设备启停基础逻辑

启动:电机上电使能,设备进入就绪状态,触发运动指令开始作业

正常停止:逐级减速平稳停机,保护机械结构不受冲击

紧急停止:故障、危险场景下立刻断电制动,优先保障设备与人身安全

上位机功能:下发启停指令,实时监测运行、待机、故障状态

四、调速基础逻辑

匀速运行:设备全程保持固定转速、进给速度作业

加减速调速:启动阶段缓慢加速、停止前逐步减速,规避机械碰撞、抖动

操控方式:上位机设置速度数值,下发至轴卡即可完成速度调节

五、工业常用通信协议及作用

Modbus

工业通用简易协议,多用于读写设备寄存器,实现设备启停控制、传感器数据、点位参数读取

OPC UA

跨设备、跨系统通用通信协议,用于上位机对接多台设备、同步 MES 生产管理系统数据

SECS/GEM

半导体、锂电行业专用协议,负责设备间交互、生产工序数据上报

TCP/IP

网络通信方式,通过网线实现电脑与工控设备之间指令、数据传输

整体工作流程

C# 上位机编辑点位、速度、启停指令 → 通信协议传输指令 → 轴卡驱动电机动作 → 设备状态反向回传上位机展示判断

相关推荐
czhc11400756632 天前
视觉521 halcon24.05 测试
视觉
夏莉莉iy14 天前
[ICCV 2023]Scalable Diffusion Models with Transformers
人工智能·深度学习·transformer·图像·扩散模型·视觉·dit
微光闪现4 个月前
深圳渐进多焦点验配专业解析:标准化服务如何保障中老年视觉品质
视觉
MM_MS4 个月前
Halcon小案例--->路由器散热口个数(两种方法)
人工智能·算法·目标检测·计算机视觉·视觉检测·智能路由器·视觉
深蓝学院4 个月前
李飞飞团队2026开年首篇工作:一张RGB-D图像让机器人野外零样本全能操作
机器人·点云·视觉·机器人操作·具身智能·世界模型
txwtech7 个月前
第10篇 石墨盘自动插脚机视觉引导开发
开发语言·视觉
放羊郎8 个月前
SLAM算法分类对比
人工智能·算法·分类·数据挖掘·slam·视觉·激光
weixin_468466859 个月前
电磁波成像(X射线、CT成像)原理简介
图像处理·相机·ct·视觉·pet·x射线·成像原理
desssq10 个月前
2025电赛e题:openmv识别过程丢失矩形
电赛·视觉·openmv·全国大学生电子设计大赛