亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? serialcomm.asp

?? 在工業控制中
?? ASP
?? 第 1 頁 / 共 3 頁
字號:
<%@ Language=VBScript %>
<!-- #include file="../../ArticleAccess.asp" -->
<!-- #include file="../../GetAccessCount.asp" -->
<%
 PrintArticleAccessCount 45
 AccessArticle  45
 %>
 <html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title> Serial Communication in Windows </title>
</head>

<body>

<p align="center">&nbsp;</p>
<p align="center"><font face="Verdana" size="2"><b>[<u> </u></b></font><font size="2" face="Verdana"><b><u>Serial Communication in Windows</u></b></font><font face="Verdana" size="2"><b><u>
</u>]<br>
</b><a href="mailto:ashishdhar@hotmail.com"><i>ashish dhar</i></a></font></p>
<table borderColor="#ffffff" height="4318" cellSpacing="0" borderColorDark="#ffffff" width="99%" borderColorLight="#ffffff" border="1">
  <tbody>
    <tr>
      <td vAlign="top" width="11%" bgColor="#538ab3" height="4314">
        <div align="justify">
          <table borderColor="#538ab3" height="4654" cellSpacing="4" borderColorDark="#000000" width="100%" borderColorLight="#538ab3" border="4">
            <tbody>
              <tr>
                <td vAlign="top" borderColorLight="#538ab3" width="100%" bgColor="#538ab3" borderColorDark="#538ab3" height="4650"><br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <br>
                </td>
              </tr>
            </tbody>
          </table>
        </div>
      </td>
      <td vAlign="top" borderColorLight="#e8e9e2" width="69%" bgColor="#ffffff" borderColorDark="#f0f0f0" height="4314">&nbsp;

<p><font size="2" face="Verdana"><a href="../Source.zip">Source code</a><b><br>
<br>
</b>This article is meant to give you a jump start on doing serial communication
in Windows (NT family). The article will provide a class called
CSerialCommHelper which you can use directly to do serial communication in your
application. The class that is provided here with this article does uses
overlapped IO. You donot need to know much about serial communication or
overlapped IO for this article. However, you need to know some about the
synchronization objects like Events and some Windows APIs like
WaitForSingleObject and WaitForMultipleObject etc. Also some basic understanding
of windows threads is required - like thread creation and <i>termination</i>.</font></p>
<p><font size="2" face="Verdana"><b>Introduction<br>
</b>In order for your computer to be able to do serial communication, computer
has to have a serial port. Most of the computers have at least one serial port
also known as COM port ( communication port ) and are generally called COM1 COM2
etc. Then there are the device drivers for the serial ports. If you think it
over, all you that you need to do in serial communication is either send data or
receive data. In other words, you are doing input/output (IO) to the serial
port. The same IO is done with disk based files. Hence there is no surprise that
the APIs for reading and writing to a file apply to serial ports as well. When
you send data to the serial port its in terms of bytes but when it leaves the
serial port it is in the form of bits. Similarly, when the data arrives at the
serial port, its in bit format and when you get data you get it in bytes.&nbsp;<br>
Without any further discussion lets get started.<br>
<br>
<b>Opening the COM port<br>
</b>The first and the foremost step in doing a serial communication is to open
the desired port. Lets say you have your device hooked to COM1 you can open the
COM port using following API:</font></p>
<table border="0" cellspacing="1" width="100%" bgcolor="#EEE8EE">
  <tr>
    <td width="100%">
      <pre><font size="2">HANDLE m_hCommPort = ::<font color="#0000FF">CreateFile</font>(	szPortName,
					GENERIC_READ|GENERIC_WRITE,//access ( read and write)
					0,	//(share) 0:cannot share the COM port						
					0,	//security  (None)				
					OPEN_EXISTING,// creation : open_existing
					FILE_FLAG_OVERLAPPED,// we want overlapped operation
					0// no templates file for COM port...
					);</font></pre>
    </td>
  </tr>
