2023-08-08 16:11:28
分辨率分辨率是可以显示或测量的最小刻度单位,这个相对来说最好理解。用机械时钟打个比喻:时针的分辨率是小时,分针的分辨率是分,秒针的分辨率是秒。又比如说同样一筐苹果,在路边摊的杆秤称是两斤半,拿到菜场的台秤上称是两斤四两,放到超市的电子秤上则是1210克。 图:钟的指...
2023-08-03 09:07:39
马达型号说明:马达铭牌:马达额定功率规格:伺服型号说明电机出线方式配套电缆选型...
2023-08-02 11:22:55
勇哥这套halcon引擎的学习笔记贴子共七篇,它是在官方指导文档《http://47.98.154.65/?id=1343》的基础上学习编写而成的笔记。只是有一篇讲解怎么调用向量变量的没有加入,因为勇哥实在不知道这个向量变量有啥子用。以后如果搞明白了再加入吧。2020/7/3勇哥注:原来halcon中的向量就是个容器,跟c++标准模板库中的那个向量是一致的。第八篇加上来吧halcon引擎学习笔记(...
2023-07-27 18:30:10
对于使用docking的童鞋来讲, 如果你的窗体中使用了halcon窗体控件, 就可能出现本文所示的错误.这个时候你应该是双击或者拖动了窗体标签吧?! 然后就会出现下面的错误.HALCON error #5154: Wrong values for image area in operator get_window_extents你只有两个选择: 要么找到你的包含halcon窗体控的窗体为啥会出现...
2023-07-14 11:26:47
C# 的 PropertyGrid是不是用得很爽。但是有一个缺陷一直让勇哥很不爽。当选择项是一个枚举或者List<string>的时候,用户可以点击下拉框进行选择。但是,如果使用这个下拉框,会有很大概率关闭不了这个属性窗体。即你按此窗体的关闭按钮,窗体也无法关闭。整个程序都被卡住了。只能用系统的任务管理器把程序强制关闭了。这种bug只会在推出下拉框的时候出现。怎么看都像是此控件固有的b...
2023-07-13 08:42:33
勇哥描述一下:如下面代码,当循环Task.Factory.StartNew到第9个的时候,会发现要隔约1秒才可以添加第9个,后面的第10,11,12,13,14 都要间格较长时间。如果你把下面代码中的while死循环去掉,则15个线程瞬间添加完成。这是什么原因呢? for (int i = 0; i < 15; i++)
{
var...
2023-06-12 17:31:36
勇哥今天用vs团队资源管理器“同步”时出现一个不一样的错误。错误如下:vs的输出窗口报告的完整信息如下:已在存储库 D:\xxxx 中本地创建提交 e76d4178
Remote: Enumerating objects: 43, done.
Remote: Counting objects: 2% (1/43)
Remote: Counting obje...
2023-06-09 14:00:40
如图1。我们假设矩形就是电池。则这个电池是作为模板电池,其摆放的位置、机器人吸嘴过来取的位置都是做为模板位置。B1是模板特征点。本例子我们以电池左边与顶边的相交点做为特征点,且以顶线做为特征点的U。 (图1)图2中,电池故意旋转一定角度放置。此时的B2点为当前电池的特征点。此时当前电池的特征点B2的U坐标减去模板特征点B1的U坐标,取得了相差...
2023-05-26 11:59:12
三岁那年,我紧握着手中的棒棒糖,坚定的认为那最重要五岁那年,我花了整整一个下午逮住那只蜻蜓,那一刻,它好像是最重要的七岁那年,我看着同桌手中的奖状,带着羡慕和一点点嫉妒,觉得那也许是最重要的。九岁那年,仰躺在树荫下,阳光斑驳的洒在脸上,一个悠闲的暑假于我而言是如此重要十三岁那年,我意识到,重点高中的录取通知书对我的人生很重要十六岁那年,坐在教室里,微风穿堂,盯着前排姑娘的马尾出了神忽然觉得就这样一...
2023-05-23 22:52:44
勇哥注:所谓的基类控件,就是不从其它控件继承的,而是继承UserControl的控件。控件外观如下:此控件有如下5个属性:有关用户控件,下面这篇文章讲得很清楚:https://blog.csdn.net/sl1990129/article/details/78959264 源码:using System;
using System.Collections.Generic;
using Sys...
2023-05-18 11:07:15
勇哥注:C# 在解决方案管理器中双击winform,打开设计器的等待时间超长。。。有时候甚至要等十几分钟这么夸张。。。另外,如果你使用vs2022打开相同的工程,发现打开winfom的速度就变得飞快了!但是用vs2015, vs2017都一样慢。经过勇哥长时间的摸索,此问题的原因是:首先,你的这些winfrom数量多并不是原因。而是因为你的某些winform可能存在控件数量太大。注意,即使当前你...
2023-04-09 21:57:07
勇哥注:这个问题勇哥在网上找了许久。假设A、B单元格都是下拉DataGridViewComboBoxColumn。我想A单元格选中一个内容,B单元格进行刷新列表。如果是DataGridView默认设置下,你会发现:CellEndEdit、CellClick、CellMouseDown、CellMouseUp这些都做不到完美的效果。最多是能做到点A后,然后点击一下B单元格,才能看到刷新效果。本文主题...
2023-03-31 14:39:17
让datagridview的DataGridviewComboBoxColumn即可以下拉,还可以输入内容这个需求是有必要的。勇哥参考了一些网上的资料,证明winform还是可以实现此功能的。虽然操作上有点不太方便,比如输入内容后回车不能结束编辑,需要点内外的单元格结束编辑。但是好歹是实现的要求,而且不用重写一些方法。效果如下:演示代码: public partial class Form1 :...
2023-03-26 16:26:25
勇哥注:去除List的重复元素的问题是比较常见的需求,C#有标准的做法,以后不要自己写了。 public class Student
{
public string Name { get; private set; }
public int Id { get; private set; }
public string Hobby...
2023-03-24 09:32:41
勇哥注:此控件是继承TreeView控件重写的用户组件,主要特点是可以在节点文本右边添加按钮。按钮本身就是一个Button类,可以设置按钮的显示相关的属性,以及事件等。此控件可以方便提供IO、气缸、轴的测试功能,不用双击弹出另一个窗口做这些事。有效的提升了用户体验。使用方法说明:(1)此控件带一个WpfTreeHelper类,以方便操作控件(2)初始化树时,无论是根结点,还是子节点,都使用AddN...
2023-03-24 08:16:35
这个问题浪费了勇哥一个小时的时间。即你在NodeMouseClick、Click事件中获取SelectedNode,有可能为null或者上一次的节点。希望实现点击TreeView控件下的不同子节点,显示其对应的内容。但发现在TreeView控件的MouseNodeClick事件中利用(TreeView)sender).SelectedNode.Name获得子节点的Name与实际点击的子节点并不一致...
2023-03-23 09:59:48
vs团队管理器的git功能中,当本地文件和远程文件有差异的时候。我们可以选择“比较文件”然后就弹出差异比较功能。其中左边是远程的,右边是本地的。但问题是,如何把左边的差异部分推到右边去呢? 或者如何把右边的差异推送到左边去呢?勇哥用过文件比较Beyond Compare这个软件,它是可以左右互推功能的。但是“文件比较”找不到类似的功能。如果使用ctrl+c, ctrl+v 也是没有效果的。难道“...
2023-03-16 09:07:45
勇哥注:IComparable 接口常用于排序。比如可以用于List<T>.Sort()方法,对T是自定义的类型的数据结构做排序。如果T是值类型,则有内建排序规则,不需要特殊处理。只是对T是你自定义的数据类型时,需要把这个数据类型继承IComparable 接口,然后实现接口(即自定义的排序规则代码)举个栗子:下面的数据结构StageDatastruct,已经继承的IComparabl...
2023-03-13 17:23:44
这篇文章是关于.Net的反射优化(有效率地使用反射)的技术。文中有翻译不准确、难以理解的内容可在评论出指点或咨询。概述反射(Reflection)是一种非常强大的.Net平台的特性。System.Reflection命名空间下提供了一套丰富的加载和调用程序集和对象的接口,除此之外它还提供了 了运行时动态地检索元数据信息的方法,比如获取属性、字段信息,特性信息等。使用反射确实可以使开发人员的生活变得...
2023-03-08 21:24:38
2D测量之一通过2D测量可以获取一些特征,如• 物体的范围,也就是说组成物体的像素数组• 物体的方向• 物体间或者物体组成部分间的角度• 物体的位置• 物体的尺寸 ,也就是说他的宽度高度或者物体间的距离,物体组成部分间的距离• 物体的个数分析measure_metal_part_first_example.hdev例程第一步:创建区域并提取基础信息• 通过threshold算子提取感兴趣的区域•...
2023-03-08 09:34:26
明明安装有git,为啥VS的团队管理器提示说需要安装第三方git命令,如下图所示:如果点击安装,vs打开了浏览器,跳到了git的下载页。下载后,再次安装git,重新打开vs,结果依旧。这是什么鬼?网上说的下面的设置,也没问题。最后说结论,有问题的这个版本是vs2015,但后来勇哥发现同一台机器上有一个vs2019的版本,直接打开项目(已含有.git目录),观察右下角可以看到git功能是有了。所以结...
2023-03-05 08:43:59
勇哥注:我们知道C#的集合有两类普通集合泛型集合前者存在于 System.Collections 命名空间下,属类型不安全的,后者存在于 System.Collections.Generic 命名空间下,属类型安全的。不可变对象也就是本文说的只读对象, 定义为一旦创建就不可变更的对象, 在 .NET Core 中就存在着这三大不可变集合 IReadOnlyListIReadOnlyDictiona...
2023-02-28 14:40:41
勇哥注:今天突然发现强制类型转换和as还是有点区别的。比如下面这句会抛异常:其中SACItemRunStatusEnum是一个枚举。ItemRunStatus= (Tuple<SACItemRunStatusEnum, int>)data异常信息如下:无法将类型为
“System.Tuple`2[Samsun.Domain.MotionCard.Common.SACItemRunSt...
2023-02-24 15:04:21
勇哥注:群里有人介绍到这个FlexCell表格控件,突然发现它在腾讯的软件中心中有。突然就升起了敬意。因此试用一把吧。另外vb.net 开发的控件,还能拿出来商业出售,由于大家都知道的原因,这着实让人有点惊讶,这让我对C#的商业软件开发有了点底气。FlexCell表格控件 for .NET是采用VB.NET开发的表格/报表控件。官方介绍如下:FlexCell是一款简单易用的表格控件,提供了非常全面...
2023-02-24 14:37:16
勇哥注:C# 多线程调用单例类时的安全性问题是非常值得我们重视的,出现类似的问题会造成软件出现偶发问题,非常隐蔽。单例类造成的问题主要有两方面: 一是你的单例到底是不是单例? 二是你的单例是不是在被多线程调用。第一个问题请参考:C#实现单例模式的几种方法总结 http://47.98.154.65/?id=1924 第二个问题请参考下面的说明:多个线程,同时调用单例的同一个方法会出现什么现象?...
2023-02-23 08:37:40
(六)串口无协议读写指令RXD、TXD有了串品读写,PLC就可以发信息给上位机,这样可以做许多有意思的事情,比如写个小游戏,可以让PLC做逻辑,上位机程序负责更新界面。RXD为读串口,TXD为写串口。下面的程序中,A526.01的作用如下:当通讯突然中断时,缓冲区内的数据一直保存,事实上,RXD指令并不负责清空缓冲区,换句话说,缓冲区内始终为接收的数据。所以,如果遇到这种问题,你可以执行A526....
2023-02-22 22:42:02
勇哥注:网上和B站上都讲得是勾选winxp sp3的兼容模式,但是在勇哥的win10电脑上面并没有卵用。经过研究,下面的方法可以安装。(1)管理员方式运行setup.exe可以从任务管理器看到无反应,内存也不增涨。(2)右键”转详细信息“(3)在进程Setup.exe上右键”分析待待链“(4)如下,勾选后”结束进程“反复做第4步,直到看到安装程序正常进行安装为止。勇哥这边大概结束了7,8个进程。搞...
2023-02-21 22:33:07
勇哥注:为了方便大家做面向对象的实践,特地收集了几个例子:“动物的运动会”、“计算器”、“养猪场的故事”。它们都有参考答案,见下载。这篇里勇哥只写出需求和知识点而不直接提供代码,以方便大家做编码练习。常见的设计原则:面向对向程序的三大特征:
封装,隐藏内部实现
继承,复用现有代码
多态,改写对象行为
设计模式的核心思想:
(1)设计模式最根本的意图是适应需求的变化。
(2)编码应采...
2023-02-21 19:23:50
本文提供了一些性能优化的建议,这些经验来自于使用托管代码重写C# 和 VB编译器,并以编写C# 编译器中的一些真实场景作为例子来展示这些优化经验。.NET 平台开发应用程序具有极高的生产力。.NET 平台上强大安全的编程语言以及丰富的类库,使得开发应用变得卓有成效。但是能力越大责任越大。我们应该使用.NET框架的强大能力,但同时如果我们需要处理大量的数据比如文件或者数据库也需要准备对我们的代码进行...
2023-02-20 23:33:23
1、 IComparable接口IComparable接口定义通用的比较方法。由类型使用的IComparable接口提供了一种比较多个对象的标准方式。如果一个类要实现与其它对象的比较,则必须实现IComparable接口。由可以排序的类型,例如值类型实现以创建适合排序等目的类型特定的比较方法。2、 IComparer接口是特定用于Array的Sort和BinarySearch方法,通过实现ICo...