Programmable logic controller (genomgång av sw på s. 6)

Berätta om dina pågående projekt.
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Har nu börjat på editorn av funktionsblock. Det enklaste är färdigt,
variabeleditor och parametereditor. Kvar återstår programeditorn där man
bygger upp koden med hjälp av andra funktionsblock. Men jag måste
klura lite första för komma på ett bra upplägg.

Från att ha tänkt att tänkt att utvecklingsverktyget skulle bli det svåra tror
jag nu mer på översättaren från funktionsblock till asm eller C. Men en sak
i taget.


Bild

Bild
spaderkung
Inlägg: 138
Blev medlem: 12 maj 2007, 11:24:24
Ort: Sjöbo

Inlägg av spaderkung »

Mastodont-intressant. Hur många individuella timers skall kunna hanteras? Dessa kommer nog ställa en del krav på bra OS. Resten av programmet torde ju bli rätt så linjärt.

Den RS232 som är med, är den enbart för programmering? Modbus är ju för senare bruk ett ganska enkelt protokoll.

Är analoga signaler avsiktligt utelämnade?
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Kul att nån tycker det är intressant! :)

Jag har inte funderat mycket på hur många/mycket av olika saker. Men
timrarna tror jag inte behöver ta upp så himla mycket kraft ändå. Med en
upplösning på 100ms, 100st timrar som tar 100cycler/st att exekvera blir
det bara ca 0,25% CPU-belastning med en dsPIC@40MIPS om jag räknat rätt.

RTOS har jag tyvärr ingen tidigare erfarenhet av, sökte en distanskurs förra
hösten men kom inte in pga krav på en OS-kurs. Men det ordnar sig
säkert. Det behöver inte vara speciellt avancerat.

Ang. RS232 var det precis så jag tänkte, endast för programmering.
Modbus går mycket väl att köra över RS232. RS232 tillhör första lagret i
OSI-modellen medans Modbus ligger nånstans högre upp.

Men anledningen till att jag hoppar över fältbus och analoga signaler är för
att projektet inte ska bli för omfattande från början. Om/när jag blir färdig
med det jag tänkte först, då ska jag fixa till fler finesser.
spaderkung
Inlägg: 138
Blev medlem: 12 maj 2007, 11:24:24
Ort: Sjöbo

Inlägg av spaderkung »

Ja, timers blir ju enklare ifall de hanteras mjukvarumässigt i svepet och inte som interrupt. Vilka krav som ställs på ditt OS får framtiden utvisa.

Något som enligt min mening talar för en IO-buss i redan från början är att de portar du säger "ev valbara in/ut" blir enklare på alla sätt om de just är antingen in eller ut. Bussen kunde då gått till PIC12/16/18 (men det går kanske lika bra utan MCU här) som basat över DI/DO och AI/AO i ver 2. För framtiden kan nog I2C vara en bra instegsbuss. Lätt, liten och som dessutom stöds hårdvarumässigt i många PIC.
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Så sant som du säger det. De får vara in- respektive ut-gångar, det blir
enklast så. Hur är i2c jämfört med SPI?

Nu har jag påbörjat FBD(functionblock diagram)-editorn. Det går att
instansiera block och flytta runt på dom med eller utan grid och snap.

Igårkväll kom jag på en briljant idé för att fixa autmatisk dragning av
knytningarna. Istället för att göra som i t.ex. Simulink där användaren själv
drar kopplingarna ska programmet dra dom automatisk. Det i sig är inte
något speciellt då det finns i t.ex. Controlbuilder och säkert i många andra
program. Men det smarta jag kom på var att använda en pathfindind-
algoritm som jag skrev till ett tile-baserat spel för en massa år sen. Den
går att applicera nästan rakt av i detta fall och kommer förhoppningsvis
leda till korta och fina ledningar helt automatiskt :)

Jag gjorde ett testprogram då det begav sig för att prova lite. Exemplet
visar lite hur algoritmen fungerar. Med hjälp av en estimeringsfunktion
söker algoritmen den kortaste vägen hela tiden.
Bild

Dialogrutan för att lägga in ett fb
Bild

Självaste fbd-editorn. Knytningar går inte att göra än.
Bild
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Sådärja, det tog lite tankemöda för att få ihop det på ett bra sätt, men nu
knyter sig anslutningarn själva :)

Jag har lagt till 2st viktningar i A*-algoritmen för att bestraffa svängar samt
premiera raka vägar. Uppenbarligen fungerar det inte alltid så bra som ni
ser nedan. Men jag tror att det går att justera bort med några konstanter.

Men på grund av dåligt intressed blir det inga fler uppdateringar av denna
projektttråd. Men projektet fortsätter.

Bild
Användarvisningsbild
MadModder
Co Admin
Inlägg: 31305
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Inlägg av MadModder »

Jaså, nä... det är ju som sagt bara programmering. Inte mycket att orda om. Här tycker vi om hårdvara. :D

Men det där med att programmera något via ett program man skriver själv är lite intressant. Och svårt tycker jag. Hur får man t.ex programmet att räkna ut en formel man skriver in i ett fält, som om formeln hade stått i koden direkt? :?
Håller på med nånting jag tycker liknar PLC-tänket. Till 486:an i mitt serverskåp finns en hög med ingångar i form av digitala ingångar, RS232 och temperaturer mm.. Det finns också en hög utgångar. Utgångarna ska ställas om beroende på datum, tid och hur ingångarna är för tillfället. Det ska läggas till poster i en lista, via GUI:et.
T.ex om klockan är mellan 05:00 och 21:00, samt om det är mörkt ute, så ska lampgrupp nummer 1 och 2 vara tända, annars släckta.
Om rörelsedeckarn aktiveras eller ytterdörren öppnas och det är mörkt ute, ska lampgrupp 1 tändas, och vara tänd i max 5 minuter, eller sålänge någon av dessa ingångar är på. Gruppen ska ju inte släckas om förra vilkoret fortfarande är uppfyllt.
Osv.
Inte så svårt kan man tycka, men det har slagit knut i skallen. :P
För tillfället har jag inget GUI alls, utan allt är hårdkodat. Jobbigt om man vill ändra en tid eller något villkor...
Användarvisningsbild
Purre
EF Sponsor
Inlägg: 5132
Blev medlem: 7 januari 2006, 18:19:15
Ort: Eskilstuna

