首页 上一页 1 2 下一页 尾页

VB编程如何直接控制I/O口之一 点击:8174 | 回复:39



如火

    
  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2005-12-05 13:03:00
楼主
一、I/O端口介绍 信号采集与控制是工业控制的最重要组成部分。在工业控制中,通常采集到的信号有两类:一类是电压或电流模拟信号;另一类是开关量或数字脉冲量(开关量、脉冲量都属于数字信号)。通常检测出的信号如果是模拟量的话,必须经过放大、变换变为电压0~10伏或电流0~10mA,这些模拟量必须经过模/数转换器(ADC:Analog-Digital Cnverter)转换成数字量, 才能被计算机所接受。同样输出控制量信号也必须是数字信号,得经过数/模转换器(DAC:Digital-Analog Cnverter),将数字信号转换成模拟信号0~10伏 (或0~+5伏)或变为电流0~10mA, 再送入到控制器去控制生产设备的运行。 而在计算机中,CPU通过总线与输入输出设备相连。系统中的很多其他设备都要通过总线,按照CPU规定的时序分时地与CPU进行指令或数据的传输。因此输入输出设备不能直接与总线相连并占用总线,I/O端口就是在总线和输入输出设备之间进行数据交换的数据中转站,我们与输入输出设备的对话实际上是与I/O端口的对话,下面就详细讲述在Visual BASIC环境下如何进行输出和输入操作。 二、编写操作I/O端口的动态链接库函数 Visual BASIC没有提供直接读写I/O端口的方法,所以只能借助其他语言来编写动态链接库DLL(Dynamic Link Library)或VXD,然后再在Visual BASIC中调用。因此我们不得不先了解如何编写操作I/O端口的动态链接库函数。 1.在汇编语言中,可以用 in、out 指令操作I/O端口,具体示例如下: 输入操作: MOV DX, Port;Port为端口号 IN AL, DX;读入端口数据到AL寄存器 输出操作: MOV DX, Port;Port为端口号 MOV AL, ConByte;ConByte为控制字,将控制字送到AL寄存器 OUT DX, AL;送出控制字到端口 2.在C/C++中,通常用inp和_outp函数操作I/O端口,编写动态链接库我们可以编写如下两个函数,并把它编译生成DLL: /*作用:从指定端口读入一个字节,参数:portid端口号,返回值:读入的字节*/ int _stdcall Inport(short portid) {  return inp(portid); } /*作用:向指定端口写入一个字节,参数:portid端口号*/ void _stdcall Outport(short portid,short value) {  outp(portid, value); } 当需要一次操作两个字节时,我们就必须用到inpw和outpw两个函数,具体用法同inp和outp。 同时需要说明的是,_inp和_outp函数和inp和outp函数用法基本上相同,只是在使用时需要头文件,而且本人推荐使用_inp和_outp,而不是使用inp和outp。因为_inp和_outp在Debug和Release都可以使用,而inp和outp只能用于Release设置。如果在Debug设置时使用inp和outp,编译时不会错,但会产生链接错误。 三、Visual BASIC中操作I/O端口 到此我们就可以在Visual BASIC中通过动态链接库技术间接操作I/O端口了。在Visual Basic中动态链接库必须提前申明,其缺省为公有过程或函数。其格式为: “Declare Sub 过程名 Lib ‘库名’ [Alias ‘别名’] [(参数表)]”,或者“Declare Function 过程名 Lib ‘库名’ [Alias ‘别名’] [(参数表)] As 类型”。例如: Public Declare Function Outport Lib "vcDll.dll" (ByVal portid As Integer, ByVal value As Integer) As Integer //IO输出函数 Public Declare Function Inport Lib "vcDll.dll" (ByVal portid As Integer) As Integer //IO输入函数 这样定义后在程序中就可以直接使用上面定义的函数或过程来操作I/O端口了。 感谢网友大浪淘沙提供,由工控网整理。



新学徒工

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 134回
  • 年度积分:0
  • 历史总积分:198
  • 注册:2004年2月16日
发表于:2006-12-08 17:30:00
21楼
这里的好东西不是多,收下了.

