<nav id="oal0h"></nav>
    <sub id="oal0h"></sub>
    <sub id="oal0h"></sub>

  1. <sub id="oal0h"></sub>

  2. <nav id="oal0h"></nav>

      <wbr id="oal0h"><th id="oal0h"></th></wbr>
        Logo 设为首页 | 添加收藏
        杉达销售
        杉达销售
        技术支持
        杉达客服
        杉达客服
        杉达客服
         
        产品展示
         推荐产品
         产品中心
         资料下载
         
        首页产品展示资料下载
         资料下载
        文件名称: GP-系列直流稳压开关电源串口测试软件及通讯协议
        下载次数: 1207次
        点击次数: 1496次
        上传时间: 2016-10-24
        下载地址: 下载地址
        文件信息:

        串口数据传输格式

        波特率:38400
        起始结束: 数据由起始位0x3A开始,结束位0x0D结束。
        LRC检验:从起始位的下一byte开始到LRC位前一byte计算LRC,置入LRC byte。
        状态Byte说明

        7bit
        6bit
        5bit
        4bit
        3bit
        2bit
        1bit
        0bit
        故障位
        1:故障
        0:恒压
        1:恒流
        保留
        保留
        保留
        保留
        保留
        1:开机
        0:关机

        1 单片机向PC发送功能号0x09数据(即PC会收到的数据格式)

        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        0x3A
        0x09
        电压值
        电流值
        保留0x00
        状态Byte
        LRC
        0x0D

        注:电压值、电流值为float类型
        例:
        fV = *((float*)&pu8Temp[2]);
        fI = *((float*)&pu8Temp[6]);
        此数据格式为单片机向PC发送的电源信息。如:电流电压值,恒流、开关机等
        2 单片机向PC发送功能号0x00 数据(即PC会收到的数据格式)

        0
        1
        2
        3
        0x3A
        0x00
        LRC
        0x0D

        当PC收到此数据格式,说明单片机需要跟PC沟通。PC收到此数据格式后立即向单片机回复数据,格式如3。
        3 PC向单片机发送设置数据

        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        0x3A
        0x00
        电压值
        电流值
        保留0x00
        状态位
        LRC
        0x0D

        注:电压值、电流值为float类型
        例:(请自行按照所处运行环境定义BYTE(8位BIT变量))
        BYTE * pu8Temp = (BYTE*)&m_fSetV;
        szu8Re[2] = pu8Temp[0];
        szu8Re[3] = pu8Temp[1];
        szu8Re[4] = pu8Temp[2];
        szu8Re[5] = pu8Temp[3];
        pu8Temp = (BYTE*)&m_fSetI;
        szu8Re[6] = pu8Temp[0];
        szu8Re[7] = pu8Temp[1];
        szu8Re[8] = pu8Temp[2];
        szu8Re[9] = pu8Temp[3];
        当PC收到0x00号功能数据时,立即按照此格式回复电流电压设置值。
        关机操作:回复此格式,状态位最小bit为0即可。
        开机操作:亦发送此格式,状态为最小bit为1即可。
        注:开机操作应由PC主动向单片机发送数据。其他(设置电流电压、或者关机)应收到单片机0x00功能号时立即回复。
        Example Code
        #define FRAME_START    0x3A
        #define FRAME_END       0x0D
        //-- 计算LRC
        BYTE CalLRC(BYTE * pu8Buf, int i32Len)
        {
        BYTE u8LRC = 0;
        for(int i = 0; i < i32Len; i++)
        u8LRC += pu8Buf[i];
        u8LRC = ~u8LRC;
        u8LRC++;
        return u8LRC;
        }
        Void  OnComm(WPARAM ch, LPARAM port)
        {
        m_szu8RevBuf[m_i32RevLen] = (char)ch;
        m_i32RevLen++;
        if(ch == FRAME_END)
        {
        if(m_i32RevLen >= 4 &&
        m_szu8RevBuf[m_i32RevLen - 4] == FRAME_START &&
        m_szu8RevBuf[m_i32RevLen - 3] == 0x00)
        {//-- 0号功能
        BYTE u8LRC = CalLRC(&m_szu8RevBuf[m_i32RevLen - 3], 1);
        if(u8LRC == m_szu8RevBuf[m_i32RevLen - 2])
        {
        memset(m_szu8RevBuf, 0, sizeof(m_szu8RevBuf));
        m_i32RevLen = 0;
        //--  回复信息---------
        if(!m_bSerialPortOpened) return 0;
        BYTE szu8Re[14] = {0};
        szu8Re[0] = FRAME_START;
        szu8Re[13] = FRAME_END;
        szu8Re[1] = 0;//-- 地址0
        BYTE * pu8Temp = (BYTE*)&m_fSetV;
        szu8Re[2] = pu8Temp[0];
        szu8Re[3] = pu8Temp[1];
        szu8Re[4] = pu8Temp[2];
        szu8Re[5] = pu8Temp[3];
        pu8Temp = (BYTE*)&m_fSetI;
        szu8Re[6] = pu8Temp[0];
        szu8Re[7] = pu8Temp[1];
        szu8Re[8] = pu8Temp[2];
        szu8Re[9] = pu8Temp[3];
        szu8Re[10] = 0;
        if(!m_bMacOn)
        szu8Re[11] = 0x01;
        szu8Re[12] = CalLRC(&szu8Re[1], 11);
        WriteToPort((char*)&szu8Re, sizeof(szu8Re));
        return 0;
        }
        }
        if(m_i32RevLen >= 8 &&
        m_szu8RevBuf[m_i32RevLen - 8] == FRAME_START &&
        m_szu8RevBuf[m_i32RevLen - 7] == 0x01)
        {//-- 1号功能
        BYTE u8LRC = CalLRC(&m_szu8RevBuf[m_i32RevLen - 7], 5);
        if(u8LRC == m_szu8RevBuf[m_i32RevLen - 2])
        {
        //-- 1号功能数据,PC不关心这个数据,丢弃
        memset(m_szu8RevBuf, 0, sizeof(m_szu8RevBuf));
        m_i32RevLen = 0;
        return 0;
        }
        }
        if(m_i32RevLen >= 14 &&
        m_szu8RevBuf[m_i32RevLen - 14] == FRAME_START &&
        m_szu8RevBuf[m_i32RevLen - 13] == 0x09)
        {//-- 9号功能 单片机机向PC发送信息
        BYTE u8LRC = CalLRC(&m_szu8RevBuf[m_i32RevLen - 13], 11);
        if(u8LRC == m_szu8RevBuf[m_i32RevLen - 2])
        {
        //-- 9号功能数据,主机向PC发送信息
        ParseFunction(9, 10, &m_szu8RevBuf[2]);      //--      分析数据获取开关电源信息,如:电流                                                               //-- 电压等
        m_wndShow.Invalidate();
        memset(m_szu8RevBuf, 0, sizeof(m_szu8RevBuf));
        m_i32RevLen = 0;
        return 0;
        }
        }
        }
        if(m_i32RevLen >= 250)
        {
        memset(m_szu8RevBuf, 0, sizeof(m_szu8RevBuf));
        m_i32RevLen = 0;
        }
        return 0;
        }

        
        
        PC机和单片机的交互流程
        1 PC机发送开机数据给单片机(此数据和PC机设置单片机的电流电压数据一样):
        3a 00 00 00 00 00 00 00 00 00 00 01 ff 0d 蓝色的为需要计算LRC的数据,红色为LRC结果。
        注:此数据格式为电压0V,电流0A,状态为0x01,即开机。
        2 单片机收到开机数据后开机,然后不断的向PC发送0x09、0x00 功能号的数据。
        PC收到0x09功能号数据,即是开关电源上传给PC的信息。其中包含电流电压和状态,格式见上面说明。此格式不用回复。
        PC收到0x00功能号数据,即是开关电源要跟PC沟通,PC应该立即回复需要设置的信息。其中包括电流电压和状态(状态中包含了开机或者关机信息,最低bit为1即开机,0为关机)。
        关机:即回复给单片机的状态Byte最低位为0即可。电流电压的位置可以设置为0。
        举例说明:
        网站地图 | 联系我们 | 后台管理
        版权所有©东莞市杉达电子有限公司  粤ICP备11103133号  制作与维护:星河东莞网站设计  


        友情链接: KB0 不锈钢扎带 绝缘穿刺线夹 VS1-12 ZW32永磁真空断路器 看门狗真空断路器 照明防爆灯具 直流稳压电源 多功能电力仪表 电动汽车充电插头 接地片 TC接线端子 UK接线端子
        久久无码中文字幕无码,天堂网www在线资源网,国产精品毛片av一区二区三区,亚洲中文字幕无码久久精品1