13,825
社区成员
发帖
与我相关
我的任务
分享
void __fastcall TTMCM::OpenThreads()
{
if(hTMCM == NULL){
hTMCM = CreateThread(
(LPSECURITY_ATTRIBUTES)0,
0,
(LPTHREAD_START_ROUTINE)Thread_fun,
(LPVOID)this,
CREATE_SUSPENDED,
NULL);
SetThreadPriority(hTMCM, THREAD_PRIORITY_HIGHEST);
ResumeThread(hTMCM);
}else{
ResumeThread(hTMCM);
}
if(hDraw == NULL){
hDraw = CreateThread(
(LPSECURITY_ATTRIBUTES)0,
0,
(LPTHREAD_START_ROUTINE)Thread_Darw,
(LPVOID)this,
CREATE_SUSPENDED,
&idDraw_Do);
SetThreadPriority(hDraw, THREAD_PRIORITY_LOWEST);
ResumeThread(hDraw);
}else{
ResumeThread(hDraw);
}
}
DWORD WINAPI TTMCM::Thread_fun(LPVOID lParam)
{
bool bAD_other = false;
UCHAR buf[10] = {0};
UCHAR Addr[20] = {0};
TTMCM *tmcm = (TTMCM *)lParam; //________
for( ; ;){
Sleep(10);
if(tmcm->bGetAllValue){
// AD0
SendCmd(USBhandle, USBAddr, TMCL_UF0, 0, ADC0, 0);
GetResult(USBhandle, Addr, buf, (int *)&tmcm->AD0);
// AD1
SendCmd(USBhandle, USBAddr, TMCL_UF0, 0, ADC1, 0);
GetResult(USBhandle, Addr, buf, (int *)&tmcm->AD1);
// Axis0
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor0, 0);
GetResult(USBhandle, Addr, buf, (int *)&tmcm->iPos_Axis0);
// Axis1
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor1, 0);
GetResult(USBhandle, Addr, buf, (int *)&tmcm->iPos_Axis1);
// Axis2
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor2, 0);
GetResult(USBhandle, Addr, buf, (int *)&tmcm->iPos_Axis2);
// Axis3
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor3, 0);
GetResult(USBhandle, Addr, buf, (int *)&tmcm->iPos_Axis3);
// Axis4
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor4, 0);
GetResult(USBhandle, Addr, buf, (int *)&tmcm->iPos_Axis4);
// Axis5
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor5, 0);
GetResult(USBhandle, Addr, buf, (int *)&tmcm->iPos_Axis5);
// 获取MOtor5的实际速度
SendCmd(USBhandle, USBAddr, TMCL_GAP, 3, motor5, 0);
GetResult(USBhandle, Addr, buf, (int *)&tmcm->iActual_Speed_Axis5);
}
}
}
DWORD WINAPI TTMCM::Thread_Darw(LPVOID lParam)
{
double VP1,VP2;
int iPos;
MSG msg;
int iVelocity;
TTMCM *tmcm = (TTMCM *)lParam;
//.....
}
void __fastcall TTMCM::OpenThreads() // 创建线程
{
if(hTMCM == NULL){
hTMCM = CreateThread(
(LPSECURITY_ATTRIBUTES)0,
0,
(LPTHREAD_START_ROUTINE)Thread_fun,
(LPVOID)0,
CREATE_SUSPENDED,
NULL);
SetThreadPriority(hTMCM, THREAD_PRIORITY_HIGHEST);
ResumeThread(hTMCM);
}else{
ResumeThread(hTMCM);
}
if(hDraw == NULL){
hDraw = CreateThread(
(LPSECURITY_ATTRIBUTES)0,
0,
(LPTHREAD_START_ROUTINE)Thread_Darw,
(LPVOID)0,
CREATE_SUSPENDED,
&idDraw_Do);
SetThreadPriority(hDraw, THREAD_PRIORITY_LOWEST);
ResumeThread(hDraw);
}else{
ResumeThread(hDraw);
}
if(hOther == NULL){
hOther = CreateThread(
(LPSECURITY_ATTRIBUTES)0,
0,
(LPTHREAD_START_ROUTINE)Thread_Other,
(LPVOID)0,
CREATE_SUSPENDED,
&idThread_Do);
SetThreadPriority(hOther, THREAD_PRIORITY_NORMAL);
ResumeThread(hOther);
}else{
ResumeThread(hOther);
}
}
DWORD WINAPI TTMCM::Thread_fun(void) // 采集线程
{
bool bAD_other = false;
UCHAR buf[10] = {0};
UCHAR Addr[20] = {0};
for( ; ;){
Sleep(10);
if(TMCM->bGetAllValue){
// AD0
SendCmd(USBhandle, USBAddr, TMCL_UF0, 0, ADC0, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->AD0);
// AD1
SendCmd(USBhandle, USBAddr, TMCL_UF0, 0, ADC1, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->AD1);
// Axis0
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor0, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->iPos_Axis0);
// Axis1
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor1, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->iPos_Axis1);
// Axis2
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor2, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->iPos_Axis2);
// Axis3
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor3, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->iPos_Axis3);
// Axis4
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor4, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->iPos_Axis4);
// Axis5
SendCmd(USBhandle, USBAddr, TMCL_GAP, 1, motor5, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->iPos_Axis5);
// 获取MOtor5的实际速度
SendCmd(USBhandle, USBAddr, TMCL_GAP, 3, motor5, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->iActual_Speed_Axis5);
// AD2,AD3 每两次采集一次
if(bAD_other){
SendCmd(USBhandle, USBAddr, TMCL_UF0, 0, ADC2, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->AD2);
SendCmd(USBhandle, USBAddr, TMCL_UF0, 0, ADC3, 0);
GetResult(USBhandle, Addr, buf, (int *)&TMCM->AD3);
}
bAD_other = !bAD_other;
}
}
}
DWORD WINAPI TTMCM::Thread_Darw(void) // 执行线程
{
double VP1,VP2;
int iPos;
MSG msg;
int iVelocity;
for( ; ;){
Sleep(20);
if(PeekMessage(&msg,(HWND)NULL,0,0,PM_REMOVE)){
if(msg.lParam == 0){ // 初始化
TMCM->bLoad = true;
TMCM->bInit_A = true;
frm_Main->writeLog(0, "bLoad,bInit_A");
SendCmd(USBhandle, USBAddr, TMCL_SAP,4, motor3, 2000);
TMCLMoveToPosition(USBhandle, USBAddr, 0, motor3, 0);
}
}else{
if(TMCM->bLoad){
frm_Main->writeLog(msg.lParam, "------------------ SystemLoad!");
TMCM->SystemLoad();
}else{
frm_Main->writeLog(msg.lParam, "bLoad = false!");
if(TMCM->bGetAllValue){
// 绘制曲线
VP1 = TMCM->Number2V(TMCM->AD0);
VP2 = TMCM->Number2V(TMCM->AD1);
frm_Main->DrawingChart(VP1, VP2);
// motor 5 台面距离
iPos = frm_Main->GetExtendPos(TMCM->iPos_Axis5);
frm_Main->edt_Space->Text = IntToStr(iPos);
frm_Main->edt_Speed->Text = IntToStr(TMCM->iActual_Speed_Axis5);
}
}
// 火头摆动
if(TMCM->bFireMove_Start){
TMCM->FireMove(frm_Main->Range_iWay);
}
}
}
}
void __fastcall TTMCM::SystemLoad(void) // 具体执行
{
if(bInit_A){
frm_Main->writeLog(iPos_Axis3, "motor3");
if(iPos_Axis3 <= 32){
bInit_A = false;
bInit_B = true;
SendCmd(USBhandle, USBAddr, TMCL_SAP, 4, motor4, 1500);
TMCLMoveToPosition(USBhandle, USBAddr, 0, motor4, 0);
}
return;
}
if(bInit_B){
frm_Main->writeLog(iPos_Axis4, "motor4");
if(iPos_Axis4 <= 32){
bInit_B = false;
bInit_C = true;
SendCmd(USBhandle, USBAddr, TMCL_SAP, 4, motor1, 1500);
TMCLMoveToPosition(USBhandle, USBAddr, 0, motor1, 0);
}
return;
}
if(bInit_C){
frm_Main->writeLog(iPos_Axis1, "motor1");
if(iPos_Axis1 <= 32){
bInit_C = false;
bInit_D = true;
SendCmd(USBhandle, USBAddr, TMCL_SAP, 4, motor0, 1500);
TMCLMoveToPosition(USBhandle, USBAddr, 0, motor0, 0);
}
return;
}
if(bInit_D){
frm_Main->writeLog(iPos_Axis0, "motor0");
if(iPos_Axis0 <= 32){
bInit_D = false;
bInit_E = true;
SendCmd(USBhandle, USBAddr, TMCL_SAP, 4, motor2, 1500);
TMCLMoveToPosition(USBhandle, USBAddr, 0, motor2, 0);
}
return;
}
if(bInit_E){
frm_Main->writeLog(iPos_Axis2, "motor2");
if(iPos_Axis2 <= 32){
bInit_E = false;
bInit_F = true;
SendCmd(USBhandle, USBAddr, TMCL_SAP, 4, motor5, 1000);
TMCLMoveToPosition(USBhandle, USBAddr, 0, motor5, 0);
}
return;
}
if(bInit_F){
frm_Main->writeLog(iPos_Axis5, "motor5");
if(iPos_Axis5 <= 32){
bInit_F = false;
bInit_X = true;
iPos_Init = frm_Main->mm2Postion(frm_Main->fire_iAxis2);
TMCLMoveToPosition(USBhandle, USBAddr, 0, motor2, iPos_Init);
}
return;
}
//===========================================
if(bInit_X){
frm_Main->writeLog(iPos_Axis2, "motor2");
if((iPos_Init>>4) == (iPos_Axis2>>4)){
bInit_X = false;
bInit_Y = true;
iPos_Init = frm_Main->mm2Postion(frm_Main->fire_iAxis0);
TMCLMoveToPosition(USBhandle, USBAddr, 0, motor0, iPos_Init);
}
return;
}
if(bInit_Y){
frm_Main->writeLog(iPos_Axis0, "motor0");
if((iPos_Init>>4) == (iPos_Axis0>>4)){
bInit_Y = false;
bInit_Z = true;
iPos_Init = frm_Main->SetExtendPos(frm_Main->base_iWorkPos);
TMCLMoveToPosition(USBhandle, USBAddr, 0, motor5, iPos_Init);
}
return;
}
if(bInit_Z){
frm_Main->writeLog(iPos_Axis5, "motor5");
if((iPos_Init>>4) == (iPos_Axis5>>4)){
bInit_Z = false;
bLoad = false;
if(frm_Load != NULL ){
frm_Load->Close();
}
}
}
}