2015-01-01 10 views
0

저는 PC 프로그래밍 (VB/C# .Net 및 PHP)의 배경에서 왔으며 학교에서 PLC 프로그래밍을 배우고 있습니다. 최근 테스트에서 우리는 생산 라인의 요소를 컨테이너로 밀어 넣을 함수 블록을 어디에 만들지를 결정했습니다.구조화 된 텍스트, "푸셔"를 제어하는 ​​기능 블록

지금은 매우 간단합니다. 따라서 10 초 이내에 기동이 완료되지 않으면 활성화 될 "푸셔"(더 나은 단어가 부족한 경우) 코드에 Alarm을 추가했습니다.

내 문제는 푸시 버튼이 즉시 알람 상태로 들어가고 오히려 버그가있는 것처럼 보입니다. (모든 대답은 내 코드를 구조화하는 방법에 대한 방향을 제시하거나 알람에 들어가는 이유를 알아낼 수 있습니다. 빠른 ...

(* INIT *) 
(* Drive the pusher back if its out on init *) 

IF M8002 THEN 
     SkyvTilbake := TRUE; (* My "Function"/Step to retract the pusher *) 
     Ferdig := FALSE; (*Let other components know that the pushers operation has completed *) 
     SkyverUtMotor := FALSE; (*This is the engine output for driving the pusher out *) 
     SkyverInnMotor := FALSE; (* This is the engine output for driving the pusher in *) 
END_IF; 

(* "Aktiver" is a input to activate the pusher *) 
IF Aktiver THEN 
    SkyvTilbake := FALSE; 
    SkyvUt := TRUE; (* My "Function"/Step" to push the pusher out *) 
    Ferdig := FALSE; 
END_IF; 

(* Push out step *) 
IF SkyvUt AND NOT SkyvTilbake AND NOT Alarm THEN 
    TON_1(IN:= SkyvUt ,PT:= AlarmTid ,Q:= Alarm ,ET:= TimeLeft); 
    SkyverUtMotor := TRUE; 

    (* When sensor out activates (input), retract the pusher *) 
    IF SensorUte THEN 
     SkyvUt := FALSE; 
     SkyvTilbake := TRUE;  
     SkyverUtMotor := FALSE; 
    END_IF; 

(* retract the pusher as long as there are no alarms *) 
ELSIF SkyvTilbake AND NOT Alarm THEN 
    TON_2(IN:= SkyvTilbake ,PT:= AlarmTid ,Q:= Alarm ,ET:= TimeLeft); 
    SkyverInnMotor := TRUE; 

    (* When it reach the normal position, activate "Ferdig" *) 
    IF SensorInne THEN 
      SkyverInnMotor := FALSE; 
      SkyvTilbake := FALSE; 
      Ferdig := TRUE; 
    END_IF; 
END_IF; 

(* When the alarm activates, stop all the engines *) 
IF Alarm THEN 
    SkyverUtMotor := FALSE; 
    SkyverInnMotor := FALSE; 
END_IF; 

(* RESET ALARM *) 
IF Reset THEN 
    Alarm := 0; 
    SkyvTilbake := TRUE; 
END_IF; 

PS.이 시험은 12 월 중순에 있었다, 그러나 나는 구조화 된 텍스트와 PLC 프로그램을 설계에 대한 자세한 내용을 찾고 있어요. 또한 코드는 미쓰비시 FXCPU에서 실행되도록 설계되었습니다 GX Works 2에서 작성되었습니다.

답변

1

실제로 타이머의 시간 간격 (PT : = AlarmTid)을 설정하는 곳이 표시되지 않습니다.

Mitsubishi PLC에도 익숙하지 않으므로 타이머가 자동으로 재설정됩니까? 타이머가 켜지면 절대로 꺼지지 않는 것 같습니다.

'사례'를 사용하고 싶지 않을 수도 있습니다. . . 어디에서 코드를 정리하는 경향이 있습니다.

+0

안녕하세요, 답변 주셔서 감사합니다 :) 'IN'변수가 낮아질 때마다 내 TON이 재설정됩니다. 케이스 구조를 살펴 보겠습니다. – Richard87

+0

Aha : D 덕분에 문제가 해결되었습니다.) 문제는 SkyvIn 재설정이 활성화되었을 때 재설정되지 않습니다 :) Thx! – Richard87