Disassemblering av program till PLC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
säter
Inlägg: 35153
Blev medlem: 22 februari 2009, 21:16:35
Ort: Säter

Re: Disassemblering av program till PLC

Inlägg av säter »

Säter, har du sett att exile lagt några frågetecken kring ingången TL40 (4N, 27) Vad är TL40?
TL verkar vara signaler från "TOOL MAGASINE ENCODER".
Eftersom min maskin bara har ett 30-verktygs magasin, borde väl TL40 inte behövas?
Som option fanns maskinen att få med större magasin.
bearing
Inlägg: 11668
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Disassemblering av program till PLC

Inlägg av bearing »

Ah, jag ser nu att TL40 antagligen är inlagd efteråt, och hör till TLnn längre upp. Men som exile upptäckt, är det antingen fel i dokumentationen, eller i programmet.

Angående signalen READY som används flitigt. Varifrån kommer den?
Användarvisningsbild
säter
Inlägg: 35153
Blev medlem: 22 februari 2009, 21:16:35
Ort: Säter

Re: Disassemblering av program till PLC

Inlägg av säter »

Angående signalen READY som används flitigt. Varifrån kommer den?
Den verkar höra ihop med klarsignal från styrsystemet mm.
001.JPG
002.JPG
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
säter
Inlägg: 35153
Blev medlem: 22 februari 2009, 21:16:35
Ort: Säter

Re: Disassemblering av program till PLC

Inlägg av säter »

Jag såg nu att finns 2st "ready" signaler.
Vilken avsåg du?
bearing
Inlägg: 11668
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Disassemblering av program till PLC

Inlägg av bearing »

Det hade jag missat. Syftade på ingång 1. Jag var mest nyfiken på hur ofta den signalen ändrar läge.
Användarvisningsbild
säter
Inlägg: 35153
Blev medlem: 22 februari 2009, 21:16:35
Ort: Säter

Re: Disassemblering av program till PLC

Inlägg av säter »

Jag var mest nyfiken på hur ofta den signalen ändrar läge.
Jag tror att normalt ändrar den inte läge alls.
För då är det något galet med maskinen.
Användarvisningsbild
exile
EF Sponsor
Inlägg: 496
Blev medlem: 21 oktober 2005, 23:32:07

Re: Disassemblering av program till PLC

Inlägg av exile »

Nu har jag kollat på koden lite granna och lykas benna ut endel av DGN.

På adressen 3138 till 3568 verkar vara en form av "priotering" encoder och varje felkod har en egen bit i ramminet.

Kod: Markera allt

...
3182  LDC   1820	
3183  AND   1		
3184  STO   1		temp = temp and /R_1820
3185  AND   1070	
3186  AND   1071
3187  STO   1821	R_1821 = temp and R_1070 and R_1071

3188  LDC   1821
3189  AND   1
3190  STO   1		temp = temp and /R_1821
...
Sedan av kodas biten (endast en bit kan vara satt från decodrn ovan för) med en jätte OR på adress 3569 till 3791.

Efter det går de 8 kodade bitarna till "latch" som "sparar" felkoden om signalen 1024 (Ready) är låg samt vissa koden,
på Adress 1574-1637.



Exempel om båda 1070 och 1071 är på samtidigt
1070 = SPINDLE COLLET CLAMP LS
1071 = SPINDLE COLLET UNCLAMP LS
och inget annan "fel" har upp kommit så är temp = 1 och R_1820 = 0 så kommer 1821 bli 1 och all efter följade kommer bli 0 efter som blir temp = 0.
Sedan när vi kommer till den "stora" OR så av kodas bitarna.

Kod: Markera allt

3569  LD    1811
3570  OR    1813
...
3573  OR    1821	<- 1
...
3604  OR    1903
3605  STO   1920	-> 1

3606  LD    1810
3607  OR    1811
..
3611  OR    1821	<- 1
...
3635  OR    1901
3636  STO   1921	-> 1

3637  LD    1812
3638  OR    1813
..
3666  OR    1903
3667  STO   1922	-> 0

