ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی “ ورود به حساب” کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمیشود، اینجا را کلیک کنید.





سفارش شبیه سازی مقالات و پایان نامه
انجام پروژه و شبیه سازی با متلب
آموزش برنامه نویسی رایگان
نمایش نتایج: از 1 به 5 از 5
  1. #1
    ali1435
    کاربر عادی
    تاریخ عضویت
    Apr 2016
    نوشته ها
    3
    0
    0

    Post نحوه استفاده از پورت سریال در سی پلاس پلاس

    سلام بنده دانشجوی رشته برق هستم و در کلاس برنامه نویسی به زبان c++ استاد فرمودند که برای پروژه باید با استفاده از یکی از پورت های کامپیوتر اطلاعاتی را مانند نوشته های تابلو روان بفرستید بعد میخواستم ببینم می تونید کمکی بفرمایید.
  2. #2
    noavarangermi
    مدیر کل
    تاریخ عضویت
    Mar 2016
    نوشته ها
    594
    125
    388
    نمونه کد برای استفاده از پورت سریال به زبان سی پلاس پلاس

    محتوای فایل Serial.h:
    کد:
    	// Serial.h
    	#ifndef __SERIAL_H__
    	#define __SERIAL_H__
    	
    	#define FC_DTRDSR       0x01
    	#define FC_RTSCTS       0x02
    	#define FC_XONXOFF      0x04
    	#define ASCII_BEL       0x07
    	#define ASCII_BS        0x08
    	#define ASCII_LF        0x0A
    	#define ASCII_CR        0x0D
    	#define ASCII_XON       0x11
    	#define ASCII_XOFF      0x13
    	
    	class CSerial
    	{
    	
    	public:
    	    CSerial();
    	    ~CSerial();
    	
    	    BOOL Open( int nPort = 2, int nBaud = 9600 );
    	    BOOL Close( void );
    	
    	    int ReadData( void *, int );
    	    int SendData( const char *, int );
    	    int ReadDataWaiting( void );
    	
    	    BOOL IsOpened( void ){ return( m_bOpened ); }
    	
    	protected:
    	    BOOL WriteCommByte( unsigned char );
    	
    	    HANDLE m_hIDComDev;
    	    OVERLAPPED m_OverlappedRead, m_OverlappedWrite;
    	    BOOL m_bOpened;
    	
    	};
    	
    	#endif
    محتوای فایل Serial.cpp:

    کد:
    	// Serial.cpp
    	#include "stdafx.h"
    	#include "Serial.h"
    	
    	CSerial::CSerial()
    	{
    	
    	    memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) );
    	     memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) );
    	    m_hIDComDev = NULL;
    	    m_bOpened = FALSE;
    	
    	}
    	
    	CSerial::~CSerial()
    	{
    	
    	    Close();
    	
    	}
    	
    	BOOL CSerial::Open( int nPort, int nBaud )
    	{
    	
    	    if( m_bOpened ) return( TRUE );
    	
    	    char szPort[15];
    	    char szComParams[50];
    	    DCB dcb;
    	
    	    wsprintf( szPort, "COM%d", nPort );
    	    m_hIDComDev = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );
    	    if( m_hIDComDev == NULL ) return( FALSE );
    	
    	    memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) );
    	     memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) );
    	
    	    COMMTIMEOUTS CommTimeOuts;
    	    CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
    	    CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
    	    CommTimeOuts.ReadTotalTimeoutConstant = 0;
    	    CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
    	    CommTimeOuts.WriteTotalTimeoutConstant = 5000;
    	    SetCommTimeouts( m_hIDComDev, &CommTimeOuts );
    	
    	    wsprintf( szComParams, "COM%d:%d,n,8,1", nPort, nBaud );
    	
    	    m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
    	    m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
    	
    	    dcb.DCBlength = sizeof( DCB );
    	    GetCommState( m_hIDComDev, &dcb );
    	    dcb.BaudRate = nBaud;
    	    dcb.ByteSize = 8;
    	    unsigned char ucSet;
    	    ucSet = (unsigned char) ( ( FC_RTSCTS & FC_DTRDSR ) != 0 );
    	    ucSet = (unsigned char) ( ( FC_RTSCTS & FC_RTSCTS ) != 0 );
    	    ucSet = (unsigned char) ( ( FC_RTSCTS & FC_XONXOFF ) != 0 );
    	    if( !SetCommState( m_hIDComDev, &dcb ) ||
    	        !SetupComm( m_hIDComDev, 10000, 10000 ) ||
    	        m_OverlappedRead.hEvent == NULL ||
    	        m_OverlappedWrite.hEvent == NULL ){
    	        DWORD dwError = GetLastError();
    	        if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent );
    	        if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent );
    	        CloseHandle( m_hIDComDev );
    	        return( FALSE );
    	        }
    	
    	    m_bOpened = TRUE;
    	
    	    return( m_bOpened );
    	
    	}
    	
    	BOOL CSerial::Close( void )
    	{
    	
    	    if( !m_bOpened || m_hIDComDev == NULL ) return( TRUE );
    	
    	    if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent );
    	    if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent );
    	    CloseHandle( m_hIDComDev );
    	    m_bOpened = FALSE;
    	    m_hIDComDev = NULL;
    	
    	    return( TRUE );
    	
    	}
    	
    	BOOL CSerial::WriteCommByte( unsigned char ucByte )
    	{
    	    BOOL bWriteStat;
    	    DWORD dwBytesWritten;
    	
    	    bWriteStat = WriteFile( m_hIDComDev, (LPSTR) &ucByte, 1, &dwBytesWritten, &m_OverlappedWrite );
    	    if( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ) ){
    	        if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) ) dwBytesWritten = 0;
    	        else{
    	            GetOverlappedResult( m_hIDComDev, &m_OverlappedWrite, &dwBytesWritten, FALSE );
    	            m_OverlappedWrite.Offset += dwBytesWritten;
    	            }
    	        }
    	
    	    return( TRUE );
    	
    	}
    	
    	int CSerial::SendData( const char *buffer, int size )
    	{
    	
    	    if( !m_bOpened || m_hIDComDev == NULL ) return( 0 );
    	
    	    DWORD dwBytesWritten = 0;
    	    int i;
    	    for( i=0; i<size; i++ ){
    	        WriteCommByte( buffer[i] );
    	        dwBytesWritten++;
    	        }
    	
    	    return( (int) dwBytesWritten );
    	
    	}
    	
    	int CSerial::ReadDataWaiting( void )
    	{
    	
    	    if( !m_bOpened || m_hIDComDev == NULL ) return( 0 );
    	
    	    DWORD dwErrorFlags;
    	    COMSTAT ComStat;
    	
    	    ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat );
    	
    	    return( (int) ComStat.cbInQue );
    	
    	}
    	
    	int CSerial::ReadData( void *buffer, int limit )
    	{
    	
    	    if( !m_bOpened || m_hIDComDev == NULL ) return( 0 );
    	
    	    BOOL bReadStatus;
    	    DWORD dwBytesRead, dwErrorFlags;
    	    COMSTAT ComStat;
    	
    	    ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat );
    	    if( !ComStat.cbInQue ) return( 0 );
    	
    	    dwBytesRead = (DWORD) ComStat.cbInQue;
    	    if( limit < (int) dwBytesRead ) dwBytesRead = (DWORD) limit;
    	
    	    bReadStatus = ReadFile( m_hIDComDev, buffer, dwBytesRead, &dwBytesRead, &m_OverlappedRead );
    	    if( !bReadStatus ){
    	        if( GetLastError() == ERROR_IO_PENDING ){
    	            WaitForSingleObject( m_OverlappedRead.hEvent, 2000 );
    	            return( (int) dwBytesRead );
    	            }
    	        return( 0 );
    	        }
    	
    	    return( (int) dwBytesRead );
    	}
    لینک دانلود فایل:
  3. 3
  4. #3
    ali1435
    کاربر عادی
    تاریخ عضویت
    Apr 2016
    نوشته ها
    3
    0
    0
    سلام دوباره ببخشید کارکرد این کد رو میتونید توضیح بدید برام من گنگم تو این مورد الان من این رو در نرم افزار ویژال استدیو در بخش ++c اجرا کنم چی اجرا میشه؟
    ویرایش توسط ali1435 : 2016/05/11 در ساعت 13:04
  5. #4
    noavarangermi
    مدیر کل
    تاریخ عضویت
    Mar 2016
    نوشته ها
    594
    125
    388
    نقل قول نوشته اصلی توسط ali1435 نمایش پست ها
    سلام دوباره ببخشید کارکرد این کد رو میتونید توضیح بدید برام من گنگم تو این مورد الان من این رو در نرم افزار ویژال استدیو در بخش ++c اجرا کنم چی اجرا میشه؟
    این کدها رو مستقیم نمی تونید ازش استفاده کنید در واقع یه کلاس است شما باید از اون کلاس یه نمونه بسازید بعد با توابعی که داخل اون کلاس است استفاده کنید مثلا می تونید به پورت مورد نظر اطلاعات بفرستید یا ازش اطلاعات دریافت کنید یا اینکه اون پورت رو ببندید و باز کنید عنوان توابع مشخص است.
  6. 2
  7. #5
    ali1435
    کاربر عادی
    تاریخ عضویت
    Apr 2016
    نوشته ها
    3
    0
    0
    نقل قول نوشته اصلی توسط noavarangermi نمایش پست ها
    این کدها رو مستقیم نمی تونید ازش استفاده کنید در واقع یه کلاس است شما باید از اون کلاس یه نمونه بسازید بعد با توابعی که داخل اون کلاس است استفاده کنید مثلا می تونید به پورت مورد نظر اطلاعات بفرستید یا ازش اطلاعات دریافت کنید یا اینکه اون پورت رو ببندید و باز کنید عنوان توابع مشخص است.
    ساختن کلاس چگونه است متاسفانه من شناختی از این پروژه ندارم میتونید بیشتر راهنمایی بفرمایید
نمایش نتایج: از 1 به 5 از 5

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •