目录
电动汽车充电协议概括
工具设计及与实现
工具运行示例
生成.exe文件
电动汽车充电协议概括
电动汽车电动车非车载传导式充电机(以下简称充电机),电池管理系统(Battery Management System,以下简称BMS)之间基于控制局域网(CAN)之间的通信协议。
在充电过程中,充电机与BMS监测电压、电流和温度等参数,同时BMS根据充电控制算法管理整个充电过程;充电机与BMS之间的CAN通信网络应由充电机和BMS两个节点组成;国标中规定数据传输采用地位先发送的格式。正的电流值代表放电,负的电流值代表充电;物理层应符合ISO 11898-1:2003、SAE J1939-11:2006中之规定;充电机与BMS的通信应使用独立于动力总成控制系统之外的CAN接口。充电机与BMS之间的通信速率可选用50kbit/s、125kbit/s、250kbit/s,推荐采用250kbit/s。
整个充电过程包括四个阶段:充电握手阶段、充电参数配置阶段、充电阶段和充电结束阶段。在各个阶段,充电机和BMS如果在规定的时间内没有收到对方的报文或没有收到正确的报文,即判定为超时,超时时间除特殊规定外,均为5s,当出现超时后,BMS或充电机发送错误报文,并进入错误处理状态。
具体电动汽车充电协议概括请跳转:https://zhuanlan.zhihu.com/p/374943265
工具设计及与实现
UI界面设计
部分代码实现
串口相关代码
//*************************************************串口************************************************
//扫描串口按钮回调函数
void USBCAN::scanport()
{
QStringList newPortStringList;
newPortStringList.clear();
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
newPortStringList += info.portName();
if(newPortStringList.size() != portStringLine.size())
{
portStringLine = newPortStringList;
ui->PortBox->clear();
ui->PortBox->addItems(portStringLine);
}
}
//打开串口并验证
bool USBCAN::openCom(QSerialPort *myCom, QString &myportName, qint32 baudRate)
{
myCom->setPortName(myportName);
//验证串口是否打开
if(! myCom->open(QIODevice::ReadWrite))
{
myCom->close();
return false;
}
//设置波特率
myCom->setBaudRate(baudRate);
//设置数据流控制
myCom->setFlowControl(QSerialPort::NoFlowControl);
return true;
}
//打开端口控件
void USBCAN::on_OpenPort_Button_clicked()
{
//串口按钮显示 “打开串口”
if(ui->OpenPort_Button->text()==tr("打开串口"))
{
//先打开串口
QString portName = ui->PortBox->currentText();
QString baudRate = ui->BaudRateBox->currentText();
//串口打开失败
if(!openCom(Port_Box, portName, ui->BaudRateBox->currentText().toInt()))
{
ui->remindBrowser->append("串口打开失败");
if(Port_Box->isOpen())
{
Port_Box->close();
}
return;
}
//串口打开成功
ui->BaudRateBox->setCurrentText(baudRate);
ui->OpenPort_Button->setText(tr("关闭串口"));
ui->PortBox->setEnabled(false);
ui->BaudRateBox->setEnabled(false);
}
//串口按钮显示 “关闭串口”
else