Exemple #1
0
void Widget::SendModData(qint64 Data,qint64 IsSaveState,int Counter)
{
    uint m_CrcLow = 0,m_CrcHig = 0;//存放CRC高低位
    char SendData[10]={0};//存放发送缓冲数据
    SendData[0]=0x01;//modbus 地址位
    SendData[1]=0x01;//功能位
    SendData[2]=Data;//控制位
    SendData[3] = IsSaveState;//是否存储状态
    SendData[4]=Counter;

    ulong m_uCrcValue=0;//crc校验返回值
    m_uCrcValue = CRCCheck(SendData,5);//CRC校验
    //取出CRC高地位
    m_CrcHig=m_uCrcValue>>8&0xff;
    m_CrcLow=m_uCrcValue&0xff;
    //将CRC高低位放入缓冲
    SendData[5]=m_CrcHig;
    SendData[6]=m_CrcLow;

    //判断mainwindow和pser_com两个对象均已创建
    if( pMainWnd!=NULL)
    if( pMainWnd->pSer_Com!=NULL)
    //然后即可用调用mainwindow下pserCOM对象的函数发送数据
    //                 for(int i =0;i<7;i++)
    //                     qDebug("%d",(uchar)SendData[i]);
    pMainWnd->pSer_Com->SendData(SendData,10);
    qDebug()<<"send modData";
}
Exemple #2
0
/*************************************************************************************************
 *
 *         函数名称: 
 *
 *         函数功能: 
 *
 *         入口参数: 
 *
 *         出口参数: 无
 *
 *             说明:
 *
 *************************************************************************************************/
void VFDStop(UINT16 rev_fwd)
{
    UINT8   i;
    UINT8   buff[20];
    UINT16  tmp_crc;
    
    Wait(400000);  //2008-08-24 
    
    buff[0] = 0x01;
    buff[1] = 0x06;  //写入单笔数据
    buff[2] = 0x20;  //地址
    buff[3] = 0x00;
    
    buff[4] = 0x00;
    if (rev_fwd == FWD_STOP)
    {   
        buff[5] = 0x11;
    }
    else if (rev_fwd == REV_STOP)
    {
        buff[5] = 0x21;
    
    }
    
    tmp_crc = CRCCheck(buff, 6);
    
    buff[6] = tmp_crc & 0xFF;   //低位在先
    buff[7] = tmp_crc >> 8;
    
    //ENA_RS485_OUT();  
    for (i = 0; i < 8; i++)
    {
        UARTSendByte(TRANSD_CHNNL, buff[i]);
        Wait(30);
    
    }  
    //Wait(600000); 
    //DIS_RS485_OUT();  
   
  
} 
int8_t SendData(void)
{
  uint8_t OW_Status = OW_ERROR;
  
  OW_Status = OW_Send(	CommandToSend.Reset,
                        CommandToSend.DataToSend,
                        CommandToSend.NumByteToSend 
                        +CommandToSend.NumByteForRead,
                        CommandToSend.DataForRead,
                        CommandToSend.NumByteForRead,
                        CommandToSend.ReadStartByte);
  CheckOwStatus(OW_Status);

  if( OW_Status != OW_OK )
    return OW_Status;

  OW_Status = CRCCheck();

  if(CommandToSend.OutputOption == NO_SILENT)
    PrintReadData();
  
  return OW_Status;
}
Exemple #4
0
bool Widget::DataCrcCheck(char *DataBuff, ulong m_ulen)
{
    if(DataBuff==NULL||m_ulen<=2)
        return false;
    uint m_CrcLow,m_CrcHig;
    ulong m_uCrcValue=0;
    m_uCrcValue = CRCCheck(DataBuff,m_ulen - 2);
    m_CrcHig=(m_uCrcValue)>>8&0xff;
    m_CrcLow=m_uCrcValue&0xff;
    //qDebug()<<m_CrcHig<<m_CrcLow<<"CRChL";
    //判断CRC是否正确
    if( m_CrcLow==(uchar)DataBuff[m_ulen - 1]&&m_CrcHig == (uchar)DataBuff[m_ulen - 2] )
    {
        qDebug()<< "CRC ok!";
        return true;
    }
    else
    {
        qDebug()<<"CRC error";
        return false;
    }
    return false;
}
QString DataProtocol::generatePackage()
{
    QString _package = "";
    unsigned short _crc;
    QString _crcqstring;

    if (!this->QN.operator == (""))
    {
        _package.append ("QN="+this->QN+";");
    }
    if (!this->PNUM.operator == (""))
    {
        _package.append ("PNUM="+this->PNUM+";");
    }
    if (!this->PNO.operator == (""))
    {
        _package.append ("PNO="+this->PNO+";");
    }
    if (!this->CN.operator == (""))
    {
        _package.append ("CN="+this->CN+";");
    }
    if (!this->PW.operator == (""))
    {
        _package.append ("PW="+this->PW+";");
    }
    if (!this->MN.operator == (""))
    {
        _package.append ("MN="+this->MN+";");
    }
    if (!this->ST.operator == (""))
    {
        _package.append ("ST="+this->ST+";");
    }

    this->CP = CPOriginal.generateCommandParameter ();

    _package.append ("CP=&&"+this->CP+"&&");

    if (_package.operator == ("&&&&"))
    {
        return "ERROR";
    }

    this->Length = QString::number (_package.length ());
    if(this->Length.size()<4)
    {
        this->Length = QString(4-this->Length.size(), '0')+this->Length;
    }

    _crc = CRCCheck ((unsigned char*)(_package.toAscii ().data ()), (short)_package.length ());

    _crcqstring = QString::number(_crc , 16);
    if(_crcqstring.size()<4)
    {
        _crcqstring = QString(4-_crcqstring.size(), '0')+_crcqstring;
    }

    _package.insert(0,this->Length);
    _package.insert (0,"##");
    _package.append (_crcqstring);
    _package.append ("\r\n");

    return _package;
}
Exemple #6
0
/*************************************************************************************************
 *
 *         函数名称: 
 *
 *         函数功能: 
 *
 *         入口参数: 
 *
 *         出口参数: 无
 *
 *             说明:
 *
 *************************************************************************************************/
