Sida 2 av 2

Re: PLC programmering

Postat: 19 juni 2013, 19:05:57
av Bittämjaren
Magnus_K du har rätt, det går naturligtvis att göra på det sättet också.
Jag har använt modulen för att läsa signaler från intilliggande maskiner.
Ritningarna blir lite enklare också.

Re: PLC programmering

Postat: 20 juni 2013, 09:43:54
av Micke_71
Testade lite snabbt (15min) o göra som mitt förslag var. Den enkla lösningen ville inte fungera så provade flera andra varianter. Fick inte till något enkelt.

Problemet var att de räknare jag hade i mitt plc program inte hade en separata ingångar för upp och ner utan en count och en "upp/down" Provade att lägga på lite logik för att få till upp och ned ingångar men det ville sig inte ändå. Vart instabilt o hamnade på något sätt i självsvängning. Kanske bara PLC mjukvaran för jag kan inte för allt i världen se hur det kunde bli så.

Re: PLC programmering

Postat: 20 juni 2013, 11:34:57
av ojz0r
Jag hade tänkt klistra in ett ladderdiagram men code taggen verkar inte alls vara mono space som den borde vara så det såg ut som skit.

Jag bifogar en txt fil istället, använd typsnitt Lucida Console i notepad så ser det okej ut.

Jag reserverar mig mot missar ;P

Re: PLC programmering

Postat: 24 september 2013, 23:01:06
av rawsezx
Dammar kanske av en gammal tråd i forat, men om du fortfarande söker efter funktionen och använder CoDeSys så kan du i sådana fall skapa ett eget funktionsblock och sedan använda dig av följande
i ST.

Kod: Markera allt

PROGRAM PLC_PRG
VAR
	OnePush					: R_TRIG;
	Timer_3_Sec_Reset		: TON;
	AddTime					: TIME;
	Timer_Set_Solenoid	: TP;
	RunCycle					: BOOL;
	Solenoid					: BOOL;
	Knapp						: BOOL;
END_VAR


(* Timer för att dra solenoid *)
Timer_Set_Solenoid(IN:=RunCycle, PT:=AddTime);

(* Utgång för solenoid, när Timern är aktiverad, och inom tidsramen så drar utgången *)
Solenoid := Timer_Set_Solenoid.Q;

(* R_TRIG funktion för att endast detekera en puls på knappen *)
OnePush(CLK := Knapp);

(* När Timern för solenoiden har räknat upp så nollställs timerfunktionen *)
RunCycle := Timer_Set_Solenoid.Q;

(* IF sats för att kontrollera att knappen har tryckts in och att tiden inte överstiger 50 sekunder *)
IF (OnePush.Q = TRUE) AND (Addtime < T#50s) THEN
	(* Adderar 10 sekunder per tryck *)
	AddTime := AddTime + T#10s;
	(* Om inte timern har startat så sätts den till aktiv *)
	RunCycle := TRUE;
END_IF;

(* Timer för att kontrollera hur länge knappen hålls in, 3 sekunder aktiverar timerns utgång *)
Timer_3_Sec_Reset(IN:=Knapp, PT:=T#3s);

(* När 3 sekunders timern är aktiverad och tiden uppfylld så nollställs allt. *)
IF Timer_3_Sec_Reset.Q = TRUE THEN
	(* Nollställer den akumlerade tiden *)
	AddTime := T#0s;
	(* Nollställer solenoiden och timern om denna är aktiverad *)
	RunCycle := FALSE;
END_IF;




Re: PLC programmering

Postat: 27 september 2013, 11:19:04
av Magnus_K
Tack så mycket för din post raw. Ser fantastiskt lovande ut.
Än så länge har jag lyckats göra just den funktionen i CFC men jag börjar få lite ont om utrymme i min PLC så ST tar förhoppningsvis lite mindre plats... eller?

Ledsen om det tar tid innan jag svarar men det händer lite annat i livet just nu.

Re: PLC programmering

Postat: 10 november 2013, 21:47:51
av Magnus_K
Hej och hå, här ska man inte stressa!

@ojz0r: Tack för att du tagit dig tid. Jag känner mig väldigt otacksam men jag kör nog på strukturerad text istället.

@rawsezx: Jag gjorde ett eget FB som du sa (framför allt för att flera knappar ska använda den här funktionen). Koden fungerade UTMÄRKT och precis det jag efterfrågade. Tack!
En liten efterfråga, vilket programspråk är det här egentligen? Jag har för mig att jag läste någonstans att det är Pascal man ska plugga om man ska skriva ST enligt IEC 61131-3, stämmer det eller har jag drömt?