ÓÃActivexʵÏÖ´®¿ÚͨÐÅ
WIN95 ½ç Ãæ Ï µÄVC++ ´® ¿Ú ͨ Ѷ ³Ì Ðò
Àû ÓÃWINDOWS ¶¨ ʱ Æ÷ ʵ ÏÖ ´® ¿Ú ͨ ÐÅ ¿Ø ÖÆ
VC++Ï´®ÐÐͨÐŵıà³Ì·½·¨
´®ÐÐͨѶͨÓýӿڳÌÐòÉè¼Æ
VCÔÚwin95ϱàдÓÃÓÚ´®ÐÐͨѶµÄ³ÌÐò
ÓÃActivexʵÏÖ´®¿ÚͨÐÅ
ΪʵÏÖWindowsµÄ´®¿ÚͨÐÅ¿ÉÓÃAPIʵÏÖ,µ«Ê®·Ö²»±ã¡£Ò²¿ÉÒÔÓÃActive¿Ø¼þʵÏÖ¡£
ÏÈÔÚÓ¦ÓóÌÐòÖвåÈëActive¿Ø¼þMicrosoft comm contronl(MSComm)¡£
SComm¿Ø¼þµÄÊôÐÔ
MSComm¿Ø¼þµÄÊôÐÔ
CommPort£ºÉèÖô®¿ÚºÅ£¬ÀàÐÍ short :1-comm1 2-comm2.
Settings£ºÉèÖô®¿ÚͨѶ²ÎÊý£¬ÀàÐÍ CString :B-²¨ÌØÂÊ P-ÆæÅ¼ÐÔ£
¨N-ÎÞУÑ飬E-żУÑ飬O-ÆæÑ飩 D-×Ö½ÚÓÐЧλÊýS-ֹͣλ¡£
PortOpen£ºÉèÖûò·µ»Ø´®¿Ú״̬£¬ÀàÐÍ BOOL£ºTURE-´ò¿ª FALSE-¹Ø±Õ¡£
InputMode:ÉèÖôӽÓÊÕ»º³åÇø¶ÁÈ¡Êý¾ÝµÄ¸ñʽ£¬ÀàÐÍ long£º 0-Text 1-Bin.
Input:´Ó½ÓÊÕ»º³åÇø¶ÁÈ¡Êý¾Ý ÀàÐÍ VARIANT¡£
InBufferCount:½ÓÊÕ»º³åÇøÖеÄ×Ö½ÚÊý£¬ÀàÐÍ£ºshort.
InBufferSize:½ÓÊÕ»º³åÇøµÄ´óС£¬ÀàÐÍ£ºshort.
Output:Ïò·¢ËÍ»º³åÇøÐ´ÈëÊý¾Ý£¬ÀàÐÍ£ºVARIANT.
OutBufferCount:·¢ËÍ»º³åÇøÖеÄ×Ö½ÚÊý£¬ÀàÐÍ£ºshort.
OutBufferSize:·¢ËÍ»º³åÇøµÄ´óС£¬ÀàÐÍ£ºshort.
InputLen:ÉèÖûò·µ»ØInput¶Á³öµÄ×Ö½ÚÊý£¬ÀàÐÍ£ºshort.
CommEvent:´®¿Úʼþ£¬ÀàÐÍ£ºshort.
³ÌÐòʾÀý
´®¿Ú³õʼ»¯
if(!m_comm.GetPortOpen())
m_comm.SetPortOpen(TURE); /*´ò¿ª´®¿Ú
m_comm.SetSettings("4800,n,8,1"); /*´®¿Ú²ÎÊýÉèÖÃ
m_comm.SetInputMode(0); /*ÉèÖÃTEXT»º³åÇøÊäÈ뷽ʽ
m_comm.SetRthresHold(1); /*ÿ½ÓÊÕÒ»¸ö×Ö·ûÔò¼¤·¢OnComm()ʼþ
½ÓÊÕÊý¾Ý
m_comm.SetInputLen(1); /*ÿ´Î¶Áȡһ¸ö×Ö·û
VARINAT V1=m_comm.GetInput(); /*¶ÁÈë×Ö·û
m_V1=V1.bstrval;
·¢ËÍ×Ö·û
m_comm.SetOutput(COlevariant("Hello");/*·¢ËÍ"Hello"
¡¡
WIN95 ½ç Ãæ Ï µÄVC++ ´® ¿Ú ͨ Ѷ ³Ì Ðò
ÄÏ ¾© ʯ ÓÍ Îï ̽ ÑÐ ¾¿ Ëù
Îâ ·ï »ª
---- Microsoft Visual C++ ÒÔ Æä ½ç Ãæ µÄ ¿ª ·Å ÐÔ Öø ³Æ£¬ Òò Æä ¼ò µ¥ Ò× Ñ§¡¢32 λ
Ãæ Ïò ¶Ô Ïó µÄ ³Ì Ðò Éè ¼Æ ¼°Activate X µÄ Áé »î ÐÔ ¶ø ÊÜ ¹ã ´ó ¼Æ Ëã »ú ¿ª
·¢ Õß µÄ Çà íù£¬ ¹ã ·º Ó¦ Óà ÓÚ ¸÷ ¸ö Áì Óò¡£ Ôõ Ñù Àû ÓÃVC++ ½ø ÐÐ ´® ¿Ú µÄ
ͨ Ѷ ±à ³Ì£¬ Õâ ÊÇ Ò» ÖÖ »ù ±¾ ¹¦¡£ ÌØ ±ð ÊÇ ÔÚ Êµ ʱ ¼à ¿Ø¡¢ ´ó С ÐÍ Éè
±¸ µÄ Õû ¸ö Éú ²ú ¹ý ³Ì ¿Ø ÖÆ µÈ ·½ Ãæ£¬VC++ µÄ ´® ¿Ú ±à ³Ì ÏÔ µÃ ÓÈ Îª ÖØ
Òª¡£ ÎÒ Ôø ²Î Óë ±à д ÁË ÎÞ Ïß µç ·Ç ·¨ Ƶ ¶Î Õ¼ Óà µÄ ʵ ʱ ¼à ¿Ø ϵ ͳ¡¢
»ì Äý ÍÁ ½Á °è ×Ô ¶¯ »¯ Éú ²ú ¿Ø ÖÆ ϵ ͳ¡£ ÏÂ Ãæ ¾Í ×Ô ¼º µÄ Ò» µã ¾ Ñé
Ìå »á Óë ¶Á Õß ·Ö Ïí¡£
---- Ò» °ã Çé ¿ö Ï µÄ ´® ¿Ú ͨ Ѷ ÎÞ ·Ç ²É Óà Á½ ÖÖ ·½ ·¨£º Ò» ÊÇ Àû ÓÃWindows µÄ ͨ
ѶAPI º¯ Êý£¬ ¶þ ÊÇ Àû ÓÃVC++£¨ »ò Æä Ëü Óï ÑÔ£© µÄ ±ê ×¼ ͨ Ѷ º¯ Êý_inp¡¢_outp À´ ʵ ÏÖ¡£
---- Windows µÄAPI º¯ Êý Ëä È» ʹ ÓÃ Ãæ ºÜ ¹ã£¬ µ« ÓÉ ÓÚ ±È ½Ï ¸´ ÔÓ ¶ø ÓÐ Ò» ¶¨ µÄ ÄÑ
¶È£¬ ¹Ê ¼ò µ¥ Êö Ö®£¬ Æä ±à ³Ì ¹ý ³Ì ·Ö Ϊ ³õ ʼ »¯ ´® ¿Ú¡¢ Åä Öà ´® ¿Ú¡¢ ³¬ ʱ ¿Ø ÖÆ¡¢
Êý ¾Ý ´« Êä¡¢ ¹Ø ±Õ ´® ¿Ú µÈ¡£
---- VC++ ´® ¿Ú ͨ Ѷ
---- Ò»¡¢ ³õ ʼ »¯ ´® ÐРͨ Ѷ ¿Ú
---- ͨ ¹ý ¼Æ Ëã »ú ´® ¿Ú ½ø ÐРͨ Ѷ Ö® ǰ£¬ ±Ø Ðë ¸ù ¾Ý ¼à ¿Ø Éè ±¸ µÄ ÓÐ ¹Ø ͨ Ѷ ²Î
Êý£¬ Ô¼ ¶¨ Ë« ·½ µÄ ͨ Ѷ ·½ ʽ£¬ °ü À¨ ²¨ ÌØ ÂÊ µÄ Éè Öá¢ Ææ ż λ У Ñé ¼° Í£ Ö¹ λ µÄ
Éè Á¢¡£ È· ¶¨ Êý ¾Ý ´« Êä Ö¡ ¸ñ ʽ£¬ È· ¶¨UART ²Ù ×÷ ·½ ʽ¡£ Öð ¸ö ¶Ô Ïß Â· ¿Ø ÖÆ ¼Ä ´æ
Æ÷¡¢ ²¨ ÌØ ÂÊ Òò ×Ó ¼Ä ´æ Æ÷ ºÍM0DEM ¼Ä ´æ Æ÷ д Èë ²Ù ×÷¡£
---- ÏÈ È· ¶¨ ¼Æ Ëã »ú µÄ ͨ Ѷ ¿Ú µØ Ö· ÊÇ3F8 »¹ ÊÇ2F8£¨ ¸ù ¾Ý Óà »§ µÄ ²» ͬ Òª Çó£¬ ¿É
¼Ó ²å ¿¨ ¶ø ÓÐ3E8¡¢2E8£¬ Éõ ÖÁ ʹ Óà ¶à Óà »§ ¿¨ ¶ø ÓÐ3220¡¢3228¡¢4220¡¢4228¡¢5220¡¢5228£©
£¬ Àý ÖÐ ÒÔ2F8 ×ö Ϊ ¶Ë ¿Ú µØ Ö·¡£ Àû ÓÃ_outp(PORT,0x0c) ½« ²¨ ÌØ ÂÊ Éè Öà Ϊ9600£¬£¨_outp
(PORT,0x30) ½« ²¨ ÌØ ÂÊ Éè Öà Ϊ2400£¬_outp(PORT,0x18) ½« ²¨ ÌØ ÂÊ Éè Öà Ϊ4800£©¡£
---- Êý ¾Ý ´« Êä ¸ñ ʽ Ôò ÓÉ µØ Ö·PORT+3 È· ¶¨£¬ Èç Ñ¡ Óà Æß λ Ò» Í£ Ö¹ λ ż У Ñ飬 Ôò
²É ÓÃoutp(PORT+3,0x3a) ¼°outp(PORT+3 ,0x1a) Á½ ¸ö Óï ¾ä£» Èç Ñ¡ Óà °Ë λ Ò» Í£ Ö¹ λ ÎÞ
Ææ ż У Ñ飬 Ôò ²É ÓÃoutp(PORT+3,0x3a) ¼°outp(PORT+3 ,0x03) Á½ ¸ö Óï ¾ä£» ÖÁ ÓÚ Îª ʲ ô
£¬ ¿É ²Î ¿¼ ÓÐ ¹Ø Òì ²½ ͨ Ѷ Êý ¾Ý ¸ñ ʽ ·½ Ãæ µÄ Êé¡£
---- ¶þ¡¢ ²é ѯ ·¢ ËÍ Á÷ ³Ì
---- Ö» ÐèCPU ¼ì ²â µ½UART ·¢ ËÍ Æ÷ ±£ ³Ö ¼Ä ´æ Æ÷ Ϊ ¿Õ£¬ ¼´ ÏòUART Êä ³ö Ò» ¸ö ×Ö ·û¡£ ·¢
ËÍ ·½ Ê× ÏÈ Êä ³öRTS ºÍDTR ÓРЧ£¬ ¼ì ²âMODEM ¼Ä ´æ Æ÷£¬ Ö» ÓÐ ÊÕ µ½DEC Êä Èë µÄCTS¡¢DSR ÓÐ
Ч£¬CPU ²Å ÏòUART Êä ³ö Ò» ·¢ ËÍ ×Ö ·û¡£
---- Èý¡¢ ²é ѯ ½Ó ÊÕ Á÷ ³Ì
---- Ö» ÐèCPU ¼ì ²â µ½UART ½Ó ÊÕ Æ÷ Êý ¾Ý ×¼ ±¸ ¾Í Ð÷£¬ ¼´ ¿É ´Ó ½Ó ÊÕ Æ÷ Êý ¾Ý ¼Ä ´æ Æ÷ ÖÐ
¶Á È¡ Ò» ×Ö ·û¡£ ½Ó ÊÕ ·½ Ê× ÏÈ Êä ³ö Êý ¾Ý ÖÕ ¶Ë ¾Í Ð÷ ÓРЧ£¨DTR=1£©£¬ È» ºó ¼ì ²âMODEM ×´
̬ ¼Ä ´æ Æ÷£¬ Ö» ÓÐDSR=1£¬CPU ²Å ½Ó ÊÕ Ò» ×Ö ·û¡£
---- ³Ì Ðò Àý
---- Ϊ ÁË ±à ³Ì µÄ ·½ ±ã£¬ ÎÒ °Ñ ʵ ʱ ¼à ¿Ø ¹ý ³Ì ÖÐ µÄ ´® ¿Ú ³õ ʼ »¯¡¢ ´® ¿Ú ½Ó ÊÕ¡¢ ´®
¿Ú ·¢ ËÍ µÈ ÒÔ ×Ó ³Ì Ðò µÄ ÐΠʽ ³Ê ÏÖ¡£
È· ¶¨ ͨ Ѷ ¿Ú µØ Ö·£ºint PORT=0x2F8;
½Ó ÊÕ ×Ö ·û ×Ó ³Ì Ðò£º
char near readbyte(void)
{
int time_limit;
char sta;
time_limit=5000;
while ((sta=inp(PORT+5) & 0x01) !=1)
{ time_limit--;
if (time_limit==0) {
/*printf("s=%4xm ",sta);*/return 0;}
}
return inp(PORT);
printf("%s",inp(PORT));
}
·¢ ËÍ ×Ö ·û ×Ó ³Ì Ðò£º
void sendbyte(unsigned char sdata)
{
long int time_limit;
time_limit=50000;
while ((inp(PORT+5) & 0xf0) != 0x60)
{ time_limit--;
if (time_limit==0) break;
}
outp(PORT,sdata);
}
´® ¿Ú ³õ ʼ »¯ ×Ó ³Ì Ðò£º
void init_com(PORT)
{
char i;
outp(PORT+3,0x80);
outp(PORT ,0x0C); /* baud rate 9600 */
outp(PORT+1,0);
/*8bit 1stop no even */
outp(PORT+3 ,0x3a);
outp(PORT+3 ,0x03);
i=inp(PORT+5) & 0xfe;
outp(PORT+5,i);
}
×Ö ·û ´® ·¢ ËÍ ×Ó ³Ì Ðò£º
void sendstrn(char *mess)
{
for (; *mess; mess++)
sendbyte(*mess);
sendbyte(0X0D);
/*sendbyte(0X0A); */
}
¼ò µ¥ µÄ Ö÷ ³Ì Ðò£º
init_com(ox2f8);
sendstrn(PORT,"FUNC");
j=0;
line=0;
do {
for(i=0;i<25;i++) ttemp[i]="\0" ; if(readbyte(PORT)="='M')" { i="0;" do { ttemp[i]="readbyte(PORT);" i++; }
while((ttemp[i-2]!="13)&&(ttemp[i-1]!=10));" line++; dcqd.TextOut(450,line*20+180,ttemp);} j++;}
while((j< 1000)&&(line< 5)); Wed, 16 Sep 1998 "acejet" < cejet@public1.ptt.js.cn>
Àû ÓÃWINDOWS ¶¨ ʱ Æ÷ ʵ ÏÖ ´® ¿Ú ͨ ÐÅ ¿Ø ÖÆ
---- 1£º ´® ¿Ú ͨ ÐÅ ¸Å Êö
---- ÔÚ ¼Æ Ëã »ú Íâ Éè ÖУ¬RS-232 ´® ¿Ú Òò Ϊ Æä ×é ³É ·½ ʽ ¼ò µ¥£¬ ±à ³Ì ¿Ø ÖÆ ·½ ±ã ¶ø ³É Ϊ ×î Ϊ Ó¦ ÓÃ
¹ã ·º µÄI/O ͨ µÀ Ö® Ò»¡£ ÔÚ Ó² ¼þ Á¬ ½Ó ·½ Ãæ£¬ ×î Ϊ ¼ò µ¥ µÄ ·½ ʽ Ò» Ìõ ¹« Óà µØ Ïß ºÍ Á½ Ìõ ÐÅ ºÅ Ïß ¼´
¿É ×é ³É ´® ÐÐ Ë« ¹¤ ͨ ÐÅ Ïß Â·¡£ ¶ø ÔÚ Èí ¼þ ±à ³Ì ¿Ø ÖÆ ·½ Ãæ£¬ ²Ù ×÷ ϵ ͳ Òà Ìá ¹© ÁË ¶Ô Ó¦ µÄ ±à ³Ì ½Ó
¿Ú£¬ ʹ µÄ ¿ª ·¢ Õß ÄÜ Áé »î µÄ ¿Ø ÖÆ ´® ¿Ú ¹¤ ×÷¡£
---- ÔÚDOS µÄ ϵ ͳ ½Ó ¿Ú ÖÐDOS INT21H µÄ03H ºÍ04H ºÅ ¹¦ ÄÜ µ÷ Óà Ϊ Òì ²½ ´® ÐРͨ ÐÅ µÄ ½Ó ÊÕ ºÍ ·¢ ËÍ ¹¦
ÄÜ£¬ ¶øBIOS INT14H ÓÐ4 ×é ¹¦ ÄÜ µ÷ Óà Ϊ ´® ÐРͨ ÐÅ ·þ Îñ£¬ Õý Òò Ϊ Èç ´Ë ÔÚDOS ÖÐ ²É Óà ¼Ä ´æ Æ÷ Ö± ½Ó ¶Á
д¡¢BIOS µ÷ Óᢠͨ ÐÅ ÖÐ ¶Ï ³Ì Ðò µÈ ·½ ·¨ ¿É ÒÔ ±È ½Ï ÈÝ Ò× Êµ ÏÖ ´® ¿Ú ͨ ÐÅ¡£ µ« ÊÇ ÔÚWINDOWS ÖÐ ÓÉ ÓÚ
WINDOWS ²É Óà Ïû Ï¢ Çý ¶¯ ºÍ Éè ±¸ ͳ Ò» ¹Ü Àí£¬ ÒÔ ¼° Àû Óà Ïû Ï¢ ¶Ô ÁÐ ½ø ÐÐ ³Ì Ðò ¿Ø ÖÆ£¬ Ëù ÒÔDOS Ï µÄ
·½ ·¨ ¶¼ ²» ÒË ²É ÓÃ. ÔÚWINDOWS ÖРΪ ʵ ÏÖ ´® ¿Ú ͨ ÐÅ£¬WINDOWS µÄSDK Ìá ¹© ÁË Íê ±¸ µÄAPI º¯ Êý ºÍ ÒÔ ÖÐ
¶Ï ·½ ʽ Çý ¶¯ µÄ ͨ ÐÅ Çý ¶¯ ³Ì Ðò£¬ ʹ ±à ³Ì ±ä µÄ ½Ï Ϊ ÈÝ Òס£
---- WINDOWS Ìá ¹© µÄ ±ê ×¼ ͨ ÐÅAPI º¯ Êý ºÜ ¶à(win16 ºÍwin32 ÖÐ ÓÐ Ëù ²» ͬ)£¬ Ò» °ã À´ ˵ ³£ Óà µÄ ÓУº
win16 win32 ×÷ÓÃ
OpenComm CreateFile £¨´ò¿ªÍ¨Ðſڣ©£»
BuildCommDCB BuildCommDCB £¨Ìî³äDCBÊý¾Ý½á¹¹£©£»
SetCommState SetCommStae £¨ÉèÖÃͨÐÅ¿Ú״̬£©£»
FlushComm PurgeComm £¨Çå³ýͨÐŽÓÊÕ»ò·¢ËÍ»º³åÇø£©£»
GetCommError ClearCommError
£¨»Ö¸´»òÈ¡µÃͨÐſڵÄ״̬£©£»
ReadComm ReadFile £¨´ÓͨÐŽÓÊÕ»º³åÇø¶Á×Ö·û£©£»
WriteComm WriteFile £¨ÏòͨÐÅ·¢ËÍ»º³åÇøÐ´×Ö·û£©£»
CloseComm CloseHandle £¨¹Ø±ÕͨÐſڣ©£»
---- ÔÚwin16 ÖРͨ ÐÅ Éè ±¸ ÓÉ ×¨ Êͨ ÐÅ º¯ Êý ´¦ Àí£¬ ¶øwn32 ÖÐ ½« Õâ Щ Éè ±¸ µ± ×÷ Ãæ Ïò ÎÄ ¼þ µÄ Éè ±¸ À´ ´¦ Àí¡£
---- 2:WINDOWS ¶¨ ʱ Æ÷
---- WINDOWS ϵ ͳ ÖУ¬ ³ý ¼ü ÅÌ ºÍ Êó ±ê Í⣬ ¶¨ ʱ Æ÷ Òà ÊÇ Ò» ÖÖ Êä Èë Éè ±¸£¬ ʹ Óà ¶¨ ʱ Æ÷ µÄ ·½ ·¨ ±È ½Ï ¼ò
µ¥£¬ ͨ ³£ ¸æ ËßWINDOWS Ò» ¸ö ʱ ¼ä ¼ä ¸ô£¬ È» ºóWINDOWS ÒÔ ´Ë ʱ ¼ä ¼ä ¸ô ÖÜ ÆÚ ÐÔ ´¥ ·¢ ³Ì Ðò¡£
---- WINDOWS µÄWM_ TIMER Ïû Ï¢ ÓëBIOS µÄ08H¡¢1CH ²» ͬ£¬ ´« ͳ µÄPC פ Áô ³Ì Ðò µØ ½Ó ÊÕ µ½08H ÖÐ ¶Ï ºÍ1CH ÖÐ ¶Ï£¬
¶øWINDOWS Ó¦ Óà ³Ì Ðò ¿É ÒÔ ÖÜ ÆÚ ½Ó ÊÕ µ½WM_TIMER Ïû Ï¢£¬ Õâ Á½ Õß µÀ Àí ²» Ò» Ñù. ÔÚWINDOWS ÖУ¬ ÓÐSYSTEM.DRV ´¦
Àí Ó² ¼þ ¶¨ ʱ ÖÐ ¶Ï£¬WINDOWS Ó¦ Óà ³Ì Ðò ´Ó Ïû Ï¢ ¶Ó ÁÐ ÖÐ »ñ µÃWM_TIMER Ïû Ï¢ ¶ø ²» »á ÊÕ µ½08H Ó² ¼þ ÖÐ ¶Ï£¬WM_TIMER
Ïû Ï¢ ²¢ ²» ÊÇ Ëæ ʱ' ²å Èë' Ó¦ Óà ³Ì Ðò£¬ ¶ø ÊÇ Ó¦ Óà ³Ì Ðò Ö÷ ¶¯ µØ¡¢ ÓÐ ´Î Ðò µÄ ´Ó Ïû Ï¢ ¶Ó ÁÐ ÖÐ µÃ µ½ ʱ ¼ä Ïû Ï¢¡£
¶øDOS ÖÐ ÓÉ ¼Æ Ëã »ú ÿ ¸ô18.2s ²ú Éú08H ÖÐ ¶Ï£¬08H ÖÐ ¶Ï ÔÙ µ÷ ÓÃ1CH ÖÐ ¶Ï£¬ Ó² ¼þ ÖÐ ¶Ï ÓÐ Ò» ÖØ Òª ÌØ Õ÷£¬ ¼´ ·¢
Éú µÄ ʱ ¼ä ÊÇ ÔÚ ÈÎ ºÎ ʱ ¿Ì£¬ ²» ¹Ü ³Ì Ðò ÔË ÐÐ µ½ ÈÎ ºÎ ʱ ¿Ì£¬ Ó² ¼þ ÖÐ ¶Ï ¶¼ ¿É ÒÔ ²å Èë ³Ì Ðò¡£
---- 3:WINDOWS ÖÐ Àû Óà ¶¨ ʱ Æ÷ ¿Ø ÖÆ ´® ¿Ú ͨ ÐÅ
---- ÔÚWINDOWS ÖÐ ÓÉ ´® ¿Ú ½ø À´ µÄ Êý ¾Ý ¾ ¹ý Á½ ¸ö »º ³å Çø£¬ Ê× ÏÈ ÊÇ Ó² ¼þ µÄ ½Ó ÊÕ »º ³å Çø( Õâ ÖÖ »º ³å ͨ ³£
ÓÐ8 λ »ò16 λ)£¬ È» ºó ½ø Èë Ó¦ Óà ³Ì Ðò Éè Öà µÄ ´® ¿Ú ½Ó ÊÕ »º ³å£¨ Õâ ¸ö »º ³å ´ó С ÔÚWIN16 ÖÐ ÓÉ Ó¦ Óà ³Ì Ðò Éè
Ö㬠¶øWIN32 ÖÐ ÓÉ ÓÚ ´® ¿Ú ×÷ Ϊ Ãæ Ïò ÎÄ ¼þ Éè ±¸ ´¦ Àí£¬ Ëù ÒÔ »º ³å ´ó С ²» Óà Éè Öã©£¬ Êý ¾Ý ´Ó Ó² ¼þ »º ³å µ½
Ó¦ Óà ³Ì Ðò »º ³å Õâ Ò» ¹ý ³Ì ÓÉWINDOWS ±¾ Éí Íê ³É£¬ ×÷ Ϊ ±à ³Ì Õß ²» Óà ¿¼ ÂÇ Ëü£¬ Ó¦ Óà ³Ì Ðò Ö» ¹Ø ÐÄ ºÎ ʱ ÓÐ
Êý ¾Ý¡£ Ëä È»WINDOWS Ìá ¹©WM_COMMNOTIFY Ïû Ï¢£¬ µ« ÊÇ ±Ê Õß ÔÚ Ê¹ Óà ÖÐ ·¢ ÏÖ Àû Óà Ëü ¿Ø ÖÆ ±È ½Ï Âé ·³£¬ ¶ø ÇÒ ¾
³£ ·¢ Éú ¶ª ʧ Êý ¾Ý ÏÖ Ïó£¬ ¶ø Àû Óà ¶¨ ʱ Æ÷ ´¦ Àí Ôò ¿É ´ï µ½ ¿Ø ÖÆ Áé »î µÄ Ð§ ¹û¡£
---- ÔÚ ³Ì Ðò ³õ ʼ »¯ ´® ¿Ú ÒÔ ºó£¬ ÔÚ ³Ì Ðò ÖРΪ ´® ¿Ú Éè Á¢ Ò» ¸ö ¶¨ ʱ Æ÷£¬ Àû Óà ¸Ã ¶¨ ʱ Æ÷ ¶¨ ʱ ¼ì ²é ´® ¿Ú
×´ ̬£¬ Èç ¹û ÓÐ Êý ¾Ý Ôò ¿ª ʼ ½Ó ÊÕ ´¦ Àí£¬ ·ñ Ôò ¸Ã ¶¨ ʱ Æ÷ Ïû Ï¢ ÎÞ ´¦ Àí¡£ Ò² Ðí ÓÐ ÈË ÈÏ Îª ÓÐ ÔÚ Êý ¾Ý ´¦ Àí
δ ½á Êø ʱ Ï һ ¸ö ¶¨ ʱ Æ÷ Ïû Ï¢ »á ·¢ Éú µÄ ÏÖ Ïó£¬ ¶Ô ÓÚ Õâ ÖÖ Çé ¿ö ³ý ÁË ¼Ó ´ó ¶¨ ʱ Æ÷ ¼ä ¸ô Íâ ¸ü Ϊ Ö÷ ¶¯ µÄ
°ì ·¨ ÊÇ ÔÚ ·¢ ÏÖ ÓÐ Êý ¾Ý ʱ ¹Ø ±Õ ¶¨ ʱ Æ÷£¬ È» ºó ÔÚ Êý ¾Ý ½Ó ÊÕ Íê ºó ÔÚ ´ò ¿ª¡£
---- 4.WINDOWS ͨ Њʵ Àý
---- ͨ Њʵ Àý µÄ »· ¾³ Ϊ£º586/100 ¼Æ Ëã »ú£» ÖÐ ÎÄWINDOWS`95£» ¶Ô ·½ Ϊ ½» »» »ú¡£ ͨ ÐÅ ²Î Êý Ϊ£º ²¨ ÌØ ÂÊ9600bps;
Êý ¾Ý λ8 λ£» Í£ Ö¹ λ1£» ÎÞ Ð£ Ñé¡£ ͨ ÐÅ Ð Ò飺 Ö¡ ¿ª ʼ ºÍ ½á Êø ¶¼ Ϊ0X7E0X7E£¬ Ö¡ Êý ¾Ý ²» ¶¨ ³¤¡£
±à³Ì»·¾³£ºBORLANDC C++5.0,WINDOWS `95
//======================================
// FUNCTION: short InitCom()
// PURPOSE: init com1
// RETURN VALUE:
// 1-------No error
// 0-------init Error
//======================================
short InitCom()
{
if(com_select==1)
{
IDCommDevice=CreateFile("COM1",
GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,0,NULL);
if(IDCommDevice==INVALID_HANDLE_VALUE)
{
MessageBox(hWnd,"OPenComm error","info",MB_OK);
CloseHandle(IDCommDevice);
return 0;
}
BuildCommDCB("COM1:9600,N,8,1",&dCB);
}else
{
IDCommDevice=CreateFile("COM2",
GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,0,NULL);
if(IDCommDevice==INVALID_HANDLE_VALUE)
{
MessageBox(hWnd,"OPenComm error","info",MB_OK);
CloseHandle(IDCommDevice);
return 0;
}
BuildCommDCB("COM2:9600,N,8,1",&dCB);
}
if (SetCommState(IDCommDevice,&dCB)<0) { MessageBox(hWnd,"Read SET CommState error","info",MB_OK);
CloseHandle(IDCommDevice); return 0; } if(!PurgeComm(IDCommDevice,PURGE_RXCLEAR))
{ MessageBox(hWnd,"IN buffer flush error","info",MB_OK); CloseHandle(IDCommDevice); return 0; }
if(!PurgeComm(IDCommDevice,PURGE_TXCLEAR)) { MessageBox(hWnd,"OUT buffer flush error","info",MB_OK);
CloseHandle(IDCommDevice); return 0; } return 1; } . . . .
/****************************************** Function:JKTWndProc(HWND hDlg,UINT message, WPARAM wParam,LPARAM lParam)
Purpose: ´¦Àí½»»»»úµÄÐÅÏ¢ Message: WM_INITDIALOG---¶Ô»°¿ò³õ»¯ WM_COMMAND------ËùÓжԴ°¿ÚµÄ²Ù×÷
**********************************************/
#pragma argsused LRESULT CALLBACK JKTWndProc(HWND hDlg, UINT message, UINT wParam, LONG lParam) {
LPDWORD num; short sign; char *temp_char; short x; BOOL lresult; int t_com; hdlg="hDlg;" switch (message)
{ case WM_TIMER: switch(LOWORD(wParam)) { case TIMER_REC: ClearCommError(IDCommDevice, &lpErrors,&ComStat);
if(ComStat.cbInQue!="0)" PostMessage(hDlg,WM_COMMAND ,IDP_DEALDATA,0L); break; } return 0;
case WM_COMMAND: switch(LOWORD(wParam)) { case IDP_DEALDATA: //´¦Àí½»»»»ú·¢µÄÐÅÏ¢
for(t_com="0;t_com<" ComStat.cbInQue;t_com++)
{ num="0;" l result="ReadFile(IDCommDevice£¬" temp_char,1,&n um,&lpOverlapped); temp_char++; }
return 0; case IDBEGIN: //¿ªÊ¼¹¤×÷ sign="InitCom(hDlg);" if(sign="=0)"
{ MessageBox(hDlg,"´®¿ÚÉèÖÃʧ°Ü!","Information",MB_OK); return 0; }
i SetTimer(hDlg,TIMER_REC,20,NULL); return 0; } break; } return (0); } . . . . .
---- ÓÉ ÓÚ Æª ·ù ÓÐ ÏÞ£¬ Ö» ¸ø ³ö ³Ì Ðò µÄ С ²¿ ·Ö£¬ ÓÉ ÓÚ Ë® ƽ ÓÐ ÏÞ£¬ ÓÐ Ëù ʧ Îó µÄ µØ ·½ Çë ¶à ¶à Ö¸ Õý¡£
--------------------------------------------------------------------------------
¡¡
VC++Ï´®ÐÐͨÐŵıà³Ì·½·¨
ÕÅ¡¡Á¦¡¡ÂÀÕñËà¡¡ÕÔÇìÁÖ
1¡¡ÒýÑÔ
¡¡¡¡´®ÐÐͨÐųÌÐòÊÇ΢»ú¼à¿ØÈí¼þÖлù´¡¡¢¹Ø¼üµÄÒ»¸ö»·½Ú£¬ÈçºÎÓÐЧµØ¿ª·¢Í¨ÐųÌÐò£¬ÊÇÈí¼þ¿ª·¢ÈËÔ±Ëù¹ØÐĵϰÌâ¡£
Microsoft¹«Ë¾´Ó1993ÄêÍÆ³öVC++1.0¿ªÊ¼£¬²»¶ÏÉý¼¶,´Ó VC++1.52µ½Ä¿Ç°×îÐ嵀 VC++5.0£¬ÓµÓдóÁ¿µÄÓû§£¬ÓÃVC++¿ª·¢
´®ÐÐͨÐųÌÐòÒ²Ëæ°æ±¾µÄ²»Í¬¸÷ÓÐÌØµã¡£±¾ÎÄÏêϸµØ½éÉÜÁËÓÃVC±àдͨÐųÌÐòµÄÁ½ÖÖ·½·¨£º
¡¡¡¡. ÓÃAPI£¨Application Programm InterfaceÓû§³ÌÐò½Ó¿Ú£©º¯Êý£»
¡¡¡¡. ÓÃOLE£¨Object Linking and Embedding¶ÔÏóÁ´½ÓÓëǶÈ룩¿Ø¼þ¡£
2¡¡ÓÃAPIº¯ÊýʵÏÖ´®ÐÐͨÐÅ
¡¡¡¡APIº¯ÊýÊÇWindows³ÌÐò¿ª·¢Ê¹ÓõÄÖ÷Òªº¯Êý¼¯£¬ÆäÖÐÌṩÁËÊ®¼¸¸öרÃŵÄͨÐź¯Êý¡£¶ÔÓ¦Windows3.xºÍWin95¼° NT¿ª·¢
»·¾³£¬ÓÐ16λºÍ32λͨÐÅAPIº¯Êý£¬VC++ 2.0ºÍÒÔǰµÄ°æ±¾¶¼±£³Ö16λºÍ32λÁ½¸ö°æ±¾£¬´Ó VC++4.0 ÒÔºó£¬Èí¼þÖ»Ö§³Ö32λ
Ó¦ÓóÌÐòµÄ¿ª·¢¡£Ä¿Ç°½Ï¶àµÄÓ¦ÓÃÊÇÔÚWin95¼°NTµÄ32λ¿ª·¢»·¾³Ï£¬µ«Ò²´æÔÚ×ÅWindows3.xÏ¿ª·¢µÄ16λͨÐųÌÐòÏò32λ³Ì
ÐòµÄÒÆÖ²ÎÊÌâ¡£»ùÓÚÕâÖÖ¿¼ÂÇ£¬16λͨÐź¯ÊýÒ²ÁоٳöÀ´¡£
2.1¡¡Ö÷ҪͨÐź¯ÊýµÄ¶Ô±È
¡¡¡¡32λͨÐź¯ÊýÓë16λº¯ÊýµÄÖ÷񻂿±ðÔÚÓÚ£¬32λAPIº¯Êý°Ñ¶ÔͨÐſڵIJÙ×÷µ±×÷Ò»¸öÆÕͨÎļþ¡£ÕâÊÇÒòΪÔÚWindows95ºÍNT
Ï£¬WM-COMMNOTIFYÏûÏ¢Òѱ»È¡Ïû£¬²Ù×÷ϵͳÒѽ«Í¨ÐÅÉ豸·â×°ÆðÀ´ÁË£¬ÏµÍ³ÎªÃ¿¸öͨÐÅÉ豸¶¨ÒåÁËÓû§¿É¶¨Òå´óСµÄ¶Á/д»º
³åÇø£¬Ó¦ÓóÌÐòÖ»¶Ô¶Á/д»º³åÇø²Ù×÷£¬¶ø²»ÓúÍͨÐÅÇý¶¯³ÌÐò´ò½»µÀ¡£
¹¦ÄÜÃèÊö16λº¯Êý¸Ä½øµÄ32λº¯Êý´ò¿ªÍ¨ÐÅ×ÊÔ´OpenCommCreatFile¹Ø±ÕͨÐÅ×ÊÔ´CloseCommCloseHandle¶ÁͨÐÅ»º³åÇøReadCommReadFile
дͨÐÅ»º³åÇøWriteCommWriteFileÉèÖÃͨÐÅʼþSetCommEventSetCommMaskͨÐÅ´íÎó¼ì²éGetCommErrorClearCommError
2.2¡¡ÓÃAPIº¯Êý±à³ÌµÄ¹ý³Ì
¡¡¡¡Ê×ÏÈÓÉÓ¦ÓÃÏòµ¼£¨AppWizard£©Éú³É³ÌÐòµÄÖ÷¿ò¼Ü¡£ÔÚ¼¯³É¿ª·¢»·¾³ÏÂÑ¡File/New²Ëµ¥(ÒÔVC5.0ΪÀý)£¬µ¯³öNew¶Ô»°¿ò£¬µ¥»÷project
±êÇ©ºóÑ¡MFC AppWizard (exe)Ïî,ÔÚ´´½¨µÄµÚÒ»²½Ñ¡Öе¥Îĵµ£¬ÆäËûÎå²½½ÓÊÜȱʡѡÏֻÐè±à¼Éú³ÉµÄÊÓÀà.cppÎļþ¼´¿É¡£¿ÉÒÔÓÃÁ½ÖÖ
·½·¨±à³Ì£ºÒ»ÖÖÊÇÀûÓÃWindowsµÄ WM-COMMNOTIFYÏûÏ¢£¬Ó³Éä³ö¸ÃÏûÏ¢µÄ´¦Àíº¯Êý£¬Í¨ÐűàÂë¾Í·ÅÔڸú¯ÊýÖУ¬ÕâÖ÷ÒªÊÊÓÃÓÚVC2.0¼°ÒÔǰ
µÄ°æ±¾ £»ÁíÒ»ÖÖ·½·¨ÊÇÖ±½ÓÔÚ.CPPÎļþÖбàдͨÐŲ¿·Ö£¬°ÑͨÐŵ±×÷ÊÓÀàµÄ³ÉÔ±º¯Êý¡£²»ÂÛÓÃÄÄÖÖ·½·¨£¬±à³Ì˼·ÊÇÏàͬµÄ£ºÉèÖóõʼ
»¯²¢´ò¿ª´®¿Ú-ÅäÖô®¿Ú-ÔÚË«·½¼ä´«ÊäÊý¾Ý£¬²¢½øÐÐУÑéµÈ´¦Àí-²»ÐèҪʱÊÍ·Å´®¿Ú£¬¹©ÆäËû³ÌÐòʹÓá£
2.3¡¡×¢ÒâÊÂÏî
¡¡¡¡ÔÚWindows 3.x ÖУ¬ÓÐרÃŵÄÏûÏ¢WM-COMMNOTIFYÓÃÓÚͨÐÅ¡£ÔÚWindows95ºÍNTÏ£¬¸ÃÏûÏ¢Òѱ»È¡Ïû£¬µ«Óû§Ò²¿ÉÒÔÓÃ×Ô¶¨ÒåµÄ
WM-COMMNOTIFYÏûÏ¢£¬ÕâʱҪעÒâÏûÏ¢Ó³ÉäµÄÉùÃ÷±ØÐëÈçÏ£º
¡¡¡¡ON-MESSAGE (WM-COMMNOTIFY,memberFxn); ÆäÖÐmemberFxnÊǸÃÏûÏ¢µÄ´¦Àíº¯ÊýÃû¡£
¡¡¡¡Win95ÖÐÐÂÔöÁË»ùÓÚÏ̵߳ĶàÈÎÎñ£¬µ±Ó¦ÓóÌÐòÏ£Íû½öÔÚͨÐÅÉ豸ÓÐÊý¾Ý³öÏÖʱ²Å¶ÔÆä²Ù×÷£¬Ó¦´´½¨Ïß³ÌÀ´¼àÊÓͨÐÅÉ豸¡£¿¼ÂÇ
µ½Í¨ÐŽϷÑʱ£¬½¨ÒéʹÓöàÏß³ÌÀ´¹ÜÀíͨÐÅ£¬ÈÃͨÐÅÔÚºǫ́Íê³É¡£ÔÚVC++µÄ MFC£¨Microsoft Foundation Classes ΢Èí»ù´¡Àà¿â£©
ÖÐÌṩÁËרÃŹÜÀíÏ̵߳ÄÀà CwinThread,ͬʱVC++»¹ÌṩÁËһЩÓëÏß³ÌÓйصÄÈ«¾Öº¯Êý£¬ÈçAfxBeginThreadµÈ¡£¶àÏß³ÌÖÐ×ÊÔ´¹²Ïí
ʱ£¬±ØÐë½èÖúһЩWin32ͬ²½º¯ÊýÀ´Ðµ÷Ï̵߳Ļ£¬±ÜÃâ³åÍ»¡£VCµÄMFCÒ²ÌṩÁ˼¸¸öÓëͬ²½ÓйصÄÀà,ÈçCSyncObject¡¢CMutex¡¢
CSemaphore¡¢CeventµÈ¡£ÔÚÊÓÀàµÄ.cppÎļþÏ¿ɴ´½¨Í¨ÐÅỊ̈߳¬²¢¸ù¾Ýʵ¼ÊÐèҪȷ¶¨Ï̵߳ÄÓÅÏȼ¶£¬ºÏÀíµ÷Óà APIº¯ÊýÒÔʵÏÖͨÐÅ¡£
3¡¡ÓÃOLEͨÐſؼþʵÏÖ´®ÐÐͨÐÅ
¡¡¡¡ÓÃVC++µÄOLE¿Ø¼þʵÏÖ´®ÐÐͨÐÅ£¬ÊÇÒ»ÖÖ¼ò½àµÄ±à³Ì·½·¨¡£VC4.0°æºÍVC5.0°æËùÌṩµÄͨÐſؼþÂÔÓв»Í¬£¬ÏÂÃæÕë¶ÔÕâÁ½¸ö°æ±¾£¬
¶ÔOLEͨÐſؼþ×ö¾ßÌå½éÉÜ¡£
3.1¡¡Í¨ÐſؼþµÄ²åÈë
¡¡¡¡ÔÚVC++4.0 Ï£¬Ê×ÏÈÉú³ÉÒ»¸öÏîÄ¿£¬»òÕß´ò¿ªÒ»¸ö´æÔÚµÄÏîÄ¿¡£Ñ¡Ôñ²Ëµ¥Insert/Component¡£¬³öÏÖComponent Gallery´°¿Ú£¬
Ñ¡ÖÐOLE ControlsϵÄMicrosoft CommControl,Ë«»÷¾Í½«¿Ø¼þǶÈëµ½ÏîÄ¿ÎļþÖÐÁË¡£ÔÚVC++5.0ÏÂ,Ñ¡²Ëµ¥Project/Add To Project,
½«»áÓÐÒ»×Ӳ˵¥£¬ Ñ¡ÖÐ Component and ControlsÏעÒâÈç¹ûûÓдò¿ªÏîÄ¿£¬ComponentÏî²»»á³öÏÖÔÚ×Ӳ˵¥ÏîÖУ©,½Ó×ÅË«»÷
Registered ActiveX Controls,ÔÚÆäÖлáÕÒµ½Í¨Ðſؼþ5.0,Ë«»÷Ö®±ã¿É²åÈë¡£´Ëʱ´ò¿ª¶Ô»°¿ò±à¼Æ÷,ÔÚ¹¤¾ßÌõÖлῴµ½ÐÂÔöµÄͨÐÅ
¿Ø¼þ¡£
3.2¡¡ÔÚ³ÌÐòÖÐʹÓÃͨÐſؼþ
¡¡¡¡ÏóËùÓÐÆäËûOLE¿Ø¼þÒ»Ñù,ͨÐſؼþÒ²ÊÇÓÃһϵÁеÄÊôÐÔºÍÓû§½Ó¿Ú£¬Óû§ÓÃGet¡º¯ÊýµÃµ½ÊôÐԵĵ±Ç°Öµ,Óà Set¡º¯ÊýÉèÖÃÊô
ÐÔÖµ¡£¿Ø¼þÌṩÁË27¸öÊôÐÔ£¬´ó²¿·ÖÊôÐÔ½öºÍModemÁ¬½ÓÓйأ¬ÏÖ½«³£ÓõÄÊôÐÔÁоÙÈçÏ£º
¡¡¡¡CommPort£º¡¡ÉèÖò¢·µ»ØÍ¨Ðſںţ¬È±Ê¡ÖµÎªCOM1£¬¿ÉÉèÖÃ1-16¸ö¡£
¡¡¡¡Settings£º¡¡ÉèÖò¢·µ»Ø²¨ÌØÂÊ¡¢ÆæÅ¼Ð£Ñé¡¢Êý¾Ýλ¡¢Í£Ö¹Î»µÄ×Ö·û´®¡£ÆäÖв¨ÌØÂʵķ¶Î§Îª300b/s-19200b/s¡£
¡¡¡¡PortOpen£º¡¡ÉèÖò¢·µ»ØÍ¨ÐſڵÄ״̬£¬Í¬Ê±ÓÃÀ´´ò¿ªºÍ¹Ø±ÕͨÐſڡ£
¡¡¡¡InputLen£º¡¡¾ö¶¨Ã¿´ÎInput¶ÁÈëµÄ×Ö·û¸öÊý£¬È±Ê¡Îª0£¬±íʾ¶ÁÈ¡½ÓÊÕ»º³åÇøµÄÈ«²¿ÄÚÈÝ¡£
¡¡¡¡Input£º¡¡¶ÁÈë²¢Çå³ý½ÓÊÕ»º³åÇøµÄ×Ö·û¡£
¡¡¡¡InBufferCount£º¡¡·µ»Ø½ÓÊÕ»º³åÇøÒѽÓÊÕµÄ×Ö·ûÊý£¬Í¨¹ýÖÃ0¿ÉÇå³ý½ÓÊÕ»º³åÇø¡£
¡¡¡¡Output£º¡¡½«·¢Ë͵Ä×Ö·û´®»òÊý×éдµ½·¢ËÍ»º³åÇø¡£
¡¡¡¡InputMode£º¡¡¶¨ÒåInpputÊôÐÔ»ñµÃÊý¾ÝµÄ·½Ê½£¨VC5.0ÐÂÔöÊôÐÔ£©¡£
¡¡¡¡Rthreshold£º¡¡ÉèÖᢷµ»ØÔÚͨÐſؼþÖà ComEvRecieve²¢¼¤·¢ OnCommʼþǰҪ½ÓÊÕµÄ×Ö·ûÊý¡£
¡¡¡¡SThreshold£º¡¡ÉèÖᢷµ»ØÍ¨ÐſؼþÖÃComEvSend²¢¼¤·¢OnCommʼþǰ·¢ËÍ»º³åÇøÖеÄ×îÉÙ×Ö·ûÊý¡£
¡¡¡¡½«Í¨Ðſؼþ·Åµ½¶Ô»°¿òÖУ¬µ±×÷Ò»¸öÆÕͨµÄ¿Ø¼þÀ´Ó᣿ؼþÌṩÁËÁ½ÖÖ´¦Àí·½·¨£ºÒ»ÊDzéѯ£¬Ò»ÊÇʼþÇý¶¯¡£¶ÔÓڽϼòµ¥µÄͨ
ÐÅÈÎÎñ£¬¿Éͨ¹ý²éѯ´®¿ÚµÄCommEventÊôÐÔÀ´Á˽â×î½ü·¢ÉúµÄʼþ»ò´íÎó²¢½øÐÐÏàÓ¦µÄ´¦Àí£¬½Ï¸´ÔÓµÄͨÐÅÈÎÎñ¾ÍӦʹÓÃʼþÇý¶¯½Ó
¿Ú¡£ÓÃʼþÇý¶¯·½·¨Ê±£¬Òª¶¨ÒåCMSComm±äÁ¿£¬ÒÔºóÕë¶Ô´Ë¶ÔÏó²Ù×÷¼´¿É¡£Ìí¼ÓÏûÏ¢´¦Àíº¯ÊýʱҪÓÃÀàÏòµ¼ClassWizard£¬Ñ¡Öж¨Òå
µÄ CMSComm±äÁ¿²¢µ¥»÷£¬ÔÚÏûÏ¢À¸Ë«»÷ OnCommÏî¾ÍÉú³ÉÁËÏûÏ¢´¦Àíº¯Êý¡£ ÔÚ±àд·¢ËͺͽÓÊÕº¯Êýʱ£¬ÒªÖصã×¢Ò⼸¸öÊôÐÔµÄÓ÷¨¡£
±ÈÈçInBufferCountÊôÐÔ·µ»Ø½ÓÊÕ»º³åÇøÖÐÒÑÊÕµ½µÄ×Ö½ÚÊý£¬²éѯ·½·¨¿ÉÀûÓøÃÊôÐÔ£¬¿´ÊÇ·ñÊÕµ½Á˹涨ÊýÄ¿µÄ×Ö½Ú¡£»¹ÓÐ Rthreshold
ºÍ SThresholdÊôÐÔ£¬¶ÔÓÉ·¢ËͺͽÓÊÕ¼¤·¢µÄOnCommʼþÆðמö¶¨ÐÔµÄ×÷Óá£Rthreshold µÄÖµ´ú±íÿµ±½ÓÊÕ»º³åÇøÖÐÓиÃÊýÄ¿µÄ×Ö
·ûʱ¾Í²úÉú OnCommʼþ, Õâ¶Ô¹Ì¶¨³¤¶ÈµÄÖ¡½ÓÊշdz£ÓÐÓÃ,¿É½« Rthreshold ÉèΪ֡³¤¶È£¬Ã¿ÊÕµ½Ò»Ö¡¾Í»á¼¤·¢ OnCommʼþ,ÔÚÏû
Ï¢´¦Àíº¯ÊýÖÐÌí¼Ó´úÂë¾ÍÄÜÍê³É½ÓÊÕºóµÄ´¦Àí¡£·¢ËͱȽÓÊÕ¼òµ¥£¬Ö»²»¹ýÓÃSThresholdÊôÐÔ¡£
¡¡¡¡¸ÅÀ¨ÆðÀ´£¬ÓÿؼþʵÏÖ´®ÐÐͨÐÅÓ¦¸Ã×ñѺÍÓÃAPIº¯Êý±àд³ÌÐòÏàͬµÄ¹ý³Ì£¬Ö»²»¹ýÕâÀïÓÿؼþµÄÊôÐÔ´úÌæÁËAPIº¯Êý¡£
3.3¡¡ÆäËü×¢ÒâÊÂÏî
¡¡¡¡VC4.0ϺÍVC5.0ÏÂInputÊôÐԵķµ»ØÖµ²»Í¬¡£ÔÚ VC4.0ÏÂInput ·µ»ØµÄÊÇCStringÀ࣬¶øÔÚVC5.0Ï£¬·µ»Ø COleVariantÀà¡£
COleVariantÀà·â×°ÁËVARIANTÊý¾ÝÀàÐÍ£¬¸Ã½á¹¹Ò²ÊÇOutputÊôÐÔËùÒªÇóµÄÀàÐÍ¡£ÒªÓúÿؼþ¾Í±ØÐëÁ˽â VARIANT½á¹¹£¬ ¸Ã½á¹¹ÄÒÀ¨
ÁËËùÓг£Óõļòµ¥Êý¾ÝÀàÐÍ¡£µ«ÊǽṹÖÐÿ´Î¿ÉÓõÄÊý¾ÝÀàÐÍÖ»ÓÐÒ»ÖÖ£¬ÓɽṹµÄ³ÉÔ±vtʶ±ð¡£ÀýÈç¶Ô×Ö·û´®bstrVal,vt=8,¶Ôshort
ÀàÐÍ£¬vt=2µÈµÈ¡£Í¬Ê±×¢Òâµ½VC5.0¿Ø¼þÔö¼ÓÁË InputModeÊôÐÔ,ÌṩÁ½ÖÖÊäÈëģʽ£ºÎı¾ºÍ¶þ½øÖÆ¡£Á½ÖÖ·½Ê½¾ö¶¨ÁËInput½ÓÊÕµÄÁ½ÖÖ
Êý¾ÝÀàÐÍ¡£ÔÚÎı¾·½Ê½Ï£¬Input·µ»ØÖµÔÚ³ÉÔ±bstrValÖÐ,ÀàÐÍΪvt=8£¬ÕâºÍVC4.0Ï·µ»ØCStringÀàÊÇÏàͬµÄ¡£ÔÚ¶þ½øÖÆÄ£Ê½Ï£¬Input
½ÓÊÜÖµÔÚ°²È«Êý×éparrayÖУ¬ÀàÐÍΪ vt=0x2000 ,ÕâÊDZà³ÌʱÈÝÒ׺öÂԵĵط½¡£Ò»°ãÉÏÏÂλ»úͨÐÅʱ£¬ÏÂλ»úµÄÊý¾ÝÊÇÒÔ16½øÖÆÐÎʽ´æ
·Å£¬±àдͨÐųÌÐò½¨ÒéÑ¡Ôñ¶þ½øÖÆÊäÈëģʽ¡£ÓÃÎı¾Ä£Ê½¾Í±ØÐëÔÚ±àÂëʱ×Ðϸ¿¼ÂÇ£¬·ñÔòÈÝÒ×¶ªÊ§Êý¾Ý¡£ÁíÍâ,ÓÃʼþÇý¶¯·½·¨±à³Ìʱ
»¹Ó¦×¢Òâ,OnCommʼþÔÚͨÐÅʼþ»ò´íÎó·¢Éúʱ¶¼»á¼¤·¢£¬ ÔÚ´¦Àíº¯ÊýÖÐÓ¦½«¸÷ÖÖ¿ÉÄܵÄÇé¿öÁоٳöÀ´·Ö±ð´¦Àí,ºÜÖØÒªµÄÒ»µãÊǼ°Ê±
´¦ÀíͨÐÅ´íÎó¡£
4¡¡½áÊøÓï
¡¡¡¡×ܶøÑÔÖ®£¬±ÈÆð·±¶àµÄAPIº¯Êý£¬Í¨Ðſؼþ²»Ê§ÎªÒ»ÖÖ¼ò½àÓÐЧµÄʵÏÖ´®ÐÐͨÐŵÄ;¾¶¡£Ö»ÒªÕÆÎպÿؼþµÄÊôÐÔ£¬¾ÍÄÜÇáËɵرàд
ͨÐųÌÐò¡£±ÊÕßÔÚ±àдһÌ×µçÁ¦ÏµÍ³µÄʵʱ¼à¿ØÈí¼þʱ£¬ÓÃVC++5.0ϵÄͨÐſؼþ³É¹¦µØÊµÏÖÁË΢»úÓëÏÂλ»ú--3720ACM ÒDZíÖ®¼äµÄͨ
ÐÅ,¸ÃÒDZíÊǼÓÄôóPML¹«Ë¾Éú²úµÄ¸ß¼¶µçÁ¦×ÛºÏ¼à¿ØÒÇ±í¡£
ÕÅ¡¡Á¦¡¡Ë¶Ê¿Ñо¿Éú¡£Ñо¿·½Ïò£º¼ÆËã»ú¿ØÖÆÓëÐÅÏ¢¹¤³Ì¡£¡¡ÂÀÕñËࡡ˶ʿ£¬½ÌÊÚ¡£´ÓʼÆËã»ú¿ØÖÆÓëÐÅÏ¢¹¤³Ì¡¢CADµÈ·½ÃæµÄ½ÌѧÓë
Ñо¿¹¤×÷¡£¡¡ÕÔÇìÁÖ¡¡Ë¶Ê¿Ñо¿Éú¡£Ñо¿·½Ïò£º¼ÆËã»ú¿ØÖÆÓëÐÅÏ¢¹¤³Ì¡£
×÷Õßµ¥Î»£º¡¡À¼ÖÝ´óѧµç×ÓÓëÐÅÏ¢¿ÆÑ§Ïµ¡¡¸ÊËà.À¼ÖÝ£¨730000£©
²Î¿¼ÎÄÏ×
¡¡£Û1£Ý¡¡£ÛÃÀ£ÝMicrosoft Corporation.Microsoft Win32³ÌÐòÔ±²Î¿¼´óÈ«£¨¶þ£©. ±±¾©£ºÇ廪´óѧ³ö°æÉ磬1995
¡¡£Û2£Ý¡¡£ÛÃÀ£ÝScott Stanfield Ralph Arvesen.Visual C++ 4¿ª·¢ÈËÔ±Ö¸ÄÏ.±±¾©£º»úе¹¤Òµ³ö°æÉ磬1997
´®ÐÐͨѶͨÓýӿڳÌÐòÉè¼Æ
¡¡¡¡Â¬ÍûÖÒ
¡¡¡¡´®ÐÐͨѶÔÚͨѶÁìÓò±»¹ã·ºÓ¦Ó㬱ê×¼µÄRS232½Ó¿ÚÒѳÉΪ¼ÆËã»ú¡¢¼ÆËã»úÍâÉè¡¢½»»»»úºÍÐí¶àͨѶÉ豸µÄ±ê×¼½Ó¿Ú¡£Î¢»úÓë΢»ú¡¢
΢»úÓëÍâÉ衢΢»úÓë³Ì¿Ø½»»»»úµÈ¶¼¿ÉÒÔͨ¹ýRS232½Ó¿Ú½øÐз½±ãµÄÁ¬½Ó£¬ÒÔʵÏÖ¿ØÖÆÍâÉèºÍ´«ÊäÊý¾ÝµÈÄ¿µÄ¡£
¡¡¡¡ÔÚ´®ÐнӿÚÁ¬½ÓÖУ¬°´Á¬½Ó·½Ê½¿É·ÖΪÁ½ÀࣺÓйæ³ÌÁ¬½ÓºÍÎÞ¹æ³ÌÁ¬½Ó¡£ÎÞ¹æ³ÌÁ¬½ÓÔÀí±È½Ï¼òµ¥£¬Í¨Ñ¶Ë«·½ÎÞÎÕÊÖ¹ý³Ì¡£Ò»·½ÓÐ
Êý¾ÝÐèÒª·¢ËÍ£¬ÔòÁ¢¼´Í¨¹ý´®Ðнӿڷ¢ËͳöÈ¥£¬ÁíÒ»·½±»¶¯½ÓÊÜ¡£¸Ã·½Ê½ËäÈ»ÈÝÒ×ʵÏÖµ«Êý¾Ý·¢Ë͵ÄÍêÕûÐÔÈ´ÎÞ·¨µÃµ½±£Ö¤£¬ÔڹؼüÈÎ
ÎñµÄÁ¬½ÓÖоù²»²ÉÓø÷½Ê½£¬±ÊÕßÔڴ˲»ÔÙ׸Êö¡£¶øÓйæ³ÌͨѶ¹ý³ÌÔò²»Í¬£¬ÔÚ¼×·½ÓÐÊý¾Ý·¢ËÍÇëÇóʱ£¬ÔòÏòÒÒ·½·¢ËÍ"ÇëÇó·¢ËÍÊý¾Ý"
ÃüÁî¡£ÒÒ·½ÊÕµ½ºó£¬Èç×¼±¸¾ÍÐ÷£¬Ôò»ØËÍÈ·ÈÏÐÅÏ¢¡£¼×·½µÃµ½ÒÒ·½µÄÈ·ÈϺ󷽿ɷ¢ËÍÊý¾Ý¡£ÔÚ´ó¶àÊýÇé¿öÏ£¬ÒÒ·½Òª¶ÔÊÕµ½µÄÊý¾Ý½øÐÐ
УÑ飬УÑéÕýÈ··¢ËÍ"ͨѶÖÕÖ¹"ÃüÁ·ñÔò¿É·¢ËÍ"ÖØ·¢"ÃüÁî¡£ÔÚʵ¼ù¹ý³ÌÖУ¬Óйæ³ÌµÄ´®ÐÐÁ¬½Ó¹ý³Ìͨ³£Òª¸´Ôӵö࣬¶øÇÒ²»Í¬µÄÉè
±¸³§É̶¼Óв»Í¬µÄͨѶ¹æ³Ì£¬Ä¿Ç°ÉÐδÐγÉͳһµÄ±ê×¼¡£¼´±ãÊÇͬһÖÖÀàÐ͵ÄÍâÉ裬ÔÚÓë²»Í¬Æ·ÅÆµÄÉ豸½øÐÐÁ¬½Óʱ£¬Ò²ÒªÐÞ¸ÄÔ´úÂë
À´Âú×㲻ͬÖÖÀà¹æ³ÌµÄÒªÇ󣬴ËÀàÎÊÌâ³£³£»áÀ§ÈųÌÐò¿ª·¢ÈËÔ±¡£±ÊÕßÔÚʵ¼Ê¹¤×÷ÖÐ×ܽá³öÒ»ÖÖ¼òµ¥ÊµÓõÄͨÓùæ³ÌµÄ³ÌÐòÉè¼Æ·½·¨£¬
ÔÚÓë¶àÖÖ´®ÐÐͨѶÉ豸µÄÁ¬½ÓÖÐÈ¡µÃÁËÂúÒâµÄЧ¹û¡£Ôڴ˼òµ¥½éÉÜÆäÔÀí£¬²¢Óë¶ÁÕß¹²Í¬Ì½ÌÖ¡£
¡¡¡¡ÔÚͨѶµÄ¹ý³ÌÖУ¬ËäÈ»¹æ³ÌµÄ×éºÏǧ±äÍò»¯£¬µ«Í¨Ñ¶¹ý³ÌÖеÄÿһ²½¶¼Óкܶ๲ÐԵĶ«Î÷´æÔÚ¡£Í¨¹ý¶Ô¶àÖÖ´®ÐÐͨѶÉ豸µÄÑо¿£¬
±ÊÕß½«Í¨Ñ¶¹ý³ÌµÄÿһ²½Öè½øÐÐ×ܽᣬ³éÏó³ö¹²ÐԵĶ«Î÷£¬Ôڴ˳Æ×÷ͨѶ"²½Öè¶ÔÏó"¡£Í¨Ñ¶²½Öè¶ÔÏóµÄ¶¨ÒåºÍÓ¦ÓÃÊǸóÌÐòÉè¼Æ·½·¨µÄ
ºËÐÄÄÚÈÝ¡£Ã¿Ò»ÖÖͨѶ¹æ³Ì¶¼¿ÉÒÔ¶¨Òå¶à¸öͨѶ²½Öè¶ÔÏó¡£Õû¸öͨѶ¹ý³ÌµÄµÄʵÏÖ£¬¾ÍÊÇÿһ¸öͨÐŲ½Öè¶ÔÏóÒÀ´Î±»¼¤»î²¢Ö´Ðи÷×Ô¶¨
ÒåµÄ·½·¨µÄÒ»¸öÁ¬¹á¹ý³Ì¡£
¡¡¡¡Í¨Ñ¶²½Öè¶ÔÏó(objComStep)Ò»°ã°üÀ¨ÈçÏÂÊôÐÔ£º
¡¡¡¡£¨1£©ÐòºÅ(StepId)£ºÃ¿Ò»¸öͨѶ²½Öè¶¼ÓÐÒ»¸öΨһµÄ±êʶºÅ£¬Ò»°ãÒÀ¾Ý¸Ã²½ÖèÔÚÕû¸ö¹æ³ÌÖеÄÖ´ÐÐ˳ÐòºÅÀ´¶¨Òå¡£
¡¡¡¡£¨2£©×´Ì¬(Status)£ºÃ¿Ò»¸ö²½Öè¿ÉÄÜÓÐËÄÖÖ״̬£º¢Ù·¢ËÍ£º·¢ËÍÃüÁî´úÂ룻¢Ú½ÓÊÜ£º½ÓÊÜÃüÁî´úÂ룻¢ÛÅжϣº¶ÔÉÏÒ»²½Öè½ÓÊÕµ½
µÄÃüÁî½øÐÐÅжϣ¬¼ìÑé½ÓÊÕµÄÃüÁî»òÊý¾ÝÊÇ·ñÕýÈ·£»¢Ü½ÓÊÕÊý¾Ý£º½ÓÊÕÕæÕýÒª´«ÊäµÄÊý¾Ý¡£
¡¡¡¡£¨3£©ÃüÁî´úÂë(Command)£º·¢ËÍ»ò½øÐнÓÊÕÅжϵĿØÖÆ´úÂë¡£
¡¡¡¡£¨4£©Êý¾Ý´úÂë(Data)£º·¢ËÍ»ò½ÓÊÕÅжϵÄÊý¾Ý´úÂë¡£
¡¡¡¡£¨5£©¿Ï¶¨ÐòºÅ(AckStep)£ºÔÚ·¢Ëͳɹ¦ºóÌø×ªµ½¿Ï¶¨ÐòºÅÖ¸¶¨µÄ²½Ö裻Èç½ÓÊÕÅжϳɹ¦£¬Í¬ÑùÌø×ªµ½¿Ï¶¨Ðкš£
¡¡¡¡£¨6£©·ñ¶¨ÐòºÅ(NakStep)£ºÔÚ·¢ËͲ»³É¹¦ºóÌø×ªµ½·ñ¶¨ÐòºÅÖ¸¶¨µÄ²½Ö裻Èç½ÓÊÕÅжϲ»³É¹¦£¬Í¬ÑùÌø×ªµ½·ñ¶¨Ðкš£
¡¡¡¡£¨7£©ÑÓ³Ù(DelayTime)£ºµ±Ç°²½ÖèÖ´ÐÐÍê±Ï£¬ÑÓ³ÙÏàӦʱ¼äºóÌø×ªµ½ÏÂÒ»¸ö²½Öè¡£
¡¡¡¡£¨8£©Ñ»·ÉÏÏÞ(MaxRunCounts)£ºÓÉÓÚÿһ¸ö²½Öè¿É±»Öظ´Ö´ÐУ¬¶ÔÓÚÿһ¸ö²½ÖèÓÐÒ»¸öÑ»·ÉÏÏÞ£¬Èç¹ûÖ´ÐдÎÊý´óÓÚ¸ÃÊýÖµ£¬
ÔòÌø×ªµ½Ñ»·Ìø×ªÐòºÅ¡£
¡¡¡¡£¨9£©Ñ»·Ìø×ªÐòºÅ(BeyondStep)£º¶ÔÓÚµ±Ç°²½Ö豻ѻ·Ö´ÐеĴÎÊý³¬¹ýÉÏÏÞÊ±Ìø×ªµ½ËùÖ¸¶¨µÄ²½Öè¡£
¡¡¡¡£¨10£©¼ÆÊýÆ÷£¨Counter):¼ÇÔØÖ´ÐдÎÊý¡£
¡¡¡¡Í¨Ñ¶²½Öè¶ÔÏóµÄ·½·¨¶¨ÒåÈçÏ£º
¡¡¡¡£¨1£©·¢ËÍ(Send)£ºÍ¨¹ý´®Ðж˿ڷ¢ËÍÊý¾Ý»òÃüÁî´úÂë¡£
¡¡¡¡£¨2£©½ÓÊÕ(Receive)£º´Ó´®Ðж˿ڽÓÊÕÊý¾Ý»òÃüÁî´úÂë¡£
¡¡¡¡£¨3£©ÅжÏ(Identify)£ºÅжϽÓÊÕÊý¾ÝÊÇ·ñÕýÈ·¡£
¡¡¡¡£¨4£©Êä³öÊý¾Ý£¨OutPut)£º½«µÃµ½µÄÊý¾Ýͨ¹ýÍøÂç»òÏûÏ¢´«Ë͸øÆäËü³ÌÐòÄ£¿é¡£
¡¡¡¡Íê³ÉÁ˶ÔobjComSetpµÄ¶¨Ò壬ÏÂÒ»²½ÎÒÃǾÍÄܹ»ºÜÈÝÒ×µØÓóÌÐòÓïÑÔÀ´½«ÆäʵÏÖ¡£ÔÚʵ¼Ê±à³Ì¹ý³ÌÖУ¬±ÊÕß½«³ÌÐò×ÜÌå½á¹¹·ÖΪ
²½Ö趨ÒåÄ£¿éºÍ²½ÖèÖ´ÐÐÄ£¿é¡£Í¨¹ý²½Ö趨ÒåÄ£¿é¶¨ÒåËùÓùæ³ÌµÄÿһ¸ö²½ÖèµÄÊôÐÔ£¬½«ÊôÐÔÐÅϢдÈëÅäÖÃÎļþ¡£²½ÖèÖ´ÐÐÄ£¿é°´Åä
ÖÃÎļþÖеÄÐÅÏ¢ÒÀ´Î´´½¨²½Öè¶ÔÏó£¬ÓɸöÔÏóÖ´ÐÐÏàÓ¦µÄ·½·¨¡£²½ÖèÖ´ÐÐÄ£¿é×ÜÌå¿ØÖÆÃ¿¸öobjComStepµÄ¼¤»î˳Ðò£¬Ö±ÖÁÍê³ÉÕû¸öͨ
Ѷ¹æ³Ì¡£²¢½«ÔÚͨѶ¹ý³ÌÖеõ½µÄÊý¾ÝÊä³ö¸øÆäËü³ÌÐòÄ£¿é¡£
¡¡¡¡ÏÂÃæÊÇÒ»¸ö´®ÐÐͨѶµÄʵÀý£¬±ÊÕßÓÃÉÏÊöµÄ³ÌÐòÉè¼Æ·½·¨ÊµÏÖÁËPC»úºÍNEC³Ì¿Ø½»»»»úÖ®¼äµÄͨѶ¡£ÎªÁË·½±ãÐðÊö£¬±ÊÕß½«¸Ã³Ì
Ðò³ÆÎª"ͨѶģ¿é"¡£Í¨Ñ¶Ä£¿éµÄÄ¿µÄÊÇͨ¹ý´®ÐÐͨѶµÄ·½·¨À´Íê³ÉÓÃPC»ú¶ÔNECµç»°³Ì¿Ø½»»»»úÎïÒµ¹ÜÀíPMS£¨Property Management
System)ϵͳ½øÐпØÖƵÄÈÎÎñ¡£ÏµÍ³³É¹¦µØÊµÏÖÁ˶Խ»»»»úµÄ¿ØÖÆ£¬Í¨¹ýPC»úʵÏÖ×Ô¶¯¿ªÍ¨¡¢¹Ø±Õ¡¢³¤Í¾È¨ÏÞ¡¢µç»°½ÐÔç¡¢µç»°ÁôÑÔ
¡¢µç»°ÃâÈÅ¡¢µç»°ÉèÖ÷¿¼ä״̬µÈ¶àÖÖ¹¦ÄÜ¡£
¡¡¡¡Í¼1ÊǸùæ³ÌµÄ״̬ͼ¡£
¡¡¡¡Í¼1
¡¡¡¡ËµÃ÷£º£¨1£©ÔÚ½ÓÊպͷ¢ËÍÖ®¼äµÄʱ¼ä¼ä¸ôÊÇ1Ã룻£¨2£©ÔÚ½ÓÊÕµ½NAKºó£¬Öظ´·¢Ë͵ĴÎÊýΪ3£»£¨3£©½ÓÊÕ·½Ã»ÓлØÓ¦£¨NO ANSWER£©
¶øÖظ´Ñ¯ÎʵĴÎÊýΪ15£»£¨4£©eot¹æ³ÌÖÕÖ¹¡£
¡¡¡¡ÔÚͨѶģ¿éÖУ¬Ê×ÏȽ«Í¨Ñ¶¹æ³ÌµÄÿһ²½ÖèÓò½Öè¶ÔÏóµÄ¶¨Ò巽ʽ¶¨Òå¸Ã¹æ³Ì£¬Æä¾ßÌå²½ÖèÈçÏ£º
ÐòºÅ ״̬ ÃüÁî´úÂë Êý¾Ý´úÂë ¿Ï¶¨ÐòºÅ ·ñ¶¨ÐòºÅ ÑÓ³Ù Ñ»·ÉÏÏÞ Ñ»·Ìø×ªÐòºÅ
1 ·¢ËÍ sa,ua,enq 2 1 1 15 ¡¡¡¡ 9
2 ½ÓÊÕ ack 5 ¡¡¡¡ 3 1 1 ¡¡¡¡ 9
3 ÅÐ¶Ï nak 1 ¡¡¡¡ 4 1 3 ¡¡¡¡ 9
4 ÅÐ¶Ï ÎÞ»ØÓ¦ 1 ¡¡¡¡ 1 1 15 ¡¡¡¡ 9
5 ·¢ËÍ data,bcc 6 5 ¡¡¡¡ 1 15 9 ¡¡¡¡
6 ½ÓÊÕ ack 9 ¡¡¡¡ 7 1 ¡¡¡¡ 9
7 ÅÐ¶Ï nak 5 ¡¡¡¡ 8 1 3 ¡¡¡¡ 9
8 ÅÐ¶Ï ÎÞ»ØÓ¦ 5 ¡¡¡¡ 5 1 15 ¡¡¡¡ 9
9 ·¢ËÍ eot ½áÊø 0 1 ¡¡¡¡
¡¡¡¡Íê³ÉÉÏÊöÅäÖú󣬽«ÐÅϢдÈëÅäÖÃÎļþ»òÊý¾Ý¿â¡£ÔÚͨѶģ¿éÖ´ÐÐʱ£¬¶ÁÈë¸ÃÅäÖÃÐÅÏ¢ £¬ÒÀ´ÎÉú³ÉͨѶ²½Öè¶ÔÏó¡£¶ÔÏó·½·¨µÄ
Ö´Ðйý³Ì¼´ÊÇͨѶ¹æ³ÌµÄÖ´ÐÐÐйý³Ì¡£ÔÚʵ¼Ê±à³ÌÖпɽ«¸ÃÄ£¿éÓëÆäËü³ÌÐòÁ¬½Ó±àÒë³ÉEXEÎļþ»òÉú³É¶ÀÁ¢µÄDLLÎļþ¹©ÆäËüͨѶ³Ì
Ðòµ÷Ó㬾ù¿ÉÈ¡µÃÂúÒâµÄЧ¹û¡£ÔÚÆäËüÀàÐ͵ÄͨѶ¡¢ÏûÏ¢´«µÝ¡¢ÍøÂçÊý¾Ý´«ÊäÖоù¿ÉÓøÃ˼·д³öͨÓõĽӿڳÌÐò£¬½â¾öÒìÖÖ»úÐÍÁ¬
½ÓµÄͨѶÎÊÌâ¡£
VCÔÚwin95ϱàдÓÃÓÚ´®ÐÐͨѶµÄ³ÌÐò
------×÷Õß Ç廪BBS ±´±´
¼ÈÈ»ÓÐÕâô¶àÈËÎÊÕâ¸öÎÄÌ壬±´±´¾Í¸ø¸öVisual C++ 4.2дµÄ
Window 95´®¿ÚͨѶº¯Êý¼¯ºÏ(Ö»ÊÊÓÃÓÚ32λ)
ÐèҪ˵Ã÷µÄÊÇ£ºÕâÊÇÎÒ³ÌÐòµÄÒ»²¿·Ö£¬Òò´ËÓÐһЩÓë¾ßÌåÓ¦ÓÃÎ޹صIJ¿·Ö¡£
µ«ÎÒ¾õµÃ¹Ø¼üÊÇÔÀí£¬¶ø²»ÊdzÌÐò±¾Éí.ºóÃæÓÐЩʹÓýéÉÜ£¬°ïÖúÀí½âÕⳤµÄ³ÌÐò¡£
Í·Îļþ(.H)
#include "StdAfx.h"
#define GWL_PGPSINFO 0
#define GPSEXTRABYTES sizeof( LONG )
#define MAXPORTS 4
#define CN_SEND WM_USER+100
#define RXQUEUE 4096
#define TXQUEUE 4096
// cursor states
#define CS_HIDE 0x00
#define CS_SHOW 0x01
// Flow control flags
#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04
// ascii definitions
#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13
// data structures
typedef struct tagGPSINFO
{
HANDLE idComDev;
BYTE bPort;
BOOL fConnected;
BYTE bByteSize,bParity,bStopBits;
DWORD dwBaudRate;
HANDLE hPostEvent,hWatchThread,hWatchEvent;
HWND hTermWnd;
DWORD dwThreadID;
OVERLAPPED osWrite,osRead;
} GPSINFO, *PGPSINFO ;
#define COMDEV( x ) (x -> idComDev)
#define PORT( x ) (x -> bPort)
#define CONNECTED( x ) (x -> fConnected)
#define BYTESIZE( x ) (x -> bByteSize)
#define PARITY( x ) (x -> bParity)
#define STOPBITS( x ) (x -> bStopBits)
#define BAUDRATE( x ) (x -> dwBaudRate)
#define POSTEVENT( x ) (x -> hPostEvent)
#define HTHREAD( x ) (x -> hWatchThread)
#define THREADID( x ) (x -> dwThreadID)
#define WRITE_OS( x ) (x -> osWrite)
#define READ_OS( x ) (x -> osRead)
// function prototypes (private)
LRESULT NEAR CreateGPSInfo(HWND,BYTE nPort=1);
BOOL NEAR DestroyGPSInfo();
int NEAR ReadCommBlock(LPSTR,int);
BOOL NEAR WriteCommBlock(LPSTR,DWORD);
BOOL NEAR OpenConnection();
BOOL NEAR SetupConnection();
BOOL NEAR CloseConnection();
// function prototypes (public)
DWORD FAR PASCAL CommWatchProc(LPSTR);
¾ßÌåʵÏÖÇë¿´ÏÂÎÄ(ΪÁËÕâÎÄÕ£¬ÎÒ¶¼¶ÎÏß2´ÎÁË)
CPPʵÏÖ²¿·Ö£º
#include "StdAfx.h"
#include "Com.h"
HWND hGPSWnd=NULL;
PGPSINFO npGPSInfo=NULL;
LRESULT NEAR CreateGPSInfo(HWND hWnd,BYTE nPort)
{
if (NULL==(npGPSInfo=(PGPSINFO)LocalAlloc(LPTR,sizeof(GPSINFO))))
return ((LRESULT)-1) ;
hGPSWnd=hWnd;
COMDEV(npGPSInfo)=0;
CONNECTED(npGPSInfo)=FALSE;
PORT(npGPSInfo)=nPort;
BAUDRATE(npGPSInfo)=CBR_9600;
BYTESIZE(npGPSInfo)=8;
PARITY(npGPSInfo)=NOPARITY;
STOPBITS(npGPSInfo)=ONESTOPBIT;
WRITE_OS(npGPSInfo).Offset=0;
WRITE_OS(npGPSInfo).OffsetHigh=0;
READ_OS(npGPSInfo).Offset=0;
READ_OS(npGPSInfo).OffsetHigh=0;
// create I/O event used for overlapped reads / writes
READ_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if (READ_OS(npGPSInfo).hEvent==NULL)
{ LocalFree( npGPSInfo ) ;
return ( -1 ) ;
}
WRITE_OS(npGPSInfo).hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if (NULL==WRITE_OS(npGPSInfo).hEvent)
{ CloseHandle(READ_OS(npGPSInfo).hEvent);
LocalFree(npGPSInfo) ;
return (-1) ;
}
return ( (LRESULT) TRUE ) ;
}
BOOL NEAR DestroyGPSInfo()
{
if (!npGPSInfo) return (FALSE);
if (CONNECTED(npGPSInfo)) CloseConnection();
CloseHandle(READ_OS(npGPSInfo).hEvent);
CloseHandle(WRITE_OS(npGPSInfo).hEvent);
CloseHandle(POSTEVENT(npGPSInfo));
LocalFree(npGPSInfo);
return (TRUE);
}
BOOL NEAR OpenConnection()
{
char szPort[15];
BOOL fRetVal;
HCURSOR hOldCursor,hWaitCursor;
HANDLE hCommWatchThread;
DWORD dwThreadID;
COMMTIMEOUTS CommTimeOuts;
if (!npGPSInfo) return (FALSE);
hWaitCursor=LoadCursor(NULL,IDC_WAIT) ;
hOldCursor=SetCursor(hWaitCursor) ;
wsprintf(szPort,"COM%d",PORT(npGPSInfo));
if
((COMDEV(npGPSInfo)=CreateFile(szPort,GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL))==(HANDLE)-1)
return ( FALSE ) ;
else
{ SetCommMask(COMDEV(npGPSInfo),EV_RXCHAR);
SetupComm(COMDEV(npGPSInfo),4096,4096);
PurgeComm(COMDEV(npGPSInfo),PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_R
XCLEAR);
CommTimeOuts.ReadIntervalTimeout=0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier=0;
CommTimeOuts.ReadTotalTimeoutConstant=1000;
CommTimeOuts.WriteTotalTimeoutMultiplier=0;
CommTimeOuts.WriteTotalTimeoutConstant=1000;
SetCommTimeouts(COMDEV(npGPSInfo),&CommTimeOuts);
}
fRetVal=SetupConnection();
if (fRetVal)
{ CONNECTED(npGPSInfo)=TRUE;
if
(NULL==(hCommWatchThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,(LPTHREAD_START_ROUTINE)CommWatchProc,
(LPVOID)NULL,0,&dwThreadID)))
{ CONNECTED(npGPSInfo)=FALSE;
CloseHandle(COMDEV(npGPSInfo));
fRetVal=FALSE;
}
else
{ THREADID(npGPSInfo)=dwThreadID;
HTHREAD(npGPSInfo)=hCommWatchThread;
EscapeCommFunction(COMDEV(npGPSInfo),SETDTR);
}
}
else
{ CONNECTED(npGPSInfo)=FALSE;
CloseHandle(COMDEV(npGPSInfo));
}
SetCursor(hOldCursor);
return (fRetVal);
}
BOOL NEAR SetupConnection()
{ BOOL fRetVal;
DCB dcb;
if (!npGPSInfo) return(FALSE);
dcb.DCBlength=sizeof(DCB);
GetCommState(COMDEV(npGPSInfo),&dcb);
dcb.BaudRate=BAUDRATE(npGPSInfo);
dcb.ByteSize=BYTESIZE(npGPSInfo);
dcb.Parity=PARITY(npGPSInfo);
dcb.StopBits=STOPBITS(npGPSInfo);
dcb.fOutxDsrFlow=FALSE;
dcb.fDtrControl=DTR_CONTROL_ENABLE;
dcb.fOutxCtsFlow=FALSE;
dcb.fRtsControl=RTS_CONTROL_ENABLE;
dcb.fInX=dcb.fOutX=FALSE;
dcb.fBinary=TRUE;
dcb.fParity=TRUE;
fRetVal=SetCommState(COMDEV(npGPSInfo),&dcb);
return (fRetVal);
}
BOOL NEAR CloseConnection()
{
if (!npGPSInfo) return(FALSE);
CONNECTED(npGPSInfo)=FALSE;
SetCommMask(COMDEV(npGPSInfo),0);
while(THREADID(npGPSInfo)!=0);
EscapeCommFunction(COMDEV(npGPSInfo),CLRDTR);
PurgeComm(COMDEV(npGPSInfo),PURGE_TXABORT|PURGE_RXABORT|
PURGE_TXCLEAR|PURGE_RXCLEAR);
CloseHandle(COMDEV(npGPSInfo));
return (TRUE);
}
int NEAR ReadCommBlock(LPSTR lpszBlock,int nMaxLength)
{
BOOL fReadStat ;
COMSTAT ComStat ;
DWORD dwErrorFlags;
DWORD dwLength;
DWORD dwError;
if (!npGPSInfo) return(FALSE);
ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
dwLength=min((DWORD)nMaxLength,ComStat.cbInQue);
if (dwLength>0)
{ fReadStat=ReadFile(COMDEV(npGPSInfo),lpszBlock,
dwLength,&dwLength,&READ_OS(npGPSInfo));
if (!fReadStat)
{ if (GetLastError()==ERROR_IO_PENDING)
{ OutputDebugString("\n\rIO Pending");
while(!GetOverlappedResult(COMDEV(npGPSInfo),&READ_OS(npGPSInfo),&dwLength,TR
UE))
{ dwError=GetLastError();
if(dwError == ERROR_IO_INCOMPLETE)
continue;
}
}
else
{ dwLength=0;
ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
}
}
}
return ( dwLength ) ;
}
BOOL NEAR WriteCommBlock(LPSTR lpByte,DWORD dwBytesToWrite)
{ BOOL fWriteStat;
DWORD dwBytesWritten;
DWORD dwErrorFlags;
DWORD dwError;
COMSTAT ComStat;
if (!npGPSInfo) return(FALSE);
fWriteStat=WriteFile(COMDEV(npGPSInfo),lpByte,dwBytesToWrite,
&dwBytesWritten,&WRITE_OS(npGPSInfo));
if (!fWriteStat)
{ if(GetLastError()==ERROR_IO_PENDING)
{ while(!GetOverlappedResult(COMDEV(npGPSInfo),
&WRITE_OS(npGPSInfo),&dwBytesWritten,TRUE))
{ dwError=GetLastError();
if(dwError == ERROR_IO_INCOMPLETE)
continue;
else
{
ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
break;
}
}
}
else
{
ClearCommError(COMDEV(npGPSInfo),&dwErrorFlags,&ComStat);
return ( FALSE );
}
}
return ( TRUE ) ;
}
DWORD FAR PASCAL CommWatchProc(LPSTR)
{ DWORD dwEvtMask;
OVERLAPPED os;
int nLength;
BYTE abIn[1024];
memset(&os,0,sizeof(OVERLAPPED));
// create I/O event used for overlapped read
os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if (os.hEvent==NULL)
{ MessageBox(NULL,"Failed to create event for thread!","GPS
Error!",MB_ICONEXCLAMATION|MB_OK);
return ( FALSE ) ;
}
if (!SetCommMask(COMDEV(npGPSInfo),EV_RXCHAR)) return (FALSE);
while (CONNECTED( npGPSInfo))
{ dwEvtMask=0 ;
WaitCommEvent(COMDEV(npGPSInfo),&dwEvtMask,NULL);
if ((dwEvtMask&EV_RXCHAR)==EV_RXCHAR)
{ do
{ if
(nLength=ReadCommBlock((LPSTR)abIn,1024))
{
//WriteCommBlock((LPSTR)abIn,nLength );
*(abIn+nLength)=0;
::SendMessage(hGPSWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn);
}
}
while ((nLength>0)&&(CONNECTED( npGPSInfo)));
}
}
CloseHandle(os.hEvent);
THREADID(npGPSInfo)=0;
HTHREAD(npGPSInfo)=NULL;
return(TRUE);
}
¾ÍÕâЩÁË£¬Ï£ÍûÄܶÔÎÊÕâЩÎÊÌâµÄÅóÓÑÓÐËù°ïÖú!
Ò»°ãʹÓõÄ˳ÐòÊÇ£º
CreateGPSInfo(±»Í¨ÖªµÄ´°¿Ú¾ä±ú£¬´®¿Ú¶Ë¿ÚºÅ1»ò2);
OpenConnection();//½¨Á¢Áª½áËü»áµ÷ÓÃSetupConnection
DestroyGPSInfo();//½â³ýÁª½áËü»áµ÷ÓÃCloseConnection
¿ÉÒÔÓÃReadCommBlock/WriteCommBlockÀ´¶Á/д´®¿Ú
CommWatchProcÊǼàÊÓ´®¿ÚµÄỊ̈߳¬ÓÉOpenConnection½¨Á¢
µ±´®¿ÚÓÐÊý¾ÝÀ´µÄʱºî£¬Ëü»á֪ͨ'±»Í¨ÖªµÄ´°¿Ú¾ä±ú'µÄ´°¿ÚÊý¾Ý´«µ½µÄÏûÏ¢(×Ô¶¨ÒåµÄ)
SendMessage(hGPSWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn);
ºÃÁË£¬ÎÄÕ½áÊøÁË£¡Ï£ÍûÄܰïÖúÄ㣡