</table>
<p><font size="2" face="Verdana">The third fifth and seventh parameters have to be what they
are in the above example by law. We want to open the file ( the COM port ) in an
overlapped fashion - that's why the sixth param is FILE_FLAG_OVERLAPPED. We will
get into the details of overlapped IO a bit later. As you must have guessed from
the name , CreateFile() API can be used to create a file (disk based) and also
it can be used to open an existing file.&nbsp;<br>
To Windows a serial port or a disk based file both are IO devices . So, in order
to open an existing file ( serial port ) all we need to know the name of the
device ( COM1) and pass the creation flags as OPEN_EXISTING.<br>
If a COM port is opened successfully, the API returns handle to the com port
just like a handle to a file. However, if the system could not open the COM
port, it would return INVALID_HANDLE_VALUE . And you can get the reason by
calling GetLastError(). One of the common errors while opening a COM port is
that the COM port is already opened by some other application and in that case
you would get ERROR_ACCESS_DENIED (5). Similarly if you by mistake opened a COM
port that doesnot exist , you would get ERROR_FILE_NOT_FOUND&nbsp; as the last
error.<br>
<u>Note: Remember not to do make any function calls (like ASSERT) before calling
GetLastError() or you would get 0</u>.<u><br>
</u>Once you have opened the com port all you need to do now is to start using
it.<br>
<br>
<b>Reading and Writing<br>
</b>Now, once you have a com port open, you may want to send&nbsp; some data to
the connected device. For example, lets say you want to send &quot;Hello&quot;
to the device(e.g., another PC). When you want to send the data across the
serial port, you need to write to the serial port just like you would write to a
file. You would use following API:<br>
</font></p>
<table border="0" cellspacing="1" width="100%">
  <tr>
    <td width="100%" bgcolor="#C0C0C0"><font size="2" face="Verdana">iRet = WriteFile (m_hCommPort,data,dwSize,&amp;dwBytesWritten  ,&amp;ov);&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
  </tr>
</table>
<p><font size="2" face="Verdana">where data contains &quot;Hello&quot; .&nbsp;<br>
Lets say in response to your &quot;Hello&quot; , the device sends you
&quot;Hi&quot; . So you need to read the data. Again ,you would&nbsp; use
following API:</font></p>
<table border="0" cellspacing="1" width="100%">
  <tr>
    <td width="100%" bgcolor="#C0C0C0"><font size="2" face="Verdana">abRet = ::ReadFile(m_hCommPort,szTmp
      ,sizeof(szTmp ),&amp;dwBytesRead,&amp;ovRead) ;</font></td>
  </tr>
</table>
<p><font size="2" face="Verdana"><i>For now do not try to understand everything.We will get to
all this later.<br>
</i>All this sounds very simple. Right? <br>
Now lets start digging into issues. </font></p>
<p><font size="2" face="Verdana"><b>Issues with serial communication</b><br>
Just now I said, in response to your &quot;Hello&quot;, the device may send you
&quot;Hi&quot; back and you would like to read that. But the problem here is
that you don't know when the device is going to respond? Or will it ever
respond? When should you start to read from the port. One option is that as soon
as you made call to WriteFile, you make call to ReadFile . If no data is there
you need to make read again later on. This leads to what is called polling. You
keep polling the port for data. This model does not really&nbsp; seem to be a
good one. It would be nice if somehow you were notified by the system when data
has arrived and only then would you make call to ReadFile. This is event driven
approach and fits well into Windows programming. And good news is that such a
model is possible . <br>
<br>
<br>
<br>
Another issue with the serial communication is that since it always occurs
between two devices, the two devices need to agree on how they talk to each
other. Each side needs to follow certain protocols to conduct business. Since
its the serial port that actually carries out the communication, we need to
configure the serial port. There is an API available for exact same purpose.
Following is the API:</font></p>
<table border="0" cellspacing="1" width="100%" bgcolor="#C0C0C0">
  <tr>
    <td width="100%"><font size="2" face="Verdana">SetCommState ( HANDLE hFile, LPDCB lpDCB)</font></td>
  </tr>
