Programmera en orderföljd med IF/WHILE/FOR

Permalänk

Programmera en orderföljd med IF/WHILE/FOR

Bakgrund: Jag har till uppgift att programmera en robot+plc till att hämta och lämna saker i ett sorts lager. Har lyckats att ha två platser (en hämta och en lämna), programmet jobbar på det viset att när roboten har lämnat en detalj i lagret så skickar den ett variabelvärde till en annan dator (station100) att nu finns en detalj att hämtas(så hämtas den vid behov av en portalrobot). Och flaggar även den plats detaljen ligger på som "upptagen". Borde ge den relevanta delen av hur uppgiften utförs.

Problemet är nu att det jag ska utöka antalet lagringsplatser, när jag placerat en detalj och skickat värdet till station100 tex Detalj_finns_att_hamtaST400=431. Då vet station100 att det finns en detalj att hämta i det facket, men direkt när den detaljen är placerad så kommer en ny detalj att placeras i ett annat fack och även den kommer skicka ett variabelvärde till station100 som skriver över det gamla värdet på 431 (då den använder samma variabel för bekräfta att en hämtning är möjlig). Med andra ord blir första detaljen bortglömd :/
Det jag behöver hjälp med är alltså
Att programmera någon sorts orderföljd så att station100´s variabelvärde inte skrivs över och glöms bort. Detta med en rad IF-sattser(while / for om det verkar mer rimligt).

PS: Vet att det kan framstå luddigt, men jag försöker förklara allt så gott det går, har inte heller programkoden tillgänglig då den ligger i en robot för tillfället + det kräver även övriga plc-program för att komma in i det. Men om någon känner sig manad att ta åt sig uppgiften att förklara för mig hur de kan lösas (om de kan) så vore det grymt Tack på förhand

EDIT: Tror inte det finns möjlighet till att lagra i arrays* EDIT-EDIT: Jag kom fram till en lösning, för intresserade så finns den redovisad längst ner

Permalänk
Vila i frid

Har du inga möjligheter till arrayer med struktur blir det knivigt. Vad är det för språk?
Har du möjlighet till filhantering, dvs att skapa en form av array som en fil?

När jag automatiserade Ericssons radiobasstationstillverkning i Lynchburg 98-02 blev det raka textfiler på enklast möjliga sätt med lås-filer för exklusiv access. Det diskuterades en himla massa om kommunikationen för det hela som t.ex. databashantering och dde men det enda enkla alternativet blev till slut en sketen textfil på en server - dokumenterad så att även Nisse Hult kunde förstå hur det funkade - på mindre än en minut. När ett processmoment tar sekunder att utföra spelar 1 eller 2 millisekunder inte så stor roll.

Permalänk

Vi programmerar i ABB´s programspårk "rapid" när det gäller roboten, sen kombineras det med en PLC som går att programmera i ST (strukturerad text). Inc några andra men just strukturerad text är nog mest relevant.. Och PLC-programmet har möjlighet att lagra flertalet variabler + köra flertal programkoder("filer") parralellt med varandra.

EDIT: Verka som man kunde ha arrays, dock vet jag inte riktigt hur jag ska lägga upp det ändå. haha

Permalänk
Vila i frid

Du har ju hopers saker att leka med i RAPID (som jag vet noll och intet om, iaf för 5 minuter sedan).

Kika på sidan 3-Filetime-4 @ http://rab.ict.pwr.wroc.pl/irb1400/datasys_rev1.pdf där du har exempel på hur du kan skapa arrayer av records.

Permalänk

Jag kommer med mer info som kanske bör ha klarlagts tidigare, det är PLC´n som tar "kontakt" med station100(den station som sedan skickar klarkommando till en portalrobot som sköter hämtning) när roboten har gjort sitt jobb. Och även den som bör hålla reda på alla variabler.

Första uppläget som hade en lagringsplats. Att när roboten gjort sitt jobb så sätter den en variabel mx431busy=true och skickar ett klarkommando till station100 att den finns. Då är det upplagt att
IF (mx431busy = true) THEN
Detalj_finns_att_hamtaST400=431 "431 representerar lagerplatsen som redan är fördefinerad i portalroboten"
END IF
Detta funka felfritt, sen fanns det även ett kommando som då självfallet satte mx431busy = false efter att roboten faktiskt hämtat detaljen.

