ASP网页设计用Win32 API完成串行通讯
因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQLServer还有更多的扩展,可以用存储过程,数据库大小无极限限制。串口是经常使用的盘算机与内部串行设备之间的数据传输通道,因为串行通讯便利易行,以是使用普遍。我们能够使用WindowsAPI供应的通讯函数编写出高可移植性的串行通讯程序。在Win16中,能够使用OpenComm、CloseComm和WriteComm等函数翻开、封闭和读写串口。但在Win32中,串口和其他通讯设备均被作为文件处置,串口的翻开、封闭和读写等操纵所用的API函数与操纵文件的函数不异。可经由过程CreateFile函数翻开串口,经由过程CloseFile函数封闭串口,经由过程CommProp、DCB布局、GetCommProperties、SetCommProperties、GetCommState及SetCommState等函数设置串口形态,经由过程函数ReadFile和WritFile读写串口。
VC++6.0是Windows使用程序开辟的支流言语之一,它具有优秀的图形计划界面并撑持面向工具的程序计划办法。本文分离一个实例先容在VC++6.0下怎样使用Win32API完成串行通讯程序。
完成道理
本文的实例来自一个水泥发货体系,在体系中,必要将经由过程总量传感器收罗到的仓重值传进到盘算机中,以便体系做出响应的处置。这必要利用串行通讯来完成收罗数据的传送事情。
关于串行通讯设备,Win32API撑持同步和异步两种I/O操纵。同步操纵体例的程序计划绝对对照复杂,但I/O操纵函数在I/O操纵停止前不克不及前往,这将挂起挪用线程,直到I/O操纵停止。异步操纵体例绝对要庞大一些,但它可以让耗时的I/O操纵在背景举行,不会挂起挪用线程,这在年夜数据量通讯的情形下对改良挪用线程的呼应速率是相称无效的。异步操纵体例出格合适同时对多个串行设备举行I/O操纵和同时对一个串行设备举行读/写操纵。这两种操纵体例的程序计划基础头脑是类似的,本文将针对同步操纵体例给出详细的通讯程序计划,同时复杂申明怎样完成异步的I/O操纵。
串行设备的初始化
串行设备的初始化是使用CreateFile函数完成的。该函数取得串行设备句柄并对其举行通讯参数设置,包含设置输入/吸收缓冲区巨细、超时把持和事务监督等。
//串行设备句柄;
HANDLEhComDev=0;
//串口翻开标记;
BOOLbOpen=FALSE;
//线程同步事务句柄;
HANDLEhEvent=0;
BOOLSetupSynCom()
{
DCBdcb;
COMMTIMEOUTStimeouts;
//设备已翻开
if(bOpen)returnFALSE;
//翻开COM1
if((hComDev=CreateFile(“COM1”,GENERICREAD|GENERICWRITE,0,NULL,OPENEXISTING,FILEATTRIBUTENORMAL,NULL))==
INVALIDHANDLEVALUE)
returnFALSE;
//设置超时把持
SetCommTimeouts(hComDev,&timeouts);
//设置吸收缓冲区和输入缓冲区的巨细
SetupComm(hComDev,1024,512);
//猎取缺省的DCB布局的值
GetCommState(hComDev,&dcb);
//设定波特率为9600bps
dcb.BaudRate=CBR9600;
//设定无奇偶校验
dcb.fParity=NOPARITY;
//设定命据位为8
dcb.ByteSize=8;
//设定一个中断位
dcb.StopBits=ONESTOPBIT;
//监督串口的毛病和吸收到字符两种事务
SetCommMask(hComDev,EVERR|EVRXCHAR);
//设置串行设备把持参数
SetCommState(hComDev,&dcb);
//设备已翻开
bOpen=TRUE;
//创立野生重设、未发旌旗灯号的事务
hEvent=CreateEvent(NULL,FALSE,FALSE,
“WatchEvent”);
//创立一个事务监督线程来监督串口事务
AfxBeginThread(CommWatchProc,pParam);
}
在设置串口DCB布局的参数时,不用设置每个值。起首读出DCB缺省的参数设置,然后只修正需要的参数,其他参数都取缺省值。因为对串口举行的是同步I/O操纵,以是除非指定举行监测的事务产生,不然WaitCommEvent函数不会前往。在串行设备初始化的最初要创建一个独自的监督线程来监督串口事务,以避免挂起以后挪用线程,个中pParam能够是一个对事务举行处置的窗口类指针。
假如要举行异步I/O操纵,翻开设备句柄时,CreateFile的第6个参数应增添FILEFLAGOVERLAPPED标记。
数据发送
数据发送使用WriteFile函数完成。关于同步I/O操纵,它的最初一个参数可为NULL;而对异步I/O操纵,它的最初一个参数必须是一个指向OVERLAPPED布局的指针,经由过程OVERLAPPED布局来取得以后的操纵形态。
BOOLWriteComm(LPCVOIDlpSndBuffer,DWORD
dwBytesToWrite)
{//lpSndBuffer为发送数据缓冲区指针,
dwBytesToWrite为将要发送的字节长度
//设备已翻开
BOOLbWriteState;
//实践发送的字节数
DWORDdwBytesWritten;
//设备未翻开
if(!bOpen)returnFALSE;
bWriteState=WriteFile(hComDev,lpSndBuffer,
dwBytesToWrite,&dwBytesWritten,NULL);
if(!bWriteState||dwBytesToWrite!=dwBytesWritten)
//发送失利
returnFALSE;
else
//发送乐成
returnTRUE;
}
数据吸收
吸收数据的义务由ReadFile函数完成。该函数从串口吸收缓冲区中读取数据,读取数据前,先用ClearCommError函数取得吸收缓冲区中的字节数。吸收数据时,同步和异步读取的不同同发送数据是一样的。
DWORDReadComm(LPVOIDlpInBuffer,DWORD
dwBytesToRead)
{//lpInBuffer为吸收数据的缓冲区指针,dwBytesToRead为筹办读取的数据长度(字节数)
//串行设备形态布局
COMSTATComStat;
DWORDdwBytesRead,dwErrorFlags;
//设备未翻开
if(!bOpen)return0;
//读取串行设备确当前形态
ClearCommError(hComDev,&dwErrorFlags,&ComStat);
//应当读取的数据长度
dwBytesRead=min(dwBytesToRead,ComStat.cbInQue);
if(dwBytesRead>0)
//读取数据
if(!ReadFile(hComDev,lpInBuffer,dwBytesRead,&dwBytesRead,NULL))
dwBytesRead=0;
returndwBytesRead;
}
事务监督线程
事务监督线程对串口事务举行监督,当监督的事务产生时,监督线程可将这个事务发送(SendMessage)或挂号(PostMessage)到对事务举行处置的窗口类(由pParam指定)中。
UINTCommWatchProc(LPVOIDpParam)
{DWORDdwEventMask=0;//产生的事务;
while(bOpen)
{//守候监督的事务产生
WaitCommEvent(hComDev,&dwEventMask,
NULL);
if((dwEventMask&EVRXCHAR)==
EVRXCHAR)
……//吸收到字符事务后,能够将此动静挂号到由pParam有指定的窗口类中举行处置
if(dwEventMask&EVERR)==EVERROR)
……//产生毛病时的处置
}
SetEvent(hEvent);
//发旌旗灯号,唆使监督线程停止
return0;
}
封闭串行设备
在全部使用程序停止或不再利用串行设备时,应将串行设备封闭,包含作废事务监督,将设备翻开标记bOpen置为FALSE以使事务监督线程停止,扫除发送/吸收缓冲区和封闭设备句柄。
voidCloseSynComm()
{
if(!bOpen)return;
//停止事务监督线程
bOpen=FALSE;
</p>ASP一般认为只能运行在IIS上,正如前面所提到的,这并不是十分正确,事实上,ASP也能运行在Apache上。ApacheASP可在任意Apache服务器上运行有限的ASP功能,所需做的,只需打开mod_perl。 那么,ASP.Net有哪些改进呢? ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件) 另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件) 运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
页:
[1]