电 话:

传 真:

邮 箱:secsoon@163.com

 Win7系统LabVIEW使用WinIO3.0操作工业主板GPIO引脚输出控制LED灯亮与灭 

  • 前言

    GPIO(英语:General-purpose input/output),通用型之输入输出的简称,功能类似8051的P0—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。关于GPIO的更多介绍,大家可以度娘查一下,这里不做过多介绍了。

    WinIO动态库允许在32位的Windows应用程序中直接对I/O端口和物理内存进行存取操作,通过使用一种内核模式的设备驱动器和其它几种底层编程技巧,它绕过了Windows系统的保护机制。而64位Windows系统中仅有WinIO3.0测试版的数字签名,需要开启测试模式才能正常使用。 

今天,我就教大家如何使用WinIO编程来控制GPIO的输入输出,并通过控制高/低电平的输出来控制LED的亮与灭。这在工业自动化应用中是很有用的,可以用来作为信号I/O,因为很多工业PC主板上一般都有GPIO插针引脚,如果利用上了,既可以节省硬件成本,又可以在软件编程时统一IO接口函数,节省了使用其他IO卡带来的二次开发所花的时间和精力。

  • 工具/原料

    硬件:排线、插针、LED灯珠(有条件的可以将插针和LED灯珠焊接在万能板上,方便观察控制),还有带GPIO插针的工业PC主板(系统Win7 32位或64位均可)。

    软件:LabVIEW编程环境、WinIO3.0库函数(共8个函数,其中我们用到的函数只要4个即可)

bool _stdcallInitializeWinIo();

本函数初始化WioIO函数库。

必须在调用所有其它功能函数之前调用本函数。

如果函数调用成功,返回值为非零值。否则返回值为0。

 

bool _stdcall GetPortVal(WORDwPortAddr, PDWORD pdwPortVal, BYTE bSize);

使用此函数从一个输入或输出端口读取一个字节/字/双字数据。

参数:

wPortAddr– 输入输出端口地址

pdwPortVal– 指向双字变量的指针,接收从端口得到的数据。

bSize– 需要读的字节数,可以是1 (BYTE), 2 (WORD) or 4 (DWORD).

如果调用成功,则返回非零值。否则函数返回值为零。


bool _stdcallSetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);

使用本函数将一个字节/字/双字的数据写入输入或输出接口。

参数:

wPortAddr– 输入输出口地址

dwPortVal– 要写入口的数据

bSize– 要写的数据个数,可以是 1 (BYTE), 2 (WORD) or 4 (DWORD).

如果调用成功,则返回非零值。否则函数返回值为零。


void _stdcallShutdownWinIo();

本函数在内存中清除WinIO库,本函数必须在中止应用函数之前或者不再需要WinIO库时调用


  • 操作/步骤

通过使用上述4个函数功能,我将整个调用做成了一个界面,并打包成exe发布。

 

我将已经测试过的几款主板GPIO参数填写进了内部程序框图,并做了一个下拉列表选项框供选择测试,当然,我们也可以通过选择【通用主板】,并配置程序目录下的GPIO.ini文件参数来调用自定义的GPIO地址和端口。

操作:参数都配置好(或者选好主板后),这里以M61主板为例。

1、输出:直接点输出的Pin即可(如果Pin脚定义为仅输入,那么点击无效;仅可控制输出Pin脚)。

2、输入:由以上引脚说明可知默认输入是高电平的(灯亮),所以要给输入的话就得给低电平(灯灭)。我们将Pin9(VDD)接入到相应的输入脚(只读脚),即可有变化(接入时灯灭)


详细测试效果见视频:

https://v.youku.com/v_show/id_XNDA5NTgwNTU2NA==.html

绿色版,无需安装直接解压打开使用。

 

GPIO测试工具V3.0下载地址请关注微信公众号: