2.5 C#视觉程序开发实例1----IO_Manager实现切换程序

2.5 C#视觉程序开发实例1----IO_Manager实现切换程序

1 IO_Manager中输入实现

1.0 IO_Manager中输入部分引脚定义
// 设定index 目的是为了今后可以配置这些参数、
// 输入引脚定义
private int index_trig0 = 0; // trig index
private int index_cst = 7; //cst index
private int[] index_ProNO = new int[8];// 程序号index
 for (int i = 0; i < 8; i++)
                index_ProNO[i] = 8 + i;
1.1 IO_Manager中获取Trig0 信号
public  bool get_Trig0()
{
    return Inputs[index_trig0];
}
1.2 IO_Manager中获取Pro_NO
public ushort get_ProgramNO()
{
    ushort Pro_no = 0;
    if (Inputs[index_ProNO[0]]) Pro_no += 1;
    if (Inputs[index_ProNO[1]]) Pro_no += 2;
    if (Inputs[index_ProNO[2]]) Pro_no += 4;
    if (Inputs[index_ProNO[3]]) Pro_no += 8;
    if (Inputs[index_ProNO[4]]) Pro_no += 16;
    if (Inputs[index_ProNO[5]]) Pro_no += 32;
    if (Inputs[index_ProNO[5]]) Pro_no += 64;
    if (Inputs[index_ProNO[6]]) Pro_no += 128;
    return Pro_no;
}
1.3 IO_Manager中获取Pro_CST程序切换信号
public bool get_CST()
{
    return Inputs[index_cst];
}

2 IO_Manager中输出实现

2.0 IO_Manager中输出部分引脚定义
// 输出引脚定义
 private int index_online = 0;// 联机信号
 private int index_sto = 1;// STO 输出
 private int index_ok = 2;// OK输出
 private int index_ng = 3;// NG输出
 private int index_CST_Acomm = 7;// 程序切换成功
2.1 IO_Manager中输出CST_AComm
public void Out_CST_AComm(bool state)
{
    lock (_mutex)
    {
        Outputs[index_CST_Acomm] = state;
    }
}
2.2 IO_Manager中输出Online信号
public void Out_Onlie(bool state)
{
    lock(_mutex)
    {
        Outputs[index_online] = state;
    }
}

3 Form_vision 主程序中添加代码实现程序号切换和相机触发

3.0 添加program_no 变量
/// <summary>
 /// 当前程序号
 /// </summary>
 public int program_No = 0
3.1 IO_Circle中实现程序号的切换和CST_Acom的返回
 private void IO_Circle()
{
  bool pro_cst_cur = false;
  bool pro_cst_last = false;
  while (true)
  { 
     // readInputs
     // writeOutputs 
      System.Threading.Thread.Sleep(20);
      ContextManager.get_IOCtx().Read();
      ContextManager.get_IOCtx().Write();
      //更新程序号
      // CST  Accom 信号  
      pro_cst_cur = ContextManager.get_IOCtx().get_CST();
      if (pro_cst_cur && !pro_cst_last)  //判断上升沿触发
      {
          program_No = ContextManager.get_IOCtx().get_ProgramNO();
          //toDO 代码,程序切换
          ContextManager.get_IOCtx().Out_CST_AComm(true); 
      } 
      pro_cst_last = pro_cst_cur;

      // CST_AComm 复位
      if(!pro_cst_cur)
          ContextManager.get_IOCtx().Out_CST_AComm(false);

      if (StopProgramEvent.WaitOne(0, true)) break;
  }//end while  
}
3.2 Timer_Ticker中实现当前程序号的更新显示
private void timer1_Tick(object sender, EventArgs e)
{
    /// 更新程序号到控件
    Util_Helper.Set_NumberControl_Value(num_programNO, program_No);

    iO_Monitors1.update_status(true,true);
}

4 效果展示

4.1 IO_Client.exe先准备好程序号31到端口上

在这里插入图片描述

4.2 IO_Client.exe 输出CST 信号

Vision 接受到CST上升沿后,立刻执行程序切换,并且输出CST_Acomm信号给IO_Client
在这里插入图片描述

4.2 IO_Client.exe 接收到CST_AComm信号后, 复位 CST信号 ,Vision也会复位CST_Acomm

在这里插入图片描述

5 下一章节 我们会重点讲获取一次相机采集信号和输出一个STO脉冲

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

#招聘数据分析#2024年6月前程无忧招聘北上广深成渝对比情况

#招聘数据分析#2024年6月前程无忧招聘北上广深成渝对比情况 0、根据前程无忧不完全样本统计&#xff0c;北上广深成都重庆平均月工资从高到低依次为 北京15441元、上海14425元、深圳13310元、广州11192元、成都10539元、重庆10290。 1、成都招聘样本数全量35228个&#xff0c…

【论文阅读】-- Interactive Horizon Graphs:改进多个时间序列的紧凑可视化

Interactive Horizon Graphs: Improving the Compact Visualization of Multiple Time Series 摘要1 引言2 相关工作2.1 多个时间序列的可视化2.2 缩减折线图 &#xff08;RLC&#xff09;2.3 地平线图 &#xff08;HG&#xff09;2.4 大尺度和小尺度变异数据集2.5 多个时间序列…

Explore Synapse

rm -r dp-203 -f git clone https://github.com/MicrosoftLearning/dp-203-azure-data-engineer dp-203 cd dp-203/Allfiles/labs/01 ./setup.ps1 -- This is auto-generated code SELECTTOP 100 * FROMOPENROWSET(BULK https://datalakexxxxxxx.dfs.core.windows.net/fil…

vue css 链式布局模式

<div class"pp-wrap"> <div class"pp-left"><!--跳活动反思--><div class"even-box" v-for"(item,index) in trackingPtoPLeftList" :key"index" click"jumpReview(item)"><div …

嵌入式UI开发-lvgl+wsl2+vscode系列:6、布局(Layouts)

一、前言 这节总结一下整体页面的布局方式&#xff0c;lvgl的布局方式比较少&#xff0c;目前只有flex和grid两大类布局&#xff0c;即弹性布局和网格布局&#xff0c;弹性布局一般就是指定相对位置&#xff0c;网格布局就是将整个页面划分为网格状&#xff0c;我们做其它的UI…

日志自动分析-Web---360星图GoaccessALBAnolog

目录 1、Web-360星图(IIS/Apache/Nginx) 2、Web-GoAccess &#xff08;任何自定义日志格式字符串&#xff09; 源码及使用手册 安装goaccess 使用 输出 3-Web-自写脚本&#xff08;任何自定义日志格式字符串&#xff09; 4、Web-机器语言analog&#xff08;任何自定义日…

【C++】 解决 C++ 语言报错:Invalid Conversion from ‘const char*’ to ‘char*’

文章目录 引言 在 C 编程中&#xff0c;类型转换错误&#xff08;Invalid Conversion&#xff09;是常见的编译错误之一。特别是当程序试图将一个常量字符指针&#xff08;const char*&#xff09;转换为非常量字符指针&#xff08;char*&#xff09;时&#xff0c;会导致编译…

【C++题解】1413. 切割绳子

问题&#xff1a;1413. 切割绳子 类型&#xff1a;贪心&#xff0c;二分&#xff0c;noip2017普及组初赛 题目描述&#xff1a; 有 n 条绳子&#xff0c;每条绳子的长度已知且均为正整数。绳子可以以任意正整数长度切割&#xff0c;但不可以连接。现在要从这些绳子中切割出 m…

TF-IDF和BM25原理和区别

TF-IDF TF-IDF是TF&#xff08;词频&#xff0c;Term Frequency&#xff09;和IDF&#xff08;逆文档频率&#xff0c;Inverse Document Frequency&#xff09;的乘积。我们先来看他们分别是怎么计算的&#xff1a; TF的计算有多种方式&#xff0c;常见的是 除以文章总词数是…

多点mGRE over IPsecVPN 配置及NHRP的使用

一、实验目的及拓扑 1、实验思路&#xff1a;FW1为总部固定IP&#xff0c;FW2和FW3为分支动态地址&#xff0c;通过mGRE over IPsec实现&#xff0c;并加载NHR解决多点隧道目的地址问题 2、网络拓扑 二、基本配置 &#xff08;一&#xff09;配置相关接口地址&#xff0c;并…