3668  LD    1826
3669  OR    1836
...
3678  OR    1897
3679  STO   1923	-> 0

3680  LD    1819
3681  OR    1820
3682  OR    1821	<- 1
..
3713  OR    1903
3714  STO   1924	-> 1

3715  LD    1828
3716  OR    1829
...
3744  OR    1883
3745  STO   1925	-> 0

3746  LD    1849
3747  OR    1850
...
3779  OR    1883
3780  STO   1926	-> 0

3781  LD    1894
3782  OR    1895
...
3790  OR    1903
3791  STO   1927	-> 0
vilket ger
1920 = 1
1921 = 1
1922 = 0
1923 = 0
1924 = 1
1925 = 0
1926 = 0
1927 = 0

Sedan nästa program varv så skrivs de ut

Kod: Markera allt

1574  LD    1920	if R_1024 == 1 then
1575  AND   1024		temp = 1920
1576  STO   1		else
1577  LD    1928		temp = 1928
1578  ANDC  1024	end
1579  OR    1		
1580  STO   1928	R_1928 = temp
1581  STO   311		IO_311w = temp
1582  LD	1921 	osv..
vilket ger:
311w = 1
312w = 1
313w = 0
314w = 0
315w = 1
316w = 0
317w = 0
318w = 0
som översatt blir:
DGN 1 = 1
DGN 2 = 1
DGN 4 = 0
DGN 8 = 0
DGN 10 = 1
DGN 20 = 0
DGN 40 = 0
DGN 80 = 0

vilket borde bli på displayen 13 (1+2+10 i hex)
så det ser ut att stämma:
13 Spindle collet clamp LS and unclamp LS 2N15/2N16
go ON simultaneously
bearing
Inlägg: 11668
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Disassemblering av program till PLC

Inlägg av bearing »

exile skrev:Efter det går de 8 kodade bitarna till "latch" som "sparar" felkoden om signalen 1024 (Ready) är låg samt vissa koden, på Adress 1574-1637.
Något jag tycker är mystiskt är att värdet på 1024 endast beror på READY-ingången. D.v.s PLC visar endast felkod ifall felet redan hittats av någon annan enhet, som flaggar detta med READY-biten?

Innebär detta också att om PLC hittar ett fel, händer inget, så länge READY-biten är hög?
Användarvisningsbild
exile
EF Sponsor
Inlägg: 496
Blev medlem: 21 oktober 2005, 23:32:07

Re: Disassemblering av program till PLC

Inlägg av exile »

Nja, så länge 1024 är hög kommer felkoderna att flyga för bi och 1024 blir låg så kommer felkoderna att stanna.

Hur PLC stoppar maskinen är lite oklart men det verkar som felkoderna är separerade från "PLC-funktionen".

exempel här läses ingångarna igen och verkar generar en "safe" singnal

Kod: Markera allt

1407  LD    1070
1408  ANDC  1071
1409  STO   1326
1410  LD    1071
1411  ANDC  1070
1412  STO   1327
Användarvisningsbild
säter
Inlägg: 35153
Blev medlem: 22 februari 2009, 21:16:35
Ort: Säter

Re: Disassemblering av program till PLC

Inlägg av säter »

Vad betyder siffrorna under "r" i tabellen?
bearing
Inlägg: 11668
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Disassemblering av program till PLC

Inlägg av bearing »

W och R är antalet skrivningar resp. läsningar av minnesplatsen. (write / read)
bearing
Inlägg: 11668
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Disassemblering av program till PLC

Inlägg av bearing »

Det känns ju som att vi fått reda på en hel del faktiskt nu, mest tack vare exiles inlägg på sistone. Nu känns det som att det borde gå att sätta igång arbetet med att översätta assemblerkoden till högre nivå, och sedan rita flödesschema.

Själv känner jag att det är lite för långt program för att jag ska tro att ja ska kunna ro hem projektet. Kanske är detta något du får knåpa med själv, säter.