</table>
<p><font size="2" face="Verdana">The first parameter is the handle to COM port and the second
paramter is what is called device control block (DCB) . The DCB is a struct
defined in winbase.h and has 28 data members. For example, we need to specify
baud rate at which the COM port operates, you need to set the <b>BaudRate </b>member
of the struct . Baud rate is usual 9600 (bps) . But the two devices have to use
the same baud rate to conduct business. Similarly if you want to use parity you
need to set <b>Parity</b> member of the struct. Again the two devices have to
use same parity. Some of the data members are reserved and have to be 0. I have
found it easier to get the current DCB struct and then set those members which
we are interested in changing. Following code gets the current dcb and sets some
of the fields:<br>
<br>
</font></p>
<table border="0" cellspacing="1" width="100%" bgcolor="#EEE8EE">
  <tr>
    <td width="100%">
      <pre><font size="2" face="Verdana">DCB dcb = {0};
dcb.DCBlength = sizeof(DCB);

if (!::<font color="#0000FF">GetCommState </font>(m_hCommPort,&amp;dcb))
{
	TRACE ( &quot;CSerialCommHelper : Failed to Get Comm State Reason: %d&quot;,GetLastError());
	return E_FAIL;
}

dcb.BaudRate	= dwBaudRate;
dcb.ByteSize	= byByteSize;
dcb.Parity		= byParity;
if ( byStopBits == 1 )
	dcb.StopBits	= ONESTOPBIT;
else if (byStopBits == 2 ) 
	dcb.StopBits	= TWOSTOPBITS;
else 
	dcb.StopBits	= ONE5STOPBITS;


