工控机的io开发_C#调用工控机dll文件,实现对IO的控制

2023-05-16

本文旨在记录,C#通过调用外部DLL文件实现对Nuvo3120工控机IO口的控制。

前期,了解了C++中.c\.h\.lib文件的区别,以及用这些文件生成DLL的方法,后面通过厂家直接找到了WDT_DIO64.dll文件,工作重点由代码转化变为C#调用dll文件,实现函数调用的问题。

关于C#调用dll的方法。

首先尝试了在解决方案资源管理器里,右键“引用”在弹出菜单中“添加引用”,如下图所示。

8d4f5a148008e7ac99feb7c531121cd4.png

在找到WDT_DIO64.dll,加载时,会出现如下图的报错。

17551f424b31d85c253a2d0317ea86e9.png

查询了关键词“dll调用、COM组件”之后,发现dll文件如果不是.net框架生成的,需要用到DllImport方法来进行调用。

以下将通过一个例子来示意整个操作过程。

1、首先新建一个C#项目,命名为IvokeDll2.cs,如下图所示。

67fc05905e2b0ca261ce34c03d896aa9.png

在项目中新建添加类文件,WDT_DIO64.cs,如下图所示。

e1351ca4246ec19ea7ec26cd45fc42d2.png

8fb0c74f001bffb797b52ecc8022d57e.png

打开WDT_DIO64.cs,新增如下代码。其中DllImport的介绍,请查阅MSDN。在此之前,将dll拷贝到Debug文件夹。

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Runtime.InteropServices; //调用dll必要

namespace InvokeDll2

{

class WDT_DIO64

{

[DllImport("WDT_DIO64.dll")]

internal static extern int InitDIO();

[DllImport("WDT_DIO64.dll")]

internal static extern void DOWriteLine(Byte n,int value); //函数的格式及形参类型,请参考SDK

}

}

在Form1设计了2个button,1个label,如下图所示。

a00c0d3a36d24e867787ba5b612c3138.png

添加代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace InvokeDll2

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

try

{

int inited = WDT_DIO64.InitDIO(); //初始化IO

if(inited ==1)

label1.Text = "DIO初始化成功!";

else

label1.Text = "DIO初始化失败!";

}

catch

{

MessageBox.Show("DIO初始化异常!");

}

}

private void button1_Click(object sender, EventArgs e)

{

WDT_DIO64.DOWriteLine(0,1); //往端口0写入1

}

private void button2_Click(object sender, EventArgs e)

{

WDT_DIO64.DOWriteLine(0, 0); //往端口0写入0

}

}

}

确保没有报错,运行之后,发现错误;

3a3a2d41ba818eb175e6802ae86d5c93.png

经过请教,发现是CPU配置的问题,没有选x64,而是anyCPU模式;在改回CPU模式之后,并拷贝了系统system32下的WinRing0x64.dll文件之后,程序可以顺利运行。

653867a9c2dac07f7cdfc6526d9609c1.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

