CODESYS 枕式機應用

9Y 其(qí)他CODESYS 枕式機應(yīng)用已關閉評論2,111字數 1322閱讀(dú)4分24秒閱讀模式

//----色(sè)標中斷信號響應處理:將(jiāng)傳送帶軸當前位置存放到位置緩存(cún)
IF SensorTriger=1 THEN
IF (BufDeep<0) THEN
BufDeep:=0; //防止出錯
END_IF
IF BufDeep>=2 THEN
BufDeep:=2; //最多(duō)隻支持2個緩存,多於2個,丟棄,防止出錯
END_IF

CASE BufDeep OF //--緩存指針,最多記住3個標誌
0:
TargetPointArry0:=Axis_CONVERY.fActPosition;
1:
TargetPointArry1:=Axis_CONVERY.fActPosition;
2:
TargetPointArry2:=Axis_CONVERY.fActPosition;
END_CASE

BufDeep:=BufDeep+1;
SensorTriger:=0;

END_IF

//-----自由計時器刷新,可用於判斷超時錯誤-------->>--
IF PowerupTimerS < 32700 THEN
PowerupTimerS:=PowerupTimerS+2; //EtherCAT Period is 2ms
END_IF

//----按係統運行狀態0~5分別處理---------------->>
IF Sysstatus<0 OR Sysstatus>5 THEN //萬一狀態指針錯誤,糾正為重新開始運行
Sysstatus:=0;
END_IF

CASE Sysstatus OF
// System status: 0=Selfchecking; 1=Error; 2=Stopped; 3=Man-Jogging; 4=SlaveAxis Origining;
// 5=MasterAxis firstrun;
0: //上電自診斷,伺服使(shǐ)能 Self checking
IF NOT Inited THEN
//-----使能(néng)兩個伺服驅動器----->>------
MC_Power2(Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE, Axis:=Axis_FlyCut,);
MC_Power1(Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE, Axis:=Axis_CONVERY,);

MC_Power3(Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE, Axis:=Axis_ZJ,);

Inited:= MC_Power1.Status AND MC_Power2.Status AND MC_Power3.Status;

//-----超時錯(cuò)誤判斷------>>-----
IF (PowerupTimerS> 10000) AND (Ethercat.xConfigFinished = FALSE) THEN
SysStatuMark:=1; //EtherCAT Network/Cable Error
Sysstatus:=1; //Error State
END_IF

IF (PowerupTimerS> 12000) AND (Ethercat.xError = TRUE) THEN
SysStatuMark:=2; //EtherCAT Network/Cable Error
Sysstatus:=1; //Error State
END_IF

ELSE
Sysstatus :=2; //If two servo can be ENABLED, Switch to statu 2;
SysStatuMark:=0; //OK
END_IF

1: //停機告警狀態 Stopped,Error Alarming

AxisConvy_RUN:=0;

IF Reset_key=TRUE THEN //----如果手動複位按鈕,
Sysstatus:=0; //--退回到起始(shǐ)狀態
PowerupTimerS:=0; //--重新計時
SysStatuMark:=0; //--清(qīng)除(chú)告警(jǐng)

IF EtherCAT.xConfigFinished=FALSE THEN
EtherCAT.xRestart :=Reset_key; //---如果EtherCAT網絡有問題,重啟網絡
END_IF

Reset_key:=FALSE;
END_IF

IF Setup_key=TRUE AND SysStatuMark=0 THEN //----係統正常的情況下,如果手動調試按鈕,轉到調試狀態
Sysstatus:=3;

END_IF
//Setup_key:=TRUE;
IF Setup_key=FALSE AND SysStatuMark=0 THEN //----係統(tǒng)正常的情況下,如果手動調試按鈕,轉到(dào)調試狀(zhuàng)態
Sysstatus:=2;

END_IF

2: //正常(cháng)停機(jī) Stopped, Normal

AxisConvy_RUN:=0;

IF Axis_CONVERY.nAxisState=4 OR Axis_CONVERY.nAxisState=5 THEN
AxisConvery_Stop:=1; //此處給出停(tíng)機標(biāo)誌
END_IF

IF Axis_FlyCut.nAxisState=4 OR Axis_FlyCut.nAxisState=5 THEN
AxisFlyCut_Stop:=1; //此處給出停(tíng)機(jī)標誌
END_IF

IF Setup_key= TRUE THEN
Sysstatus:= 3; //goto JOG and Setting

END_IF

IF Run_key= TRUE THEN
Sysstatus:= 4; //Proparing to run
Run_key:=0;
Run1Cmd:=1;
END_IF

3: // Manual Jogging and setting, Omitted because of no Set_Key here
MC_Jog1( Axis:= Axis_Convery, JogForward:= JOG_AxisConvery_for, JogBackward:=JOG_AxisConvery_bak, Velocity:= 100,Acceleration:= 1000, Deceleration:= 1000, );

