D6型接触IC卡读写器剑龙系列D6接触式IC卡读写器采用RS232或USB接口,采用推拔式卡座,电源采用键盘口取电或USB口取电,USB采用无驱技术。剑龙系列D6接触式IC卡读写机保留了RD600系列全部功能外,新增的功能就是支持4个卡座,主卡座用于普通常规的使用方式,辅卡座可方便的插入管理员卡起到认证和管理作用,解决了大部分读写器认证卡必须使用内置SAM卡的方式,而同时为了兼容性和多方认证的考虑,又增加了2个内置的SAM卡座。D6型接触IC卡读写器通讯方式:USB无驱或RS232(DB9FEMALE)接口可选供电:5V供电,USB通讯:USB供电,RS232通讯:PS2键盘口供电支持卡型:支持T=0、T=1的CPU卡,支持所有常用的存储卡、逻辑加密卡卡座类型:推拔式卡座卡座寿命:10万次支持卡尺寸:可选配增加一个7816标准大卡座及最多2个SAM卡座通讯速率:T=0:9600-38400bps,T=1:9600-115200bps可给卡提供电流:0-70mA遵循的标准:ISO7816-3、PC/SC、GSM11.11、FCC、CE状态显示:双色LED指示灯,指示电源或通讯状态连接电缆:附1.5M长的USB连接线外观颜色:通用如图,可根据用户需求定制外形规格(长×宽×高):71mm×88mm×122mm重量:450g温度:工作温度:-20℃到+60℃储存温度:-25℃-85℃IC卡应用IC(IntegratedCircuit)卡,也被称作智能卡(SmartCard),具有写入数据和存储数据的功能,IC卡内存储器的内容可以根据需要有条件地供外部读取,完成信息处理和判定。由于其内部具有集成电路,不但可以存储大量信息,具有极强的保密性能,并且还具有抗干扰、无磨损、寿命长等特性。因此在各个领域中得到广泛应用。下面通过两个实例介绍IC卡的简单应用。实例422向IC卡中写入数据实例说明IC卡是携带应用信息和数据的媒体,空白IC卡是不能立即使用的,必须对IC卡应用系统进行初始化,写入系统IC卡和个人密码,个人专用信息和应用数据。下面介绍如何向IC卡中写入数据。运行本例,在“数据”文本框中输入要存入IC卡中的数据,单击“写数据”按钮,即可将输入的数据写入IC卡中打开串口技术在对串口进行操作之前都需要先打开串口,VC串口编程方法分为利用VC串口控件(或VC串口类)和直接调用Windows底层API函数(我称之为VCAPI串口编程)两种方法,不管哪种方法,其实质都是利用底层API函数对串口进行操作,这里我们来看怎么利用API函数来用VC打开串口。在Windows32位以上操作系统(Win98以上)中,将串口(包括其它通信设备)作为文件来处理,所以串口的打开、读写和关闭所用API函数与文件操作函数一样。所以打开串口用CreateFile,读串口用ReadFile,写串口用WriteFile,关闭串口用CloseHandle。一、用VC打开串口、关闭串口的API函数1、打开串口用CreateFile,其声明如下:1.HANDLECreateFile(2.LPCTSTRlpFileName,//filename3.DWORDdwDesiredAccess,//accessmode4.DWORDdwShareMode,//sharemode5.LPSECURITY_ATTRIBUTESlpSecurityAttributes,//SD6.DWORDdwCreationDisposition,//howtocreate7.DWORDdwFlagsAndAttributes,//fileattributes8.HANDLEhTemplateFile//handletotemplatefile9.);部分参数解释如下:●lpFileName:指定要打开的串口逻辑名,用字符串表示,如“COM1”和“COM2”分别表示串口1和串口2,若要知道您的电脑有哪此串口,可以打开设备管理器查看,如下图所示,或用丁丁串口调试助手,这个工具启动后会枚举系统当前存在的串口。●dwDesiredAccess:访问类型,有读(dwDesiredAccess=GENERIC_READ)、写(dwDesiredAccess=GENERIC_WRITE)或两者兼有((dwDesiredAccess=GENERIC_READ|GENERIC_WRITE)。●dwShareMode:指定端口的共享属性,该参数是为那些由许多应用程序共享的文件提供的,对于串口来说是不能共享的,所以它必须设置为0,这就是通信设备与文件之间的主要差别,如果当前的应用程序调用CreateFile打开一个串口,另外一个程序如果已经打开了该串口,此时CreateFile会返回一个错误代码。然而,同一个应用程序的多个线程可以共享由CreateFile返回的端口句柄,并且根据安全性属性设置,该句柄可以被打开端口的应用程序的子程序所继承。●lpSecurityAttributes:安全属性,此参数为一LPSECURITY_ATTRIBUTES结构,此结构定义了一些属性,如果将该参数设为NULL,该端口将被分配为缺省安全属性,缺省安全属性下端口句柄是不能被继承的。安全属性LPSECURITY_ATTRIBUTES的结构声明如下:1.typedefstruct_SECURITY_ATTRIBUTES{2.DWORDnLength;3.LPVOIDlpSecurityDescriptor;4.BOOLbInheritHandle;5.}SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES;结构成员nLength指明该结构的长度,lpSecurityDescriptor指向一个安全描述符,bInheritHandle表明句柄是否能被继承。●dwCreationDisposition:指定当此端口正在被其它程序占用时采取的动作,因为串口总是存在的,所以此处必须被设置为OPEN_EXISTING,该标志告诉Windows不要创建新端口,而是打开一个已经存在的端口。●dwFlagsAndAttributes:描述了端口的各种属性,对于文件来说可能有很多种属性,但对于串口来说,唯一有意义的是设置FILE_FLAG_OVERLAPPED属性,当指定该属性时,端口I/O可以在后台进行,这称之为异步I/O重叠结构,更多信息可查看MSDN或其它参考资料。●hTemplateFile:指向模板文件的句柄,对于串口来说,此参数必须设置为0。用CreateFile函数打开串COM1的例子如下:1.HANDLEhCom;2.DWORDdwError;3.4.hCom=CreateFile(COM1,//文件名,这里是串口号5.GENERIC_READ|GENERIC_WRITE,//充许读和写6.0,//独占方式7.NULL,8.OPEN_EXISTING,//打开而不是创建9.FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,//异步I/O重叠结构10.NULL11.);然后还应判断端口是否被正常打开,过程如下:1.if(hCom==INVALID_HANDLE_VALUE)2.{3.dwErrow=GetLastError();//取得错误代码4.}如果发生错误,您可以根据取得的错误代码查询到底是什么原因引起的错误。2、关闭串口用CloseHandle,其函数声明如下:1.BOOLCloseHandle(2.HANDLEhObject//handletoobject3.);这个函数很简单,参数只有一个,这个参数就是要关闭的端口句柄,就是用CreateFile打开端口时返回的句柄。Win32串口编程在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。一般情况下,工控机和各智能仪表通过RS485总线进行通信。RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点。每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活。其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。本文我们只介绍API串口通信部分。串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式)。同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。无论那种操作方式,一般都通过四个步骤来完成:(1)打开串口(2)配置串口(3)读写串口(4)关闭串口(1)打开串口Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的原型为:HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDdwCreationDistribution,DWORDdwFlagsAndAttributes,HANDLEhTemplateFile);lpFileName:将要打开的串口逻辑名,如“COM1”;dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列;dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0;lpSecurityAttributes:引用安全性属性结构,缺省值为NULL;dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING;dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O操作;hTemplateFile:对串口而言该参数必须置为NULL;同步I/O方式打开串口的示例代码:HANDLEhCom;//全局变量,串口句柄hCom=CreateFile(COM1,//COM1口GENERIC_READ|GENERIC_WRITE,//允许读和写0,//独占方式NULL,OPEN_EXISTING,//打开而不是创建0,//同步方式NULL);if(hCom==(HANDLE)-1){AfxMessageBox(打开COM失败!);returnFALSE;}returnTRUE;重叠I/O打开串口的示例代码:HANDLEhCom;//全局变量,串口句柄hCom=CreateFile(COM1,//COM1口GENERIC_READ|GENERIC_WRITE,//允许读和写0,//独占方式NULL,OPEN_EXISTING,//打开而不是创建FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,//重叠方式NULL);if(hCom==INVALID_HANDLE_VALUE){AfxMessageBox(打开COM失败!);returnFALSE;}returnTRUE;(2)、配置串口在打开通讯设备句柄后,常常需要对串口进行一些初始化配置工作。这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、数据位数、奇偶校验和停止位数等信息。在查询或配置串口的属性时,都要用DCB结构来作为缓冲区。一般用CreateFile打开串口后,可以调用GetCommState函数来获取串口的初始配置。要修改串口的配置,应该先修改DCB结构,然后再调用SetCo