工控机的io开发_C#调用工控机dll文件,实现对IO的控制 的相关文章

  • javascript/Jquery 将字符串转换成变量名

    var a 61 39 a 39 39 b 39 39 c 39 var obj 61 for i 61 0 i lt a length i 43 43 obj a i 61 34 abc 34 43 1 alert obj a alert
  • Navicat 看历史执行SQL

    Navicat可以通过这个框口看手动操作所执行的代码操作 转载于 https www cnblogs com sunxun p 5286657 html
  • MWC四轴飞行器代码解读

    MWC v2 2 代码解读annexCode 红色是一些暂时没去顾及的部分 xff0c 与我现在关心的地方并无太大关系 函数对rcDate进行处理 xff08 去除死区 xff0c 根据油门曲线 xff0c roll pitch曲线 xff
  • 云讷科技推出Kerloud数传电台

    介绍 Kerloud Telemetry是由云讷科技推出的一款面向无人系统 传输可靠的短距离无线传输电台 产品基于ISM Sub G频段 xff0c 采用FSK调制 抗干扰能力强 xff0c 具备Uart USB通用接口 xff0c 支持P
  • Requests方法 --- post 请求body的四种类型

    常见的 post 提交数据类型有四种 xff1a 1 第一种 xff1a application json xff1a 这是最常见的 json 格式 xff0c 也是非常友好的深受小伙伴喜欢 的一种 xff0c 如下 34 input1 3
  • 中文转拼音 (utf8版,gbk转utf8也可用)

    中文转拼音 utf8版 gbk转utf8也可用 https git oschina net cik pinyin php 64 param string str utf8字符串 64 param string ret format 返回格式
  • Pycharm激活方法(license server方法)

    strong pycharm所有版本 span class hljs string http span class hljs comment www jetbrains com pycharm download previous html
  • idc函数大全

    A80 addc A80 addcix A80 addciy A80 addix A80 addiy A80 cmpd A80 cmpi A80 im0 A80 im1 A80 im2 A80 jrc A80 jrnc A80 jrnz A
  • 视觉SLAM漫淡

    视觉SLAM漫谈 1 前言 开始做SLAM xff08 机器人同时定位与建图 xff09 研究已经近一年了 从一年级开始对这个方向产生兴趣 xff0c 到现在为止 xff0c 也算是对这个领域有了大致的了解 然而越了解 xff0c 越觉得这
  • 无人机基础知识点总结

    一 xff0e 基本概念 飞控 xff1a 飞机的控制系统 xff0c 其中硬件包含传感器部分IMU和控制部分的MCU xff0c 软件部分包含控制算法 俯仰 xff1a pitch xff0c 绕坐标系y轴旋转 xff0c 想象一下平时的
  • 谈一谈编程中遇到的一些死循环(递归死循环,AOP死循环,业务死循环)

    最简单最基础死循环 xff0c 一般都是这样的 while 1 while true for 然而在编程中常常会用到一些并不是那么基础的死循环 xff0c 这里列举一些我在编程中所遇到的一些死循环 方法已经不记得了 xff0c 只是大概说明
  • 简历上的项目经历怎么写?这3条原则不可忽视!

    阅读本文大概需要 5 分钟 作者 xff1a 黄小斜 文章来源 xff1a 微信公众号 程序员江湖 作为一个程序员 xff0c 想必大家曾经都做过一些项目 xff0c 可能现在手头上也还有一些项目 不过还是有很多学生朋友来问我 没有项目怎么
  • “四通一达”本一家,这家人是如何“承包”中国快递半壁江山的?

    微博上有张图火到不行了 看明白没 xff1f 原来 xff0c 这些年为我们奔走送快递的申通 中通 圆通 韵达 xff0c 这四家公司 xff0c 以及汇通 天天等快递公司 xff0c 都有一个共同的老家 xff1a 仅有40万人口的浙江桐
  • 在远方

    远方不是脚到达的地方 xff0c 而是心超越的地方 剧情简介 姚远在孤儿院长大 xff0c 后被二叔接出 xff0c 早早进入社会 xff0c 从底层快递员做起 在被邮政执法堵截损失惨重后 xff0c 他设局结识国营邮政稽查负责人的千金路晓
  • c++11 条款21:尽量使用std::make_unique和std::make_shared而不直接使用new

    条款21 xff1a 尽量使用std make unique和std make shared而不直接使用new 让我们从对齐std make unique 和 std make shared这两块开始 std make shared是c 4
  • 快递 10 年,逆袭为王

    2009 2018 xff0c 双十一 全民狂欢已走过十载 xff0c 网购成为了国民消费不可或缺的重要组成 xff0c 并带动了上下游众多产业的狂飙发展 xff0c 这其中 xff0c 以民营快递最为突出 金风玉露一相逢 xff0c 便胜
  • BPDU报文(RSTP)

    与STP 的BPDU报文格式相同 xff0c 就是在flags字段报文中间几位得到应用 主要原理 xff1a 利用flages位中的Proposal与Agreement来进行协商 xff0c 从而快速从 discarding 转成 forw
  • 怎么在一堆身份证中筛选出大于18岁的?

    最近一朋友找我帮个忙 xff0c 让我在N多身份证中找到18岁以上的人 我还想着用SQL查询来弄 xff0c 谁让是干IT的呢 xff0c 没想到被我一个朋友用excel瞬间解决 学习新的东西是多么的重要啊 其实就是利用了excel中的MI
  • 微信小程序我的界面

    前言 感谢 承蒙关照 微信小程序我的界面 界面效果 界面结构 小程序代码 我们先看me json代码 34 navigationBarTitleText 34 34 个人中心 34 me wxml代码 lt view class 61 34
  • __sync_fetch_and_add

    最近在公司离职的前辈写的代码哪里看到了 sync fetch and add这个东东 比较好奇 找些资料学习学习 http www lxway com 4091061956 htm http www cnblogs com FrankTan

随机推荐