MC_Jog2( Axis:= Axis_FlyCut, JogBackward:= JOG_AxisFlyCut_for,JogBackward:=JOG_AxisFlyCut_bak, Velocity:= 100,Acceleration:= 1000, Deceleration:= 1000, );

IF FlyZero_key= TRUE THEN
MC_SetPosition1(Axis:= Axis_FlyCut,Execute:=TRUE,Mode:=FALSE,);
FlyZero_key:= FALSE;
END_IF

IF Setup_key= FALSE AND JOG_AxisConvery_for= FALSE AND JOG_AxisFlyCut_for=FALSE AND JOG_AxisConvery_bak= FALSE AND JOG_AxisFlyCut_bak=FALSE THEN
Sysstatus:= 2;
END_IF

4: //SlaveAxis Adjusting, 若飛(fēi)剪軸不在等待位置,先回到原點
MC_MoveAbsolute2(Axis:= Axis_FlyCut ,Execute:=Run1Cmd ,Position:=0 ,Velocity:=360 ,Acceleration:=3600 ,Deceleration:=3600 , );
Run1Cmd :=0;
//MC_Home1(Axis:= Axis_FlyCut, Execute:= Run1Cmd, Position:= 0, );

IF MC_MoveAbsolute2.done=TRUE THEN
MC_MoveAbsolute2(Axis:= Axis_FlyCut ,Execute:=FALSE ,);
CAM_TabEnable:=TRUE;//凸輪表使能
Sysstatus:=5; //goto runing

//初始化用於同步起始點的比較寄存器緩衝,這裏設計了2級緩衝,Clear CMR buffer------>>--
CMR0:=0;
CMR1:=0;
CMR_Pointer:=0;

//讓自由計時(shí)器從(cóng)新計時(shí),便於檢查色標信號超時判斷--------->>-----
PowerupTimerS:=0;

END_IF

5: //MasterAxis firstRun
//傳送帶開始以速度方式運動,運行速度(dù)Vspeed為按時間變化----------------->>--
AxisConvy_RUN:=TRUE;

CAM_InEnable:=TRUE;//凸(tū)輪同(tóng)步(bù)使能,由CMR+Offset比對匹配(pèi)時,觸發同步

END_CASE

//---以下為所有狀態都需要的處理---------------->>
//-----前麵作了MC的執行觸發、使能標誌的處(chù)理,下麵統一放在這裏(lǐ)------>>
MC_CAMTableSelect1(
Master:= Axis_CONVERY,
Slave:= Axis_FlyCut,
CamTable:= Cam1,
Execute:= CAM_TabEnable,
Periodic:= FALSE,
MasterAbsolute:= FALSE,
SlaveAbsolute:= 1,
Done=> Tbldn,
Busy=> ,
Error=> ,
ErrorID=> ,
CamTableID=> Cam1_ID);

//---比較目標緩衝區的長度,觸發CAM同步的判(pàn)斷、CamIn的觸發-----
IF CAM_InEnable=TRUE THEN
IF BufDeep >0 THEN
tmp1:=Axis_CONVERY.fActPosition-(TargetPointArry0+SensorCut_Length);
IF tmp1>-0.1 THEN
CamIn_trig:=1;

TargetPointArry0:=TargetPointArry1;
TargetPointArry1:=TargetPointArry2;
BufDeep:=BufDeep-1;
END_IF
//---防錯處理:若傳送帶的當前位置比比較點的位置(zhì)大,清掉無(wú)用的比較(jiào)點----->>
(* (tmp1>0.1) THEN
TargetPointArry0:=TargetPointArry1;
TargetPointArry1:=TargetPointArry2;
IF BufDeep>0 THEN
BufDeep:=BufDeep-1;
END_IF

END_IF *)

END_IF
END_IF

pp:=Run_key;

MC_CamIn1(
Master:= Axis_CONVERY,
Slave:= Axis_FlyCut,
Execute:= CamIn_trig,
MasterOffset:= 0,
SlaveOffset:= 0,
MasterScaling:= 1,
SlaveScaling:= -1,
StartMode:=0 ,
CamTableID:= Cam1_ID,
VelocityDiff:= 0,
Acceleration:= 30,
Deceleration:= 30, );

CamIn_trig:=FALSE; //

MC_CamOut1(
Slave:= Axis_FlyCut,
Execute:= Stop_key,
Done=> ,
Busy=> ,
Error=> ,
ErrorID=> );

MC_MoveVelocity1(Axis:= Axis_CONVERY , Execute:=AxisConvy_RUN , Velocity:= Vspeed , Acceleration:= 60, Deceleration:=60 , );

//如果2個軸都已停穩3=standstill,返回停機狀(zhuàng)態
(*IF Sysstatus=5 AND Axis_CONVERY.nAxisState=3 AND Axis_FlyCut.nAxisState =3 THEN
Sysstatus:=2;
END_IF
*)
//隻要有1個軸故障停機1=errorstop,就返回(huí)故障停(tíng)機狀態
IF Axis_CONVERY.nAxisState=1 OR Axis_FlyCut.nAxisState =1 THEN
AxisFlyCut_Stop:=1;
AxisConvery_Stop:=1;
Sysstatus:=1;
END_IF

