Leegflitser Project


Ken je deze? Het is de plc van het kippenhok project: de Siemens S5 95U plc.

De bedoeling is om mbv. een plc een pulstrein te genereren en deze pulsen te gebruiken om de passage van een auto te simuleren bij een snelheidscamera met inductielussen.

Waarom? It has been done before (tuftufclub). Ik was eigenlijk van plan om mbv. de plc een servo aan te sturen maar door de te grote toleranties van de interne klok bleek het niet mogelijk om een servo een steady positie in te laten nemen. Het resultaat was een nogal instabiel PWM signaal. En van het een kwam het ander want het maken van een pulstrein was eigenlijk wel leuk. Ik zocht dus eigenlijk een toepassing voor een stukje code. Het werd de leegflitser.

   

Er liggen 2 lussen in de weg op een bepaalde afstand van elkaar. Indien een auto over lus 1 rijdt, wekt de auto een bepaalde inductie op. Dit inductiesignaal heeft bepaalde kenmerken die uniek zijn voor die auto. De auto rijdt vervolgens over lus 2 en genereert hier ook een inductiesignaal. Het besturingssysteem dat de camera bedient vergelijkt of het inductiesignaal van beide lussen op minstens 3 plekken gelijk is en rekent de tijdsverschillen uit. Hier ontstaan dus 3 metingen van snelheid. Vervolgens wordt daar een gewogen gemiddelde van genomen.

Er moet dus voor gezorgd worden dat op beide lussen een identiek signaal geproduceerd wordt. Om de camera ook nog af te laten gaan moet je de tijd tussen de pulsen van magneet 1 licht laten afwijken van de pulsen van magneet 2.


De plc wordt geprogrammeerd in de taal Step5. Ik doe dat met S5 für Windows, de Duitse versie. Dat betekent dat je een Duitse instructieset hebt! Met dit pakket kun je ook een simulatie kunt doen van de plc. De simulator is 100% compatible met de hardware, alleen de klokfunctie vertrouw ik niet helemaal.

Tijdens simulatie (zie foto) geeft de rechterkant van het scherm de statussen van in- en uitgangen van de plc, plus de bits waar je bijv. vlaggen gebruikt. Je kunt door het zetten van vlaggen tijdens de run in- en uitgangsignalen aan- of uitzetten. In het onderste gedeelte van de linkerkant kun je realtime de bytes in het geheugen meelezen.

Die vlaggen zijn ook van buitenaf te beinvloeden mbv. een stukje software dat ik al aan de gang heb. Zo kun je via de webserver data direct in de registers van de plc wijzigen.

Software

De pulstrein
Om een camera leeg te flitsen is het nodig dat er een pulstrein gegenereerd wordt die ervoor zorgt dat een snelheidsovertreding gedecteerd wordt en dat de camera even de tijd heeft om de film door te spoelen.

De tijdafstand tussen de pulsen
Stel lengte tussen lussen is 2 m. De tijd tussen de detecties is dan de snelheid gedeeld door de afstand. Dus als een auto 30 m/s rijdt, dan heeft hij 2 m gedeeld door 30 m/s = 0,067 seconden daarvoor nodig. De tijdafstandfunctie is dan
intervaltijd = lusafstand / snelheid

De lengte van de puls
Stel de lengte van een voertuig is 4 m en de lus is 0,5 m breed. We nemen aan dat de detectie al begint terwijl het voertuig nog niet geheel op de lus is. Snelheid is 30 m/s. Dan is de tijd dat de lus een voertuig detecteert gelijk aan de lengte van het voertuig gedeeld door de snelheid ervan en vermenigvuldigd met de lengte van de lus. Dus in het gegeven voorbeeld 4 m / 30 m/s * 0,5 m = 0,06 s. De pulstijd is dus
pulslengte = voertuiglengte / snelheid * lusbreedte

Doorspoelen
Voor het doorspoelen van de film nemen we 1 seconde. Omdat het kan zijn dat de lengte tussen de lussen kleiner is dan de lengte van het voertuig krijgen beide pulsen een aparte timer.

Toleranties
Het relais schakelt aan na 0,008 s en uit tussen 0,004 en 0,015 s. Dit geeft een vervuiling van de pulstrein, maar daar is op zich wel mee te leven. Het betekent dat we de snelheidsverschillen tussen de gesimuleerde auto en de te handhaven snelheid groot houden.


PB1
;user interface
	U	E  32.0
	S	M  0.0

	U	E  32.1
	R	M  0.0

	BE

PB2
;trigger puls
	U	M  0.0
	UN	T  2
	L	KT 100.0
	SE	T  1
	U	T  1
	L	KT 050.0
	SE	T  2
	U	T  1
	=	A  32.7	
			    
	BE

PB10
;puls inkomende lus
	L	KT 006.0
	SV	T  3	

	U	T  3
	=	A  32.0	


	BE

PB11
;puls uitgaande lus

	L	KT 007.0
	SI	T  4	
	U	T  4
	=	A  32.6	

	UN	T  4	
	L	KT 006.0
	SI	T  5	
	U	T  5
	=	A  32.1	
	BE
Hiernaast de S5 programma code. Het is lekker compact en simpel geworden.

Uit blok PB1 blijkt dat het ding bediend wordt door twee druk schakelaars. Een om de pulstrein te starten en een om te stoppen. Dit is strikt genomen niet noodzakelijk maar ivm. mogelijke toekomstige uitbreidingen wordt alles met vlaggen gestuurd. Zo kan ik dan makkelijker timers inbouwen die bijv een sequence van verschillende snelheiden gaan genereren, kan ik een synchronisatiesignaal naar de videocamera maken (we gaan het filmen!), etc.

De adressering van byte 32 is specifiek voor de S95 U. Het is de standaard-I/O kaart.

Blok PB2 bevat de hartslag van het geheel. Het is in feite een flipflop met twee verschillende timers. Hiermee wordt een triggerpuls gegenereerd die een halve seconde duurt. Daarna gaat hij een hele seconde staan wachten (doorspoelen van de camera), maakt weer een triggerpuls, enzovoort.

De trigger kijkt naar de stand van de vlaggen die door PB1 ge-set zijn. Met de drukschakelaars wordt dus de hartslag van het systeem aan of uit gezet.

PB10 is de inkomende lus. De puls van de inkomende lus wordt getriggerd door de hartbeat. Bij een trigger start hij meteen hoog en krijgt een pulstijd van 0,006 s. Gedurende deze tijd staat er een stroompje van 27V op 32.0 die verbonden is met een relais dat een stroompje van 9V op de eerste spoel zet. Hiermee simuleren we de eerste doorkomst van de auto.

De puls van de uitgaande lus plus de vertraging wordt geregeld in PB11. Allereerst wordt de vertraging gerealiseerd door een afvalvertraging. van 0,007 s. Tijdens deze periode brandt ter controle een ledje op het I/O blok om te kunnen zien waar we zijn in de sequence. Zodra de vertraging uit is wordt een stroompje op 32.1 gezet met een afvalvertraging van 0,006 s.

En vervolgens wachten PB10 en PB11 weer op een nieuwe hartbeat.

Kind Kan De Was Doen.

Disclaimer

Deze informatie wordt ter beschikking gesteld voor educatieve doeleinden. Ik aanvaard geen enkele aansprakelijkheid voor (rechts-)gevolgen ontstaan door het gebruik of misbruik dat onverhoopt mocht voortvloeien uit het gebruik van deze informatie.

Klik aub op de sponsor hieronder als je dit artikel waardeert.