你现在位置:首页>技术论文>数据通讯>正文
VB编程如何直接控制I/O口之一
日期:2006-7-18 23:27:49 来源:本站整理  
点击: 作者:未知
点击【】放大字体.
   一、I/O端口介绍
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  
WWW_P※LCJS_CO※M-PLC-技-.术_网

   信号采集与控制是工业控制的最重要组成部分。在工业控制中,通常采集到的信号有两类:一类是电压或电流模拟信号;另一类是开关量或数字脉冲量(开关量、脉冲量都属于数字信号)。通常检测出的信号如果是模拟量的话,必须经过放大、变换变为电压0~10伏或电流0~10mA,这些模拟量必须经过模/数转换器(ADC:Analog-Digital Cnverter)转换成数字量, 才能被计算机所接受。同样输出控制量信号也必须是数字信号,得经过数/模转换器(DAC:Digital-Analog Cnverter),将数字信号转换成模拟信号0~10伏 (或0~+5伏)或变为电流0~10mA, 再送入到控制器去控制生产设备的运行。
WWW_PLCJS@_COM%-PLC-技.术_网

  
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

   而在计算机中,CPU通过总线与输入输出设备相连。系统中的很多其他设备都要通过总线,按照CPU规定的时序分时地与CPU进行指令或数据的传输。因此输入输出设备不能直接与总线相连并占用总线,I/O端口就是在总线和输入输出设备之间进行数据交换的数据中转站,我们与输入输出设备的对话实际上是与I/O端口的对话,下面就详细讲述在Visual BASIC环境下如何进行输出和输入操作。
WWW_PLCJS_COM-PLC-技.术_网

  
WWW_P※LCJS_COM-PLC-)技.术_网

  二、编写操作I/O端口的动态链接库函数
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

   Visual BASIC没有提供直接读写I/O端口的方法,所以只能借助其他语言来编写动态链接库DLL(Dynamic Link Library)或VXD,然后再在Visual BASIC中调用。因此我们不得不先了解如何编写操作I/O端口的动态链接库函数。
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  
WWW_PLCJS_COM-PLC-技.术_网

  1.在汇编语言中,可以用 in、out 指令操作I/O端口,具体示例如下:
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  输入操作:
W1WW_P4LCJS_COM-PLC-技.术_网

  MOV DX, Port;Port为端口号
WWW.PLCJS.COM——可编程控制器技术门户

  IN AL, DX;读入端口数据到AL寄存器
WWW_PLCJS_COM-PLC-技.术_网

  输出操作:
——可——编——程——控-制-器-技——术——门——户

  MOV DX, Port;Port为端口号
WWW_PL※CJS_COM-PLC-技.术_网

  MOV AL, ConByte;ConByte为控制字,将控制字送到AL寄存器
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  OUT DX, AL;送出控制字到端口
WWW_PLC※JS_COM-PmLC-技.术_网

  
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  2.在C/C++中,通常用inp和_outp函数操作I/O端口,编写动态链接库我们可以编写如下两个函数,并把它编译生成DLL:
WWW_PL※CJS_COM-PLC-技.术_网

  /*作用:从指定端口读入一个字节,参数:portid端口号,返回值:读入的字节*/
WWcW_PLCJS_COM-PLC-技.术_网

  int _stdcall Inport(short portid)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  {
WWW_PLCJS_COM-PLC-技.术_网

   return inp(portid);
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  }
WWW_PLCJS@_COM%-PLC-技.术_网

  /*作用:向指定端口写入一个字节,参数:portid端口号*/
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

  void _stdcall Outport(short portid,short value)
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  {
WW.W_PLC※JS_C,OM-PL,C-技.术_网

   outp(portid, value);
WWW_PLCJS_COM-PLC-技.术_网

  }
WWW.PLCJS.COM——可编程控制器技术门户

   当需要一次操作两个字节时,我们就必须用到inpw和outpw两个函数,具体用法同inp和outp。
WW.W_PLC※JS_C,OM-PL,C-技.术_网

   同时需要说明的是,_inp和_outp函数和inp和outp函数用法基本上相同,只是在使用时需要头文件,而且本人推荐使用_inp和_outp,而不是使用inp和outp。因为_inp和_outp在Debug和Release都可以使用,而inp和outp只能用于Release设置。如果在Debug设置时使用inp和outp,编译时不会错,但会产生链接错误。
WW.W_PLCJS_COM-PLC-技.术_网

  
WWcW_PLCJS_COM-PLC-技.术_网

  
W1WW_P4LCJS_COM-PLC-技.术_网

  三、Visual BASIC中操作I/O端口
WWW_P※LCJS_CO※M-PLC-技-.术_网

   到此我们就可以在Visual BASIC中通过动态链接库技术间接操作I/O端口了。在Visual Basic中动态链接库必须提前申明,其缺省为公有过程或函数。其格式为:
WWW.PLCJS.COM——可编程控制器技术门户

  
WW.W_PLCJS_COM-PLC-技.术_网

  “Declare Sub 过程名 Lib ‘库名’ [Alias ‘别名’] [(参数表)]”,或者“Declare Function 过程名 Lib ‘库名’ [Alias ‘别名’] [(参数表)] As 类型”。例如:
WWcW_PLCJS_COM-PLC-技.术_网

  
WWW_P※LCJS_COM-PLC-)技.术_网

  Public Declare Function Outport Lib "vcDll.dll" (ByVal portid As Integer, ByVal value As Integer) As Integer //IO输出函数
W1WW_P4LCJS_COM-PLC-技.术_网

  
plcjs.技.术_网

  Public Declare Function Inport Lib "vcDll.dll" (ByVal portid As Integer) As Integer //IO输入函数
WWW_PL※CJS_COM-PLC-技.术_网

  这样定义后在程序中就可以直接使用上面定义的函数或过程来操作I/O端口了。
WWW_PLCJS_COM-PLC-技.术_网

  
——可——编——程——控-制-器-技——术——门——户

  以下是对《VB编程如何直接控制I/O口之一》的回复:  
W1WW_P4LCJS_COM-PLC-技.术_网

匿名回复:
WWW_PL※CJS_COM-PLC-技.术_网

    这篇文章真不错!
WWW.PLCJS.COM——可编程控制器技术门户

匿名回复:
WWW_P※LCJS_CO※M-PLC-技-.术_网

    正需要这么一片文章。谢谢楼主
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

匿名回复:

本新闻共2页,当前在第11 2  
P.L.C.技.术.网——可编程控制器技术门户

评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行