IF Stop_key=1 THEN
AxisFlyCut_Stop:=1;
AxisConvery_Stop:=1;
AxisConvy_RUN:=0;
Stop_key:=0;
END_IF

//----測試位移(yí)----->>
MC_MoveRelative1(
Axis:= Axis_CONVERY,
Execute:= test1,
Distance:=120 ,
Velocity:= Vspeed,
Acceleration:=60 ,
Deceleration:= 60,
);

//----測試(shì)位移------>>
MC_MoveRelative2(
Axis:= Axis_FlyCut,
Execute:= test2,
Distance:=360 ,
Velocity:= Vspeed,
Acceleration:=60 ,
Deceleration:= 60,
);

MC_Stop1(Axis:= Axis_CONVERY,Execute:=AxisConvery_Stop,);
MC_Stop2(Axis:= Axis_FlyCut,Execute:=AxisFlyCut_Stop,);
AxisFlyCut_Stop:=0;
AxisConvery_Stop:=0;

MC_Reset1(Axis:= Axis_CONVERY, Execute:= r1, );
MC_Reset2(Axis:= Axis_FlyCut, Execute:= r2, );
MC_Reset3(Axis:= Axis_ZJ, Execute:= r3, );

IF Sysstatus >0 AND ( 飛剪伺服.wstate <>8) THEN
b:=b+1;
SysStatuMark:=2; //第二個伺服(fú)網絡斷線
END_IF

IF Sysstatus >0 AND ( 追剪伺服.wstate <>8) THEN
a:=a+1;
SysStatuMark:=3; //第(dì)一個伺服網絡斷線
END_IF

//---下麵的語句(jù)是(shì)為了讓MC指令能得到下一次的上升沿------------>>---
MC_MoveAbsolute2(Axis:= Axis_FlyCut ,Execute:=FALSE , );
MC_MoveVelocity1(Axis:= Axis_CONVERY , Execute:=FALSE,);
MC_SetPosition1(Axis:= Axis_FlyCut,Execute:=FALSE,Mode:=FALSE,);

繼續閱讀
我的微信(xìn)
這是我的微信掃一掃
weinxin
我的微信
微信號已複製
我的微信公眾號
我的微(wēi)信(xìn)公眾號掃一掃(sǎo)
weinxin
我的公眾號
公眾號(hào)已複製
 
獸藥視覺計數包裝機:原(yuán)理(lǐ)、優勢(shì)與選購全指南 其他

獸藥(yào)視覺計數包裝機:原理、優勢與選購全指南

核心概念 這是一種集成了機器視覺(jiào)係統、精密計數機構和自動包裝機於一體(tǐ)的自動化(huà)設備。它的主要功能是替代傳統的人(rén)工數粒、裝瓶/裝袋操(cāo)作,解決效率低下、易出錯、有交叉汙染風險等(děng)問題。 主要工作流程 上料:獸...
自動包(bāo)裝,解放(fàng)雙手:父子企業如何用2台設備重塑生產(chǎn)效(xiào)率 其他

自(zì)動包裝,解(jiě)放雙手:父子企業如何用2台設備重塑生產效率

自動包裝,解(jiě)放雙手:父(fù)子企業如何用2台設備重塑生產效率 “比起人工來省很多事情,24小(xiǎo)時運轉,有問題(tí)自動報警,員工隻需要處理就行。” ——這是绿巨人成版人APP下载地址對一家(jiā)10多人(rén)小(xiǎo)型企業回訪時,聽(tīng)到的真實反饋。 在製造...
智(zhì)能視覺計數包裝機:開啟冷凍食品包裝的精(jīng)準高效新時(shí)代 其他

智(zhì)能視覺計數包(bāo)裝機:開啟冷凍食品包裝的(de)精準高效新時代

智能視覺計數包裝機(jī):開啟冷凍食品包裝的精準高效新時代 在現代食品工業的快(kuài)速發(fā)展中,冷凍食品行業對包裝環節的效率和精準度提(tí)出了更高要求。傳統人工計數(shù)效率低下,而稱重包(bāo)裝又難以避免因(yīn)物料重量差異(yì)導致的誤差...
電阻、電容視(shì)覺計數(shù)包裝:滿足電子行業極致精度要求 其他

電阻、電容視覺計數包裝:滿足電子行業極致精度要求

電阻、電容(róng)視覺計數包裝:滿足電子行業極致精度要求 在(zài)電子製造領域,電阻、電容等被動元件的計數包裝精度直(zhí)接關(guān)係到SMT產線的運行效率和產品質量。隨著元件尺寸不斷縮(suō)小至0201(0.6×0.3mm)、01...