📄 k8110testdlg.cpp
字号:
//节点校时
void CK8110TestDlg::OnCorrectime()
{
txbuff[0] = 3;
txbuff[1] = 32;
txbuff[2] = 0;
txbuff[3] = 12;//BYTE(hr);
txbuff[4] = 12;//66
txbuff[5] = 00;//BYTE(sec);
if (CAN_Trans(atoi(strtmp), txbuff, 50) != 1)
{
MessageBox("发送失败");
}
}
//生命节点检测
void CK8110TestDlg::OnNmtEc()
{
NMT_EC_flag = ! NMT_EC_flag;
if (NMT_EC_flag)
{
SetTimer(4, 2000, NULL);
}
else
{
KillTimer(4);
}
}
//停止设备
void CK8110TestDlg::OnStopdev8110()
{
KillTimer(2);
KillTimer(3);
KillTimer(4);
NMT_EC_flag = false;
}
//读数据块
int CK8110TestDlg::data_blockread()
{
long nwrite;
if (fifo_num > 3000)
{
return 0;
}
nwrite = CAN_ReadDataNum(atoi(strtmp));
//PCI_FIFO数据量
UpdateData(true);
m_tmp_3.Format("%d", nwrite);
UpdateData(false);
if ((nwrite + fifo_num) > 3000)
{
nwrite = 3000 - fifo_num;
}
if (nwrite > 1000)
{
nwrite = 1000;
}
if (nwrite == 0)
{
return 0;
}
CAN_ReadBlockData(atoi(strtmp), nwrite, writebuff);
FIFO_write(nwrite);
return 1;
}
//信息读取
void CK8110TestDlg::FIFO_read(int nread)
{
int i;
for (i = 0; i <= nread - 1; i++)
{
readbuff[i] = FIFO[pread];
pread = pread + 1;
if (pread > 3000)
{
pread = pread - 3001;
}
}
fifo_num = fifo_num - nread;
}
//信息写入
void CK8110TestDlg::FIFO_write(long nwrite)
{
int i;
for (i = 0; i <= nwrite - 1; i++)
{
FIFO[pwrite] = writebuff[i];
pwrite = pwrite + 1;
if (pwrite > 3000)
{
pwrite = pwrite - 3001;
}
}
fifo_num = fifo_num + nwrite;
UpdateData(true);
m_tmp_2.Format("%d", pwrite);
UpdateData(false);
//Label17.Caption = CStr(pwrite)
}
void CK8110TestDlg::NMT_EC_PeriodSend()
{
int i;
txbuff[0] = 0x40;
txbuff[1] = 0xE0;
txbuff[2] = 0x0;
if (CAN_Trans(atoi(strtmp), txbuff, 50) != 1)
{
MessageBox("发送失败 ");
KillTimer(4);
}
CString l_tmp;
for (i = 0; i <= 15; i++)
{
if (ETN_lifeflag1[i] == ETN_lifeflag2[i])
{
m_ctrlList.DeleteItem(i);
m_ctrlList.InsertItem(i, "");
l_tmp.Format("%x", i);
l_tmp.MakeUpper();
m_ctrlList.SetItemText(i, 0 , "0" + l_tmp);
m_ctrlList.SetItemText(i, 1, "未在线");
}
ETN_lifeflag2[i] = ETN_lifeflag1[i];
}
}
//获取数据并分析(重点****)
int CK8110TestDlg::data_get()
{
BYTE RXDLC;
BYTE RXID[2];
BYTE RXDATA[7];
BYTE Frame_FC;
BYTE Frame_NID;
int i;
int nread;
int nid;
BOOL RX_NMT_flag;
int NMT_Status;
int EXP_Status;
CString str;
int dat;
CString ch_tmp;
CString nmt_sta, exp_sta,rx_sta;
CString fc_sta, nid_sta;
if (fifo_num < 11)
{
return 0;
}
FIFO_read(11);
RXDLC = readbuff[0] & 0xF;
RXID[0] = readbuff[1];
RXID[1] = readbuff[2];
for (i = 0; i <= RXDLC - 1; i++)
{
RXDATA[i] = readbuff[i + 3];
}
nread = RXDLC + 3;
UpdateData(true);
m_tmp_1.Format("%d", pread);
UpdateData(false);
//接收的数据
for (i = 0; i <= nread - 1; i++)
{
if (readbuff[i] < 16)
{
ch_tmp.Format("%x", readbuff[i]);
str = str + " 0" + ch_tmp;
}
else
{
ch_tmp.Format("%x", readbuff[i]);
str = str + " " + ch_tmp;
}
}
str.MakeUpper();
//功能代码和结点标识符
Frame_FC = static_cast<int>((RXID[0] & 0xF0) / (2*2*2*2));
Frame_NID = 0x2F;
Frame_NID = 0xE0;
Frame_NID = ((RXID[0] & 0xF) * (2*2*2) + static_cast<int>((RXID[1] & 0xE0) / (2*2*2*2*2)));
if (Frame_FC < 0x10)
{
ch_tmp.Format("%x", Frame_FC);
ch_tmp.MakeUpper();
fc_sta = "0" + ch_tmp;
}
else
{
ch_tmp.Format("%x", Frame_FC);
ch_tmp.MakeUpper();
fc_sta = "0" + ch_tmp;
}
if (Frame_NID < 0x10)
{
ch_tmp.Format("%x", Frame_NID);
ch_tmp.MakeUpper();
nid_sta = "0" + ch_tmp;
}
else
{
ch_tmp.Format("%x", Frame_NID);
ch_tmp.MakeUpper();
nid_sta = "0" + ch_tmp;
}
m_ctrlList2.InsertItem(0, "");
m_ctrlList2.SetItemText(0, 0, str);
m_ctrlList2.SetItemText(0, 1, fc_sta);
m_ctrlList2.SetItemText(0, 2, nid_sta);
//如果显示的行数大于50的话,去除多余数据
if (m_ctrlList.GetItemCount() == 50)
{
m_ctrlList.DeleteAllItems();
}
//分析设备运行的状态
nid = Frame_NID;
if (nid > 15)
{
return 0;
}
ch_tmp.Format("%x", nid);
str = " 0" + ch_tmp;
if (Frame_FC == 0xE)
{
RX_NMT_flag = static_cast<int>((RXDATA[0] & 0x80) / (2*2*2*2*2*2*2));
NMT_Status = RXDATA[0] & 0x7F;
EXP_Status = RXDATA[1];
ETN_lifeflag1[nid] = ! ETN_lifeflag2[nid];
if (NMT_Status == 3)
{
ETN_flag[nid] = ! RX_NMT_flag;
}
if (RX_NMT_flag != ETN_flag[nid])
{
ETN_flag[nid] = RX_NMT_flag;
rx_sta = "良好";
if (NMT_Status == 5)
{
nmt_sta = "运行";
}
if (NMT_Status == 4)
{
nmt_sta = "停止";
}
if (NMT_Status == 127)
{
nmt_sta = "预运行";
}
if (NMT_Status == 3)
{
nmt_sta = "复位";
}
if (EXP_Status == 0)
{
exp_sta = "预初始化";
}
if (EXP_Status == 1)
{
exp_sta = "初始化";
}
if (EXP_Status == 2)
{
exp_sta = "等待";
}
if (EXP_Status == 4)
{
exp_sta = "停止";
}
if (EXP_Status == 5)
{
exp_sta = "运行";
}
if (EXP_Status == 6)
{
exp_sta = "暂停";
}
if (EXP_Status == 14)
{
exp_sta = "请求结束";
}
if (EXP_Status == 15)
{
exp_sta = "结束";
}
}
else
{
rx_sta = "错误";
}
m_ctrlList.SetItemText(nid, 1, rx_sta);
m_ctrlList.SetItemText(nid, 2, nmt_sta);
m_ctrlList.SetItemText(nid, 3, exp_sta);
}
if (Frame_FC == 0x4)
{
str = "";
for (i = 1; i <= RXDLC - 1; i++)
{
if (RXDATA[i] < 0x10)
{
ch_tmp.Format("%x", RXDATA[i]);
str = str + " 0" + ch_tmp;
}
else
{
ch_tmp.Format("%x", RXDATA[i]);
str = str + " " + ch_tmp;
}
}
}
else
{
if (Frame_FC == 0x6)
{
if (RXDATA[0] == 0x1)
{
str = "";
for (i = 1; i <= 2; i++)
{
if (RXDATA[i] < 0x10)
{
ch_tmp.Format("%x", RXDATA[i]);
str = str + " 0" + ch_tmp;
}
else
{
ch_tmp.Format("%x", RXDATA[i]);
str = str + " " + ch_tmp;
}
}
dat = RXDATA[3] + (RXDATA[4] & 0x7F) * 256;
if ((RXDATA[4] & 0x80) == 0)
{
ch_tmp.Format("%d", dat);
str = str + " " + ch_tmp;
}
else
{
ch_tmp.Format("%d", dat);
str = str + " -" + ch_tmp;
}
}
}
else
{
if (Frame_FC == 0xC)
{
if (RXDATA[0] == 0x2F)
{
txbuff[0] = 0x1;
txbuff[1] = (0xB0 | static_cast<int>((Frame_NID & 0x78) / (2*2*2)));
txbuff[2] = ((Frame_NID & 0x7) * (2*2*2*2*2));
txbuff[3] = 0x2F;
CAN_Trans(atoi(strtmp), txbuff, 50);
}
}
}
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -