点击(此处)折叠或打开
-
// testDlg.cpp : implementation file
-
//
-
-
#include "stdafx.h"
-
#include "afxmt.h"
-
#include "test.h"
-
#include "testDlg.h"
-
#include "ControlCAN.h"
-
#include "crc32.h"
-
#include "windows.h"
-
-
-
#define mhtonl(x) ( (x&0x000000ff)<<24 ) |( (x&0x0000ff00)<<8 ) | ( ( x&0x00ff0000)>>8 ) | ( (x&0xff000000)>>24 )
-
-
#define AI_BD_BIG 0x051eU //大信号对应的理论输出值4.8ma
-
#define AI_BD_SMALL 0x6147U //小信号对应的理论输出值19.2ma
-
-
CEvent CTestDlg::m_evtSearch(FALSE,FALSE);
-
CEvent CTestDlg::m_evtSearchCancel(FALSE,FALSE);
-
CEvent CTestDlg::m_evtBD(FALSE,FALSE);
-
CEvent CTestDlg::m_evtCancelBD(FALSE,FALSE);
-
CEvent CTestDlg::m_evtReadKB(FALSE,FALSE);
-
CEvent CTestDlg::m_evtWriteKB(FALSE,FALSE);
-
-
CEvent CTestDlg::m_evtUpdateDisplay(FALSE,FALSE);
-
-
#ifdef _DEBUG
-
#define new DEBUG_NEW
-
#undef THIS_FILE
-
static char THIS_FILE[] = __FILE__;
-
#endif
-
-
//数据类型定义
-
typedef unsigned int uint32;
-
typedef unsigned char uint8;
-
typedef int int32;
-
typedef char int8;
-
void OnRegWrite();
-
void OnRegRead();
-
void delayus(long int microsecond);//以微秒延时函数
-
-
//类中的静态成员变量的定义,必须加
-
int CTestDlg::m_cannum;
-
DWORD CTestDlg::m_devind;
-
int CTestDlg::m_devtype;
-
int CTestDlg::m_connect;
-
-
S_NODE g_node;
-
-
CEvent CTestDlg::m_evtUpdate(FALSE,FALSE);
-
//DWORD WINAPI CanSendBinFile(LPVOID lpparameter);
-
-
/////////////////////////////////////////////////////////////////////////////
-
// CAboutDlg dialog used for App About
-
-
class CAboutDlg : public CDialog
-
{
-
public:
-
CAboutDlg();
-
-
// Dialog Data
-
//{{AFX_DATA(CAboutDlg)
-
enum { IDD = IDD_ABOUTBOX };
-
//}}AFX_DATA
-
-
// ClassWizard generated virtual function overrides
-
//{{AFX_VIRTUAL(CAboutDlg)
-
protected:
-
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
-
//}}AFX_VIRTUAL
-
-
// Implementation
-
protected:
-
//{{AFX_MSG(CAboutDlg)
-
//}}AFX_MSG
-
DECLARE_MESSAGE_MAP()
-
};
-
-
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
-
{
-
//{{AFX_DATA_INIT(CAboutDlg)
-
//}}AFX_DATA_INIT
-
}
-
-
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
-
{
-
CDialog::DoDataExchange(pDX);
-
//{{AFX_DATA_MAP(CAboutDlg)
-
//}}AFX_DATA_MAP
-
}
-
-
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
-
//{{AFX_MSG_MAP(CAboutDlg)
-
// No message handlers
-
//}}AFX_MSG_MAP
-
END_MESSAGE_MAP()
-
-
/////////////////////////////////////////////////////////////////////////////
-
// CTestDlg dialog
-
-
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
-
: CDialog(CTestDlg::IDD, pParent)
-
{
-
//{{AFX_DATA_INIT(CTestDlg)
-
m_EditSendData = _T("");
-
m_EditSendFrmID = _T("");
-
m_EditCode = _T("");
-
m_EditMask = _T("");
-
m_EditTiming0 = _T("");
-
m_EditTiming1 = _T("");
-
//m_show = 0;
-
//}}AFX_DATA_INIT
-
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
-
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
-
m_connect=0;
-
m_cannum=0;
-
m_devtype=VCI_USBCAN1;
-
}
-
-
void CTestDlg::DoDataExchange(CDataExchange* pDX)
-
{
-
CDialog::DoDataExchange(pDX);
-
//{{AFX_DATA_MAP(CTestDlg)
-
DDX_Control(pDX, IDC_BUTTON_IOBD, m_ButtonIOBD);
-
DDX_Control(pDX, IDC_STATIC_NODEID, m_StaticNodeID);
-
DDX_Control(pDX, IDC_BUTTON_SEARCH, m_ButtonSearch);
-
DDX_Control(pDX, IDC_LIST_BD, m_Grid);
-
DDX_Control(pDX, IDC_COMBO_CANBAUD, m_CanBaud);
-
DDX_Control(pDX, IDC_COMBO_MODE, m_ComboMode);
-
DDX_Control(pDX, IDC_COMBO_FILTERTYPE, m_ComboFilterType);
-
DDX_Control(pDX, IDC_COMBO_CANIND, m_ComboCANInd);
-
DDX_Control(pDX, IDC_COMBO_INDEX, m_ComboIndex);
-
DDX_Control(pDX, IDC_LIST_INFO, m_ListInfo);
-
DDX_Control(pDX, IDC_COMBO_SENDTYPE, m_ComboSendType);
-
DDX_Control(pDX, IDC_COMBO_SENDFRAMETYPE, m_ComboSendFrmType);
-
DDX_Control(pDX, IDC_COMBO_SENDFRAMEFORMAT, m_ComboSendFrmFmt);
-
DDX_Text(pDX, IDC_EDIT_SENDDATA, m_EditSendData);
-
DDX_Text(pDX, IDC_EDIT_SENDFRAMEID, m_EditSendFrmID);
-
DDX_Text(pDX, IDC_EDIT_CODE, m_EditCode);
-
DDX_Text(pDX, IDC_EDIT_MASK, m_EditMask);
-
DDX_Text(pDX, IDC_EDIT_TIMING0, m_EditTiming0);
-
DDX_Text(pDX, IDC_EDIT_TIMING1, m_EditTiming1);
-
//}}AFX_DATA_MAP
-
}
-
-
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
-
//{{AFX_MSG_MAP(CTestDlg)
-
ON_WM_SYSCOMMAND()
-
ON_WM_PAINT()
-
ON_WM_QUERYDRAGICON()
-
ON_BN_CLICKED(IDC_BUTTON_CONNECT, OnButtonConnect)
-
ON_BN_CLICKED(IDC_BUTTON_STARTCAN, OnButtonStartcan)
-
ON_BN_CLICKED(IDC_BUTTON_RESETCAN, OnButtonResetcan)
-
ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
-
ON_COMMAND(ID_MENU_REFRESH, OnMenuRefresh)
-
ON_CBN_EDITCHANGE(IDC_COMBO_CANBAUD, OnEditchangeComboCanbaud)
-
ON_BN_CLICKED(IDC_BUTTON_OPENFILE, OnButtonOpenfile)
-
ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)
-
ON_MESSAGE(ON_WM_SEND,OnSendFile)
-
ON_BN_CLICKED(IDC_BUTTON_SEARCH, OnButtonSearch)
-
ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
-
ON_BN_CLICKED(IDC_BUTTON_CALC, OnButtonCalc)
-
ON_BN_CLICKED(IDC_BUTTON_BDBIG, OnButtonBdbig)
-
ON_BN_CLICKED(IDC_BUTTON_BDSMALL, OnButtonBdsmall)
-
ON_BN_CLICKED(IDC_BUTTON_IOBD, OnButtonIobd)
-
ON_NOTIFY(NM_CLICK, IDC_LIST_BD, OnClickListBd)
-
//}}AFX_MSG_MAP
-
END_MESSAGE_MAP()
-
-
/////////////////////////////////////////////////////////////////////////////
-
// CTestDlg message handlers
-
-
BOOL CTestDlg::OnInitDialog()
-
{
-
CDialog::OnInitDialog();
-
-
// Add "About..." menu item to system menu.
-
-
// IDM_ABOUTBOX must be in the system command range.
-
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
-
ASSERT(IDM_ABOUTBOX < 0xF000);
-
-
CMenu* pSysMenu = GetSystemMenu(FALSE);
-
if (pSysMenu != NULL)
-
{
-
CString strAboutMenu;
-
strAboutMenu.LoadString(IDS_ABOUTBOX);
-
if (!strAboutMenu.IsEmpty())
-
{
-
pSysMenu->AppendMenu(MF_SEPARATOR);
-
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
-
}
-
}
-
-
// Set the icon for this dialog. The framework does this automatically
-
// when the application's main window is not a dialog
-
SetIcon(m_hIcon, TRUE); // Set big icon
-
SetIcon(m_hIcon, FALSE); // Set small icon
-
-
// TODO: Add extra initialization here
-
m_ComboSendType.SetCurSel(2);
-
m_ComboSendFrmType.SetCurSel(1);
-
m_ComboSendFrmFmt.SetCurSel(0);
-
-
m_EditSendFrmID="00000080";
-
m_EditSendData="01 02 03 04 05 06 07 08 ";
-
-
DWORD dwid;
-
m_hSendThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SendThreadProc,this,0,&dwid);
-
-
HANDLE hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)DisplayThreadProc,this,0,&dwid);
-
-
CString str;
-
-
for(int i=0;i<8;i++)
-
{
-
str.Format("%d",i);
-
m_ComboIndex.AddString(str);
-
}
-
for(i=0;i<1;i++)
-
{
-
str.Format("%d",i);
-
m_ComboCANInd.AddString(str);
-
}
-
-
m_EditCode="00000000";
-
m_EditMask="ffffffff";
-
m_EditTiming0="01";//can baud set timer0
-
m_EditTiming1="1c";//can baud set timer1
-
m_ComboIndex.SetCurSel(0);
-
m_ComboCANInd.SetCurSel(0);
-
m_ComboFilterType.SetCurSel(0);
-
m_ComboMode.SetCurSel(0);
-
-
//添加combobox的每条内容
-
((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->InsertString(0,"请选择");
-
((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->InsertString(1,"50");
-
((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->InsertString(2,"100");
-
((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->InsertString(3,"125");
-
((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->InsertString(4,"250");
-
((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->InsertString(5,"500");
-
((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->InsertString(6,"800");
-
((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->InsertString(7,"1000");
-
//设置combobox当前显示的条目
-
((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->SetCurSel(3);
-
-
InitGrid();//初始化控制列表框
-
UpdateData(false);
-
InitializeCriticalSection(&m_Section);
-
-
return TRUE; // return TRUE unless you set the focus to a control
-
}
-
UINT CTestDlg::SendThreadProc(LPVOID lpRarameter)
-
{
-
CTestDlg *dlg=(CTestDlg *)lpRarameter;
-
int ret;
-
while (TRUE)
-
{
-
ret=WaitForSingleObject(CTestDlg::m_evtUpdate.m_hObject,INFINITE);
-
if (ret==WAIT_OBJECT_0)
-
{
-
-
dlg->OnFileRead();
-
}
-
Sleep(10);
-
-
}
-
}
-
-
void CTestDlg::OnSendFile(WPARAM wParam,LPARAM lPram)
-
{
-
OnFileRead();
-
}
-
DWORD WINAPI CanSendBinFile(LPVOID lpparameter)
-
{
-
return 0;
-
}
-
-
void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
-
{
-
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
-
{
-
CAboutDlg dlgAbout;
-
dlgAbout.DoModal();
-
}
-
else
-
{
-
CDialog::OnSysCommand(nID, lParam);
-
}
-
}
-
-
// If you add a minimize button to your dialog, you will need the code below
-
// to draw the icon. For MFC applications using the document/view model,
-
// this is automatically done for you by the framework.
-
-
void CTestDlg::OnPaint()
-
{
-
if (IsIconic())
-
{
-
CPaintDC dc(this); // device context for painting
-
-
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
-
-
// Center icon in client rectangle
-
int cxIcon = GetSystemMetrics(SM_CXICON);
-
int cyIcon = GetSystemMetrics(SM_CYICON);
-
CRect rect;
-
GetClientRect(&rect);
-
int x = (rect.Width() - cxIcon + 1) / 2;
-
int y = (rect.Height() - cyIcon + 1) / 2;
-
-
// Draw the icon
-
dc.DrawIcon(x, y, m_hIcon);
-
}
-
else
-
{
-
CDialog::OnPaint();
-
}
-
}
-
-
// The system calls this to obtain the cursor to display while the user drags
-
// the minimized window.
-
HCURSOR CTestDlg::OnQueryDragIcon()
-
{
-
return (HCURSOR) m_hIcon;
-
}
-
-
void CTestDlg::OnCancel()
-
{
-
// TODO: Add extra cleanup here
-
int connect=m_connect;
-
m_connect=0;
-
if(connect)
-
{
-
Sleep(500);
-
VCI_CloseDevice(m_devtype,m_devind);
-
}
-
DeleteCriticalSection(&m_Section);
-
CDialog::OnCancel();
-
}
-
-
void CTestDlg::OnOK()
-
{
-
// TODO: Add extra validation here
-
int connect=m_connect;
-
m_connect=0;
-
Sleep(100);
-
if(connect)
-
VCI_CloseDevice(m_devtype,m_devind);
-
-
DeleteCriticalSection(&m_Section);
-
CDialog::OnOK();
-
}
-
-
void CTestDlg::OnButtonConnect()
-
{
-
// TODO: Add your control notification handler code here
-
if(m_connect==1)
-
{
-
m_connect=0;
-
Sleep(500);
-
GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowText("连接");
-
VCI_CloseDevice(m_devtype,m_devind);
-
return;
-
}
-
-
VCI_INIT_CONFIG init_config;
-
int index,filtertype,mode,cannum;
-
CString strcode,strmask,strtiming0,strtiming1,strtmp;
-
char szcode[20],szmask[20],sztiming0[20],sztiming1[20];
-
unsigned char sztmp[4];
-
DWORD code,mask,timing0,timing1;
-
-
UpdateData(true);
-
index=m_ComboIndex.GetCurSel();
-
filtertype=m_ComboFilterType.GetCurSel();
-
mode=m_ComboMode.GetCurSel();
-
cannum=m_ComboCANInd.GetCurSel();
-
strcode=m_EditCode;
-
strmask=m_EditMask;
-
-
-
CString can_baud;
-
GetDlgItemText(IDC_COMBO_CANBAUD,can_baud);
-
-
if (!strcmp(can_baud,"50"))
-
{
-
strtiming0="09";
-
strtiming1="1c";
-
}
-
if (!strcmp(can_baud,"100"))
-
{
-
strtiming0="04";
-
strtiming1="1c";
-
}
-
if(!strcmp(can_baud,"125"))
-
{
-
strtiming0="03";
-
strtiming1="1c";
-
}
-
if (!strcmp(can_baud,"250"))
-
{
-
strtiming0="01";
-
strtiming1="1c";
-
}
-
if (!strcmp(can_baud,"500"))
-
{
-
strtiming0="00";
-
strtiming1="1c";
-
}
-
if(!strcmp(can_baud,"800"))
-
{
-
strtiming0="00";
-
strtiming1="16";
-
}
-
if (!strcmp(can_baud,"1000"))
-
{
-
strtiming0="00";
-
strtiming1="14";
-
}
-
-
m_EditTiming0=strtiming0;
-
m_EditTiming1=strtiming1;
-
-
//strtiming0=m_EditTiming0;
-
//strtiming1=m_EditTiming1;
-
UpdateData(false);
-
-
strtmp=strcode;
-
strcode.Format("%08s",strtmp);
-
strtmp=strmask;
-
strmask.Format("%08s",strtmp);
-
strtmp=strtiming0;
-
strtiming0.Format("%02s",strtmp);
-
strtmp=strtiming1;
-
strtiming1.Format("%02s",strtmp);
-
-
strcpy(szcode,(LPCTSTR)strcode);
-
strcpy(szmask,(LPCTSTR)strmask);
-
strcpy(sztiming0,(LPCTSTR)strtiming0);
-
strcpy(sztiming1,(LPCTSTR)strtiming1);
-
-
if(strtodata((unsigned char*)szcode,sztmp,4,0)!=0)
-
{
-
MessageBox("验收码数据格式不对!","警告",MB_OK|MB_ICONQUESTION);
-
return;
-
}
-
code=(((DWORD)sztmp[0])<<24)+(((DWORD)sztmp[1])<<16)+(((DWORD)sztmp[2])<<8)+
-
((DWORD)sztmp[3]);
-
-
if(strtodata((unsigned char*)szmask,sztmp,4,0)!=0)
-
{
-
MessageBox("屏蔽码数据格式不对!","警告",MB_OK|MB_ICONQUESTION);
-
return;
-
}
-
mask=(((DWORD)sztmp[0])<<24)+(((DWORD)sztmp[1])<<16)+(((DWORD)sztmp[2])<<8)+
-
((DWORD)sztmp[3]);
-
-
if(strtodata((unsigned char*)sztiming0,sztmp,1,0)!=0)
-
{
-
MessageBox("定时器0数据格式不对!","警告",MB_OK|MB_ICONQUESTION);
-
return;
-
}
-
timing0=((DWORD)sztmp[0]);
-
-
if(strtodata((unsigned char*)sztiming1,sztmp,1,0)!=0)
-
{
-
MessageBox("定时器1数据格式不对!","警告",MB_OK|MB_ICONQUESTION);
-
return;
-
}
-
timing1=((DWORD)sztmp[0]);
-
-
init_config.AccCode=code;
-
init_config.AccMask=mask;
-
init_config.Filter=filtertype;
-
init_config.Mode=mode;
-
init_config.Timing0=(BYTE)timing0;
-
init_config.Timing1=(BYTE)timing1;
-
-
if(VCI_OpenDevice(m_devtype,index,0)!=STATUS_OK)
-
{
-
MessageBox("打开设备失败!","警告",MB_OK|MB_ICONQUESTION);
-
return;
-
}
-
if(VCI_InitCAN(m_devtype,index,cannum,&init_config)!=STATUS_OK)
-
{
-
MessageBox("初始化CAN失败!","警告",MB_OK|MB_ICONQUESTION);
-
VCI_CloseDevice(m_devtype,index);
-
return;
-
}
-
m_connect=1;
-
m_devind=index;
-
m_cannum=cannum;
-
GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowText("断开");
-
AfxBeginThread(ReceiveThread,this);
-
}
-
-
void CTestDlg::OnButtonStartcan()
-
{
-
// TODO: Add your control notification handler code here
-
if(m_connect==0)
-
return;
-
if(VCI_StartCAN(m_devtype,m_devind,m_cannum)==1)
-
{
-
ShowInfo("启动成功",0);
-
}
-
else
-
{
-
CString str;
-
str="启动失败";
-
ShowInfo(str,2);
-
}
-
-
}
-
-
void CTestDlg::OnButtonResetcan()
-
{
-
// TODO: Add your control notification handler code here
-
if(m_connect==0)
-
return;
-
if(VCI_ResetCAN(m_devtype,m_devind,m_cannum)==1)
-
{
-
//GetDlgItem(IDC_BUTTON_STARTCAN)->EnableWindow(true);
-
ShowInfo("复位成功",0);
-
}
-
else
-
{
-
CString str;
-
str="复位失败";
-
ShowInfo(str,2);
-
}
-
-
}
-
-
void CTestDlg::OnButtonSend()
-
{
-
// TODO: Add your control notification handler code here
-
if(m_connect==0)
-
return;
-
VCI_CAN_OBJ frameinfo;
-
char szFrameID[9];
-
unsigned char FrameID[4]={0,0,0,0};
-
memset(szFrameID,'0',9);
-
unsigned char Data[8];
-
char szData[25];
-
BYTE datalen=0;
-
-
UpdateData(true);
-
if(m_EditSendFrmID.GetLength()==0||
-
(m_EditSendData.GetLength()==0&&m_ComboSendFrmType.GetCurSel()==0))
-
{
-
ShowInfo("请输入数据",1);
-
return;
-
}
-
-
if(m_EditSendFrmID.GetLength()>8)
-
{
-
ShowInfo("ID值超过范围",1);
-
return;
-
}
-
if(m_EditSendData.GetLength()>24)
-
{
-
ShowInfo("数据长度超过范围,最大为8个字节",1);
-
return;
-
}
-
if(m_ComboSendFrmType.GetCurSel()==0)
-
{
-
if(m_EditSendData.GetLength()%3==1)
-
{
-
ShowInfo("数据格式不对,请重新输入",1);
-
return;
-
}
-
}
-
memcpy(&szFrameID[8-m_EditSendFrmID.GetLength()],(LPCTSTR)m_EditSendFrmID,m_EditSendFrmID.GetLength());
-
strtodata((unsigned char*)szFrameID,FrameID,4,0);
-
-
datalen=(m_EditSendData.GetLength()+1)/3;
-
strcpy(szData,(LPCTSTR)m_EditSendData);
-
strtodata((unsigned char*)szData,Data,datalen,1);
-
-
-
UpdateData(false);
-
-
frameinfo.DataLen=datalen;
-
memcpy(&frameinfo.Data,Data,datalen);
-
-
frameinfo.RemoteFlag=m_ComboSendFrmFmt.GetCurSel();
-
frameinfo.ExternFlag=m_ComboSendFrmType.GetCurSel();
-
if(frameinfo.ExternFlag==1)
-
{
-
frameinfo.ID=((DWORD)FrameID[0]<<24)+((DWORD)FrameID[1]<<16)+((DWORD)FrameID[2]<<8)+
-
((DWORD)FrameID[3]);
-
}
-
else
-
{
-
frameinfo.ID=((DWORD)FrameID[2]<<8)+((DWORD)FrameID[3]);
-
}
-
frameinfo.SendType=m_ComboSendType.GetCurSel();
-
-
if(VCI_Transmit(m_devtype,m_devind,m_cannum,&frameinfo,1)==1)
-
{
-
ShowInfo("写入成功",0);
-
}
-
else
-
{
-
ShowInfo("写入失败",2);
-
}
-
-
}
-
-
void CTestDlg::ShowInfo(CString str, int code)
-
{
-
m_ListInfo.InsertString(m_ListInfo.GetCount(),str);
-
m_ListInfo.SetCurSel(m_ListInfo.GetCount()-1);
-
}
-
-
//-----------------------------------------------------
-
//参数:
-
//str:要转换的字符串
-
//data:储存转换过来的数据串
-
//len:数据长度
-
//函数功能:字符串转换为数据串
-
//-----------------------------------------------------
-
int CTestDlg::strtodata(unsigned char *str, unsigned char *data,int len,int flag)
-
{
-
unsigned char cTmp=0;
-
int i=0;
-
for(int j=0;j<len;j++)
-
{
-
if(chartoint(str[i++],&cTmp))
-
return 1;
-
data[j]=cTmp;
-
if(chartoint(str[i++],&cTmp))
-
return 1;
-
data[j]=(data[j]<<4)+cTmp;
-
if(flag==1)
-
i++;
-
}
-
return 0;
-
}
-
-
//----------------------------------------------]-------
-
//参数:
-
//chr:要转换的字符
-
//cint:储存转换过来的数据
-
//函数功能:字符转换为数据
-
//-----------------------------------------------------
-
int CTestDlg::chartoint(unsigned char chr, unsigned char *cint)
-
{
-
unsigned char cTmp;
-
cTmp=chr-48;
-
if(cTmp>=0&&cTmp<=9)
-
{
-
*cint=cTmp;
-
return 0;
-
}
-
cTmp=chr-65;
-
if(cTmp>=0&&cTmp<=5)
-
{
-
*cint=(cTmp+10);
-
return 0;
-
}
-
cTmp=chr-97;
-
if(cTmp>=0&&cTmp<=5)
-
{
-
*cint=(cTmp+10);
-
return 0;
-
}
-
return 1;
-
}
-
-
UINT CTestDlg::ReceiveThread(void *param)
-
{
-
CTestDlg *dlg=(CTestDlg*)param;
-
CListBox *box=(CListBox *)dlg->GetDlgItem(IDC_LIST_INFO);
-
VCI_CAN_OBJ frameinfo[50];
-
VCI_ERR_INFO errinfo;
-
int len=1;
-
int i=0;
-
CString str,tmpstr;
-
while(1)
-
{
-
Sleep(1);
-
if(dlg->m_connect==0)
-
break;
-
len=VCI_Receive(dlg->m_devtype,dlg->m_devind,dlg->m_cannum,frameinfo,50,200);
-
if(len<=0)
-
{
-
//注意:如果没有读到数据则必须调用此函数来读取出当前的错误码,
-
//千万不能省略这一步(即使你可能不想知道错误码是什么)
-
VCI_ReadErrInfo(dlg->m_devtype,dlg->m_devind,dlg->m_cannum,&errinfo);
-
}
-
else
-
{
-
for(i=0;i<len;i++)
-
{
-
str="接收: ";
-
if(frameinfo[i].TimeFlag==0)
-
tmpstr=":无 ";
-
else
-
tmpstr.Format("时间标识:%08x ",frameinfo[i].TimeStamp);
-
str+=tmpstr;
-
tmpstr.Format("ID:%08x ",frameinfo[i].ID);
-
str+=tmpstr;
-
str+="-";
-
if(frameinfo[i].RemoteFlag==0)
-
tmpstr="数据帧 ";
-
else
-
tmpstr="远程帧 ";
-
str+=tmpstr;
-
str+="-";
-
if(frameinfo[i].ExternFlag==0)
-
tmpstr="标准帧 ";
-
else
-
tmpstr="扩展帧 ";
-
str+=tmpstr;
-
-
if(frameinfo[i].RemoteFlag==0)//data frame
-
{
-
str="数据:";
-
if(frameinfo[i].DataLen>8)
-
frameinfo[i].DataLen=8;
-
for(int j=0;j<frameinfo[i].DataLen;j++)
-
{
-
tmpstr.Format("%02x ",frameinfo[i].Data[j]);
-
str+=tmpstr;
-
}
-
if ( (frameinfo[i].ID>0x700) && (frameinfo[i].ID<=0x77f))//HEARTBEAT
-
{
-
g_node.id=frameinfo[i].ID-0x700;
-
}
-
if ( (frameinfo[i].ID>0x580) && (frameinfo[i].ID<=0x5ff) )//SDO
-
{
-
BYTE ch;
-
BYTE type;
-
BYTE cmd;
-
WORD index;
-
BYTE subindex;
-
DWORD tmp;
-
//tmp=MEM_DW(frameinfo[i].Data);
-
//cmd=DW_H4(tmp);
-
cmd =MEM_B(frameinfo[i].Data);
-
index =MEM_W(frameinfo[i].Data+1);
-
subindex=MEM_B(frameinfo[i].Data+3);
-
ch=subindex>>4;
-
type=subindex&0x0f;
-
-
if (cmd==CMD_RD)
-
{
-
if(index==INDEX_RDAI)
-
{
-
g_node.wAIValue[ch][type]=MEM_W(frameinfo[i].Data+4);
-
//AfxMessageBox("ff");
-
m_evtUpdateDisplay.SetEvent();
-
}
-
if (index==INDEX_K)
-
{
-
g_node.readkb[ch].fk=MEM_FLOAT(frameinfo[i].Data+4);
-
m_evtUpdateDisplay.SetEvent();
-
}
-
if (INDEX_K==INDEX_B)
-
{
-
g_node.readkb[ch].fb=MEM_FLOAT(frameinfo[i].Data+4);
-
m_evtUpdateDisplay.SetEvent();
-
}
-
}
-
-
}
-
-
-
if (frameinfo[i].ID==0xff)
-
if (frameinfo[i].Data[0]==0x88 && frameinfo[i].Data[1]==0x88 && frameinfo[i].Data[2]==0x88&&frameinfo[i].Data[3]==0x88)
-
{
-
str+="下载成功!";
-
}
-
else if (frameinfo[i].Data[0]==0x11 && frameinfo[i].Data[1]==0x33 && frameinfo[i].Data[2]==0x44&&frameinfo[i].Data[3]==0x55)
-
{
-
str+="下载失败! 丢帧";
-
}
-
else if (frameinfo[i].Data[0]==0x11 && frameinfo[i].Data[1]==0x22 && frameinfo[i].Data[2]==0x11&&frameinfo[i].Data[3]==0x23)
-
{
-
str+="下载失败! 写入比较不匹配";
-
}
-
else if (frameinfo[i].Data[0]==0xc0 && frameinfo[i].Data[1]==0xc0 && frameinfo[i].Data[2]==0xc0&&frameinfo[i].Data[3]==0xc0)
-
{
-
str+="下载失败!CRC校验错误!";
-
}
-
-
-
//EnterCriticalSection(&(dlg->m_Section));
-
//LeaveCriticalSection(&(dlg->m_Section));
-
box->InsertString(box->GetCount(),str);
-
}
-
}
-
box->SetCurSel(box->GetCount()-1);
-
}
-
}
-
return 0;
-
}
-
-
void CTestDlg::OnMenuRefresh()
-
{
-
// TODO: Add your command handler code here
-
}
-
-
void CTestDlg::OnEditchangeComboCanbaud()
-
{
-
// TODO: Add your control notification handler code here
-
UpdateData(true);
-
int index;
-
index=((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->GetCurSel();
-
-
UpdateData(false);
-
-
}
-
//CRC校验函数,对已经写入程序的FLASH进行CRC校验
-
unsigned int crc_32( unsigned char *p, unsigned int len)
-
{
-
unsigned int ii=0;
-
unsigned int crc;
-
unsigned int m_crc = 0xFFFFFFFF; //寄存器中预置初始值
-
for(ii=0; ii <len; ii++)
-
{
-
m_crc = crc32_table[( m_crc^(*(p+ii)) ) & 0xff] ^ (m_crc >> 8); //计算
-
//gdelay(2000);
-
}
-
crc= ~m_crc; //取反
-
return crc;
-
}
-
void CTestDlg::OnFileRead()
-
{
-
uint32 pkt_num=0;
-
uint32 last_len=0;
-
uint32 CMD_LAST_FRAME=0xffffff;
-
uint8 BUF_LAST_FRAME[8]={0,0,0,0,0,0,0,0};
-
uint32 CRC_BINFILE;
-
CFile file;
-
unsigned char *pbuf;
-
CString path;
-
DWORD dwFileLen;
-
long lvalue;
-
RegQueryValue(HKEY_LOCAL_MACHINE,"software\\CanIAP\\admin",NULL,&lvalue);
-
-
char *path_temp=new char[lvalue];
-
-
RegQueryValue(HKEY_LOCAL_MACHINE,"software\\CanIAP\\admin",path_temp,&lvalue);
-
-
path=(LPCTSTR)path_temp;
-
-
file.Open(path,CFile::modeRead | CFile::typeBinary);
-
-
dwFileLen=file.GetLength();
-
-
pbuf=new unsigned char[dwFileLen];
-
if (dwFileLen<64*1024)//如果bin文件小于64k
-
{
-
file.Read(pbuf,dwFileLen);
-
}
-
else
-
{
-
file.ReadHuge(pbuf,dwFileLen);
-
}
-
CRC_BINFILE=crc_32(&pbuf[0],dwFileLen);
-
-
-
//显示bin文件路径
-
GetDlgItem(IDC_STATIC_FILEPATH)->SetWindowText(path_temp);
-
CString STR_TMP;
-
//显示bin文件大小
-
STR_TMP.Format("%d",dwFileLen);
-
GetDlgItem(IDC_STATIC_FILESIZE)->SetWindowText(STR_TMP);
-
//显示bin文件crc32值
-
STR_TMP.Format("%x",CRC_BINFILE);
-
GetDlgItem(IDC_STATIC_FILECRC)->SetWindowText(STR_TMP);
-
-
-
-
memcpy(&BUF_LAST_FRAME[0],(unsigned char *)(&CRC_BINFILE),4);
-
memcpy(&BUF_LAST_FRAME[4],(unsigned char *)(&dwFileLen),4);
-
-
if(dwFileLen%8==0)
-
{
-
pkt_num=dwFileLen/8;
-
}
-
else
-
{
-
pkt_num=dwFileLen/8+1;
-
}
-
((CProgressCtrl *)GetDlgItem(IDC_PROGRESS_IAP))->SetRange(0,pkt_num);
-
((CProgressCtrl *)GetDlgItem(IDC_PROGRESS_IAP))->SetStep(1);
-
((CProgressCtrl *)GetDlgItem(IDC_PROGRESS_IAP))->SetPos(0);
-
-
for (uint32 iLp=0;iLp<pkt_num-1;iLp++)
-
{
-
if (Data_CanSend(iLp,0,1,(uint8 *)(pbuf+8*iLp),8)!=0)
-
{
-
ShowInfo("写入失败",2);
-
break;
-
-
}
-
-
((CProgressCtrl *)GetDlgItem(IDC_PROGRESS_IAP))->StepIt();
-
-
if ((iLp==31) || (iLp==(4095+32)))
-
{
-
Sleep(300);
-
//delayus(200000);
-
}
-
else if (iLp==(8191+32))
-
{
-
Sleep(300);
-
//delayus(300000);
-
}
-
else
-
{
-
if ((iLp+1)%32==0)
-
{
-
-
//delayus(20);
-
Sleep(1);
-
}
-
else
-
{
-
//Sleep(1);
-
}
-
-
}
-
-
}
-
Sleep(3);
-
-
//发送最后一个can报文
-
if (dwFileLen%8==0)
-
{
-
if(Data_CanSend(iLp,0,1,(uint8 *)(pbuf+8*iLp),8)!=0)
-
{
-
ShowInfo("写入失败",2);
-
}
-
}
-
else
-
{
-
last_len=dwFileLen%8;
-
if(Data_CanSend(iLp,0,1,(uint8 *)(pbuf+8*iLp),last_len)!=0)
-
{
-
ShowInfo("写入失败",2);
-
}
-
}
-
Sleep(3);
-
-
//发送最后帧数据指令:
-
if(Data_CanSend(CMD_LAST_FRAME,0,1,&BUF_LAST_FRAME[0],8)!=0)
-
{
-
ShowInfo("写入失败",2);
-
}
-
-
file.Close();
-
delete(pbuf);
-
delete(path_temp);
-
-
}
-
//打开文件,选择需要下载的bin文件
-
void CTestDlg::OnButtonOpenfile()
-
{
-
// TODO: Add your control notification handler code here
-
CFileDialog filedlg(true);
-
filedlg.m_ofn.lpstrTitle="请选择目标文件";
-
filedlg.m_ofn.lpstrFilter="Bin Files(*.bin)\0 *.bin\0\0";
-
if(IDOK==filedlg.DoModal())
-
{
-
CFile file(filedlg.GetFileName(),CFile::modeRead | CFile::typeBinary);
-
CString path;
-
HKEY hkey;
-
-
//获取选择bin文件的路径,并写入注册表
-
path=file.GetFilePath();
-
RegCreateKey(HKEY_LOCAL_MACHINE,"software\\CanIAP\\admin",&hkey);
-
RegSetValue(hkey,NULL,REG_SZ,path,strlen(path));
-
RegCloseKey(hkey);
-
-
//file.Close();
-
}
-
-
}
-
-
//can帧发送函数
-
int CTestDlg::Data_CanSend(uint32 ID,UINT8 RTR,UINT8 IDE,UINT8 *DATA,UINT8 LEN)
-
{
-
VCI_CAN_OBJ frameinfo;
-
//int m_cannum=0;
-
//int m_devtype=0;
-
-
frameinfo.SendType=0;//正常发送
-
frameinfo.ID=ID;
-
frameinfo.RemoteFlag=RTR;
-
frameinfo.ExternFlag=IDE;
-
frameinfo.DataLen=LEN;
-
-
memcpy(&frameinfo.Data,DATA,LEN);
-
-
if(VCI_Transmit(m_devtype,m_devind,m_cannum,&frameinfo,1)==1)
-
{
-
//ShowInfo("写入成功",0);
-
return 0;
-
}
-
else
-
{
-
//ShowInfo("写入失败",2);
-
return -1;
-
}
-
-
return 0;
-
}
-
//开始下载,将选中的bin文件打开并发送出去
-
void CTestDlg::OnButtonStart()
-
{
-
//HWND hwnd;
-
SetEvent(m_evtUpdate);
-
//::PostMessage(hwnd,ON_WM_SEND,0,NULL);
-
//OnFileRead();
-
//((CComboBox *)GetDlgItem(IDC_COMBO_CANBAUD))->InsertString(0,"请选择");
-
-
-
}
-
-
void OnRegWrite()
-
{
-
HKEY hkey;
-
RegCreateKey(HKEY_LOCAL_MACHINE,"software\\CanIAP\\admin",&hkey);
-
RegSetValue(hkey,NULL,REG_SZ,"ZHANGSAN",strlen("ZHANGSAN"));
-
RegCloseKey(hkey);
-
}
-
-
void OnRegRead()
-
{
-
long lvalue;
-
RegQueryValue(HKEY_LOCAL_MACHINE,"software\\CanIAP\\admin",NULL,&lvalue);
-
-
char *pbuf=new char[lvalue];
-
-
RegQueryValue(HKEY_LOCAL_MACHINE,"software\\CanIAP\\admin",pbuf,&lvalue);
-
-
AfxMessageBox(pbuf);
-
delete(pbuf);//??????
-
-
}
-
void delayus(long int microsecond) //以微秒延时函数
-
{ _LARGE_INTEGER litmp;
-
-
LONGLONG QPart;
-
double dfFreq;
-
long dfTim;
-
-
QueryPerformanceFrequency(&litmp);
-
dfFreq = (double)litmp.QuadPart / 1e6 ; // 获得计数器的时钟频率,以微秒为单位
-
QueryPerformanceCounter(&litmp);
-
QPart = litmp.QuadPart; // 获得时间初始值
-
do {
-
QueryPerformanceCounter(&litmp);
-
dfTim = (long )((double)(litmp.QuadPart-QPart) / dfFreq) ; // 获得对应的时间值,单位为微秒
-
}while(dfTim< microsecond);
-
return ;
-
}
-
-
void CTestDlg::InitGrid()
-
{
-
//
-
m_Grid.SetExtendedStyle(LVS_EX_FLATSB
-
|LVS_EX_FULLROWSELECT
-
|LVS_EX_HEADERDRAGDROP
-
|LVS_EX_ONECLICKACTIVATE
-
|LVS_EX_GRIDLINES);
-
-
m_Grid.InsertColumn(0,"ch", LVCFMT_LEFT,50,0);
-
m_Grid.InsertColumn(1,"bV", LVCFMT_LEFT,50,1);
-
m_Grid.InsertColumn(2,"sV", LVCFMT_LEFT,50,2);
-
m_Grid.InsertColumn(3,"k", LVCFMT_LEFT,50,3);
-
m_Grid.InsertColumn(4,"b", LVCFMT_LEFT,50,4);
-
-
m_Grid.InsertColumn(5,"mA", LVCFMT_LEFT,50,6);
-
m_Grid.InsertColumn(6,"ok", LVCFMT_LEFT,50,5);
-
-
for(int i=0;i<=7;i++)
-
m_Grid.InsertItem(i,"");
-
}
-
int CTestDlg::SearchThreadProc(LPVOID lpparameter)
-
{
-
CTestDlg *dlg=(CTestDlg *)lpparameter;
-
-
dlg->m_ButtonSearch.EnableWindow(FALSE);
-
SearchPLC();
-
dlg->m_ButtonSearch.EnableWindow(TRUE);
-
-
return 0;
-
}
-
int CTestDlg::CAN_PushMessage(CAN_MSG *msg)
-
{
-
VCI_CAN_OBJ frameinfo;
-
-
frameinfo.SendType=0;//正常发送
-
frameinfo.ID=msg->ID;
-
frameinfo.RemoteFlag=msg->RTR;
-
frameinfo.ExternFlag=0;
-
frameinfo.DataLen=msg->LEN;
-
-
if (msg->LEN>0)
-
memcpy(&frameinfo.Data,msg->BUF,msg->LEN);
-
-
if(VCI_Transmit(m_devtype,m_devind,m_cannum,&frameinfo,1)==1)
-
{
-
//ShowInfo("写入成功",0);
-
return 0;
-
}
-
else
-
{
-
//ShowInfo("写入失败",2);
-
return -1;
-
}
-
-
}
-
int CTestDlg::SearchPLC(void)
-
{
-
CAN_MSG msg;
-
msg.LEN=0;
-
msg.RTR=1;
-
-
for (UINT8 i=1;i<64;i++)
-
{
-
msg.ID=i+0x700;
-
CAN_PushMessage(&msg);
-
Sleep(1);
-
}
-
return 0;
-
}
-
int CTestDlg::ReadAI(BYTE byid,BYTE mtype)
-
{
-
CAN_MSG msg;
-
DWORD tmp;
-
-
BYTE subindex;
-
BYTE ch,type;
-
-
-
if(byid==0)
-
return -1;
-
if (mtype>1)
-
{
-
return -1;
-
}
-
type=mtype;
-
msg.ID=byid+0x600;
-
msg.LEN=8;
-
msg.RTR=0;
-
subindex=1;
-
//进标定
-
tmp=(CMD_WR<<24) | (INDEX_INBD<<8) | (subindex);
-
MEM_DW(msg.BUF)=mhtonl(tmp);
-
MEM_DW(msg.BUF+4)=0;
-
CAN_PushMessage(&msg);
-
-
for (ch=0;ch<=7;ch++)
-
{
-
//for (type=0;type<=1;type++)
-
{
-
subindex=(BYTE)(ch<<4) | (BYTE)(type);
-
tmp=(CMD_RD<<24) | (INDEX_RDAI<<8) | (subindex);
-
MEM_DW(msg.BUF)=mhtonl(tmp);
-
MEM_DW(msg.BUF+4)=0;
-
CAN_PushMessage(&msg);
-
Sleep(100);
-
}
-
}
-
-
return 0;
-
}
-
-
-
//搜索按钮消息响应函数
-
void CTestDlg::OnButtonSearch()
-
{
-
// TODO: Add your control notification handler code here
-
DWORD dwid;
-
HANDLE hthread;
-
if (m_connect!=1)
-
{
-
return;
-
}
-
hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SearchThreadProc,this,0,&dwid);
-
}
-
-
//写k、b按钮消息响应函数
-
void CTestDlg::OnButtonWrite()
-
{
-
// TODO: Add your control notification handler code here
-
if (m_connect!=1)
-
{
-
return ;
-
}
-
}
-
//标定子线程
-
int CTestDlg::BDThreadProc(LPVOID lpparameter)
-
{
-
BYTE type=*(BYTE *)lpparameter;
-
if(m_connect!=1) return -1;
-
ReadAI(g_node.id,type);
-
return 0;
-
}
-
//显示子线程
-
int CTestDlg::DisplayThreadProc(LPVOID lpparameter)
-
{
-
CTestDlg *dlg=(CTestDlg *)AfxGetMainWnd();
-
CString strch,strbv,strsv,strfk,strfb,strbok,strmA,strAICalcOut;
-
while(TRUE)
-
{
-
if (m_connect!=1)
-
{
-
Sleep(10);
-
continue;
-
}
-
-
DWORD result=WaitForSingleObject(m_evtUpdateDisplay.m_hObject,INFINITE);
-
if (result==WAIT_OBJECT_0)
-
{
-
CString str;
-
str.Format("0x%02x",g_node.id);
-
dlg->m_StaticNodeID.SetWindowText(str);
-
-
for (int ch=0;ch<=7;ch++)
-
{
-
-
strch.Format( "%d", ch+1); //channel
-
strbv.Format( "%x", g_node.wAIValue[ch][1]); //big
-
strsv.Format( "%x", g_node.wAIValue[ch][0]); //small
-
strfk.Format( "%f", g_node.calckb[ch].fk); //fk
-
strfb.Format( "%f", g_node.calckb[ch].fb); //fb
-
strbok.Format( "%d", g_node.bBDOK); //bd is finished suc
-
strmA.Format( "%f", g_node.fCurrent); //ma
-
-
//WORD wAIHuiJian=g_node.calckb[ch].fk*
-
-
dlg->m_Grid.SetItemText(ch,0,strch);
-
dlg->m_Grid.SetItemText(ch,1,strbv);
-
dlg->m_Grid.SetItemText(ch,2,strsv);
-
dlg->m_Grid.SetItemText(ch,3,strfk);
-
dlg->m_Grid.SetItemText(ch,4,strfb);
-
dlg->m_Grid.SetItemText(ch,5,strbok);
-
dlg->m_Grid.SetItemText(ch,6,strmA);
-
}
-
-
}
-
-
Sleep(1);
-
}
-
//m_connect
-
return 0;
-
}
-
-
void CTestDlg::OnButtonCalc()
-
{
-
// TODO: Add your control notification handler code here
-
float fk[8],fb[8];
-
-
CalcKB(g_node.wAIValue,fk,fb);
-
-
-
for (int i=0;i<8;i++)
-
{
-
memcpy(&g_node.calckb[i].fk,&fk+i,4);
-
memcpy(&g_node.calckb[i].fb,&fb+i,4);
-
}
-
m_evtUpdateDisplay.SetEvent();
-
-
}
-
-
-
-
int CTestDlg::CalcKB(uint16 (*stAIValue)[2], float *fk, float *fb)
-
{
-
int i;
-
WORD wbig=AI_BD_BIG;
-
WORD wsmall=AI_BD_SMALL;
-
for(i=0;i<8;i++)
-
{
-
*(fk+i)=(wbig-wsmall)*1.0/( *(stAIValue[i]+1)-*(stAIValue[i]+0) );//calc k
-
*(fb+i)=wsmall-*(fk+i)**(stAIValue[i]+0);
-
}
-
return 0;
-
}
-
-
void CTestDlg::OnButtonBdbig()
-
{
-
// TODO: Add your control notification handler code here
-
HANDLE hthread;
-
DWORD dwid;
-
BYTE type=1;
-
if (m_connect!=1)//not connect
-
{
-
return;
-
}
-
hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)BDThreadProc,&type,0,&dwid);
-
}
-
-
void CTestDlg::OnButtonBdsmall()
-
{
-
// TODO: Add your control notification handler code here
-
HANDLE hthread;
-
DWORD dwid;
-
BYTE type=0;
-
if (m_connect!=1)//not connect
-
{
-
return;
-
}
-
hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)BDThreadProc,&type,0,&dwid);
-
-
}
-
-
void CTestDlg::OnButtonIobd()
-
{
-
// TODO: Add your control notification handler code here
-
CAN_MSG msg;
-
msg.ID=0x600+g_node.id;
-
msg.RTR=0;
-
msg.LEN=8;
-
-
-
DWORD tmp;
-
-
-
static bflag=0;
-
if (m_connect!=1)
-
{
-
return;
-
}
-
if (bflag==1)
-
{
-
//退标定
-
bflag=0;
-
tmp=(CMD_WR<<24) | (INDEX_INBD<<8) | (0);
-
MEM_DW(msg.BUF)=mhtonl(tmp);
-
MEM_DW(msg.BUF+4)=0;
-
CAN_PushMessage(&msg);
-
m_ButtonIOBD.SetWindowText("进标定");
-
}
-
else
-
{
-
//进标定
-
bflag=1;
-
tmp=(CMD_WR<<24) | (INDEX_INBD<<8) | (1);
-
MEM_DW(msg.BUF)=mhtonl(tmp);
-
MEM_DW(msg.BUF+4)=0;
-
CAN_PushMessage(&msg);
-
m_ButtonIOBD.SetWindowText("退标定");
-
}
-
-
}
-
-
void CTestDlg::OnClickListBd(NMHDR* pNMHDR, LRESULT* pResult)
-
{
-
// TODO: Add your control notification handler code here
-
POSITION pos=m_Grid.GetFirstSelectedItemPosition();;
-
CAN_MSG msg;
-
DWORD tmp;
-
msg.ID=0x600+g_node.id;
-
msg.RTR=0;
-
msg.LEN=8;
-
-
if (pos == NULL)
-
TRACE0("No items were selected!\n");
-
else
-
{
-
while (pos)
-
{
-
int nItem = m_Grid.GetNextSelectedItem(pos);
-
tmp=(CMD_WR<<24) | (INDEX_K<<8) |( (BYTE)nItem);
-
MEM_DW(msg.BUF)=tmp;
-
MEM_DW(msg.BUF+4)=g_node.calckb[nItem].fk;
-
CAN_PushMessage(&msg);
-
Sleep(50);
-
tmp=(CMD_WR<<24) | (INDEX_B<<8) |( (BYTE)nItem);
-
MEM_DW(msg.BUF)=tmp;
-
MEM_DW(msg.BUF+4)=g_node.calckb[nItem].fb;
-
CAN_PushMessage(&msg);
-
-
}
-
}
-
*pResult = 0;
- }