机械手程序代码.docx
《机械手程序代码.docx》由会员分享,可在线阅读,更多相关《机械手程序代码.docx(203页珍藏版)》请在冰豆网上搜索。
机械手程序代码
//countDlg.cpp:
实现文件
//
#include"stdafx.h"
#include"count.h"
#include"countDlg.h"
#include"stdafx.h"
#include"afxdialogex.h"
#include
#include
#include
#include"MyThreadPool.h"
#include"MyThread.h"
#include
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
usingnamespacestd;
CTestTask:
:
CTestTask(intid)
:
CTask(id)
{
}
CTestTask:
:
~CTestTask(void)
{
}
CMyThreadPoolthreadpool(10);
//用于应用程序“关于”菜单项的CAboutDlg对话框
structLinkingBoard1
{
BOOLlistflag1;//板子测试位空闲标志1为位空闲0为忙碌
BOOLlistflag2;//板子测试位空闲标志1为位空闲0为忙碌
BOOLlistflag3;//板子测试位空闲标志1为位空闲0为忙碌
BOOLlistflag4;//板子测试位空闲标志1为位空闲0为忙碌
inttestresult1;//板子测试结果标志8为PASS6为FAIL2为没有测试
inttestresult2;//板子测试结果标志8为PASS6为FAIL
inttestresult3;//板子测试结果标志8为PASS6为FAIL
inttestresult4;//板子测试结果标志8为PASS6为FAIL
BOOLboard1;//工位有无测试板子标志
BOOLboard2;//工位有无测试板子标志
BOOLboard3;//工位有无测试板子标志
BOOLboard4;//工位有无测试板子标志
CStringdisabled1;//工位不可用颜色
CStringdisabled2;//工位不可用颜色
CStringdisabled3;//工位不可用颜色
CStringdisabled4;//工位不可用颜色
BOOLstations1;//工位1是否可用
BOOLstations2;//工位2是否可用
BOOLstations3;//工位3是否可用
BOOLstations4;//工位4是否可用
BOOLtesttostation1;//工位是否执行测试标志
BOOLtesttostation2;//工位是否执行测试标志
BOOLtesttostation3;//工位是否执行测试标志
BOOLtesttostation4;//工位是否执行测试标志
intcurrent1;//板子测试位正在测试的板子编号
intcurrent2;//板子测试位正在测试的板子编号
intcurrent3;//板子测试位正在测试的板子编号
intcurrent4;//板子测试位正在测试的板子编号
BOOLtesting1;//测试板子完成标志0正在测试1测试完成
BOOLtesting2;//测试板子完成标志0正在测试1测试完成
BOOLtesting3;//测试板子完成标志0正在测试1测试完成
BOOLtesting4;//测试板子完成标志0正在测试1测试完成
inttest1;//抓板子到工位的标志用于最后不显示重复测试
inttest2;//抓板子到工位的标志用于最后不显示重复测试
inttest3;//抓板子到工位的标志用于最后不显示重复测试
inttest4;//抓板子到工位的标志用于最后不显示重复测试
intpfail1;//抓板子到PASSFAIL的标志用于最后不显示重复测试
intpfail2;//抓板子到PASSFAIL的标志用于最后不显示重复测试
BOOLpfail3;//抓板子到PASSFAIL的标志用于最后不显示重复测试
BOOLpfail4;//抓板子到PASSFAIL的标志用于最后不显示重复测试
BOOLready1;//字据工位是否准备好拿去测试1为准备好0为未准备好
BOOLready2;//字据工位是否准备好拿去测试1为准备好0为未准备好
BOOLready3;//字据工位是否准备好拿去测试1为准备好0为未准备好
BOOLready4;//字据工位是否准备好拿去测试1为准备好0为未准备好
BOOLreaddy1;//工位是否准备好拿走到passorfail1为准备好0为未准备好
BOOLreaddy2;//工位是否准备好拿走到passorfail1为准备好0为未准备好
BOOLreaddy3;//工位是否准备好拿走到passorfail1为准备好0为未准备好
BOOLreaddy4;//工位是否准备好拿走到passorfail1为准备好0为未准备好
};
structB
{
intcount1;//字据1提供的工位数
intcount2;//字据2提供的工位数
intcount3;//字据3提供的工位数
intcount4;//字据4提供的工位数
intconduct1;//执行切割板测试
intconduct2;//执行切割板测试
intconduct3;//执行切割板测试
intconduct4;//执行切割板测试
BOOLlinkingboard;//测试板子是否是连板的标志,1连板,0为切割板
BOOLstation1;//字据1是否可用
BOOLstation2;//字据2是否可用
BOOLstation3;//字据3是否可用
BOOLstation4;//字据4是否可用
intunt;
intttp;//提供的字据数进行判断
inttestresult1;//板子测试结果标志8为PASS6为FAIL2为没有测试
inttestresult2;//板子测试结果标志8为PASS6为FAIL2为没有测试
inttestresult3;//板子测试结果标志8为PASS6为FAIL2为没有测试
inttestresult4;//板子测试结果标志8为PASS6为FAIL2为没有测试
BOOLlinkflag1;//连板字据1是否空闲
BOOLlinkflag2;//连板字据2是否空闲
BOOLlinkflag3;//连板字据3是否空闲
BOOLlinkflag4;//连板字据4是否空闲
BOOLlinktesting1;//连接测试板子测试完成标志0正在测试1测试完成
BOOLlinktesting2;//连接测试板子测试完成标志0正在测试1测试完成
BOOLlinktesting3;//连接测试板子测试完成标志0正在测试1测试完成
BOOLlinktesting4;//连接测试板子测试完成标志0正在测试1测试完成
BOOLready1;//字据工位是否准备好拿去测试1为准备好0为未准备好
BOOLready2;//字据工位是否准备好拿去测试1为准备好0为未准备好
BOOLready3;//字据工位是否准备好拿去测试1为准备好0为未准备好
BOOLready4;//字据工位是否准备好拿去测试1为准备好0为未准备好
BOOLreaddy1;//工位是否准备好拿走到passorfail1为准备好0为未准备好
BOOLreaddy2;//工位是否准备好拿走到passorfail1为准备好0为未准备好
BOOLreaddy3;//工位是否准备好拿走到passorfail1为准备好0为未准备好
BOOLreaddy4;//工位是否准备好拿走到passorfail1为准备好0为未准备好
intcurrent1;//板子测试位正在测试的板子编号
intcurrent2;//板子测试位正在测试的板子编号
intcurrent3;//板子测试位正在测试的板子编号
intcurrent4;//板子测试位正在测试的板子编号
inttestedd1;//否执行抓取测试
inttestedd2;//是否执行抓取测试
inttestedd3;//是否执行抓取测试
inttestedd4;//是否执行抓取测试
inttested1;//是否执行抓取测试抓取到PASSfail
inttested2;//是否执行抓取测试抓取到PASSfail
inttested3;//是否执行抓取测试抓取到PASSfail
inttested4;//是否执行抓取测试抓取到PASSfail
BOOLcap1;//1和好0打开
BOOLcap2;//1和好0打开
BOOLcap3;//1和好0打开
BOOLcap4;//1和好0打开
BOOLm_station1;//执行工位测试标志
BOOLm_station2;//执行工位测试标志
BOOLm_station3;//执行工位测试标志
BOOLm_station4;//执行工位测试标志
intgrab1;//反复测试,抓取板子数量到pass或者fail的总数等于字据数量才可以进行抓取测试
intgrab2;//反复测试,抓取板子数量到pass或者fail的总数等于字据数量才可以进行抓取测试
intgrab3;//反复测试,抓取板子数量到pass或者fail的总数等于字据数量才可以进行抓取测试
intgrab4;//反复测试,抓取板子数量到pass或者fail的总数等于字据数量才可以进行抓取测试
LinkingBoard1LB[4];
BOOLmachinehand;//机械手是否空闲1为空闲0处于占用状态
intstop;
BOOLlink;//执行连板或切割板标志,1为连板0为切割板
};
Bb;
classCAboutDlg:
publicCDialogEx
{
public:
CAboutDlg();
//对话框数据
enum{IDD=IDD_ABOUTBOX};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持
//实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialogEx(CAboutDlg:
:
IDD)
{
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialogEx:
:
DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialogEx)
END_MESSAGE_MAP()
//CcountDlg对话框
CcountDlg:
:
CcountDlg(CWnd*pParent/*=NULL*/)
:
CDialogEx(CcountDlg:
:
IDD,pParent)
m_count(0)
m_current(0)
m_list1(0)
m_list2(0)
m_list3(0)
m_list4(0)
m_pass(0)
m_fail(0)
m_list5(0)
m_list6(0)
m_list7(0)
m_list8(0)
m_list9(0)
m_list10(0)
m_list11(0)
m_list12(0)
m_list13(0)
m_list14(0)
m_list15(0)
m_list16(0)
{
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_disabled.CreateSolidBrush(RGB(0,0,0));
}
voidCcountDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialogEx:
:
DoDataExchange(pDX);
DDX_Text(pDX,IDC_EDIT1,m_count);
DDX_Text(pDX,IDC_EDIT2,m_current);
DDX_Text(pDX,IDC_LIST1,m_list1);
DDX_Text(pDX,IDC_LIST2,m_list2);
DDX_Text(pDX,IDC_LIST3,m_list3);
DDX_Text(pDX,IDC_LIST4,m_list4);
DDX_Text(pDX,IDC_PASS,m_pass);
DDX_Text(pDX,IDC_FAIL,m_fail);
DDX_Text(pDX,IDC_LIST5,m_list5);
DDX_Text(pDX,IDC_LIST6,m_list6);
DDX_Text(pDX,IDC_LIST7,m_list7);
DDX_Text(pDX,IDC_LIST8,m_list8);
DDX_Text(pDX,IDC_LIST9,m_list9);
DDX_Text(pDX,IDC_LIST10,m_list10);
DDX_Text(pDX,IDC_LIST11,m_list11);
DDX_Text(pDX,IDC_LIST12,m_list12);
DDX_Text(pDX,IDC_LIST13,m_list13);
DDX_Text(pDX,IDC_LIST14,m_list14);
DDX_Text(pDX,IDC_LIST15,m_list15);
DDX_Text(pDX,IDC_LIST16,m_list16);
DDX_Control(pDX,IDC_LIST17,m_list17);
DDX_Control(pDX,IDC_LIST18,m_list18);
DDX_Control(pDX,IDC_LIST19,m_list19);
DDX_Control(pDX,IDC_LIST20,m_list20);
}
BEGIN_MESSAGE_MAP(CcountDlg,CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_EDIT1,&CcountDlg:
:
OnEnChangeEdit1)
ON_BN_CLICKED(IDC_BUTTON1,&CcountDlg:
:
OnBnClickedButton1)
ON_WM_CTLCOLOR()
ON_WM_SIZE()
END_MESSAGE_MAP()
//CcountDlg消息处理程序
BOOLCcountDlg:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
//((CEdit*)GetDlgItem(IDC_EDIT1))->SetLimitText(3);
//将“关于...”菜单项添加到系统菜单中。
//IDM_ABOUTBOX必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
BOOLbNameValid;
CStringstrAboutMenu;
bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//设置此对话框的图标。
当应用程序主窗口不是对话框时,框架将自动
//执行此操作
SetIcon(m_hIcon,TRUE);//设置大图标
SetIcon(m_hIcon,FALSE);//设置小图标
//TODO:
在此添加额外的初始化代码
//TODO:
在此添加额外的初始化代码
CRectrect;
//获取编程语言列表视图控件的位置和大小
m_list17.GetClientRect(&rect);
m_list18.GetClientRect(&rect);
m_list19.GetClientRect(&rect);
m_list20.GetClientRect(&rect);
//为列表视图控件添加全行选中和栅格风格
m_list17.SetExtendedStyle(m_list17.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_list18.SetExtendedStyle(m_list18.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_list19.SetExtendedStyle(m_list19.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_list20.SetExtendedStyle(m_list20.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//为列表视图控件添加三列
m_list17.InsertColumn(0,_T("TestStation"),LVCFMT_CENTER,rect.Width()/2,1);
m_list17.InsertColumn(1,_T("TestItem"),LVCFMT_CENTER,rect.Width()/2,1);
m_list18.InsertColumn(0,_T("TestStation"),LVCFMT_CENTER,rect.Width()/2,0);
m_list18.InsertColumn(1,_T("TestItem"),LVCFMT_CENTER,rect.Width()/2,1);
m_list19.InsertColumn(0,_T("TestStation"),LVCFMT_CENTER,rect.Width()/2,0);
m_list19.InsertColumn(1,_T("TestItem"),LVCFMT_CENTER,rect.Width()/2,1);
m_list20.InsertColumn(0,_T("TestStation"),LVCFMT_CENTER,rect.Width()/2,0);
m_list20.InsertColumn(1,_T("TestItem"),LVCFMT_CENTER,rect.Width()/2,1);
b.conduct1=0;
b.conduct2=0;
b.conduct3=0;
b.conduct4=0;
//读取配置文档
CStringFilePath;
//NULL一个模块的句柄。
可以是一个DLL模块,或者是一个应用程序的实例句柄。
如果该参数为NULL该函数返回该应用程序全路径
//FilePath.GetBufferSetLength指定一个字串缓冲区
//装载到缓冲区FilePath.GetBufferSetLength的最大字符数量
GetModuleFileName(NULL,FilePath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
intn;
//在一个较大的字符串中从末端开始查找本地目录字符,返回位置
n=FilePath.ReverseFind('\\');
//从左侧截取当前相对路径
FilePath=FilePath.Left(n);
//当前绝对路径为测试计划NTG_55TestPlan.txt的位置
FilePath+="\\configuration_document.ini";
b.linkingboard=GetPrivateProfileInt(L"CUSTOM",L"Linkingboard",888,FilePath);
if(b.linkingboard==888)
{
CStringstr;
str="Readingconfigurationdocument“Linkingboard”isError";
AfxMessageBox(str);
}
if(b.linkingboard==1)//连板
{
GetLinkCount(FilePath);
}
else//if(b.linkingboard==0)//不是连板
{
GetNoLinkCount(FilePath);
}
returnTRUE;//除非将焦点设置到控件,否则返回TRUE
}
//获取连板字据容量
voidCcountDlg:
:
GetLinkCount(CStringFilePath)
{
b.station1=GetPrivateProfileInt(L"CUSTOM",L"station1",888,FilePath);
if(b.station1)
{
b.linkflag1=1;//连板字据1空闲
}
b.station2=GetPrivateProfileInt(