德国Pfeiffer普发真空计协议说明

帮着一个朋友调试这个协议,把调试过程中遇到的问题记录下,希望能帮助后来人吧,

废话少说,直接上主体。

一、真空计通信方式

主要分为两类,数字和模拟。由于我们调试的是数字真空计,因此以下主题主要围绕

数字真空计。接口方式如下:

由于是RS485通信,可以级联,如下图:

设置地址方式:

PS:选择24V电源,要尽量保留余量,我测试发现安装上真空计影响了温度采集,查找原因,是把电源拉低了。

 

二、真空计协议

帧格式:

说明:

PS:

1、Action为'0'则为数据;为‘1’则为命令;

举例:

PS:

1、帧协议为ASCII码格式;

2、结尾为13即0x0D(我刚开始发的0x13怎么也不通,仔细看协议是0x0D);

3、校验值是前面所有数据的校验和,算法如下:

/*******************************************************************************
 * Function:        	vacuum_gauge_calculate_sum
 * PreCondition:    	None
 * Input:           	pchBuffer,hwSize
 * Output:          	uint8_t
 * Side Effects: 		None
 * Overview:        	¼ÆËãÕæ¿Õ¼ÆµÄ¼ìÑéºÍ
 * Note:            	None
*******************************************************************************/
uint8_t vacuum_gauge_calculate_sum(uint8_t* pchBuffer,uint16_t  hwSize)
{
    uint8_t     chSum = 0;
    uint16_t    i     = 0;

    if(NULL == pchBuffer || !hwSize){
        return 0;
    }

    for(i=0;i<hwSize;i++){
        chSum += pchBuffer[i] - '0';
    }

    chSum += '0' * hwSize;

    return chSum;
}

命令码:

数据格式:

 

三、读取数据

740位读数据,数据格式为10-u_expo_new

PS:

1、根据手册,“104223”=1.042×10^3,“750015”=7.500×10^(-5),我就解释我最后一位代表指数,倒数第二位代表符号;调试过程中发现数据不对,最后分析数据得出:最后两位-20代表指数部分;

2、输出单位为hPa,如果现实单位为Pa,则转换后数据×100;

计算方法:
 

/*******************************************************************************
 * Function:        	vacuum_gauge_calculate_pa
 * PreCondition:    	None
 * Input:           	pchBuffer,hwSize
 * Output:          	double
 * Side Effects: 		None
 * Overview:        	¼ÆËãÕæ¿Õ¼ÆÖµ
 * Note:            	None
*******************************************************************************/
double vacuum_gauge_calculate_pa(uint8_t* pchBuffer,uint16_t  hwSize)
{
    uint8_t     chTemp[50];
    double      dfTemp = 0.0,dfTemp1 = 0.0,dfTemp2 = 10;
    uint16_t    i= 0,j=0,m=0;

    if(NULL == pchBuffer || hwSize < 2){
        return 0;
    }

    if(hwSize > sizeof(chTemp)){
        hwSize = sizeof(chTemp);
    }
    //±ä³ÉHEX¸ñʽ
    for(i=0;i<hwSize;i++){
        chTemp[i] = pchBuffer[i] - '0';
    }
    //Ñ°ÕÒ·ÇÁãÖµ
    for(i=0;i<hwSize-2;i++){
        if(chTemp[i]){
            break;
        }
    }
    //È·¶¨ÕûÊý²¿·Ö
    if(i < (hwSize-2)){
        dfTemp = chTemp[i];
    }else{
        dfTemp = 0.0;
    }
    //È·¶¨Ð¡Êý²¿·Ö
    dfTemp2 = 10;
    for(j=i+1;j<hwSize-2;j++){
        dfTemp1 = chTemp[j];
        dfTemp1/= dfTemp2;
        dfTemp += dfTemp1;
        dfTemp2*= 10;
    }
    //hPa±äΪPa
    dfTemp = dfTemp * 100;

    //È·¶¨Ö¸Êý²¿·Ö
    j=chTemp[hwSize-2]*10+chTemp[hwSize-1];
    
    if(j >= 20){
        m = j - 20;
        for(i=0;i<m;i++){
            dfTemp*=10;
        }
    }else{
        m = 20 - j;
        for(i=0;i<m;i++){
            dfTemp/=10;
        }
    }

    return dfTemp;
}

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值