Men exile verkar ju ha fått en bra överblick redan, och har kanske störst förutsättningar att lyckas. Men kanske känner han samma som mig - att det är lite för mycket jobb för att fortsätta med bara intresse som drivkraft.
Användarvisningsbild
säter
Inlägg: 35153
Blev medlem: 22 februari 2009, 21:16:35
Ort: Säter

Re: Disassemblering av program till PLC

Inlägg av säter »

Nyligen hemkommen från Thailand, så jag har inte kunna brytt mig så mycket på ett tag.

Helst vill jag göra jobbet själv, men jag har för dåliga kunskaper.
Ingenting är väl dock omöjligt att lära sig.

Hur ska man kunna strukturera upp det hela för att få någon översikt?
Rita reläschema?

Sedan återstår det en del hårdvara att reda ut.
Timers bl.a.
kodar-holger
EF Sponsor
Inlägg: 963
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: Disassemblering av program till PLC

Inlägg av kodar-holger »

Nu är snart jul-ledigheten slut och jag har faktiskt lyckats ägna några stunder åt detta.

Eftersom det är en en-bits processor som mest bara utför enkla algebraiska operationer typ and, or och = så fick jag en vision om att man kanske skulle kunna automatisera utbenandet av detta. Tack vare exiles utmärkta arbete tror vi oss ju veta vilka adresser som är input, output och minne så genom att lägga till lite list kod i disassemblern borde man kunna få ut uttrycken som hamnar på out. Byggde successivt ut koden så att jag fick lista med symboliska namn. Sen avkodning med kommentarer på varje rad om vad som hände och till sist slöt jag cirkeln och fick hela uttrycken.

Det var bara det att jag hade underskattat komplexiteten. Första gången jag körde det "kompletta" programmet såg det ut som om det hängde sig. Bröt exekveringen och kollade koden. Men där finns inget som kunde resultera i rekursion eller oändliga loopar. Obegripligt. Körde på en mindre del av koden och det såg ut att fungera. Men med lite mer så ökade liststorleken ganska mycket. Eller lite mer än ganska mycket faktiskt. Väldigt mycket. Väldigt väldigt mycket. Jag kompilerar till 64-bitarsprogram och kör på en maskin med 16Gb minne. Låter jag den tugga börjar musiken hacka efter några minuter när jag har en 5Gb stor listfil och processen allokerat 12Gb minne! Jag har inte lyckats köra avkodningen på hela programmet.

Och det visar sig när jag läser lista på mindre mängd att det kanske blir ohanterbart ändå.

I den här filen finns uttrycket jag fick ut för 1T3, Spindle CW Command. 18kB! för ett uttryck och det innehåller en massa "unassigned" som hintar om att man läser minnespositioner som sätts i nästa varv så att säga eller i förra kanske.
insane.txt
Så jag fick backa ett steg och sparar visserligen avkodade uttryck i symbotabellerna men läser bara upp det som sparas i RR och Temp, d.v.s. address 0 och 1. Då blir listan hanterbar. Med de namn jag gett in och utgångar ser den ut så här:
nigata_symbolic.txt
Jag skrev några lite mer vettiga namn på outputs än inputs, men detta styrs av filer och inte i själva koden så det är lätt att ändra för den som vill pilla vidare härifrån.

Här är det kompilerade programmet och de styrfiler med namn man behöver:
dis_niigata_exe.zip
Källkoden för den som är nyfiken eller vill bygga vidare finns här:
dis_niigata_source.zip
Skall bli spännande när säter får tillfälle att rota vidare i hur det är kopplat.

P.S.
Kommer ihåg nu att jag skulle fixat hex-kodning av upptäckta minnesadresser också, men dom får stå som MEM 1803 et.c. så länge. Och dessutom flaggning av minnesadresser som man läser innan man skriver. Finns jobb kvar alltså.
D.S.

P.P.S.
Kan nån tala om vad det är för typ av maskin? Svarv, fräs, press, gnist... Bara för kul att veta. Påverkar knappast detta.
D.S.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar