自动化上位机开发C#100例:如何用面向对象的方式封装雷赛运动控制卡EtherCAT总线卡(C#代码)

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类

文章目录

  • LTDMC.dll下载
  • LTDMC.cs LTDMC.dll C#调用封装下载
  • ICard.cs 运动控制卡接口
  • Card.cs 运动控制卡抽象类
  • CardLTDMC.cs 雷赛运动控制卡EtherCAT总线卡实现类
  • CardList.cs 总线卡列表封装


在这里插入图片描述

LTDMC.dll下载

最新的雷赛运动控制卡SDK,LTDMC.dll下载:
https://download.csdn.net/download/Mr_Wei_/88847834

LTDMC.cs LTDMC.dll C#调用封装下载

最新的雷赛运动控制卡SDK,LTDMC.cs带中文注释 下载:
https://download.csdn.net/download/Mr_Wei_/88847839

ICard.cs 运动控制卡接口

using System.Collections.Generic;namespace iSystem
{public interface ICard{/// <summary>  /// 卡ID  /// </summary> int CardID { get; set; }/// <summary>  /// 第几张卡  /// </summary> int CardNo { get; set; }/// <summary>  /// 卡名称  /// </summary> string CardName { get; set; }/// <summary>  /// 卡类型 0:2410 1:总线  /// </summary> CardType CardType { get; set; }/// <summary>  /// 是否使用  /// </summary> bool IsUsed { get; set; }/// <summary>  /// 是否初始化完成  /// </summary> bool InitSucced { get; set; }/// <summary>/// 初始化/// </summary>/// <returns></returns>int Init();/// <summary>/// 关闭/// </summary>/// <returns></returns>int UnInit();/// <summary>/// 软复位/// </summary>/// <returns></returns>int SoftReset();/// <summary>/// 硬复位/// </summary>/// <returns></returns>int Reset();/// <summary>/// 获取总线卡错误代码/// </summary>/// <returns></returns>int GetErrCode();/// <summary>/// 清除总线卡错误代码/// </summary>/// <returns></returns>int ClearErrCode();/// <summary>/// 多轴插补/// </summary>/// <param name="lstMotor">电机列表</param>/// <param name="lstDist">目标位置</param>/// <param name="mode">移动模式</param>/// <returns></returns>bool MultMove(List<Motor> lstMotor, List<double> lstDist, int mode = 0, ushort crd = 0);/// <summary>/// 检测多轴运动是否停止/// </summary>/// <param name="crd"></param>/// <returns>0停止 1未停止</returns>int CheckMultMoveDone(ushort crd = 0);/// <summary>/// 等多轴运动停止/// </summary>/// <param name="OutTime">等待时间</param>/// <param name="crd"></param>/// <returns>是否超时</returns>bool WaitMultMoveDone(int OutTime, ushort crd = 0);}
}

Card.cs 运动控制卡抽象类

using System.Collections.Generic;namespace iSystem
{public partial class Card : ICard{#region Properties/// <summary>  /// 卡ID  /// </summary> public int CardID { get; set; } = 1;/// <summary>  /// 第几张卡  /// </summary> public int CardNo { get; set; } = 0;/// <summary>  /// 卡名称  /// </summary> public string CardName { get; set; } = "卡1";/// <summary>  /// 卡类型 0:2410 1:总线  /// </summary> public CardType CardType { get; set; } = CardType.LS2410;/// <summary>  /// 是否使用  /// </summary> public bool IsUsed { get; set; } = true;/// <summary>  /// 是否初始化完成  /// </summary> public bool InitSucced { get; set; } = false;#endregion#region Constructorspublic Card(){}public Card(int cardID){CardID = cardID;}public Card(Card model){CardID = model.CardID;CardName = model.CardName;CardNo = model.CardNo;CardType = model.CardType;IsUsed = model.IsUsed;InitSucced = model.InitSucced;}#endregion#region Methods/// <summary>/// 初始化/// </summary>/// <returns></returns>public virtual int Init(){//int aa = Program.g_MachineType;return 0;}/// <summary>/// 关闭/// </summary>/// <returns></returns>public virtual int UnInit(){return 0;}/// <summary>/// 软复位/// </summary>/// <returns></returns>public virtual int SoftReset(){return 0;}/// <summary>/// 硬复位/// </summary>/// <returns></returns>public virtual int Reset(){return 0;}/// <summary>/// 获取总线卡错误代码/// </summary>/// <returns></returns>public virtual int GetErrCode(){return 0;}/// <summary>/// 清除总线卡错误代码/// </summary>/// <returns></returns>public virtual int ClearErrCode(){return 0;}/// <summary>/// 多轴插补/// </summary>/// <param name="lstMotor">电机列表</param>/// <param name="lstDist">目标位置</param>/// <param name="mode">移动模式</param>/// <returns></returns>public virtual bool MultMove(List<Motor> lstMotor, List<double> lstDist, int mode = 0, ushort crd = 0){return false;}/// <summary>/// 检测多轴运动是否停止/// </summary>/// <param name="crd"></param>/// <returns>0停止 1未停止</returns>public virtual int CheckMultMoveDone(ushort crd = 0){return 1;}/// <summary>/// 等多轴运动停止/// </summary>/// <param name="OutTime">等待时间</param>/// <param name="crd"></param>/// <returns>是否超时</returns>public virtual bool WaitMultMoveDone(int OutTime, ushort crd = 0){bool result = false;return result;}#endregion}
}

CardLTDMC.cs 雷赛运动控制卡EtherCAT总线卡实现类

using System;
using System.Windows.Forms;namespace iSystem
{public class CardLTDMC : Card{public CardLTDMC() : base(){//CardName = "DMC2410";}public CardLTDMC(int cardID) : base(cardID){this.CardID = cardID;}public CardLTDMC(Card model) : base(model){}/// <summary>/// 初始化电机卡/// </summary>/// <returns>返回卡数</returns>public override int Init(){int result = 0;InitSucced = false;try{result = LTDMC.dmc_board_init();ushort _num = 0;ushort[] cardids = new ushort[8];uint[] cardtypes = new uint[8];short res = LTDMC.dmc_get_CardInfList(ref _num, cardtypes, cardids);if (result > 0)InitSucced = true;}catch (Exception ex){string msg = "电机卡初始化失败!" + ex;MessageBox.Show(msg);result = 0;//throw;}return result;}/// <summary>/// 关闭电机卡/// </summary>/// <returns></returns>public override int UnInit(){int result = 1;try{LTDMC.dmc_board_close();InitSucced = false;}catch (System.Exception ex){string msg = "电机卡卸载失败!" + ex;MessageBox.Show(msg);result = 0;}return result;}public override int SoftReset(){int result = 1;result = LTDMC.dmc_soft_reset((ushort)CardNo);//UnInit();//for (int i = 0; i < 15; i++)//总线卡软件复位耗时15s左右//{//    Application.DoEvents();//    Thread.Sleep(1000);//}//Init();return result;}/// <summary>/// 获取总线卡错误/// </summary>/// <returns>0正常,其它值出错</returns>public override int GetErrCode(){ushort errCode = 0;LTDMC.nmc_get_errcode((ushort)CardNo, 2, ref errCode);return errCode;}/// <summary>/// 清除总线卡错误代码/// </summary>/// <returns></returns>public override int ClearErrCode(){short errCode = 0;errCode = LTDMC.nmc_clear_errcode((ushort)CardNo, 2);return errCode;}}
}

CardList.cs 总线卡列表封装


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace iSystem
{public class CardList{private static readonly string ConfigPath = $@"{GlobalData.ConfigDir}card.json";public static Dictionary<int, Card> Devs = new Dictionary<int, Card>();public static ushort CardID=0;/// <summary>/// 初始化文件/// </summary>public static void InitJsonFile(){//Devs.Add(0, new CardDMC2410(0));//Devs.Add(1, new CardDMC2410(1));//Devs.Add(2, new CardDMC2410(2));//Devs.Add(3, new CardDMC2410(3));Devs.Add(0, new CardLTDMC(0));Save();}/// <summary>/// 加载/// </summary>public static void Load(){if (!File.Exists(ConfigPath)){InitJsonFile();}Devs = Loader.LoadFromJson<Dictionary<int, Card>>(ConfigPath);}/// <summary>/// 初始化电机卡/// </summary>/// <returns>返回卡数</returns>public static void Init(){IsInitSucceed = false;try{int num = LTDMC.dmc_board_init();if (num <= 0 || num > 8){//UIHelper.ShowError("电机卡初始化失败!");}ushort _num = 0;ushort[] cardids = new ushort[8];uint[] cardtypes = new uint[8];short res = LTDMC.dmc_get_CardInfList(ref _num, cardtypes, cardids);if (num > 0){IsInitSucceed = true;CardID = cardids[0];}}catch (Exception ex){string msg = "电机卡初始化失败!" + ex.Message;UIHelper.ShowErrorForm(msg);}}/// <summary>/// 硬复位/// </summary>/// <returns></returns>public static async Task<bool> Reset(){Logger.Info("总线卡硬件复位进行中……");LTDMC.dmc_board_reset();LTDMC.dmc_board_close();for (int i = 15; i > 0; i--)//总线卡硬件复位耗时15s左右{Application.DoEvents();await Task.Delay(1000);Logger.Info($"总线卡硬复位……{i}s");}//MotorListForm.Instance.HideWaitForm();LTDMC.dmc_board_init();Logger.Info("总线卡硬件复位完成,请确认总线状态");ushort errcode = 0;LTDMC.nmc_get_errcode(CardID, 2, ref errcode);if (errcode == 0){Logger.Info("EtherCAT总线正常");return true;}else{Logger.Error($"EtherCAT总线出错 errcode:{errcode}");return false;}}/// <summary>/// 软复位/// </summary>/// <returns></returns>public static async Task<bool> SoftReset(){Logger.Info("总线卡软件复位进行中……");LTDMC.dmc_soft_reset(CardID);LTDMC.dmc_board_close();ushort errcode = 0;for (int i = 15; i > 0; i--)//总线卡软复位耗时15s左右{Application.DoEvents();await Task.Delay(1000);Logger.Info($"总线卡软复位……{i}s");//LTDMC.nmc_get_errcode(CardID, 2, ref errcode);//if (errcode == 0)//{//    break;//}}LTDMC.dmc_board_init();Logger.Info("总线卡软复位完成,请确认总线状态");LTDMC.nmc_get_errcode(CardID, 2, ref errcode);if (errcode == 0){Logger.Info("EtherCAT总线正常");return true;}else{Logger.Error($"EtherCAT总线出错:{errcode}");return false;}}/// <summary>/// 获取总线状态/// </summary>/// <returns></returns>public static bool GetStatus(){ushort errcode = 0;LTDMC.nmc_get_errcode(0, 2, ref errcode);return errcode == 0;}/// <summary>/// 直线插补相对运动/// </summary>public static bool LineOffset(IMotor aMotor, IMotor bMotor, double aDist, double bDist){if (!CardList.IsInitSucceed)return false;ushort[] AxistList = new[] { aMotor.AxisNo, bMotor.AxisNo };double[] Target_Pos = new double[] { aDist, bDist };ushort mode = 0;ushort crd = 0;LTDMC.dmc_set_vector_profile_unit(aMotor.CardNo, 0, aMotor.MinSpeed, aMotor.MaxSpeed, aMotor.AccTime, aMotor.DecTime, 100);LTDMC.dmc_line_unit(aMotor.CardNo, crd, 2, AxistList, Target_Pos, mode);while (LTDMC.dmc_check_done_multicoor(aMotor.CardNo, crd) == 0){Application.DoEvents();}return true;}/// <summary>/// 直线插补绝对运动/// </summary>public static bool LineTo(IMotor aMotor, IMotor bMotor, double aDist, double bDist){if (!CardList.IsInitSucceed)return false;ushort[] AxistList = new[] { aMotor.AxisNo, bMotor.AxisNo };double[] Target_Pos = new double[] { aDist, bDist };ushort mode = 1;ushort crd = 0;LTDMC.dmc_set_vector_profile_unit(aMotor.CardNo, 0, aMotor.MinSpeed, aMotor.MaxSpeed, aMotor.AccTime, aMotor.DecTime, 100);LTDMC.dmc_line_unit(aMotor.CardNo, crd, 2, AxistList, Target_Pos, mode);//while (LTDMC.dmc_check_done_multicoor(aMotor.CardNo, crd) == 0)//{//    Application.DoEvents();//}return true;}/// <summary>/// 检测插值运动是否停止/// </summary>public static bool CheckLineDone(){while (LTDMC.dmc_check_done_multicoor(0,0) == 0){Application.DoEvents();}return (LTDMC.dmc_check_done_multicoor(0, 0) == 1);}/// <summary>/// 等多轴运动停止/// </summary>public bool WaitLineDone(int outTime){return HiTimer.WaitCondition(CheckLineDone, outTime);}/// <summary>/// 紧急停止所有轴/// </summary>public void EmergentStop(){LTDMC.dmc_emg_stop(0);}/// <summary>/// 保存/// </summary>public static void Save(){Loader.SaveToJson(Devs, ConfigPath);}/// <summary>/// 卡初始化是否成功/// </summary>public static bool IsInitSucceed { get; set; }public static Card GetByKey(int key){return Devs.ContainsKey(key) ? Devs[key] : null;}public static Card GetByIndex(int index){return Devs[index];}public static int Count => Devs.Count();/// <summary>/// 卡0/// </summary>public static Card Card0 => Devs[0];/ <summary>/ 卡1/ </summary>//public static Card DMC24101 => Devs[1];/ <summary>/ 卡2/ </summary>//public static Card DMC24102 => Devs[2];/ <summary>/ 卡3/ </summary>//public static Card DMC24103 => Devs[3];}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/260284.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给label-studio 配置sam(segment anything)ml 记录

给label-studio 配置sam&#xff08;segment anything&#xff09;ml 后端记录 配置ml后台下载代码下载模型文件创建环境模型转换后端服务启动 配置label-studio 前端配置模型后端连接配置标注模板标注界面使用 参考链接 配置ml后台 下载代码 git clone https://github.com/H…

Web服务器基础

Web服务器基础 【一】前端概述 【1】HTML HTML&#xff08;超文本标记语言&#xff09;是用于创建网页结构的标记语言。它定义了网页的骨架&#xff0c;包括标题、段落、列表、链接等元素&#xff0c;但没有样式。可以将HTML视为网页的结构和内容的描述。 【2】CSS css&…

mac安装python

1、官网下载安装包&#xff1a; https://www.python.org/downloads/macos/ 2、运行安装包&#xff1a; 3、验证

【conda环境 安装 tensorflow2.2】 解决方案

1.检查anaconda安装&#xff1a;在cmd输入 conda --version 2.检测已经安装的环境&#xff1a;conda info --envs 3.新建一个python3.5的环境&#xff0c;tensorflow&#xff1a; ###conda create -n xxx python3.5 xxx为虚拟环境名 ###conda create -n xxx python3.6 xxx为虚拟…

office的excel中使用,告诉我详细的解决方案,如何变成转化为金额格式

在Office的Excel中&#xff0c;如果你想将名为"MEREFIELD"的公式结果转换为金额格式&#xff0c;你可以遵循以下详细步骤来实现&#xff1a; 书写MEREFIELD公式&#xff1a; 首先&#xff0c;在Excel中输入或确认你的MEREFIELD公式。例如&#xff0c;假设这个公式是用…

spfa的特殊用法

spfa通常用来求带有负权边的最短路问题&#xff0c;但是它还有两种特别的用法——求负环和求差分约束 求负环 我们回顾spfa算法&#xff0c;本质上是一个点的距离被更新以后再用它去更新其他的点。将被更新的点放入队列中&#xff0c;这样一直更新&#xff0c;直到没有任何点…

【git 使用】超级好用的 git reset 和 git revert 功能对比和使用方法

首先你要知道 git 区分暂存区和工作区&#xff0c;如果你用过 sourcetree 你就会知道 git reset 超级好用 git reset 命令用于将当前分支的 HEAD 指针移动到指定的提交&#xff0c;并且可以选择性地修改工作区和暂存区的状态。git reset 命令有几种常用的用法&#xff0c;主要…

20-k8s中pod的调度-nodeSelector节点选择器

一、概念 我们先创建一个普通的deploy资源&#xff0c;设置为10个副本 [rootk8s231 dns]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm01 spec: replicas: 10 selector: matchLabels: k8s: k8s template: metadata: …

【Java EE初阶二十】关于http(一)

1. 初识http HTTP 最新的版本应该是 HTTP/3.0&#xff0c;目前大规模使用的版本 HTTP/1.1&#xff1b; 下面来简单说明一下使用 HTTP 协议的场景: 1、浏览器打开网站 (基本上) 2、手机 APP 访问对应的服务器 (大概率) 前面的 TCP与UDP 和http不同&#xff0c;HTTP 的报文格式&a…

Mysql数据库主从集群从库Slave因为RelayLog过多过大引起服务器硬盘爆满生产事故实战解决

Mysql数据库主从集群从库slave因为RelayLog过多过大引起从库服务器硬盘爆满生产事故实战解决 一、MySQL数据库主从集群概念 MySQL数据库主从集群是一种高可用性和读写分离的数据库架构&#xff0c;它基于MySQL的复制&#xff08;Replication&#xff09;技术来同步数据。在主…

一文读懂组态图和组态软件,最浅显的解读。

一、什么是组态图 组态图是指在工业自动化领域中&#xff0c;用来描述和展示控制系统中各个组件之间关系和工作流程的图形化表示方法。它是一个系统的框架图&#xff0c;通过图形符号和连接线&#xff0c;将各个组件&#xff08;如传感器、执行器、控制器等&#xff09;以及它…

unity 使用VS Code 开发,VS Code配置注意事项

vscode 对应的插件&#xff08;unity开发&#xff09; 插件&#xff1a;.Net Install Tool,c#,c# Dev Kit,IntelliCode For C# Dev Kit,Unity,Unity Code Snippets 本人现在是用了这些插件 unity需要安装Visual Studio Editor 1、.Net Install Tool 设置 需要在设置里面配置…

【Java】数据类型与变量

1.数据类型 在Java中数据类型主要分为两类&#xff1a;基本数据类型和引用数据类型。 基本数据类型有四类八种&#xff1a; 四类&#xff1a;整型、浮点型、字符型以及布尔型八种&#xff1a; 注意&#xff1a;不论是在16位系统还是32位系统&#xff0c;int都占用4个字节&am…

HTTP 请求 400错误

问题 HTTP 请求 400错误 详细问题 客户端发送请求 public static UserInfo updateUserInfo(UserInfo userInfo) {// 创建 OkHttpClient 对象OkHttpClient client new OkHttpClient();// 创建请求体MediaType JSON MediaType.parse("application/json; charsetutf-8&…

【微服务生态】Docker

文章目录 一、基础篇1. 简介2. 下载与安装3. 常用命令3.1 帮助启动类3.2 镜像命令3.3 容器命令 4. Docker 容器数据券5. Docker 镜像5.1 commit 生成镜像5.2 Docker Registry5.3 发布镜像 6. Docker 常规安装软件 二、高级篇1. Dockerfile1.1 概述1.2 基础知识1.3 Dockerfile常…

【C++航海王:追寻罗杰的编程之路】vector

目录 1 -> vector的介绍及使用 1.1 -> vector的介绍 1.2 -> vector的使用 1.2.1 -> vector的介绍 1.2.2 -> vector iterator的使用 1.2.3 -> vector空间增长问题 1.2.4 -> vector的增删查改 1.2.5 -> vector迭代器失效问题 2 -> vector的深…

css3的var()函数

css3的var()函数 变量要以两个连字符--(横杆)(减号)为开头 变量可以在:root{}中定义, :root可以在css中创建全局样式变量。通过 :root本身写的样式&#xff0c;相当于 html&#xff0c;但优先级比后者高。 在CSS3中&#xff0c;var()函数是一个用于插入CSS自定义属性&#xff…

突破性进展!加州大学伯克利分校提出Causal Transformer模型,实现人形机器人通过强化学习适应真实世界人形运动

人形机器人具有模仿人类行为和形态的能力&#xff0c;可以胜任一些复杂、危险或单调的工作。除却在传统的工业生产线和仓储物流领域帮助解决劳动力短缺问题&#xff0c;在医疗、教育、家庭服务等多个领域人形机器人也具有巨大应用潜力。 然而&#xff0c;由于智能化水平仍有待…

第三十六天| 435. 无重叠区间、763.划分字母区间、56. 合并区间

Leetcode 435. 无重叠区间 题目链接&#xff1a;435 无重叠区间 题干&#xff1a;给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 思考&#xff1a;贪心法。和452 用最少数量的…

数据库的备份模式(完全备份,增量备份,差异备份)

数据库的备份 备份原因 数据的丢失 数据的删除 备份目标 数据的一致性 数据的可用性 备份技术 物理备份/冷备份 直接复制数据库文件&#xff0c;适用于大型数据库环境&#xff0c;不受存储引擎的限制&#xff0c;但不能恢复到不同的MySQL版本。 常用的冷备份工具 ta…