没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2006-03-09 13:37:00.000|阅读 1915 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
(1):将WinIo.dll、WinIo.sys、WINIO.VXD三个文件放在程序可执行文件所在目录下;
(2):将WinIo.lib添加到工程中,WinIo.lib及winio.h文件必须放在工程目录下;
(3):在StdAfx.h头文件中加入#include "winio.h"语句;
(4):调用InitializeWinIo函数初始化WinIo驱动库;
(5):调用读写IO口的GetPortVal或SetPortVal函数;
(6):调用ShutdownWinIo函数;
在非管理员权限下运行,必须首先完成以下步骤:
(1):将WinIo.dll、WinIo.sys、WINIO.VXD三个文件放在任一WinIo应用程序可执行文件所在目录下;
(2):以管理员或其它具有管理员权限的用户身份登陆;
(3):调用InstallWinIoDriver函数,第一个参数设置为WinIo.sys文件所在目录路径,第二个参数设 置为false;
(4):重新启动系统;
(5):以普通用户身份登录,现在可以调用WinIo库函数;
(6):当不再需要WinIo库时,可以再次以管理员身份或其它具有管理员权限的用户身份登陆系统,调用RemoveWinIoDriver卸载该库;
WinIo库中几个函数说明:
(1):初始化与终止
bool _stdcall InitializeWinIo(); void _stdcall ShutdownWinIo();
(2):安装与卸载
bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false); bool _stdcall RemoveWinIoDriver();
(3):读写I/O口
bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize); bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
GetPortVal函数从指定端口读取一个BYTE/WORD/DWORD类型的值;
wPortAddr是指定一个端口地址值;
pdwPortVal为指向一双字节型变量的指针,该变量存储从wPortAddr端口读取的值;
bSize指定读取字节数,值可以为1,2或4。
SetPortVal函数向指定端口写入一个BYTE/WORD/DWORD类型的值;
除dwPortVal为输入参数,表示待写入外,其余个变量含义与GetPortVal相似。
PC并行口数字输出的VC实现(示例工程下载)
为了测试并行口的数字输出,可以准备12支LED发光二极管,将LED的阳极分别与数据端口引脚Pin2~Pin9和控制端口引脚Pin1、Pin14、Pin16、Pin17相连接;将LED的阴极连接在一起与并行口的归地引脚GND相连即可。在实际控制应用中不能这样连接,因为数据端口引脚、控制端口引脚输出的电流非常小,只有10mA左右,必须添加
其它硬件电路。
(1):数据端口数字输出的VC实现
//获得数据端口地址 WORD m_nport=(WORD)0x378; //获得要写入数据端口的值WriteValue(数据范围为0~255) DWORD m_nValue=(DWORD)WriteValue; //调用WinIo库函数SetPortVal写端口值 SetPortVal(m_nport, m_nValue, 1);//write a BYTE value to an I/O port
(2):控制端口数字输出的VC实现
//获得控制端口地址 WORD m_nport=(WORD)0x37A; //获得控制端口的值,保持高位值不变,将要输出的值从低4位输出,且使连接器上的电位状态与想输出的值一致 DWORD temp_dwPortVal; unsigned int temp_aa; GetPortVal(m_nport, &temp_dwPortVal, 1); //reads a BYTE value from an I/O port temp_aa=(unsigned int)temp_dwPortVal; temp_aa=temp_aa&0x0F0; //取低8位值,将低4位置为0;高4位不变; temp_aa=temp_aa^0x0B; //将低4位中C0、C1、C3置为1,C2置为0;高4位不变;
//获得要写入控制端口的值WriteValue(数据范围为0~15) unsigned int WriValue; WriValue=WriteValue&0x0F; //取低4位; temp_aa=temp_aa^WriValue; //将写入值的低4位中的C0、C1、C3取反,C2位不变,高4位保持端口值不变 SetPortVal(m_nport, (DWORD)temp_aa, 1); //写出的值中,高4位保持端口原来的值不变, //低4位是写入什么电平,连接器上既是什么电平
(3):数据端口及控制端口组合成12位数字输出的VC实现
//获得端口地址 WORD m_nportData=(WORD)0x378; WORD m_nportControl=(WORD)0x37A; //获得要写入端口的值WriteValue(数据范围为0~4095) DWORD m_nValue=(DWORD)(WriteValue&0x0FF);//取低8位值 SetPortVal(m_nportData, m_nValue, 1);//write a BYTE value to Data port DWORD temp_dwPortVal; unsigned int temp_aa; GetPortVal(m_nportControl, &temp_dwPortVal, 1); //reads a BYTE value from an I/O port temp_aa=(unsigned int)temp_dwPortVal; temp_aa=temp_aa&0x0F0; //取低8位值,将低4位置为0;高4位不变; temp_aa=temp_aa^0x0B; //将低4位中C0、C1、C3置为1,C2置为0;高4位不变; unsigned int WriValue; WriValue=WriValue>>8;//取高4位值 temp_aa=temp_aa^WriValue; //将写入值的低4位中的C0、C1、C3取反,C2位不变,高4位保持端口值不变 SetPortVal(m_nportControl, (DWORD)temp_aa, 1); //写出的值中,高4位保持端口原来的值不变, //低4位是写入什么电平,连接器上既是什么电平
PC并行口数字输入的VC实现
(1):状态端口数字输入的VC实现
为了测试并行口状态端口的数字输入,可以将数据端口引脚Pin2~Pin6连接到状态端口引脚Pin15、Pin13、Pin12、Pin10、Pin11上。引脚接好后,先从数据端口输出数据,在从状态端口和控制端口读出数据,读出的数据应与写入的数据一致,数据范围为0~31。
DWORD dwPortVal; unsigned int ValueGet=0; //获得端口地址 WORD m_nport=(WORD)0x379; //获得端口数据 GetPortVal(m_nport, &dwPortVal, 1); ValueGet=(unsigned int)dwPortVal; ValueGet=ValueGet^0x80; //保持得到的State值与连接器处的值一直; ValueGet=ValueGet&0xF8; //去掉S0 ~S2位; ValueGet=ValueGet>>3; //右移3位,将S7~S3变为低5位
(2):控制端口数字输入的VC实现
为了测试并行口控制端口的数字输入,可以将数据端口引脚Pin2~Pin5连接到控制端口引脚Pin1、Pin14、Pin16、Pin17上
。引脚接好后,先从数据端口输出数据,在从状态端口和控制端口读出数据,读出的数据应与写入的数据一致,数据范围为0~15。
//获得端口地址 WORD m_nport=(WORD)0x37A; //===== 将C0~C3位置1,即使连接器上为高电平 ,使控制端口为输入端口===== DWORD temp_dwPortVal; unsigned int temp_aa; GetPortVal(m_nport, &temp_dwPortVal, 1); //获取端口的当前值 temp_aa=(unsigned int)temp_dwPortVal; temp_aa=temp_aa&0x0F0; //取低8位值,将低4位置为0;高4位不变; temp_aa=temp_aa^0x4; //将低4位中C0、C1、C3置为0,C2置为1;高4位不变; SetPortVal(m_nport, (DWORD)temp_aa, 1); //写出的值中,高4位保持端口原来的值不变, //低4位是写高电平,即使连接器上是高电平 //============================================================= unsigned int ValueGet=0; DWORD dwPortVal; //获得端口数据 GetPortVal(m_nport, &dwPortVal, 1); ValueGet=(unsigned int)dwPortVal; ValueGet=ValueGet^0x0B; //保持C0,C1,C3位的值与连接器处的值一至; ValueGet=ValueGet&0x0F; //去掉高4位值
(3):控制端口及状态端口组合成9位数字输入的VC实现
为了测试并行口的数字输入,可以将数据端口引脚Pin2~Pin9连接到控制端口引脚Pin1、Pin14、Pin16、Pin17和状态端口引脚Pin15、Pin13、Pin12、Pin10上
,Pin11引脚连接到归地引脚GND或悬空。引脚接好后,先从数据端口输出数据,在从状态端口和控制端口读出数据,读出的数据应与写入的数据一致,当Pin11引脚连接到归地引脚GND时,数据范围为0~255;当Pin11引脚悬空时,数据范围为256~511。
unsigned int ValueGet=0; //获得端口地址 WORD m_nportState=(WORD)0x379; WORD m_nportControl=(WORD)0x37A; //Read State Port DWORD dwPortVal; unsigned int ValueState=0; GetPortVal(m_nportState, &dwPortVal, 1); ValueState=dwPortVal; ValueState=ValueState^0x80; //保持得到的State值与连接器处的值一直; ValueState=ValueState&0xF8; //去掉S0 ~S2位; ValueState=ValueState<<1; //左移1位,将S7~S3变为高5位 //Read control Port //========== 将C0~C3位置1,即使连接器上是高电平 ,使控制端口为输入端口===== GetPortVal(m_nportControl, &dwPortVal, 1); //获取端口的当前值 ValueGet=(unsigned int)dwPortVal; ValueGet=ValueGet&0x0F0; //取低8位值,将低4位置为0;高4位不变; ValueGet=ValueGet^0x4; //将低4位中C0、C1、C3置为0,C2置为1;高4位不变; SetPortVal(m_nportControl, (DWORD)ValueGet, 1); //写出的值中,高4位保持端口原来的值不变, //低4位是写高电平,即使连接器上是高电平 //============================================================= unsigned int ValueControl=0; GetPortVal(m_nportControl, &dwPortVal, 1); ValueControl=(unsigned int)dwPortVal; ValueControl=ValueControl^0x0B; //保持C0,C1,C3位的值与连接器处的值一至; ValueControl=ValueControl&0x0F; //去掉高4位值 //get 9bit value ValueGet=ValueState^ValueControl;
五、结束
本文只是介绍PC并行端口作为数字I/O口的应用方法,在实际运用到控制系统中进行数字信号通信时,必须注意对并行端口信号进行其它的处理,以提高端口信号的抗干扰能力、稳定性及可靠性等。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号