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"; }
/************************************************************************************************* * * 函数名称: * * 函数功能: * * 入口参数: * * 出口参数: 无 * * 说明: * *************************************************************************************************/ 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; }
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; }
/************************************************************************************************* * * 函数名称: * * 函数功能: * * 入口参数: * * 出口参数: 无 * * 说明: * *************************************************************************************************/ 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(); }