C#和232串口通信方法(SerialPort控件)_第1頁
C#和232串口通信方法(SerialPort控件)_第2頁
C#和232串口通信方法(SerialPort控件)_第3頁
C#和232串口通信方法(SerialPort控件)_第4頁
C#和232串口通信方法(SerialPort控件)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、*本例程主要講解使用C#,實(shí)現(xiàn)與232串口通信。達(dá)到采集串口數(shù)據(jù),監(jiān)控, 可視化處理等。一.概述在Visual Studio 6.0中編寫串口通訊程序,一般都使用Microsoft Communication Control (簡(jiǎn)稱 MSComm )的通訊控件,只要通 過 對(duì)此控件的屬性和事件進(jìn)行相應(yīng)編程操作,就可以輕松地實(shí)現(xiàn)用口通訊。但在 Microsoft.Net技術(shù)廣泛應(yīng)用的今天,Visual Studio.Net沒有將此控件加入控件庫,所以人們采用了許多方法在 Visual Studio.Net來編寫串口通訊程序:第一種方法是通過采用 Visual Studio 6.0中原來的MSCo

2、mm 控件這是最簡(jiǎn)單的,最方便的方法,但需要注冊(cè);第二種方法是采用微軟在.NET推出了一個(gè)用口控件,基于.NET的P/Invoke 調(diào)用方法實(shí)現(xiàn);第三種方法是自己用 API寫 通口通信,雖然難度高,但可以方便實(shí)現(xiàn)自己想要的各種功能?,F(xiàn)在微軟推出了最新版本的 Visual Studio 2005開發(fā)工具,可以不再采用第三方控件的方法來設(shè)計(jì)用口通訊程序。NET Framework 2.0類庫包含了SerialPort類,方便地實(shí)現(xiàn)了所需要用口通訊的多種功能,為了使MSComm 編程方法快速轉(zhuǎn)換到以SerialPort類為核心的串口通訊的設(shè)計(jì)方法,本文著重討 論了 Visual Studio 6.0

3、 的MSComm 控件和SerialPort 類設(shè)計(jì)方法的異同 點(diǎn)。二.SerialPort常用屬性、方法和事件1 .命名空間System.IO.Ports命名空間包含了控制串口重要的 SerialPort 類,該類提供了同步I/O和事件驅(qū)動(dòng)的I/O、對(duì)管腳和中斷狀態(tài)的訪問以及對(duì)串行驅(qū)動(dòng) 程序?qū)傩缘脑L問,所以在程序代碼起始位置需加入U(xiǎn)sing System.IO.Ports 。2 .串口的通訊參數(shù)串口通訊最常用的參數(shù)就是通訊端口號(hào)及通訊格式(波特率、數(shù)據(jù)位、停止位和校驗(yàn)位),在MSComm 中相關(guān)的屬性是 CommPort 和Settings 。 SerialPort 類與MSComm 有一些

4、區(qū)別:a.通訊端口號(hào)PortName屬性獲取或設(shè)置通信端口,包括但不限于所有可用的COM端口,請(qǐng)注意該屬性返回類型為 String ,不是Mscomm.CommPort 的short 類型。通常情況下,PortName 正常返回的值為 COM1、COM2,SerialPort 類最大支持的端口數(shù)突破了 CommPort控件中CommPort屬性不能超過16 的限止,大大方便了用戶用口設(shè)備的配置。b.通訊格式SerialPort 類對(duì)分別用BaudRate 、Parity 、DataBits 、StopBits 屬性設(shè)置通訊格式中的波特率、數(shù)據(jù)位、停止位和校驗(yàn)位,其中 Parity和 StopB

5、its 分別是枚舉類型 Parity、StopBits , Parity 類型中枚舉了 Odd(奇)、 Even(偶)、Mark、None、Space , Parity 枚舉了 None、One、OnePointFive、 Two oSerialPort類提供了七個(gè)重載的構(gòu)造函數(shù),既可以對(duì)已經(jīng)實(shí)例化的 SerialPort對(duì)象設(shè)置上述相關(guān)屬性的值,也可以使用指定的端口名稱、波特率 和奇偶校驗(yàn)位數(shù)據(jù)位和停止位直接初始化SerialPort類的新實(shí)例。3 .串口的打開和關(guān)閉SerialPort 類沒有采用 MSComm.PortOpen=True/False設(shè)置屬性值打開關(guān)閉用口,相應(yīng)的是調(diào)用類的

6、 Open()和Close()方法。4 .數(shù)據(jù)的發(fā)送和讀取Serial類調(diào)用重載的 Write和WriteLine 方法發(fā)送數(shù)據(jù),其中WriteLine 可發(fā)送字符串并在字符用末尾加入換行符,讀取用口緩沖區(qū)的方法有許多,其中除了 ReadExisting 和ReadTo,其余的方法都是同步調(diào)用,線程被阻塞直到緩 沖區(qū)有相應(yīng)的數(shù)據(jù)或大于 ReadTimeOut屬性設(shè)定的時(shí)間值后,引發(fā) ReadExisting 異常。5 .DataReceived 事件該事件類似于 MSComm 控件中的OnComm 事件,DataReceived 事件 在接收到了 ReceivedBytesThreshold設(shè)

7、置的字符個(gè)數(shù)或接收到了文件結(jié)束字符并將其放入了輸入緩沖區(qū)時(shí)被觸發(fā)。其中ReceivedBytesThreshold 相 當(dāng)于MSComm 控件的Rthreshold 屬性,該事件的用法與 MsComm 控件的OnComm 事件在 CommEvent 為 comEvSend 和 comEvEof 時(shí)是一致 的。三.SerialPort 的使用對(duì)于熟悉MSComm控件的程序設(shè)計(jì)者,SerialPort類是相當(dāng)容易上手 的。在進(jìn)行串口通訊時(shí),一般的流程是設(shè)置通訊端口號(hào)及波特率、數(shù)據(jù)位、停止 位和校驗(yàn)位,再打開端口連接,發(fā)送數(shù)據(jù),接收數(shù)據(jù),最后關(guān)閉端口連接這樣幾 個(gè)步驟。數(shù)據(jù)接收的設(shè)計(jì)方法在這里比較重

8、要,采用輪詢的方法比較浪費(fèi)時(shí)間,在 Visual Basic中的延時(shí)方法中一般會(huì)調(diào)用 API并用DOEvents方法來處理,但 程序不易控制,建議采用 DataReceived 事件觸發(fā)的方法,合理的設(shè)置 ReceivedBytesThreshold的值,若接收的是定長(zhǎng)的數(shù)據(jù),則將ReceivedBytesThreshold設(shè)為接收數(shù)據(jù)的長(zhǎng)度,若接收數(shù)據(jù)的結(jié)尾是固定的字符或字符串則可采用 ReadTo的方法或在DataReceived 事件中判斷接收的 字符是否滿足條件。SerialPort類讀取數(shù)據(jù)的許多方法是同步阻塞調(diào)用,盡量避免在主線程中 調(diào)用,可以使用異步處理或線程間處理調(diào)用這些讀取數(shù)

9、據(jù)的方法。由于DataReceived 事件在輔線程被引發(fā),當(dāng)收到完整的一條數(shù)據(jù),返回 主線程處理或在窗體上顯示時(shí),請(qǐng)注意跨線程的處理,C#可采用控件異步委托的方法Control.BeginInvoke及同步委托的方法Invoke 。四.結(jié)束語在.NET平臺(tái)下熟練使用SerialPort 類,可以很好地開發(fā)出串口通訊類程 序,對(duì)于過去使用 MSComm 控件設(shè)計(jì)了一些通訊程序,也可以將 MSComm 控件替換為SerialPort類,當(dāng)然為了避免對(duì)以前的項(xiàng)目做大的改動(dòng),可以使用 SerialPort類設(shè)計(jì)一些與MSComm 控件具有相同接口的類,在今后工業(yè)控制 中,SerialPort類將廣泛

