Sida 13 av 13
Re: Disassemblering av program till PLC
Postat: 30 november 2015, 15:44:44
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.
Re: Disassemblering av program till PLC
Postat: 30 november 2015, 15:49:33
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?
Re: Disassemblering av program till PLC
Postat: 30 november 2015, 16:00:44
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
Re: Disassemblering av program till PLC
Postat: 30 november 2015, 16:06:07
av säter
Jag såg nu att finns 2st "ready" signaler.
Vilken avsåg du?
Re: Disassemblering av program till PLC
Postat: 30 november 2015, 16:14:31
av bearing
Det hade jag missat. Syftade på ingång 1. Jag var mest nyfiken på hur ofta den signalen ändrar läge.
Re: Disassemblering av program till PLC
Postat: 30 november 2015, 16:19:11
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.
Re: Disassemblering av program till PLC
Postat: 1 december 2015, 14:07:42
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
Re: Disassemblering av program till PLC
Postat: 1 december 2015, 18:04:52
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?
Re: Disassemblering av program till PLC
Postat: 1 december 2015, 19:43:04
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
Re: Disassemblering av program till PLC
Postat: 2 december 2015, 00:37:12
av säter
Vad betyder siffrorna under "r" i tabellen?
Re: Disassemblering av program till PLC
Postat: 2 december 2015, 00:49:33
av bearing
W och R är antalet skrivningar resp. läsningar av minnesplatsen. (write / read)
Re: Disassemblering av program till PLC
Postat: 8 december 2015, 02:58:02
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.
Re: Disassemblering av program till PLC
Postat: 15 december 2015, 13:47:17
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.
Re: Disassemblering av program till PLC
Postat: 10 januari 2016, 10:54:34
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.