用VISA工具驱动继电器外设
1、驱动方式:TCP
2、开发过程
第一步:外设识别
TCP方式将继电器插上网线后,并不能像串口一样自动识别到这个外设,需要手动连接。打开NI MAX后,右击设备与接口,然后点击新建,双击VISA TCP/IP Resource 用其中的方式之一连接。
第二步:代码调试,保证能上位机能控制继电器开闭
参考开始菜单-National Instruments-NI VISA下面的TCP/IP例程以及继电器产品资料,继电器遵循Modbus TCP协议,只要上位机往继电器发相应指令就可以进行控制。
首先进行初始化,在上位机和继电器之间建立一个连接,相关代码如下:
int CVICALLBACK Ready (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
SetCtrlVal (panelHandle, PANEL_LED, ); //(1)打开一个句柄
status = viOpenDefaultRM (&defaultRM);
if (status < VI_SUCCESS)
{
printf("Could not open a session to the VISA Resource Manager!\n");
exit (EXIT_FAILURE);
}
//(2)建立一个会话
status = viOpen (defaultRM, "TCPIP0::172.16.10.161::502::SOCKET", VI_NULL, VI_NULL, &instr);
if (status < VI_SUCCESS)
{
printf ("An error occurred opening the session to TCPIP0::ftp.ni.com::21::SOCKET\n");
viClose(defaultRM);
exit (EXIT_FAILURE);
}
//(3)设置会话属性
viSetAttribute (instr, VI_ATTR_TCPIP_NODELAY, VI_TRUE); //viSetAttribute (instr, VI_ATTR_TCPIP_NODELAY, VI_TRUE); break;
}
return ;
}
然后根据厂家给出的相关资料往继电器中写指令,控制继电器开闭,相关代码如下:
int CVICALLBACK DO_0_Close (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
//(4)将数据写入到外设器件中
status = viWrite (instr, (ViBuf)CloseDO_0, , &writeCount);
if (status < VI_SUCCESS)
{
printf("viRead failed with error code %x \n",status);
viClose(defaultRM);
exit (EXIT_FAILURE);
}
break;
}
return ;
}
第三步:完善需要的功能
继电器开闭的时候上位机软件在测试信息打印窗口打印出日期和时间,循环次数,窗口信息以文本文档的的形式导出。
第四步:稳定性测试
第五步:美化界面。
3、一些问题
(1)测试信息打印窗口没有滚动条
在王建新的书上第三章开头有讲到,文本超出显示区域时能自动添加滚动条。但是需要进行设置。双击Text Box控件,在scroll bar处可设置。
总结:要灵活变通,不要一根经。在软件设计中,要求同时打开多个通道,但是编程不好实现,可以在硬件上进行改进将需要同时进行控制的设备并起来。
PS:过程中参考开始菜单-National Instruments-NI VISA下面的例程和帮助文档,以及相关资料编写软件。
用VISA工具驱动继电器外设的更多相关文章
- 远程控制工具&&驱动安装仍然没有声音
1. 2.下面是一个远程控制工具 TeamViewer
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-可以用软件自带NC工具驱动但是程序无法让电机转动怎么办
新建一个项目,当扫描的时候务必勾选YES,使用网上最新的XML文件 如果不使用,则有些设备可能被扫描出来是无效的(图标不正常) 如果完全删除XML描述文件,可能也能扫描出来,而且可以用Twin ...
- [转]以Facebook为案例剖析科技公司应有的工具文化
原文:http://36kr.com/p/146507.html 这是一篇几年前的文章,但对于没有涉及到工具文化这个概念的人来说,还是很新的. 前言 前段时间和大众点评的 CEO 张涛聊天的时候碰到内 ...
- 十天学会单片机Day0点亮LED (锁存器、三极管、继电器)
C51常用的数据类型 数据类型 关键字 所占位数 表示数范围 无符号字符型 unsigned char 8 0~255 有符号字符型 char 8 -128~127 无符号整型 unsigned in ...
- 12V继电器开关控制
案例描述:“灯控项目”中让单片机通过IO口控制继电器,继电器接入GPRS电路板供电电源,从而实现单片机对GPRS电路板的开关控制 电路图 所需元器件:1个五脚继电器,1个NPN三极管,2个电阻,1个二 ...
- 以Facebook为案例剖析科技公司应有的工具文化
http://www.36kr.com/p/146507.html 编者按:本文由 @王淮Harry哥 撰写,摘自他即将出版的新书.王淮是 Facebook 早期员工,中国藉第二位工程师第一位研发经理 ...
- 【NXP开发板应用—智能插排】3.驱动GPIO点亮外接LED
[前言] 首先感谢深圳市米尔科技有限公司举办的这次活动并予以本人参加这次活动的机会,以往接触过嵌入式,但那都是皮毛,最多刷个系统之类的,可以说对于嵌入式系统开发这件事情是相当非常陌生的,这次活动为我提 ...
- linux驱动分层分离思想
转:https://blog.csdn.net/zqixiao_09/article/details/51088887 前面我们学习I2C.USB.SD驱动时,有没有发现一个共性,就是在驱动开发时,每 ...
- 使用C6748和C5509A对nRF24L01驱动进行数据传输
1. 写在前面 今天下午做了一个C5509A和C6748两个DSP的数据传输,经由RF24L01设备传输,都是模拟SPI协议,对于两个DSP来说,无非是配GPIO引脚,写好时序和延时.C5509A的G ...
随机推荐
- Xcode10 import导入文件的坑
更新了10.0的Xcode,踩了两个坑,记录一下. #import "" 双引号内输入任何字符 都会导致Xcode崩溃 解决方案: target - buildSettings - ...
- python 空值(NoneType)
- 使用DECLARE定义条件和处理程序
定义条件和处理程序是事先定义程序执行过程中可能遇到的问题,并且可以在处理程序中定义解决这些问题的办法,可以简单理解 为异常处理,这种方式可以提前预测可能出现的问题,并提出解决办法,从而增强程序健壮性. ...
- 阿里云Kubernetes服务上使用Tekton完成应用发布初体验
Tekton 是一个功能强大且灵活的 Kubernetes 原生开源框架,用于创建持续集成和交付(CI/CD)系统.通过抽象底层实现细节,用户可以跨多云平台和本地系统进行构建.测试和部署. 本文是基于 ...
- 第三期 行为规划——10.用C++实现变道函数
在之前的测验中,我们设计了一个成本函数,高速公路上到达一个目标选择一条车道. 公式中,Δd是车道间的纵向距离,Δs是车辆到目标之间的距离. 在这个测验中,需要用c++实现代价函数,但是这里有一个变换, ...
- 学习HTML<audio>标签
首先来看下这个例子: <audio controls autoplay="autoplay"> <source src="horse.ogg" ...
- H3C TCP与UDP的对比
- jqLite
一.关于DOM导航的jqLite方法 children() 返回一组子元素.这个方法的jqLite实现不支持jQuery所提供的选择器特性 eq(index) 从一个元素集合中返回指定索引下的元素 f ...
- 使用 Laravel-Excel 进行 CSV/EXCEL 文件读写
https://blog.csdn.net/yiluohan0307/article/details/80229978 http://www.ptbird.cn/laravel-excel-csv.h ...
- 免费淘宝IP地址库简介及PHP/C#调用实例
https://yq.aliyun.com/ziliao/25800?spm=a2c4e.11155472.0.0.68027abfcpFb7O 摘要: 本文讲的是免费淘宝IP地址库简介及PHP/C# ...