- 博客(26)
- 资源 (3)
- 收藏
- 关注
原创 c# 进程的创建与撤销
1、创建进程using System;using System.Diagnostics;using System.ComponentModel;namespace MyProcessSample{ class MyProcess { public static void Main() { try ...
2020-04-30 14:34:55 2471
原创 运动控制的轴到底是什么
先介绍几个名词:硬件资源数字量输出资源(do):包括伺服使能数字量输出、伺服报警清除数字量输出、通用数字量输出。数字量输入资源(di):正限位数字量输入、负限位数字量输入、驱动报警数字量输入、原点 信号数字量输入、通用数字量输入。编码器计数资源(encoder):用来对外部编码器的脉冲输出进行计数。脉冲输出资源(step):脉冲输出通道,可以输出“脉冲+方向”或者“CCW/CW”控制...
2020-04-20 11:20:11 4153
原创 Marshal.PtrToStructure的使用——WPF接收消息
一、问题前面已经讲过WPF与MFC联合编程,现在遇到一个问题,MFC发送了一个消息,C#如何解析该消息?比如MFCvoid CPlatform::SendMessageToMainWindow(EMsgType2UI nMsg, WPARAM wpara/* = NULL*/, LPARAM lpara/* = NULL*/){ CString temp(m_winTitle.c...
2020-04-18 17:13:11 1316
原创 Halcon/C++编程
1、配置环境网上有许多,可以参考配置opencv的步骤,在配置库目录,包含目录2、实例,显示一幅图像 //TODO: 在此添加控件通知处理程序代码 HObject ho_Image; HTuple HWindowID; CRect Rect; HTuple m_HWindowID; HTuple m_ImageWidth, m_ImageHeight; CWnd...
2020-04-17 21:32:47 811
原创 如何判断WPF的颜色是否相等
var solidColorBrush = textBlock.Background as SolidColorBrush; if (solidColorBrush != null && solidColorBrush.Color == Colors.Red)//红色才检测 { BaseMapCha...
2020-04-17 17:26:42 786
原创 C#异步编程await与async
使用 async 修饰符可将方法、lambda 表达式或匿名方法指定为异步。 如果对方法或表达式使用此修饰符,则其称为异步方法 。例子 class Program { static void Main(string[] args) { Console.WriteLine("1.同步ThreaID:" + Thread.C...
2020-04-15 11:35:49 180
原创 控制器的编码器
一、原理控制器内部为每个轴配置了脉冲计数装置。控制器默认的脉冲计数源是外部编码器。如果用户 在接线时将外部编码器的信号与端子板 25pin 轴接口的编码器信号接在一起,就可以调用指令 读取外部编码器的值。如果用户没有接外部编码器反馈信号,例如,使用步进电机时没有编码器反 馈部件,如图 所示,则用户调用 GT_GetEncPos()读取的编码器位置为 0。访问编码器指令列表控制器...
2020-04-15 11:28:49 1301
原创 运动控制中的安全机制——限位
一、限位运动控制器能够通过安装限位开关或者设置软限位来限制各轴的运动范围,一旦限位开关失效,将可能造成控制设备的损坏或发生生产事故,因此限位开关的稳定性和可靠性对于各种运动和位置控制设备来讲是十分重要的。限位限制一般有三重 :软限位、限位开关、机械限位 。工作台碰到限位开关或者规划位置超越软限位时,运动控制器紧急停止工作台的运动。限位触 发以后,运动控制器禁止触发限位方向上运...
2020-04-13 17:42:22 4459
转载 AppDomain二——C#中动态加载和卸载DLL
该demo实现动态加载TestDll的功能首先定义一个TestDll库 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestDll { pub...
2020-04-11 14:04:56 1220
原创 AppDomain一——基本原理
一、问题的提出技术一定是为了解决某个应用场景的问题而产生的。很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件。但是在把新的dll替换旧dll的时候,错误发生了。在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后...
2020-04-11 11:38:09 489
转载 设计模式之单例模式
双重检查锁定模式(DCLP)Singleton* Singleton::getInstance() { if (pInstance == nullptr) { // 第一次检查 Lock lock; if (pInstance == nullptr) { // 第二次检查 pInst...
2020-04-10 14:28:15 186
原创 DataGrid后台实现选中某一行,并滚动到当前选中项
定义一个DataGrid <DataGrid Name="resultDataGrid" VirtualizingStackPanel.IsVirtualizing="False" AlternationCount="2" ...
2020-04-10 10:58:42 3332
原创 运动控制器介绍
一、定义运动控制(Motion Control)通常是指在复杂条件下,将预定的控制方案、规划指令转变成期望的机械运动,实现机械运动精确的位置控制、速度控制、加速度控制、转矩或力的控制。 按照使用动力源的不同,运动控制主要可分为以电动机作为动力源的电气运动控制、以气体和流体作为动力源的气液控制以燃料(煤、油等)作为动力源的热机运动控制等二、原理 电气运动控制是由电机拖...
2020-04-09 20:27:15 3393
原创 C# 说说lock
一、MSDN的定义lock 语句获取给定对象的互斥 lock,执行语句块,然后释放 lock。 持有 lock 时,持有 lock 的线程可以再次获取并释放 lock。 阻止任何其他线程获取 lock 并等待释放 lock。lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程尝试进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。lock...
2020-04-09 13:55:39 810
原创 C#多线程Task的WhenAll用法
多个task调度的实例,需要加锁lockusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleAppTest{ class Program { s...
2020-04-09 11:39:21 3748 2
原创 C++的CreateEvent
一、事件是很常用的多线程同步互斥机制函数原型如下所示,一共四个参数:HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // SECURITY_ATTRIBUTES结构指针,可为NULL BOOL bManualReset, // 手动/自动 ...
2020-04-08 22:50:25 1376
转载 C++虚继承和虚基类详解
一、问题的提出多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示:...
2020-04-08 15:19:12 284
原创 C++ 线程同步之临界区CRITICAL_SECTION
一、临界区临界区又称关键代码段,指的是一小段代码在代码执行前,它需要独占一些资源。程序中通常将多线程同时访问的某个资源作为临界区,需要定义一个CRITICAL_SECTION类型的变量,然后调用InitializeCriticalSection函数对变量进行初始化例子:定义一个全局的锁 CRITICAL_SECTION的实例和一个静态全局变量 CRITICAL_SECTIO...
2020-04-06 11:41:05 2194
原创 extern “C“ __declspec(dllexport)是什么意思
如果DLL是提供给VC++用户使用的,你只需要把编译DLL时产生的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果你的DLL是供其他程序如VB、delphi,以及.NET用户使用的,那么会产生一个小麻烦。因为VC++对于__declspec(dllexport)声明的函数会对函数名尾附加函数在DLL中的地址。__declspec(dllexport) __declspec(dl...
2020-04-05 21:06:03 5076 1
原创 MFC动态载入DLL
//相机CSDExVisionDev* m_pCSDExVisionDev;typedef HRESULT(*TCreateVisionDev)(CSDExVisionDev **pp_MotionDev);void CMFCApplication1Dlg::LoadDllLibrary(CString strPath){ HINSTANCE hInst = LoadLibrary(...
2020-04-05 20:14:19 744
原创 一个控制系统初始化的步骤
1、初始化控制器2、初始化视觉系统3、设置指定窗口连接相机4、配置控制系统的各个轴5、初始化光源6、初始化温控7、初始化输入输出
2020-04-04 15:59:28 598
原创 MFC创建内存映射文件示例
该实例是在程序的exe路径下,实现读取,写入内存映射文件功能头文件#ifdef GERNERAL_PRODUCTDATA_EXP#define GERNERAL_PRODUCTDATA_API _declspec(dllexport)#else#define GERNERAL_PRODUCTDATA_API _declspec(dllimport)#endif // GERN...
2020-04-04 14:54:45 363
原创 haclcon实现图像处理的傅里叶变换
dev_open_file_dialog ('read_image', 'default', 'default', Selection)read_image (Image, Selection)* mean_image (Image, ImageMean, 9, 9)* gauss_filter (Image, ImageGauss, 11)rgb1_to_gray (Image, Gr...
2020-04-02 21:32:06 315
原创 C++ vector的reserve和resize的区别与联系
一、原理看看《C++ Primer》中对resize()函数两种用法的介绍:resize(n):调整容器的长度大小,使其能容纳n个元素。如果n小于容器的当前的size,则删除多出来的元素。否则,添加采用值初始化的元素。 resize(n,t):多一个参数t,将所有新添加的元素初始化为t而reserver()的用法只有一种reserve(n),即预分配n个元素的存储空间。了解这两...
2020-04-02 11:26:30 416
HalconShowTest (1) (1).zip
2020-06-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人