首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

100分,一个串口接收的有关问题

2012-07-16 
100分求助,一个串口接收的问题C/C++ codebool m_OpenStatusbool m_CloseStatusbool m_OneKeyDownbool m

100分求助,一个串口接收的问题

C/C++ code
    bool m_OpenStatus;bool m_CloseStatus;bool m_OneKeyDown;bool m_OneKeyCancel;bool m_Expose;bool m_ExposeComplete;CString  m_KV;CString  m_MA;CString  m_S;CString strTemp = "";extern "C"__declspec(dllexport)void SetZoneBuffer(){    strTemp ="";}extern "C" __declspec(dllexport)bool GetOpenStatus(){   return m_OpenStatus;}extern "C" __declspec(dllexport)bool GetCloseStatus(){    return m_CloseStatus;}extern "C" __declspec(dllexport)int GetKV(){    return atoi(m_KV);}extern "C" __declspec(dllexport)int GetMA(){    return atoi(m_MA);}extern "C" __declspec(dllexport)int GetS(){    return atoi(m_S);}extern "C" __declspec(dllexport)bool GetOneKeyDown(){    return m_OneKeyDown;}extern "C" __declspec(dllexport)bool GetOneKeyCancel(){    return m_OneKeyCancel;}extern "C" __declspec(dllexport)bool GetExpose(){    return m_Expose;}extern "C" __declspec(dllexport)bool GetExposeComplete(){    return m_ExposeComplete;}void ReveveChar(WPARAM data, LPARAM port){        char str[1] = "";//    sprintf(str,"%c",data);    strTemp += str;    if (strTemp.Find("POK"))    {        m_OpenStatus = true;    }    else    {        m_OpenStatus = false;    }    if (strTemp.Find("POF"))    {        m_CloseStatus = true;    }     else    {        m_CloseStatus = false;    }    if (strTemp.Find("KV") && strTemp.GetLength()>=5)    {        m_KV = strTemp.Left(5);        m_KV = m_KV.Right(2);    }    if (strTemp.Find("MA") && strTemp.GetLength()>=11)    {        m_MA = strTemp.Left(11);        m_MA = m_MA.Right(2);    }    if (strTemp.Find("MX") && strTemp.GetLength()==17)    {    //    m_S = strTemp.Left(11);        m_S = m_S.Right(2);    }    if (strTemp.Find("PRY"))    {        m_OneKeyDown=true;    }    else    {        m_OneKeyDown=false;    }    if (strTemp.Find("PRN"))    {        m_OneKeyCancel= true;    }    else    {        m_OneKeyCancel = false;    }    if (strTemp.Find("XRY"))    {        m_Expose = true;    }    else    {        m_Expose = false;    }    if (strTemp.Find("XRY"))    {        m_Expose = true;    }    else    {        m_Expose = false;    }    if (strTemp.Find("XRN"))    {        m_ExposeComplete= true;    }     else    {        m_ExposeComplete = false;    }        }extern "C" __declspec(dllexport) void OpenMachnie(){    if (Init(9,9600,'N',8,1))    {       char pon [4]= {'P','O','N',13};       SendData(&pon[0],sizeof(char)*1);       Sleep(20);       SendData(&pon[1],sizeof(char)*1);       Sleep(20);       SendData(&pon[2],sizeof(char)*1);       Sleep(20);       SendData(&pon[3],sizeof(char)*1);       Sleep(20);       char rfr [4]= {'R','F','R',13};       SendData(&rfr[0],sizeof(char)*1);       Sleep(20);       SendData(&rfr[1],sizeof(char)*1);       Sleep(20);       SendData(&rfr[2],sizeof(char)*1);       Sleep(20);       SendData(&rfr[3],sizeof(char)*1);       SetReceiveFuntion(&ReveveChar);          }    else    {        AfxMessageBox("初始化失败\r\n 1、串口被占用\r\n 2、检查COM9是否选择正确");    }    }extern "C" __declspec(dllexport) void CloseMachine(){       char pof [4]= {'P','O','F',13};       SendData(&pof[0],sizeof(char)*1);       Sleep(20);       SendData(&pof[1],sizeof(char)*1);       Sleep(20);       SendData(&pof[2],sizeof(char)*1);       Sleep(20);       SendData(&pof[3],sizeof(char)*1);}extern "C" __declspec(dllexport) void AddKV(){       char addkv [4]= {'K','V','+',13};       SendData(&addkv[0],sizeof(char)*1);       Sleep(20);       SendData(&addkv[1],sizeof(char)*1);       Sleep(20);       SendData(&addkv[2],sizeof(char)*1);       Sleep(20);       SendData(&addkv[3],sizeof(char)*1);}extern "C" __declspec(dllexport) void SubtractKV(){       char subtractkv [4]= {'K','V','-',13};       SendData(&subtractkv[0],sizeof(char)*1);       Sleep(20);       SendData(&subtractkv[1],sizeof(char)*1);       Sleep(20);       SendData(&subtractkv[2],sizeof(char)*1);       Sleep(20);       SendData(&subtractkv[3],sizeof(char)*1);}extern "C" __declspec(dllexport) void AddMA(){       char addma [4]= {'M','A','+',13};       SendData(&addma[0],sizeof(char)*1);       Sleep(20);       SendData(&addma[1],sizeof(char)*1);       Sleep(20);       SendData(&addma[2],sizeof(char)*1);       Sleep(20);       SendData(&addma[3],sizeof(char)*1);}extern "C" __declspec(dllexport) void SubtractMA(){       char subtractma [4]= {'M','A','-',13};       SendData(&subtractma[0],sizeof(char)*1);       Sleep(20);       SendData(&subtractma[1],sizeof(char)*1);       Sleep(20);       SendData(&subtractma[2],sizeof(char)*1);       Sleep(20);       SendData(&subtractma[3],sizeof(char)*1);}extern "C" __declspec(dllexport) void AddS(){       char adds [4]= {'M','X','+',13};       SendData(&adds[0],sizeof(char)*1);       Sleep(20);       SendData(&adds[1],sizeof(char)*1);       Sleep(20);       SendData(&adds[2],sizeof(char)*1);       Sleep(20);       SendData(&adds[2],sizeof(char)*1);       Sleep(20);       SendData(&adds[3],sizeof(char)*1);}extern "C" __declspec(dllexport) void SubtractS(){    char subtracts [4]= {'M','X','-',13};       SendData(&subtracts[0],sizeof(char)*1);       Sleep(20);       SendData(&subtracts[1],sizeof(char)*1);       Sleep(20);       SendData(&subtracts[2],sizeof(char)*1);       Sleep(20);       SendData(&subtracts[2],sizeof(char)*1);       Sleep(20);       SendData(&subtracts[3],sizeof(char)*1);} 




这是我在串口接收中写的代码,根据接收的字符串来提取里面有用的信息。消息的格式类似:KV 60(回车) MA 25(回车) MX 20(回车) 。

理论上我觉得应该可以,但是每次都是收到的值是0,其中ReveveChar 是回调函数部分。在使用时,每次都会调用setzonebuffer 清空全局的string。

[解决办法]
先单步跟踪一下,看回调时,传入的参数是什么
[解决办法]
我怀疑是你刚拿到数据就立马清空,所以一直取到的数据是0,加断点单步调试看看!
[解决办法]
你的ReveveChar只是一些值判断,这个值应该没传入进来!你调试一下看看!

热点排行