10、地應(yīng)用于串口通訊程序的設(shè)計(jì)中,發(fā)揮著與MSComm控件一樣的作用。*C# SerialPort運(yùn)行方式SerialPort中串口數(shù)據(jù)的讀取與寫入有較大的不同。由于串口不知道數(shù)據(jù)何時(shí)到達(dá),因此有兩種 方法可以實(shí)現(xiàn)串口數(shù)據(jù)的讀取。一、線程實(shí)時(shí)讀串口;二、事件觸發(fā)方式實(shí)現(xiàn)。由于線程實(shí)時(shí)讀串口的效率不是十分高效,因此比較好的方法是事件觸發(fā)的方式。在SerialPort類中有 DataReceived 事件,當(dāng)串口的讀緩存有數(shù)據(jù)到達(dá)時(shí)則觸發(fā)DataReceived 事件,其中SerialPort.ReceivedBytesThreshold 屬性決定了當(dāng)串口讀緩存中數(shù)據(jù)多少個(gè)時(shí)才觸發(fā) DataRecei

11、ved事件,默認(rèn)為 1。 另外,SerialPort.DataReceived事件運(yùn)行比較特殊,其運(yùn)行在輔線程,不能與主線程中的顯示數(shù)據(jù)控件直接進(jìn)行數(shù)據(jù)傳輸,必須用間接的方式實(shí)現(xiàn)。如下:SerialPort spSend; /spSend,spReceive用虛擬串口連接,它們之間可以相互傳輸數(shù)據(jù)。spSend發(fā)送數(shù)據(jù)SerialPort spReceive; /spReceive接受數(shù)據(jù)TextBox txtSend; / 發(fā)送區(qū)TextBox txtReceive; / 接受區(qū)Button btnSend; /數(shù)據(jù)發(fā)送按鈕delegate void HandleInterfaceUpdat

12、eDelegate(string text); /委托,止匕為重點(diǎn)HandleInterfaceUpdateDelegate interfaceUpdateHandle;public void InitClient() /窗體控件已在初始化interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(UpdateTextBox); /實(shí)例化委托對(duì)象spSend.Open(); /SerialPort對(duì)象在程序結(jié)束前必須關(guān)閉,在此說明spReceive.DataReceived += Ports.SerialDataReceivedEvent

13、Handler(spReceive_DataReceive d);spReceive.ReceivedBytesThreshold = 1; spReceive.Open();public void btnSend_Click(object sender,EventArgs e) spSend.WriteLine(txtSend.Text); public void spReceive_DataReceived(object sender,Ports.SerialDataReceivedEventArgs e) byte readBuffer = new bytespReceive.ReadB

14、ufferSize;spReceive.Read(readBuffer, 0, readBuffer.Length);this.Invoke(interfaceUpdateHandle, new string Encoding.Unicode.GetString(readBuffer) ); private void UpdateTextBox(string text) txtReceive.Text = text;點(diǎn)評(píng):這個(gè)例子包括了這個(gè)控件幾乎所有的操作,非常有參考價(jià)值.serialPort 是在.net framework2.0 中才有的東西,感覺這個(gè)東西和 MSCOMM很相似.這里給出

15、的低J子是基于 和CSHAPE 的,相應(yīng)的可以在Cshape和c+中使用,基本上都是一樣的.Imports SystemImports System .IO. PortsImports System. ThreadingPublic Class PortChatShared _continue As BooleanShared _serialPort As SerialPortPublic Shared Sub Main ()Dim name As StringDim message As StringDim sComparer As StringComparer =StringCompare