14-34 剑和诗人8 - 微调 LLM 的分块策略

​​​​​​ 介绍 使用大规模 LLM 会带来巨大挑战&#xff0c;特别是在内存管理和模型微调方面。一项可以缓解这些挑战的强大技术是分块&#xff0c;这是一种将大量输入或输出分解为更小、更易于管理的部分的策略。 让我们深入研究分块策略的复杂性&#xff0c;探索它们在微…

【C++题解】1561. 买木头

问题&#xff1a;1561. 买木头 类型&#xff1a;省赛、数组问题、二分答案、贪心、2015江苏省青少年信息学奥林匹克竞赛复赛 题目描述&#xff1a; 有 n 个木材供应商&#xff0c;每个供货商有长度相同一定数量的木头。长木头可以锯短&#xff0c;但短木头不能接长。有一个客…

使用ndoe实现自动化完成增删改查接口

使用ndoe实现自动化完成增删改查接口 最近工作内容比较繁琐&#xff0c;手里需要开发的项目需求比较多&#xff0c;常常在多个项目之间来回切换&#xff0c;有时候某些分支都不知道自己开发了什么、做了哪些需求&#xff0c; 使用手写笔记的方式去记录分支到头来也是眼花缭乱&a…

python库(5):Psutil库实现系统和硬件监控工具

1 psutil简介 psutil&#xff08;process and system utilities&#xff09;是一个跨平台库&#xff0c;用于检索运行中进程和系统利用率&#xff08;包括 CPU、内存、磁盘、网络等&#xff09;的信息&#xff0c;可以提供丰富的系统监控功能。 2 psutil安装 pip install -i …

新手教学系列——Git Stash踩坑

在之前的文章《如何彻底避免Git代码相互覆盖问题》中,我曾介绍过通过规范分支合并和使用git stash来避免代码覆盖问题。今天,我要深入探讨一下git stash的使用,并分享一些使用过程中遇到的坑,希望能帮你避免类似问题。 脚本mg.sh简介 为了更好地管理代码合并,我编写了一…

Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method--论文笔记

论文笔记 资料 1.代码地址 https://github.com/iBelieveCJM/pseudo_label-pytorch 2.论文地址 3.数据集地址 论文摘要的翻译 本文提出了一种简单有效的深度神经网络半监督学习方法。基本上&#xff0c;所提出的网络是以有监督的方式同时使用标记数据和未标记数据来训练的…

ANN文献综述

人工神经网络文献综述 摘要 人工神经网络&#xff08;Artificial Neural Networks, ANNs&#xff09;是由多个简单的、相互连接的处理单元组成的自适应系统&#xff0c;通过调整这些单元之间的连接强度&#xff0c;ANNs能够实现对复杂数据的建模和预测。本文综述了ANNs的基本…

excel批量修改一列单价的金额并保留1位小数

1.打开表格&#xff0c;要把单价金额变成现在的两倍&#xff0c;数据如下&#xff1a; 2.把单价这一列粘贴到一个新的sheet页面&#xff0c;在B2单元格输入公式&#xff1a;A2*2 然后按enter回车键,这时候吧鼠标放到B2单元格右下角&#xff0c;会出现一个黑色的小加号&#xf…

安装Linux虚拟机

点击创建新的虚拟机 选择高级 系统自定义推荐 选择稍后安装 选择Linux 虚拟机命名并且选择创建位置 系统自定义 系统自定义推荐 系统自定义推荐 选择安装好的iOS文件 点击完成 选择编辑虚拟机设置 进入后选择第一个Install red hat enterprise 选择常用语言 设置…

用户体验驱动开发:打造卓越数字产品的关键

目录 前言1. 用户体验驱动开发的定义1.1 用户体验的核心要素1.2 用户体验与用户界面 2. 用户体验驱动开发的重要性2.1 提升用户满意度2.2 增加用户忠诚度2.3 提升市场竞争力2.4 提高商业成功率 3. 用户体验驱动开发的方法论3.1 用户研究3.2 信息架构3.3 交互设计3.4 可用性测试…