void VFDRunB(UINT16 rev_fwd, UINT16 rev_num)
{
    UINT8    i;
    UINT8   buff[20];
    UINT16  tmp_crc;
    
    
    //DelayS(2);
    ///Wait(500000);
    Wait(500000);  
    //ENA_RS485_OUT();  
    //写入频率
	buff[0] = 0x01;
	buff[1] = 0x06;  //写入单笔数据
	
	
	buff[2] = 0x20;  //地址
	buff[3] = 1;
	    
	rev_num *= 10;
	rev_num /= 3;
	        
	buff[4] = rev_num >> 8;
	buff[5] = rev_num & 0xFF;
	    
	tmp_crc = CRCCheck(buff, 6);
	    
	buff[6] = tmp_crc & 0xFF;   //低位在先
	buff[7] = tmp_crc >> 8;
	
	//ENA_RS485_OUT();        
	for (i = 0; i < 8; i++)
	{
  	    UARTSendByte(TRANSD_CHNNL, buff[i]);
	    Wait(30);
	    
	} 
	  
	//Wait(600);    
	//DIS_RS485_OUT(); 
    Wait(500000); //2008-08-24 
    //Wait(600000);  
    
    
  	//ENA_RS485_OUT();  
    buff[0] = 0x01;
    buff[1] = 0x06;  //写入单笔数据
    buff[2] = 0x20;  //地址
    buff[3] = 0x00;  
    
    buff[4] = 0;
       
    if (rev_fwd == FWD_RUN)
    {   
        buff[5] = 0x12;
    }
    else if (rev_fwd == REV_RUN)
    {
        buff[5] = 0x22;
    
    }
    
    tmp_crc = CRCCheck(buff, 6);
    
    buff[6] = tmp_crc & 0xFF;   //低位在先
    buff[7] = tmp_crc >> 8;
    
    
    for (i = 0; i < 8; i++)
    {
        UARTSendByte(TRANSD_CHNNL, buff[i]);
        Wait(30);
    
    }   
    
    //Wait(300000); 
    //Wait(600000); 
    //DIS_RS485_OUT(); 
          
}