当前位置: 首页 > news >正文

运动控制卡网络通讯的心跳检测之C#上位机编程

本文导读

今天,正运动小助手给大家分享一下如何使用C#上位机编程实现运动控制卡网络通讯的心跳检测功能。

01 ECI2618B硬件介绍

ECI2618B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持6轴,可扩展至12轴的运动控制,用以实现直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴以及机械手指令等简单的轨迹控制需求;采用优化的网络通讯协议可以实现实时的运动控制。
在这里插入图片描述

ECI2618B控制卡功能特点:
(1)本身支持6差分脉冲轴+4单端脉冲轴运动控制,最多可扩展至12轴运动控制。
(2)脉冲输出模式:脉冲/方向或双脉冲。
(3)AXIS接口支持编码器位置测量,可以配置为手轮输入模式。
(4)专用的手轮输入接口。
(5)每轴最大输出脉冲频率10MHz。
(6)通过CAN总线,最多可扩展到256个隔离输入口和256个隔离输出口。
(7)轴正负限位信号口/原点信号口可以随意配置到任何输入口。
(8)通用数字输出口最大输出电流可达500mA,可直接驱动部分电磁阀。
(9)支持点位运动、电子凸轮、直线插补、圆弧插补、连续插补运动、机械手指令。
(10)支持Basic多文件多任务编程。
(11)多种程序加密手段,保护客户的知识产权。
在这里插入图片描述

ECI2000系列经济型多轴运动控制卡可用于电子半导体设备(检测类设备、组装类设备、锁附类设备、焊锡机)、点胶设备和流水线等12轴以内脉冲应用场合。
控制器支持windows、linux、Mac、Android、wince各种操作系统下的开发,提供vc、c#、vb.net、labview等各种环境的dll库,如下图。上位机软件编程参考《ZMotion PC函数库编程手册》。
在这里插入图片描述

02 为什么要进行心跳检测,作用是什么

1.实时监测:
通过检测上位机与下位机的通信状态,可以实时监测上位机是否正常连接和通讯。一旦发现上位机掉线,系统可以及时采取相应的应对措施,避免因为掉线导致通讯中断或数据丢失。
2.系统稳定性:
上位机是控制系统的核心部分,掉线可能会导致整个系统失去控制。掉线检测可以保障系统的稳定性,及时发现掉线情况并进行处理,保持系统正常运行。
3.数据完整性:
上位机通常负责与用户界面交互、数据处理和决策,数据的完整性对系统运行至关重要。通过掉线检测,系统可以及时发现掉线情况,保证数据的完整性和准确性。
4.故障诊断:
掉线检测可以作为系统故障诊断的一种手段,通过监测上位机的状态,可以帮助确定系统出现问题的具体原因,加快故障排查和修复的速度。

03 BASIC语言进行心跳检测脚本语言编写

(一)前情提要
心跳检测的实现主要是两个部分组成:
1.上位机周期修改变量;
2.控制器程序周期检测变量并在掉线的时候执行一些急停操作。
在示例中,上位机程序会周期修改Heart_Status,控制器程序会周期扫描Heart_Status,并在检测到变量的值异常的时候打开输出口,模拟掉线急停的操作。
流程图如下所示:
在这里插入图片描述

(二)创建变量

'**************************心跳相关变量定义************************
Global Heart_StarFlag               '开始通讯标识变量
Global Heart_Status                 '通讯标识变量
Global Heart_Time                   '心跳超时时间
Global Heart_OutNum                 '急停OP数量
Global OutList_Address              '急停OUTmodbus_long起始地址(Ps:3系列以下,自定义变量为24位浮点数,32位精度丢失,用modbus_long来代替)
GLOBAL CONST cVer=CONTROL
Heart_StarFlag =-1
Heart_Status = 0
Heart_OutNum = 10
OutList_Address =0
dim i,j

(三)开启扫描
扫描流程:
1.等待上位机发送扫描开始指令;
2.根据控制器信号进入不同扫描程序(原理一样只是实现略有不同);
3.将通讯标识变量置1;
4.等待一个超时时间;
5.判断通讯标识;
6.如果为1表示上位机没有进行通讯,掉线状态。进行掉线保护操作;
7.为0表示进行通讯,正常状态。开启下一次扫描。

WHILE TRUEWAIT until Heart_StarFlag = 1                       '等待PC软件连接DELAY Heart_Time                                    'PC连接之后,延时一个超时时间,避免上位WHILE TRUEif Heart_Status = 0 then Heart_Status = 1           '等待PC上修改通讯变量ticks = Heart_Time                              '超时判断处理,等待PC上修改Heart_Flag = 0WAIT until ticks < 0 or Heart_Status=0if Heart_Status = 1 THENRAPIDSTOP(2)WAIT IDLEOP(0,31,MODBUS_LONG(OutList_Address))   'MODBUS_LONG存储32位整型按位控制掉线急停IOHeart_StarFlag=-1Heart_Status = 0 ELSEOP(0,31,0)EndifWEND
WEND
end  

04 C#语言进行心跳检测开发

(一)新建WinForm项目并添加函数库
1.在VS2010菜单“文件”→“新建”→“项目”,启动创建项目向导。
在这里插入图片描述

2.选择开发语言为“Visual C#”和.NET Framework 4以及Windows窗体应用程序。
在这里插入图片描述

3.找到厂家提供的光盘资料里面的C#函数库,路径如下(32位库为例)。
(1)进入厂商提供的光盘资料找到“04PC函数”文件夹,并点击进入。
在这里插入图片描述

(2)选择“01PC函数库V2.1”文件夹。
在这里插入图片描述

(3)选择“windows平台”文件夹。
在这里插入图片描述

(4)根据需要选择对应的函数库,这里选择32位库。
在这里插入图片描述

(5)解压C#压缩包,里面有C#对应的函数库。
在这里插入图片描述

(6)函数库具体路径如下。
在这里插入图片描述

4.将厂商提供的C#的库文件以及相关文件复制到新建的项目中。
(1)将Zmcaux.cs文件复制到新建的项目里面中。
在这里插入图片描述

(2)将zauxdll.dll和zmotion.dll文件放入bin\debug文件夹中。
在这里插入图片描述

5.用vs打开新建的项目文件,在右边的解决方案资源管理器中点击“显示所有文件”,然后鼠标右击Zmcaux.cs文件,点击“包括在项目中”。
在这里插入图片描述
在这里插入图片描述

6.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入using cszmcaux,并声明控制器句柄g_handle。
在这里插入图片描述

(二)PC函数介绍
1.PC函数手册可在光盘资料查看,具体路径如下。
在这里插入图片描述

2.链接控制器,获取链接句柄。
在这里插入图片描述

3.下载并运行控制器程序。
在这里插入图片描述

4.设置控制器程序参数。
在这里插入图片描述
在这里插入图片描述

05 C#例程建设之网络通讯的心跳检测

(一)前情提要
上位机软件的主要功能:
1.下载并运行控制器程序;
2.设置扫描参数;
3.开启和关闭心跳检测;
4.设置急停IO。
界面如下图所示:
在这里插入图片描述

(二)例程讲解
1.连接控制器获取句柄,上位机操作通过获取到的句柄来操作控制器。

//连接控制器,控制器默认IP是192.168.0.11
ZauxErr = zmcaux.ZAux_OpenEth("192.168.0.11", out g_Handle);
if (0 != ZauxErr)
{AlmInifFile.Write(DateTime.Now.ToString("F"), "ZAux_OpenEth执行错误,错误码:" + ZauxErr.ToString(), "错误码信息");
}

2.下载心跳bas程序
函数介绍:
通过OpenFileDialog获取控制器程序路径,然后通过openFile判断文件是否为空,最后通过ZAux_BasDown将控制器程序下载到控制器。

private void btnFile_Click(object sender, EventArgs e)
{string m_strOpenFileName;FileStream openFile;OpenFileDialog fileOpen = new OpenFileDialog();fileOpen.Filter = "Basic Files (*.bas)|*.bas|All Files (*.*)|*.*";fileOpen.RestoreDirectory = true;fileOpen.FilterIndex = 1;if (fileOpen.ShowDialog() == DialogResult.OK){m_strOpenFileName = fileOpen.FileName;try{openFile = new FileStream(fileOpen.FileName, FileMode.Open, FileAccess.Read);openFile.Close();}catch (Exception ex){MessageBox.Show("Open Failed!");return;}ret = zmcaux.ZAux_BasDown(g_handle, m_strOpenFileName, 0);controlReturnQue.Enqueue(ret);if (ret == 0)MessageBox.Show("心跳程序已成功加载");}
}

在这里插入图片描述
在这里插入图片描述

3.启动心跳检测
函数介绍:
首先通过SetTimeOutPara设置扫描参数,然后ZAux_Direct_SetUserVar设置Heart_StarFlag心跳标示变量。启动控制器扫描程序,随后开启上位机扫描程序。

private void btnStart_Click(object sender, EventArgs e)
{SetTimeOutPara();ret = zmcaux.ZAux_Direct_SetUserVar(g_handle, "Heart_StarFlag", 1);controlReturnQue.Enqueue(ret);timeOut = 0;timer1.Enabled = true;timer1.Interval = int.Parse(tbxUpTimer.Text);tbState.Text = "已启动";
}
//上位机扫描程序
private void timer1_Tick(object sender, EventArgs e)
{ret = zmcaux.ZAux_Direct_SetUserVar(g_handle, "Heart_Status", 0);controlReturnQue.Enqueue(ret);if (ret != 0)timeOut++;if (timeOut > 1){tbState.Text = "未启动";timer1.Stop();}
}

在这里插入图片描述
在这里插入图片描述

4.RTSys的使用
(1)打开【RTSys】软件,点击【连接】输入控制器的IP(默认IP:192.168.0.11)。
在这里插入图片描述
在这里插入图片描述

(2)打开输出口界面,即可通过输出口观察是否掉线。
在这里插入图片描述

(三)教学视频
教学视频可点击→“教学视频:运动控制卡网络通讯的心跳检测之C#上位机编程”查看。

本次,正运动技术运动控制卡网络通讯的心跳检测之C#上位机编程,就分享到这里。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

相关文章:

运动控制卡网络通讯的心跳检测之C#上位机编程

本文导读 今天&#xff0c;正运动小助手给大家分享一下如何使用C#上位机编程实现运动控制卡网络通讯的心跳检测功能。 01 ECI2618B硬件介绍 ECI2618B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持6轴&#xff0c;可扩展至12轴的运动控制…...

QT 控件定义为智能指针引发的bug

问题描述&#xff1a; std::unique_ptr<QStackedLayout> m_stacked_layout; 如上为定义&#xff1b; 调用&#xff1a; Line13ABClient::Line13ABClient(QWidget *parent) : BaseWidget(parent) { // 成员变量初始化 m_get_ready false; m_tittle_wnd…...

Scala项目(图书管理系统)

3、service BookService package org.app package serviceimport org.app.dao.{BookDAO, BorrowRecordDAO} import org.app.models.{BookModel, BorrowRecordModel}import java.time.LocalDateTime import scala.collection.mutable.ListBuffer// 图书业务逻辑层 class BookS…...

前端开发 详解 Node. js 都有哪些全局对象?

在 Node.js 中&#xff0c;全局对象&#xff08;Global Objects&#xff09;是指在任何模块中都可以直接访问的对象和变量&#xff0c;而不需要显式地进行导入。Node.js 提供了一些全局对象&#xff0c;帮助开发者在编写应用程序时更加方便地进行一些常见操作&#xff0c;如文件…...

2024_12_20_生活记录

年底了&#xff0c;提前祝各位朋友们新年快乐&#xff01;我将近两年没动笔写blog了&#xff0c;主要确实挺忙。。。今天想简单聊聊自己的近期想法&#xff0c;一方面是职业规划&#xff0c;一方面是生信&#xff0c;最后是个人感悟。 职业规划 熟悉我的朋友们会了解我之前一直…...

Sequelize ORM 现有表如何使用

一、 在mysql中创建一个表 或者随便找一个现有的表 已经有了一张叫做xw_posts的表。表里的字段非常简单&#xff0c;大家可以自己建一下 CREATE TABLE xw_posts (id int unsigned NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_…...

ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关

目录 应用 1&#xff1a;它是相关性还是托布勒第一定律&#xff1f; 应用 2&#xff1a;将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中&#xff0c;我们在新的空间组件实用程序&#xff08;Moran 特征向量&#xff09;工具集中发布了一个新工具 - 从字段过滤空间自相关。…...

H3C MPLS跨域optionB

实验拓扑 实验需求 如图,VPN1 和 VPN2 分别通过运营商 MPLS VPN 连接各自分支机构按照图示配置 IP 地址,VPN1 和 VPN2 连接同一个 PE 设备的私网 IP 网段存在地址复用,使用多 VRF 技术来防止 IP 冲突AS 100 和 AS 200 内部的公共网络中各自运行 OSPF 使 AS 内各设备的 Loo…...

源码分析之Openlayers中Geometry基类介绍

概述 在上一篇文章源码分析之Openlayers中Geom篇中提到Geometry类是继承于 Openlayers 中的BaseObject类(参考源码分析之Openlayers中核心BaseObject类).而Geometry类通常情况下也是作为一个抽象基类,作为Geom几何图形的基类或父类,不会在应用中去实例化它.Geometry类回去注册…...