16、r . OrdinalIgnoreCaseDim readThread As Thread = NewThread (AddressOfRead)'Create a newSerialPort object with default settings ._serialPort = NewSerialPort ()'Allow the user to set the appropriateproperties .serialPort . PortName =SetPortName( _serialPort . PortName)_serialPort . BaudRate =Se

17、tPortBaudRate (_serialPort . BaudRat®_serialPort . Parity =SetPortParity (_serialPort . Parity )_serialPort . DataBits =SetPortDataBits (_serialPort . DataBits )_serialPort . StopBits =SetPortStopBits (_serialPort . StopBits )_serialPort . Handshake =SetPortHandshake (_serialPort . Handshake

18、9;Set the read / write timeouts_serialPort . ReadTimeout = 500_serialPort . WriteTimeout = 500_serialPort . Oper()_continue = True readThread. Start ()Console. Write ("Name:")name = Console . ReadLine()Console. WriteLine ("Type QUIT to exit")While (_continue )message = Console .

19、ReadLine()If sComparer. Equals( "quit" , message)Then_continue = FalseElse_serialPort . WriteLine ( _String . Format("<0>: 1” , name, message)End Ifend whilereadThread. Join ()_serialPort . Close ()End SubPublic Shared Sub Read()While (_continue )TryDim message As String =_seria

20、lPort . ReadLine()Console. WriteLine (messageCatch ex As TimeoutException'Do nothingEnd TryEnd WhileEnd SubPublic Shared Function SetPortName (ByVal defaultPortName As String ) As StringDim newPortName As StringConsole.WriteLine ("Available Ports:" )Dim s As StringFor Each s In SerialP

21、ort . GetPortNames() Console. WriteLine ("0” , s)Next sConsole. Write ("COM port(0):", defaultPortName )newPortName = Console . ReadLine()If newPortName = "" Then newPortName = defaultPortName End IfReturn newPortNameEnd FunctionPublic Shared Function SetPortBaudRate (ByVal

22、defaultPortBaudRate As Integer ) As IntegerDim newBaudRate As StringConsole. Write ("Baud Rate(0):",defaultPortBaudRate )newBaudRate = Console . ReadLine()If newBaudRate = "" Then newBaudRate = defaultPortBaudRate . ToString ()End IfReturn Integer . Parse( newBaudRateEnd Function

23、Public Shared Function SetPortParity (ByVal defaultPortParity As Parity ) As ParityDim newParity As StringConsole. WriteLine ("Available Parity options:")Dim s As StringFor Eachs In Enurmi GetNamesGetType( Parity ) Console. WriteLine ("0” , s)Next sConsole. Write ("Parity(0):&quo

24、t;,defaultPortParity . ToString ()newparity = Console . ReadLine()If newparity = "" Then newparity = defaultPortParity . ToString ()End IfReturn CType( Enurmi Parse( GetType( Parity ), newParity ), Parity )End FunctionPublic Shared Function SetPortDataBits (ByVal defaultPortDataBits As Int

25、eger ) As IntegerDim newDataBits As StringConsole. Write ("Data Bits(0):",defaultPortDataBits )newDataBits = Console . ReadLine()If newDataBits = "" Then newDataBits = defaultPortDataBits . ToString ()End IfReturn Integer . Parse( newDataBits) End FunctionPublic Shared Function S

26、etPortStopBits (ByVal defaultPortStopBits As StopBits ) As StopBitsDim newStopBits As StringConsole. WriteLine ("Available Stop Bits options:")Dim s As String For Each s In Enurm. GetName$GetType( StopBits )Console. WriteLine ("0” , s) Next sConsole. Write ("Stop Bits(0):",d

27、efaultPortStopBits . ToString ()newStopBits = Console . ReadLine()If newStopBits = "" Then newStopBits = defaultPortStopBits . ToString ()End IfReturnCType( Enurii Parse( GetType(StopBits ), newStopBits ), StopBits ) End FunctionPublic Shared Function SetPortHandshake (ByVal defaultPortHan

28、dshake As Handshake) As HandshakeDim newHandshake As StringConsole. WriteLine ("Available Handshake options:")Dim s As String For Each s In Enurii GetName$GetType( Handshake)Console. WriteLine ("0” , s) Next sConsole. Write ("Stop Bits(0):",defaultPortHandshake . ToString ()

29、newHandshake = Console . ReadLine()If newHandshake = "" Then newHandshake = defaultPortHandshake . ToString ()End IfReturnCType( Enum Parse( GetType( Handshake), newHandshake), Handshake) End FunctionEnd Classusing System;using System. IO. Ports ;using System. Threading ;public class PortC

30、hatstatic bool _continue ;static SerialPort _serialPort ;public static void Main ()string name;string messageStringComparer stringComparer = StringComparer . OrdinalIgnoreCase ;Thread readThread = new Thread( Read);/ Create a new SerialPort object with default settings._serialPort = newSerialPort ()

31、;/ Allow the user to set the appropriate properties._serialPort . PortName = SetPortName(_serialPort . PortName);_serialPort . BaudRate = SetPortBaudRate (_serialPort . BaudRat®_serialPort . Parity = SetPortParity (_serialPort . Parity );_serialPort . DataBits = SetPortDataBits (_serialPort . D

32、ataBits );_serialPort . StopBits =SetPortStopBits (_serialPort . StopBits );_serialPort . Handshake = SetPortHandshake (_serialPort . Handshak;/ Set the read/write timeouts_serialPort . ReadTimeout = 500;_serialPort . WriteTimeout = 500;_serialPort . Oper();_continue = true ;readThread. Start ();Con

33、sole. Write ("Name:");name = Console. ReadLine();Console. WriteLine ("Type QUIT to exit");while (_continue )message = Console. ReadLine();if (stringComparer . Equals ("quit", message) _continue = false ; else_serialPort . WriteLine (String . Format("<0>: 1” ,

34、 name, message ); readThread. Join ();_serialPort . Close ();public static void Read() while (_continue ) trystring message =serialPort . ReadLine();Console. WriteLine (message; catch (TimeoutException ) public static string SetPortName (string defaultPortName ) string portName;Console. WriteLine (&

35、quot;Available Ports:" ); foreach (string s in SerialPort . GetPortNames() Console. WriteLine ("0” , s);Console. Write ("COM port(0):", defaultPortName );portName = Console. ReadLine();if (portName ="") portName = defaultPortName ; return portName;public static int SetP

36、ortBaudRate (int defaultPortBaudRate ) string baudRate;Console. Write ("Baud Rate(0):",defaultPortBaudRate );baudRate = Console. ReadLine();if (baudRate ="") baudRate = defaultPortBaudRate . ToString (); return int . Parse( baudRate);public static Parity SetPortParity (Parity def

37、aultPortParity ) string parity ;Console. WriteLine ("Available Parity options:"); foreach (string s in EnumGetNamestypeof (Parity ) Console. WriteLine ("0” , s); defaultPortParityConsole. Write ("Parity(0):".ToString ();parity = Console. ReadLine();if (parity ="")

38、parity = defaultPortParity . ToString (); return (Parity ) EnumnParse(typeof (Parity ), parity );public static int SetPortDataBits (int defaultPortDataBits ) string dataBits ;Console. Write ("Data Bits(0):",defaultPortDataBits );dataBits = Console. ReadLine();if (dataBits ="") da

39、taBits = defaultPortDataBits . ToString ();return int . Parse( dataBits );public static StopBits SetPortStopBits (StopBits defaultPortStopBits )string stopBits ;Console. WriteLine ("Available Stop Bits options:");foreach (string s inEnumGetNamestypeof (StopBits ) Console. WriteLine ("

40、0” , s);Console. Write ("Stop Bits(0):",defaultPortStopBits . ToString ();stopBits = Console. ReadLine();if (stopBits ="") stopBits = defaultPortStopBits . ToString ();return (StopBits ) EnumParse(typeof (StopBits ), stopBits );public static Handshake SetPortHandshake (Handshake

41、defaultPortHandshake ) string handshake;Console. WriteLine ("Available Handshake options:");foreach (string s in EnumGetNamestypeof (Handshake()Console. WriteLine ("0” , s);Console. Write ("Stop Bits(0):",defaultPortHandshake . ToString ();handshake = Console. ReadLine();if

42、(handshake ="") handshake = defaultPortHandshake . ToString (); return(Handshake EnumParse(typeof (Handshake, handshake); SerialPort類的源代碼已經(jīng)放在下面,SerialPort類是由Remon Spekreijse提供的免費(fèi)串口類。CSerialPort支持線連接的串口編程,而且是基于多線程的,工作流程:1 .設(shè)置串口參數(shù)。函數(shù)原型:BOOL CSerialPort:InitPort(CWnd* pPortOwner, /the owner (

43、CWnd) of the port (receives message)UINT portnr, / portnumber (1.4)UINT baud, / baudratechar parity, / parityUINT databits, / databitsUINT stopbits, / stopbitsDWORD dwCommEvents, / EV_RXCHAR, EV_CTS etcUINT writebuffersize) / size to the writebuffer2 .串口監(jiān)測(cè)線程。BOOL CSerialPort:StartMonitoring()BOOL CS

44、erialPort:RestartMonitoring()BOOL CSerialPort:StopMonitoring()void CSerialPort:WriteChar(CSerialPort* port)void CSerialPort:ReceiveChar(CSerialPort* port, COMSTAT comstat)void CSerialPort:WriteToPort(char* string)3 .監(jiān)測(cè)線程接收事件信息,再進(jìn)行消息處理即可。SerialPort類的應(yīng)用基于對(duì)話框的串口程序開發(fā):1 .將SerialPort類添加進(jìn)工程;2 .進(jìn)行消息的映射;(注意:

45、在SerialPort類的頭文件中的:#define WM_COMM_RXCHAR WM_USER+7需要手動(dòng)進(jìn)行映射)在工程的主對(duì)話框頭文件中,格式如下:afx_msg LONG OnComm(WPARAM ch,LPARAM port);在工程的主對(duì)話框的 CPP文件中,格式如下:BEGIN_MESSAGE_MAP(CMy20040889SerialPortTestDlg, CDialog)AFX_MSG_MAP(CMy20040889SerialPortTestDlg) ON_MESSAGE(WM_COMM_RXCHAR,OnComm)./AFX_MSG_MAPEND_MESSAGE_M

46、AP()然后在CPP中添加消息處理函數(shù),本例中為OnComm。例如:LONG CTestDlg:OnComm(WPARAM ch, LPARAM port) m_strEditReceiveMsg += ch;UpdateData(FALSE);return 0;/m_strEditReceiveMsg 為 EDIT 控件(接收框)的變量。 下面的m_strEditSendMsg同樣處理。3.實(shí)現(xiàn)串口的初始化,打開/關(guān)閉串口按鈕的響應(yīng)函數(shù),最后是發(fā)送信息按鈕的函數(shù)實(shí)現(xiàn) void CTestDlg:OnButtonOpen()int nPort=m_ctrlComboComPort.GetCur

47、Sel()+1;if(m_SerialPort.InitPort(this, nPort, 9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512)m_SerialPort.StartMonitoring();m_bSerialPortOpened=TRUE;elseAfxMessageBox("沒有發(fā)現(xiàn)此串口或被占用 ");m_bSerialPortOpened=FALSE;GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);GetDlgItem(IDC

48、_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);void CTestDlg:OnButtonClose()m_SerialPort.ClosePort();m_bSerialPortOpened=FALSE;GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(!m_bSerialPortOpened);GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(m_bSerialPortOpened);void CTestDlg:OnButtonSend()if(!m

49、_bSerialPortOpened) return; UpdateData(TRUE); 讀入編輯框中的數(shù)據(jù)m_SerialPort.WriteToPort(LPCTSTR)m_strEditSendMsg); 發(fā)送數(shù)據(jù) 傳感器(c#2.0)serialPort 串口通訊2007年10月12日 星期五15:44using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;us

50、ing System.Text;using System.Windows.Forms;using System.Configuration;using System.IO;using System.IO.Ports;namespace WindowsApplication2public partial class Form1 : Formpublic Form1()InitializeComponent();)int iCount;int numbers;byte rlenth;bool bRLenth;int bRStart;bool bRParam;byte Rchk;int LParam

51、;byte口 RParam;bool brcmd;byte RCmd;bool bRchk;bool bfinish;private void Form1_Load(object sender, EventArgs e) .Form1 Forml = new Form1(); try if (this.serialPort1.IsOpen)serialPort1.Close(); else serialPort1.PortName = "COM1" / 選擇 串口 COM1serialPort1.BaudRate = 9600;/設(shè)置通信口參數(shù)serialPort1.Dat

52、aBits =8;/數(shù)據(jù)位serialPort1.Parity =System.IO.Ports.Parity.None;/ 校驗(yàn)位無校驗(yàn)serialPort1.StopBits =System.IO.Ports.StopBits.One;/ 停止位 1 位 serialPort1.ReadBufferSize = 1024;/接收緩沖區(qū)大小serialPort1.WriteBufferSize = 1024;/發(fā)送緩沖區(qū)大小serialPort1.Open();serialPort1.ReadExisting();/設(shè)置Input從接收緩沖讀取全 部數(shù)據(jù)1;serialPort1.Recei

53、vedBytesThreshold =/設(shè)置引發(fā)OnCom靠件的字節(jié)長(zhǎng)度serialPort1.DiscardInBuffer();/清除接收緩沖區(qū)serialPort1.DiscardOutBuffer();/清除發(fā)送緩沖區(qū)string connstr =System.Configuration.ConfigurationManager.AppSettings"myConnectionSt ring"SqlConnection conn = newSqlConnection(connstr);conn.Open();string sql = "selectnam

54、e as時(shí)間,price,card from test01"SqlDataAdapter da = new SqlDataAdapter(sql, conn);DataSet ds = new DataSet();da.Fill(ds, "baomin");ultraChart1.DataSource =ds.Tables0.DefaultView;dataGridView1.DataSource =ds.Tables0.DefaultView;ultraChart1.Axis.Y.LogBase = 1000;ultraChart1.Axis.Y.RangeMa

55、x = 30000;ultraChart1.Axis.Y.RangeMin = 0;Application.EnableVisualStyles(); Application.DoEvents();catch (Exception ex)MessageBox.Show("dd",ex.Message,Mess ageBoxButtons.OK,MessageBoxIcon.Error);ultraChart1./ <summary>/取前后存儲(chǔ)器兩個(gè)值對(duì)比,應(yīng)付電腦異常退出/ </summary>/ <param name="send

56、er">XOR 異域校驗(yàn) </param>/ <param name="e"></param>private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)try/Byte dataread = new Byte8;/serialPort1.Read(dataread, 0,dataread.Length);/int productline=dataread0; / 接口/iCount=dataread5;string

57、connstr =System.Configuration.ConfigurationManager.AppSettings"myConnectionSt ring"SqlConnection conn = new SqlConnection(connstr);conn.Open();/if (dataread0 = 0xAA) / /MessageBox.Show(productline.ToString(), "ddd", MessageBoxButtons.OK, MessageBoxIcon.Error);/numbers = 0;/numbers =Convert.ToInt32(dataread4) * 256 A 1 + Convert.ToInt32(dataread5);/numbers =Con

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論