Inlägg av Purre »

MM det hade varit lätt fixat med ett Mitsubishi-PLC och programmet Megraf då det använder sig av Sequential function chart vad nu det blir på svenska är en bra fråga men enkelt att programmera och få en bra överblick är det iaf :) Väljer bara övergångsvilkoret och sen vad som ska hända :)
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Det är ju ganska trivialt MM ;) Ditt fall är relativt specifikt till skillnad från en
PLC som ska gå att programmera väldigt generellt.

För att börja nånstans och få det bättre än hårdkodat kan du ha följande
struktur och lite kod.

Kod: Markera allt

struct event {
	time startTime;
	time endTime;
	bool and; //anger om funktionen för in-gångarna är and eller or
	bool enabled;
	int in1;
	int in2;
	int in3;
	int out;
};

//
event events[max_events]; //max_events = sizeof(data_eeprom) / sizeof(event)

//main loop 
while () {
	for (i=0; i < max_events; i++) {
		if ( time >= event[i].starttime &&  time <= event[i].endTime && event[i].in2].enabled ) {
			if ( event[i].and == false ) {
				outputs[event.out].value = inputs[event[i].in1].value | inputs[event[i].in2].value | inputs[event[i].in3].value
			} else {
				outputs[event.out].value = inputs[event[i].in1].value & inputs[event[i].in2].value & inputs[event[i].in3].value
			}
		} else {
			outputs[event.out].value = off;
		}
	}
}
Användarvisningsbild
MadModder
Co Admin
Inlägg: 31305
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Inlägg av MadModder »

Hmm...
Tänkte försöka bygga upp det som logiska funktioner.
Om jag definierar ett tidsintervall som ett block, som ger ut en etta om det är nu, och en nolla annars. Då funkar det ju som vilka ingångar som helst.
Sen bygga upp villkoren som logiska grindar.

( [07:00-17:00] AND [ljussensor=0] ) OR ( [ljussensor=0] AND [rörelse] ) = [utgång 1]

Kanske. Fast helst i tabellform på något vis. Tål att tänkas på.

Har du din hårdvara klar?

[Edit] Hmm, det där uttrycket går ju att optimera ser jag nu :P
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Nej jag har ingen hårdvara alls. Isåfall hade jag skrivit om det. Jag kommer
att använda en dsPIC30F6014 eller dsPIC33FJ256MC710 tror jag,
eller möjligtvis en PIC32.
TERdON
EF Sponsor
Inlägg: 295
Blev medlem: 15 november 2006, 04:38:29
Ort: Solna/Laholm
Kontakt:

Inlägg av TERdON »

pheer skrev:C#
Najs, mitt favoritspråk. Om du är student kan du ibland få studentversioner av "kompletta" Visual Studio via MSDNAA på din högskola, men det antar jag att du vet om?

Hade gärna gett mig på projektet att hjälpa dig, men det är fullt upp och en rejäl bit till på jobbet just nu och kanske en bra bit in på våren, tyvärr (du kanske förstår det när du jämför med när jag hörde av mig här i tråden sist...). Dessutom gillar jag inte FBD, för min del är det ladder, flödesschema eller möjligtvis andra varianter som gäller. Men vi får väl se när de kommer istället.

Beroende på vilken tidshorisont projektet har så kanske jag har möjlighet att titta in som hjälp senare? Vi får se helt enkelt.
Purre skrev:Sequential function chart vad nu det blir på svenska
"flödesschema"
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Ja Visual C# är riktigt nice, en perfekt blandning mellan VB6(smidig visuell
design) Java(färdiga bibliotek, 100% OO) och C++(bra syntax(till skillnad från vb)).

Det låter bra, då räknar jag med att du har en färdig sfc-plugin till sommaren ;)

Tidshorisonten är obefintlig, så länge intresset är kvar kommer projektet
att leva. Men för tillfället har jag inte öppnat visual studio på ett par veckor.
Men så brukar det var, intresset går upp och ner.
ow
Inlägg: 64
Blev medlem: 30 oktober 2005, 20:17:17

Inlägg av ow »

Väldigt intressant, du får hemskt gärna fortsätta rapportera ditt projekt..

( Ja, jag är en doldis, smyger runt o läser alla projekttrådar men skriver inte så mycket... :) )
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Kort uppdatering

Inlägg av pheer »

Nu har jag kommit igång lite smått efter lite uppehåll. Håller på att skriva
kod för save/load och har börjat få lite kontroll över xml-rutinerna.

Sen tänkte jag skriva lite kod för standardfunktionsblocken. Har inte
funderat på vilka det ska vara, men de viktigaste är väl and, or, sr, timer,
ton, toff.

När det är färdigt ska jag fixa översättaren från variabellistor, fbd m.m. till
c-filer. Efter börjar det bli dags att plocka fram lite hårdvara :)

Just nu har jag ca 25 klasser och 3265 rader kod. Tänkte jag kunde skriva
det i varje inlägg så får vi en liten indikation flitigheten.
Skriv svar