if (!::<font color="#0000FF">SetCommState</font> (m_hCommPort,&amp;dcb))
{
	ASSERT(0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜av一区二区| 秋霞午夜av一区二区三区| 欧美精品一区二区三区久久久 | 亚洲成a人v欧美综合天堂| 亚洲少妇30p| 亚洲精品国产无天堂网2021| 亚洲色图一区二区| 亚洲一卡二卡三卡四卡五卡| 一个色在线综合| 日韩经典中文字幕一区| 日韩电影在线免费看| 蜜桃av一区二区三区| 国产九色精品成人porny| 国产夫妻精品视频| 91视频在线观看| 欧美亚洲综合久久| 日韩一级黄色大片| 国产日韩欧美激情| 亚洲精品免费看| 日韩国产欧美一区二区三区| 国产主播一区二区| av在线播放一区二区三区| 在线精品亚洲一区二区不卡| 7777精品伊人久久久大香线蕉完整版| 国产精品理论片| 亚洲视频资源在线| 午夜免费久久看| 国产精品99久久久久久宅男| 91丨porny丨户外露出| 欧美日韩国产影片| 国产午夜精品一区二区三区视频| 18涩涩午夜精品.www| 日韩av成人高清| 成人福利视频在线| 欧美精品一二三四| 亚洲国产精品t66y| 日韩精品每日更新| eeuss鲁片一区二区三区在线看| 欧美在线你懂得| 国产片一区二区三区| 午夜免费欧美电影| 99久久99久久精品免费观看 | 久久99精品久久久久久动态图| 成人国产免费视频| 日韩一区二区在线看| 亚洲欧洲日产国码二区| 久久国产精品露脸对白| 一本色道a无线码一区v| 亚洲精品一区二区三区99| 亚洲成人资源网| 97国产精品videossex| 精品国产一区二区三区久久久蜜月| 一区精品在线播放| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久久精品国产99久久精品芒果| 亚洲综合色区另类av| 成人综合婷婷国产精品久久| 91精品国产一区二区人妖| 中文字幕一区二区三区色视频| 久久精品免费观看| 欧美日韩高清在线| 亚洲一区自拍偷拍| 91久久精品国产91性色tv| 亚洲天堂成人在线观看| 国产凹凸在线观看一区二区| 欧美精品一区男女天堂| 久久精品国产色蜜蜜麻豆| 欧美高清激情brazzers| 亚洲国产精品欧美一二99| 日本电影亚洲天堂一区| 国产精品家庭影院| 99在线精品观看| 国产精品毛片无遮挡高清| 国产a久久麻豆| 国产日韩三级在线| 国产91在线看| 国产精品美女久久久久久| 粉嫩aⅴ一区二区三区四区五区| xnxx国产精品| 国产成人激情av| 亚洲欧洲日韩av| 91久久线看在观草草青青| 亚洲一区欧美一区| 欧美久久久一区| 美女www一区二区| 欧美久久久久久蜜桃| 日本色综合中文字幕| 日韩视频在线观看一区二区| 日本欧美一区二区三区乱码| 欧美大片拔萝卜| 国产精品一二三在| 中文字幕一区av| 欧美午夜精品久久久| 美女www一区二区| 国产欧美日韩视频一区二区| av亚洲精华国产精华| 亚洲高清在线精品| 日韩欧美精品在线视频| 懂色av一区二区三区免费看| 亚洲女厕所小便bbb| 欧美日韩国产欧美日美国产精品| 日韩成人一区二区三区在线观看| 精品日本一线二线三线不卡| 成人免费视频一区| 亚洲福利视频导航| 久久亚洲综合色一区二区三区| 成人免费毛片片v| 亚洲大片精品永久免费| 久久久精品天堂| 欧洲视频一区二区| 国产做a爰片久久毛片| 国产精品久久久久久久久晋中| 欧美日韩久久不卡| 成人激情免费视频| 日韩av电影天堂| 亚洲天堂成人网| 久久久精品黄色| 欧美久久高跟鞋激| 色综合色狠狠天天综合色| 蜜臀av国产精品久久久久| 亚洲特黄一级片| 久久久久国产精品免费免费搜索| 在线观看网站黄不卡| 懂色av一区二区夜夜嗨| 美女高潮久久久| 亚洲午夜久久久久久久久电影院 | 国产91高潮流白浆在线麻豆 | 不卡的电视剧免费网站有什么| 天天综合色天天综合| 日韩码欧中文字| 久久久国产精品午夜一区ai换脸| 精品视频资源站| 99久久er热在这里只有精品66| 国产一区二区三区视频在线播放| 亚洲成年人影院| 亚洲主播在线播放| 中文字幕一区二区三区乱码在线| 国产亚洲美州欧州综合国| 欧美一区二区三区免费大片 | 亚洲视频中文字幕| 国产精品欧美综合在线| 久久影院视频免费| 日韩一区二区免费高清| 欧美人xxxx| 欧美三级电影网站| 欧美日韩视频专区在线播放| 在线观看亚洲一区| 欧美视频一区在线| 在线观看三级视频欧美| 在线观看亚洲成人| 欧美日韩一级二级三级| 欧美性生交片4| 欧美在线观看禁18| 欧美日韩1区2区| 欧美日韩亚洲综合一区二区三区| 欧美色视频在线| 欧美日韩亚州综合| 欧美一个色资源| 久久久久高清精品| 国产日韩欧美精品综合| 一区在线播放视频| 亚洲蜜桃精久久久久久久| 亚洲欧美另类图片小说| 亚洲国产综合人成综合网站| 午夜久久久久久久久| 午夜不卡在线视频| 久久av资源网| 国产一区二区按摩在线观看| 成人小视频在线观看| av一区二区三区| 欧美日韩中文另类| 日韩欧美国产一区二区三区| 精品成人一区二区| 国产精品麻豆视频| 亚洲国产另类精品专区| 日本麻豆一区二区三区视频| 国产精品一区一区| 色婷婷香蕉在线一区二区| 欧美精品乱码久久久久久按摩| 日韩亚洲欧美综合| 欧美国产成人精品| 亚洲永久免费av| 国产一区二区三区四区五区入口| 99视频精品全部免费在线| 欧美特级限制片免费在线观看| 日韩欧美一卡二卡| 国产精品久久久一区麻豆最新章节| 一区二区三区四区激情| 久久99精品国产麻豆婷婷洗澡| 97se亚洲国产综合自在线不卡| 制服丝袜亚洲播放| 欧美国产日韩亚洲一区| 一区二区三区国产精品| 激情五月婷婷综合| 91视频一区二区三区| 精品国产一区二区亚洲人成毛片 | 国产欧美一区二区精品久导航| 亚洲专区一二三| 成人app网站| 久久久久久久综合色一本|