Sen tänkte jag att för att lägga till en extra plats så kunde man bara göra en till IF-sats om den va uppfylld så skrev den till station100 så det blev.

IF (mx431busy = true) THEN
Detalj_finns_att_hamtaST400=431
END IF
IF (mx432busy = true) THEN
Detalj_finns_att_hamtaST400=432
END IF

Men problemet är tydligen här att man får inte skriva över den variabeln kontinuerligt från till från till i hämtningsprocessen. Och som det är upplagt här när båda är sanna så är det precis det den kommer att göra. Finns det något smidigare sätt att få den till att komma ihåg att detaljerna finns där men ändå inte skriva över den konstant aka hantera den i en orderföljd.

PS: borde kanske klarlagt detta från första början, btw din link gick inte att öppna för mig fick skadat dokument blablabla. Så det jag behöver bygga i är strukturerad text då roboten inte kan kommunicera direkt till station100 utan måste gå via plc´n först. Tack för tålamodet än sålänge

EDIT: arrays ska vara möjligt i strukturerad text tror jag =/

Permalänk
Vila i frid

Att länken inte gick att titta på åt förmodligen ert företags paranoida säkerhetstänkade för det KAN ju vara smitta i PDF-filer. Pust, stön.. stånk! Se till att fixa en SSH-tunnel eller Teamviewer till din hemdator så att du kan utföra det som företaget anser vara en säkerhetsrisk.

Någon mer ingående och detaljerad hjälp från min sida är väl inte direkt aktuellt, jag slutade på Ericsson 2006 efter 24 år och har varit ledig sen dess. Ivfsh, rita upp produktionsflödet på papper och beskriv i ord hur du hade tänkt instruera personalen (och deras sätt att kommunicera med varandra) att sköta det där manuellt - sen är det bara att överföra principen till datorkod. Undvik att snurra in dig i "smarta" lösningar som ingen förstår sig på förrän efter 3 dagars intensivkurs.

Permalänk

Kanske bör säga att det är en utbyggnad på en uppgift jag fått i skolan Men tack för att du försökt iaf Och jag kolla på pdf:en hemmifrån den ville inte fick svar "dokument skadat"

Permalänk

Ifall någon annan snubblar över tråden och letar svar så om jag fram till en smart lösning (enligt mig iaf ) hur man kunde lösa det med ett antal IF-satser. Fick även veta att det gick med array´s men orkade inte sätta mig in i det just då de får bli en annan gång

I mitt fall så va det att lagra tre st detaljer på tre olika ställen utan att skriva över variabeln som hanterade att detaljer finns att hämta vid våran station. Först börja vi med att sätt minnes-flaggor(bool:ska variabler) på lagringsplatserna
mx411Busy
mx412Busy
mx413Busy
Dessa sattes till TRUE då roboten hade levererat detaljen i rätt fack beroende på om första va upptagen så lade den naturligtvis i nästa osv.
Sättet som lagringen hanterades på blev såhär

IF (mx411Busy=TRUE) AND (mx413=FALSE) THEN
detalj_finns_att_hamta := 411; (*411 = förbestämt nummer på lagringsplatsen*)
END_IF;
IF (mx411Busy=FALSE) AND (mx412=TRUE) AND (mx413=TRUE) THEN
detalj_finns_att_hamta := 412;
END_IF;
IF (mx411Busy=TRUE) AND (mx412=FALSE) AND (mx413=TRUE) THEN
detalj_finns_att_hamta := 413;
END_IF;
På så sett så skriver man inte över variabeln fören den föregående har hämtats. (Behöver ytterligare en IF-sats som hanterar "nollställning" av mx-variablerna)
Den jobbar utefter svaret man får från portalroboten (roboten som hämtar detaljerna från lagret)

IF (svar_fran_portalrobot=411) THEN
mx411Busy := FALSE

Sen fyller man ju in med mer IF-satser för varje fack då. Och eftersom den nollställs så kommer föregående IF-satser kunna sekvent fortsätta. På så sett får man även en FIFO hantering.

PS: Hoppas det går att förstå vad jag försöker lägga fram och att någon som får samma problem som jag hade kan ta hjälp av detta.