YangShem

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 8回
  • 年度积分:0
  • 历史总积分:8
  • 注册:2006年12月07日
发表于:2007-01-15 22:02:00
22楼
下面引用由lxxxx1在 2006-5-16 21:44:00 发表的内容:
  我使用winio在vb程序中调用winio.dll但老是 InitializeWinIo=false是怎么回事?请教各位
--------------------------------------------------------------------------------------------
WinIo在VB中就这个毛病,不能调试运行,你编译成EXE文件就OK了

hooko

  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 90回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2005年3月03日
发表于:2007-06-26 22:47:00
23楼
 谢谢了,学习中

jiangbin1937

  • 精华:0帖
  • 求助:0帖
  • 帖子:24帖 | 60回
  • 年度积分:0
  • 历史总积分:130
  • 注册:2007年6月04日
发表于:2007-07-20 21:57:00
24楼
谢谢了.学习中

如一

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 31回
  • 年度积分:0
  • 历史总积分:88
  • 注册:2007年7月05日
发表于:2007-07-23 11:00:00
25楼
谢谢

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2007-07-23 11:18:00
26楼
不错,我已经收藏了.

happyoicq

  • 精华:0帖
  • 求助:0帖
  • 帖子:49帖 | 1382回
  • 年度积分:0
  • 历史总积分:3120
  • 注册:2005年10月16日
发表于:2007-08-11 11:38:00
27楼
D

sljsdf

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 229回
  • 年度积分:0
  • 历史总积分:328
  • 注册:2007年1月16日
发表于:2007-10-01 15:43:00
28楼
thanks

heidai

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 1835回
  • 年度积分:0
  • 历史总积分:2824
  • 注册:2007年5月23日
发表于:2007-10-01 16:49:00
29楼
还挺详细的,谢谢楼主了,

杜星

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 16回
  • 年度积分:0
  • 历史总积分:25
  • 注册:2006年9月17日
发表于:2007-11-01 11:16:00
30楼
不错,谢谢了

人和

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 98回
  • 年度积分:0
  • 历史总积分:258
  • 注册:2006年4月16日
发表于:2007-11-06 14:42:00
31楼
谢谢,学习了

茗风

  • 精华:4帖
  • 求助:1帖
  • 帖子:77帖 | 1272回
  • 年度积分:0
  • 历史总积分:5069
  • 注册:2006年11月16日
发表于:2007-11-29 14:36:00
32楼
厉害呀,

比芭卜容

  • 精华:0帖
  • 求助:0帖
  • 帖子:24帖 | 128回
  • 年度积分:0
  • 历史总积分:123
  • 注册:2007年7月24日
发表于:2007-11-29 14:50:00
33楼
楼主辛苦了,学习下

鹰飞翔

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 398回
  • 年度积分:0
  • 历史总积分:617
  • 注册:2006年9月30日
发表于:2007-11-29 15:08:00
34楼
很好地阐述了基础概念

gravitationecho

  • 精华:0帖
  • 求助:0帖
  • 帖子:33帖 | 180回
  • 年度积分:0
  • 历史总积分:459
  • 注册:2005年3月10日
发表于:2007-12-15 13:47:00
35楼
[b][color=#800000]楼主给出的汇编语言并未做成VB可以直接调用的DDL[/color][/b]

Hitin

  • 精华:0帖
  • 求助:2帖
  • 帖子:53帖 | 1291回
  • 年度积分:0
  • 历史总积分:2115
  • 注册:2006年12月30日
发表于:2007-12-18 09:21:00
36楼
收藏。

直流电机

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 39回
  • 年度积分:0
  • 历史总积分:125
  • 注册:2006年1月21日
发表于:2007-12-18 15:24:00
37楼
可以通过编写自己特殊的硬件驱动来实现IO 的控制.建议多看看操作系统方面的编程.本人已经实践后获得成功.

江亚

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 735回
  • 年度积分:0
  • 历史总积分:1918
  • 注册:2006年2月11日
发表于:2007-12-27 15:22:00
38楼
不懂啊

wg258

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 51回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2009-12-07 14:45:30
39楼

不错 很好呢 学习一下呢


热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页