《Vue3 三》Vue 中的 options 选项

data 选项&#xff1a; data 选项&#xff1a;属性值必须是一个函数&#xff1b;返回值是一个对象&#xff0c;返回的对象会被 Vue 的响应式系统劫持&#xff0c;之后对该对象的任何访问或者修改都会在劫持中被处理。 在 Vue2.x 中&#xff0c;data 的属性值可以是一个函数&am…...

Elasticsearch 国产化替代方案之一 Easysearch 的介绍与部署指南

一、前言 在国内数字化转型浪潮和 信创 大背景下&#xff0c;“替代进口”成为许多企业级应用所需要面对的重要课题&#xff0c;搜索领域也不例外。 Elasticsearch&#xff08;简称 ES&#xff09;作为一款业界领先的全文搜索和分析引擎&#xff0c;虽然功能强大&#xff0c;但…...

Pytorch | 从零构建EfficientNet对CIFAR10进行分类

Pytorch | 从零构建EfficientNet对CIFAR10进行分类 CIFAR10数据集EfficientNet设计理念网络结构性能特点应用领域发展和改进 EfficientNet结构代码详解结构代码代码详解MBConv 类初始化方法前向传播 forward 方法 EfficientNet 类初始化方法前向传播 forward 方法 训练过程和测…...

Python超能力:高级技巧让你的代码飞起来

文章一览 前言一、with1.1 基本用法1.2 示例自定义上下文管理器 二、条件表达式三、列表式推导式与 zip 结合 四、map() 函数&#xff08;内置函数&#xff09;map用于数据清洗1. 数据清洗&#xff1a;字母大小写规范2. filter() 函数 五、匿名函数 lambda5.1 lambda的参数&…...

熊军出席ACDU·中国行南京站,详解SQL管理之道

12月21日&#xff0c;2024 ACDU中国行在南京圆满收官&#xff0c;本次活动分为三个篇章——回顾历史、立足当下、展望未来&#xff0c;为线上线下与会观众呈现了一场跨越时空的技术盛宴&#xff0c;吸引了众多业内人士的关注。云和恩墨副总经理熊军出席此次活动并发表了主题演讲…...

FPGA实现MIPI转FPD-Link车载同轴视频传输方案,基于IMX327+FPD953架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、详细设计方案设计原理框图IMX327 及其配置FPD-Link视频串化-解串方案MIPI CSI RX图像 ISP 处理图像缓存HDMI输出工程源码架构 5、…...

vue3动态绑定图片和使用阿里巴巴矢量图

矢量图 1。加购物车 2. 下载在本地 解压 &#xff08;把以下文件放进项目文件夹里面&#xff09; ├── font ├── iconfont.css ├── iconfont.json &#xff08;font-class用法&#xff09; ├── iconfont.js &#xff08;symbol用法&#xff09; ├─…...

‘vite‘ 不是内部或外部命令,也不是可运行的程序

报错&#xff1a;执行 npm run dev时&#xff0c;提示’vite’ 不是内部或外部命令&#xff0c;也不是可运行的程序 解决&#xff1a;执行 npm install -g vite 报错&#xff1a;导入vite后再次执行npm run dev&#xff0c;报错failed to load config from E:\eclipseWP\test1…...

2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码

引言 本期介绍了一种基于加权平均位置概念的元启发式优化算法&#xff0c;称为加权平均优化算法Weighted average algorithm&#xff0c;WAA。该成果于2024年12月最新发表在中JCR1区、 中科院1区 SCI期刊 Knowledge-Based Systems。 在WAA算法中&#xff0c;加权平均位置代表当…...

如何获取 ABAP 内表中的重复项

要识别 ABAP 内表中的重复项&#xff0c;可以结合使用排序和循环。下面的示例展示了如何查找内部表中的重复条目&#xff1a; DATA: BEGIN OF itab OCCURS 0,field1 TYPE i,field2 TYPE c LENGTH 10,END OF itab,wa LIKE LINE OF itab.* Add sample data to internal table it…...

编译笔记:vs 中 正在从以下位置***加载符号 C# 中捕获C/C++抛出的异常

加载符号 解决方法&#xff1a; 进入VS—工具—选项----调试----符号&#xff0c;看右边有个“Microsoft符号服务器”&#xff0c;将前面的勾去掉&#xff0c;&#xff08;可能还有删除下面的那个缓存&#xff09;。 参考 C# 中捕获C/C抛出的异常 在需要捕捉破坏性异常的函数…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...