Пятница, Сентябрь 18, 2020

Вывод данных из COM1

//Создать в VS2010 новый пустой проект WIN32 ,в свойствах проекта использовать static MFC,Юникод не задан
#include"StdAfx.h"
#include"serialport.h"
CString m_serial="\0";
CSerialPort m_port;
char readByte[1];
char asc[4]={0};
int count=0;
class CApp:public CWinApp
{
public:
    virtual BOOL InitInstance(void);
};
class CFrame:public CFrameWnd
{
public:
    CFrame();
    char* HexToASCII(char*,char*,int);
    int Y;
protected:
    afx_msg void OnPaint(void);
    afx_msg void OnKeyDown(UINT, UINT, UINT);
    DECLARE_MESSAGE_MAP();
};
BOOL CApp::InitInstance(void)
{
    
    CFrame *pFrame=new CFrame;
    ASSERT_VALID(pFrame);
    pFrame->Create(NULL,"win",WS_VISIBLE|WS_OVERLAPPEDWINDOW,CRect(200,50,900,700));
    this->m_pMainWnd=pFrame;
    m_port.Open(1,806800/*460800 921600 57600 115200 576000 691200 806800 922000*/,CSerialPort::NoParity,8,CSerialPort::OneStopBit,CSerialPort::NoFlowControl);
    return TRUE;
}
CApp myApp;
CFrame::CFrame():Y(0)
{
}
void CFrame::OnPaint(void)
{
    CPaintDC pDC(this);
    for(count=0;count<=12;count++)
    {
        m_port.ReadEx(readByte,1);
        HexToASCII(readByte,asc,1);
        m_serial+=asc[0];
        m_serial+=asc[1];
        m_serial+=" ";
        if(count==1)
            m_serial+="  ";
        else if(count==3)
        {
            m_serial+="  ";
        }
        else if(count==4)
        {
            m_serial+="  ";
        }
    }
    pDC.TextOutA(0,Y,m_serial);
    Invalidate(0);
    m_serial="\0";
    Y+=16;
}
void CFrame::OnKeyDown(UINT, UINT, UINT)
{
}
char* CFrame::HexToASCII(char *sour,char *dest,int len)
{
    int i;
    char tmp;
    int j=0;
    for(i=0;i<len;i++){
        tmp=((sour[i]>>4)&0x0f);
        if(tmp<=9){
            dest[j]=tmp+0x30;
        }
        else if(tmp>=0x0A && tmp<=0x0F){
            dest[j]=tmp+0x37;
        }
        j++;
        tmp=sour[i];
        tmp=tmp &= 0x0f;
        if(tmp<=9){
            dest[j]=tmp+0x30;
        }
        else if(tmp>=0x0A && tmp<=0x0F){
            dest[j]=tmp+0x37;
        }
        j++;
    }
    dest[j]='\0';
    return dest;
}
BEGIN_MESSAGE_MAP(CFrame,CFrameWnd)
    ON_WM_PAINT()
    ON_WM_KEYDOWN()
    END_MESSAGE_MAP()


//Консольное приложение

 

#include <iostream>
#include <fstream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include "serialport.cpp"
using namespace std;
char readByte[1];
char asc[2]={0};
int count=0;
char ascfCount[10];
char* HexToASCII(char*,char*,int);

 

int main(int argc,char *argv[])
{
    setlocale (LC_ALL, "RUS");
    int fCount=0;
    string fName1=".\\CANLOG";
    string fName2=itoa(fCount,ascfCount,10);
    string fName3=".txt";
    fName1+=fName2;
    fName1+=fName3;
    ofstream f(fName1.c_str(),ios::out);
    if(!f)cout<<"файл не создан"<<endl;
    CSerialPort port;
    port.Open(1,806800/*460800 921600 57600 115200 576000 691200 806800 922000,*/,
        CSerialPort::NoParity,
        8,
        CSerialPort::OneStopBit,
        CSerialPort::NoFlowControl);
    int save=0;
    
    while(1)
    {
        
        for(count=0;count<=12;count++)
        {
            port.ReadEx(readByte,1);
            HexToASCII(readByte,asc,1);
            cout<<asc<<' ';
            
            f<<asc[0];
            f<<asc[1];
            f<<' ';

 

            if(count==1)
            {
                cout<<' ';
                f<<' ';
            }
            else if(count==3)
            {
                cout<<' ';
                f<<' ';
            }
            else if(count==4)
            {
                cout<<' ';
                f<<' ';
            }
        }
        cout<<endl;
        f<<'\n';
        save++;
        if(save>=60)
        {
            f.close();
            fCount++;
            string fName1=".\\CANLOG";
            fName2=itoa(fCount,ascfCount,10);
            fName3=".txt";
            fName1+=fName2;
            fName1+=fName3;
            f.open(fName1.c_str(),ios::out);
            if(!f)cout<<"файл не создан"<<endl;
            save=0;
        }
    }
    port.Close();
    f.close();
    return 0;
}

 

char* HexToASCII(char *sour,char *dest,int len)
{
    int i;
    char tmp;
    int j=0;
    for(i=0;i<len;i++){
        tmp=((sour[i]>>4)&0x0f);
        if(tmp<=9){
            dest[j]=tmp+0x30;
        }
        else if(tmp>=0x0A && tmp<=0x0F){
            dest[j]=tmp+0x37;
        }
        j++;
        tmp=sour[i];
        tmp=tmp &= 0x0f;
        if(tmp<=9){
            dest[j]=tmp+0x30;
        }
        else if(tmp>=0x0A && tmp<=0x0F){
            dest[j]=tmp+0x37;
        }
        j++;
    }
    dest[j]='\0';
    return dest;
}



 

НАЗАД                                                                         ДАЛЬШЕ


Back to Top