Nyt on CNC-foorumin tukeminen helppoa!
Maksu onnistuu PayPalin kautta myös kortilla
Konemies kiittää

Heidenhain HE-310 klooni

Aloittaja dzy, 02.11.19 - klo:19:29

« edellinen - seuraava »

0 Jäsenet ja 1 Vieras katselee tätä aihetta.

dzy

#15
Tämähän on oikea ilon ja onnen päivä. Alkoikin jo v-käyrä vähän nousta kun aina tuli hirveä pettymys ja masennus kun laittoi koneen käsipyörätilaan eikä se suostunut yhteistyöhön. Noilla tavuilla kun sen siihen laitoin niin ei tapahtunut mitään, ei yhtään mitään. Siinä se hyrräsi tyytyväisenä!

Nyt pitää koittaa laittaa jotain payloadia tuohon, pettymystä odotellessa...

EDIT: Toisaalto saatoin taasen innostua liian aikaisin. Voipi olla että tuo 0x50 on no-op käsky eikä se reagoi siihen muuten kuin hylkäämällä koko paketin.

Tuota skoopin kuvaa pitää lukea niin että vasen on oikea ja oikea on vasen ja ylhäällä on alhaalla ja alhaalla on ylhäällä kun laittaa bittejä jonoon. En tiedä mikä käppyrä tuo on kun siinä ei näytä olevan ollenkaan startti ja stoppi bittejä...

Pitää koittaa sillä 0x51 käskyllä tuota samaa. TNC kun ei huolinut tuota 0x58 käskyä 0x5f:n tilalle niin tuolla saisi (0x51, 0x52, 0x54, 0x58) käskyillä osoitettua 128 eri bittiä, mikä täsmännee EINGANGien kanssa... ?
Ihmettelin miksi tuo 0x5_ käskyn alin nibble katsotaan bittien pyörittämisellä. 4*(4*8)=128 ööö... 4*(4*kahdeksan)=128

EDIT: Hirveä pettymyshän siitä seurasi, "OHJAUSELEKTRONIIKKA VIALLINEN", mitähän sitä sitten koittaisi. Laittaa pariteetin payloadin 8 tavuun? nyt lähetin vain nuo yllä olevat 6 tavua.

Selvisi kuitenkin että tuo 0x50 on no-op käsky. Nyt niitä olisi kuitenkin jo se kaksi eli 0x5f ja 0x50

Vai pitääkö tuo E08 bitti olla aina päällä? Taulukossa sitä ei ole mitenkään määritetty...

dzy

#16
Tutkailin tuota koodia lähemmin kun en oikein mitään tulosta saanut aikaiseksi. Lähettelin 0xa0 paketteja ja kone vain sammutti kaikki releet. Taisin löytää pienen bugin tuosta ohjaimen koodista, siinä shiftataan tuota 0xa_ käskyn alimpia neljää bittiä oikealle ja samalla kasvatetaan laskuria.

Tai hetkinen... Tuohan on ominaisuus... Nyt tiedän kolme eri käskyä 0x50 = no-op, 0x5F = kaikkien akselien pulssitus, 0xA0 = hätäseis (ei taida olla ihan kaikkien nykytaiteen sääntöjen mukainen)

Lainaa

               MOVB    @>dc0f,r3   ; paketin ensimmäinen tavu eli tämä 0xA_
               ANDI    r3,>0f00         ; nyt siinä on vain se _ osa eli neljä alinta bittiä
                SWPB    r3                 ; siirrä rekisterin R3 alimpaan tavuun, R3 on nyt suoraan se arvo mitä alempana lasketaan...

                CLR     r0               ; R0 nollaksi
A0490    INC      r0               ; Lisää yksi R0:llaan
                 SRL     r3,1            ; Siirrä R3:n sisältöä yksi bitti oikealle ja alin pullautettu bitti carry bittiin
                JNC     A0490        ; Jos carry bitti ei ole päällä niin tee tuo sama uudestaan 
                B          @A3C74   ; Nyt on hienosti siirretty rekisterin R3 arvo R0:llaan... kiesus... Nyt jos lähettää 0xA0 niin tuo jää pyörimään tuohon ikuisiksi ajoiksi tai jäisi mutta analogikortti laukaisee hätäseispiirin (jää se pyörimään)



Lainaa
Two "watch dog" monoflops are on the analog board.
These must be triggered separately once every 5ms by the CLP processor and once every 20ms by the main processor.
If the monoflops are not driven within 5ms an emergency-stop signal is triggered.

EDIT: Voisiko olla että 0x5(1/2/4/8) kuitenkin ohjaa yksittäistä akselia mutta vaatisi sen pariteetin sinne loppuun?
Noilla 0xA(1/2/4/8) sitten ajettaisiin PLC:n inputtien päälle oma bitti ja siihenkin se pariteetti loppuun?

EDIT: Käskyttelin tuota masiinaa noilla 0xAF käskyillä, en laittanut mitään pariteettia minnekään ja sain taas sen "MITTAJÄRJESTELMÄ-X VIALLINEN" ilmoituksen enkä "OHJAUS ELEKTRONIIKKA VIALLINEN B"
Tuossa kun ei ilmeisimmin pysty noita PLC:n inputteja lukemaan kun juttelu on tuon kapulan ja masiinan välillä yksisuuntaista, niin jotenkin ne PLC:n bitit pitää pystyä asettamaan ja nollaamaan.
Yksi tapa olisi ensin maskata ändillä bitit. Jos haluaa bitin nollaksi niin laittaa siihen kohtaan tavua nollan. Tuossa kun katselin merkintöjäni mitä milläkin on tapahtunut niin näyttää ehkä siltä että ensimmäisessä payloadin tavussa on aina ollut nolla siinä kohtaa missä voisi olla x-akselin rajabitti. Koitetaan 0xAF, 0xFF, 0x00, 0xFF, (1<<10) loput 0xFF, 0x00 pareja

Lainaa
0 7 E00 Reference end position X
1 6 E01 Reference end position Y
2 5 E02 Reference end position Z
3 4 E03 Reference end position IV
4 3 E04 Reference pulse suppressor X
5 2 E05 Reference pulse suppressor Y
6 1 E06 Reference pulse suppressor Z
7 0 E07 Reference pulse suppressor IV
0 7 E08 -
1 6 E09 Direction button X+
2 5 E10 Direction button X-
3 4 E11 Direction button Y+
4 3 E12 Direction button Y-
5 2 E13 Direction button Z+
6 1 E14 Direction button Z-
7 0 E15 Direction button IV+
0 7 E16 Direction button IV-
1 6 E17 Feedback: Auxiliary function completed
2 5 E18 Feed rate release
3 4 E19 Manual feed (opens position loop)
4 3 E20 Supervision of contact "Lock for spindle on"
5 2 E21 Rapid traverse button
6 1 E22 Start-button
7 0 E23 Stop-button

EDIT: Nope, sama mittalaitevirhe, koitetaan toisinpäin ensin set ja sitten clear

dzy

#17
Koko päivän koittanut saada selvyyttä miten PLC:n bitit ohitetaan, mutta turhaan. Ehkä olen ajatellut tämän liian tavukeskeisesti, tuo TMS9995 on kuitenkin bitin pyöritykseen erikoistunut.

Tuolla 0xAF käskyllä periaatteessa saan jotain asetettua (kenties invertoitua) eli jonkun bitin tuolta x-akselista. Koitin syöttää neljä tavua nollaa ja perään neljä tavua ykkösiä ja sitten toisinpäin. Sama mittalaite virhe kummassakin. Ehkäpä pitää lähettää 2 bittiä per inputti eli joko 0x55 tai 0xAA kahdeksaan tavuun.

Jotta noita PLC:n bittejä voi muokata niin pitää olla nollaus ja asetus mahdollista mutta sitten tarvitaan se älä sörki tilakin.

dzy

#18
Tässä on nyt jotain totaalisen väärin tässä räpeltämisessä. Kirjoitin C:llä ohjelman joka tulostaa 0x5_ käskyn toiminnan ja sen mukaan minun pitäisi kyetä valitsemaan siitä suoraan mitä akseleita haluan ajaa. Kuitenkin 0x5f on ainoa minkä se huolii... + se 0x50

Mitään 0xA_ käskyä se ei huoli (0xA0 pysäyttää kyllä koneen ja 0xAF herjaa x-akselin mittalaitevirhettä) Jokin aavistus on ja se liittyisi tuohon UART:in toimintaan... Melko epätoivoinen aavistus kylläkin, mutta kun en muuta nyt keksi.

EDIT: Olen lähettänyt tuolle suoraan ne tavut mitä koodissa tarkastellaan, e.g. 0x5F, mutta käännettynä se on 0xA0. Olisinko seurannut vääriä polkuja koodissa?

not 0xA0 = 0x5F
not 0xA1 = 0x5E
etc...

EDIT: Pitääköhän tuo sarjaportti sitten kuitenkin kääntää? Ehkä lähettämäni tavut on vain sattuneet olemaan sellaisia että TMS9902 ne huolii (start/stop/parity bits?) Voipi olla ettei tuota parityä edes tarkisteta.

EDIT: Hmmm... selittäisi sen miksi en aiemmin saanut mitään järkevää sillä 0xA_ käskyllä, 0xAF taisi osoittaa aina PLC:n inputtitavuun 0 jossa on akselien referenssi etc bittejä ja sitten vielä jos tuo UARTTI alkoi vastaanottaa väärästä bitistä niin 0xAF saattoi muuttua 0xA8:saksi


EDIT: Nope! Vielä vähemmän toiminnallisuutta. Kyllä tuo sarjaportti on oikeinpäin ja oikein konffattu. Mutta sitten taas välähti, tuossa ensimmäisen postaukseni linkissä puhutaan TNC viiveistä.

https://translate.google.fi/translate?sl=de&tl=en&u=http%3A%2F%2Fhsm-aktuell.de%2Fcnc-hr330.htm

LainaaI have come up with a different approach, which interpolates a signal period of 200 times as the original Heidenhain handwheel

Olen lähettänyt uuden paketin joka 6mS välein... :) Ehkä se ei siitä tykkää... Kaikkien akselien ajo on ehkä onnistunut jos se tekee ne järjestyksessä ja sitä kautta on tullut tarpeeksi viivettä tuohon hommaan.

EDIT: No ei ehkä sittenkään... 1s/200 = 5mS tai en tiiä, PLC ei ehkä tykkää jos sitä pommittaa 6mS välein

EDIT: Kyllä käännyn nyt sille kannalle että tuo vaatii jonkin tarkistuslaskennan tuohon noihin muihin kuin F:llä loppuviin käskyihin. Se koodi vain taitaa olla sielä toisella prosessorikortilla tai sitten ei.

Tuo tapa millä tuo sarjaporttipuskuri alustetaan saattaa antaa viitteitä että siinä xoorataan nuo 16-bittiset tavut ja laitetaan ehkä käännettynä sinne viimeiseen wordiin.

Lainaa
DC04   00 ch         ;00 alussa on pelkkä padi, ch on ensimmäinen vastaanotettu tavu eli tämä käsky
DC06   ch ch
DC08   ch ch
DC0A   ch ch
DC0C   ch ch

F loppuisilla käskyillä ei enää ole tilaa tuolle tarkistussummalle.

dzy

#19
Pitänee pitää pientä mietintä taukoa tämän kanssa. Sillävälin voisi alkaa suunnitella koteloa tuolle, tosin pitäisi tietää mitä kaikkea siihen voisi laittaa. Ainakin nämä nappulat mitä alkuperäisessäkin on.

Tuo käyttämäni stm32f103 prossu on oikein sopiva tähän hommaan. Olen noilla stm prossuilla leikkinyt nyt aika paljon. Tuo maksaa kiinankaupasta ostettuna jonkun 2€ (pikku proto lankku).

Tuossa stm32f103 prossussa on kaikki tarvittava, riittävästi io-portteja nappuloille ja sarjaporttejakin löytyy useampi, mutta mikä tärkeintä tuossa voi ajastimia käyttää suoraan enkoodereiden lukemiseen, ne käsitellään rautatasolla. Tuossa on TIM1-TIM4 ja niitä voi kaikkia käyttää enkooderien lukemiseen, sarjaporttina ei voi kyllä käyttää silloin USART ykköstä vaan USART kakkosta (menee muuten osin samoihin pinneihin)

Sen jälkeen kun nuo ajastimet on alustettu lukemaan enkoodereita niin sen lukeman saa suoraan pihalle TIMx->CNT 16-bittisenä lukuna (x=1-4) mitään muuta ei tarvitse tehdä. Olen porakoneella kiusannut 15-bittistä (32768) enkooderia eikä tuo prossu mene laskuissaan sekaisin.

Tuossa hieman isommalla stm prossulla tuota lukua, samoja ajastimia löytyy tästä pikkuveljestäkin.
https://youtu.be/DUfypsfkl-c

dzy

Turvauduin äärimmäisyyksiin... Alkoi mennä vähän vanhaksi kääntää ohjelma tuolle lankulle ja ajaa se sinne ja sitten köpöttää pihan kautta pajaan ja käynnistää mylly ja katsoa toimiiko se... Niinpä aloin kirjoittamaan emulaattoria tuolle näyttökortille... TI99/A porukat on jo itelleen värkänneet emulaattorin niin pöllin siitä sen TMS9900 prossun koodin. Muuttelen sitä tässä hieman itelle sopivaksi. Voin tuolla suoraan pompata sinne kolmos keskeytykseen ja täyttää muistin sitä ennen miten haluan.

dzy

#21
Värkkäsin ensin semmoisen tekstipohjaisen "emulaattorin" Linuxin terminaaliin, mutta innostuin sitten vääntämään tuota oikein GUI pohjalle Qt:llä

Tuolla saa monta kätevää ominaisuutta tuohon. Rekistereitä voidaan helposti muuttaa ja siinä tulee kaupanpäälle undo toimintokin. Saan tuohon myös helposti hexaeditorin näyttämään muistin sisältöä jne. Jollain täpällä saan keskeytyksiäkin laitettua.

https://youtu.be/IIr6lW9bAZQ

Nyt tuo ROM koodi on suoraan tuossa emulaattorissa sisällä, mutta voin tehdä semmoisenkin että se ladataan ja jos tekee muokkauksia rommiin tai rämmiin niin koko helahoidon voi tallentaa ja jatkaa sitten kun innostusta taas löytyy samasta kohtaa ja tilasta mihin ohjelman ajo jäi. Joo, tää ny vähän karkaa käsistä.

En ole varma mutta voi olla että Mame arcade pelikonsoli retro hemmoilla on emulaattori tuolle grafiikkapiirillekin (nec7220), otin talteen sen fontti romminkin kuitenkin, niin voisi koittaa tuleeko mitään kuvaa. Virheilmoitukset on kyllä sen toisen prossukortin epromilla.

Hiekkaranta_92

Mukava on tätä projektia seurata ja ihastella.
Saako kysyä mistä tietotaito elektroniikkaan on hankittu?

Jos saan aikaiseksi voisin kokeilla skooppailla HR330 keskustelua TNC360 kanssa viikonloppuna. Josko siitä olisi jotain apua?

dzy

Moro, tuo olisi mahtavaa jos saisi skooppikuvaa.

Mulla on alla jotain sulautettujen järjestelmien insinööriopintoja, jätin sen aikanaan kesken. Jokunen kurssi ja lopputyötä vaille jäi.

Aloin ohjelmoida 10-vuotiaana Amiga 500:sella, nyt ikää on se 43. Mitään kovin hienoa en ole saanut aikaiseksi.

G Brzeczyszczykiewicz

"Aloin ohjelmoida 10-vuotiaana Amiga 500:sella"

Vau. Itse jouduin tuon ikäisenä pysyttelemään tiukasti kovopuolella. Mutta
olihan ajatkin toisenlaiset, tyhjiöputket "rulettivat" eikä ensimmäistäkään
mikroprosessoria oltu julkaistu.

"Moro, tuo olisi mahtavaa jos saisi skooppikuvaa"

- Ja skooppikuva datana sisäänluettavaksi sigrok:iin.

dzy

Niin ne ajat vain muuttuu  ;D
Meillä töissä on kesätyöläisinä järkiään jonkin alan insinööriopiskelijoita. Siinä kun on tullut näiden kanssa juteltua ja koitettua selittää ettei silloin oikein ollut internettiä kun ite koitin lukea niin pelkkä ajatuskin semmoisesta tuntuu jotenkin mahdottomalta näille. Puhumattakaan lankapuhelimista ja sellaisen tuomasta liikkumisen vapaudesta :) Nyt tiedän tasantarkkaan metrin tarkkuudella missä oma jälkikasvu on...

Elektroniikka ei silloin pentuna ollut vielä mitään kertakäyttötavaraa vaan siihen joutui panostamaan aivan eritavalla ja tutustumaan siihen omaan kalliiseen laitteeseen. Mitähän tuo oma Amiga 500 silloin maksoi? Monta tuhatta markkaa omalla monitorillaan. Ei mikään pieni investointi.

Tuo Heidenhainin CLP levykin niin nykyään se mahtuisi yhdelle pienelle prosessorille ja tehot olisi monikymmen/sata kertaiset.

Tuolla lankulla ei ole muuta kuin se TMS9995 prossu (ulkoinen 8-bitin muistiväylä toiselle cpu kortille), sille erillinen sarjaporttikontrolleri, NEC7220 grafiikkapiiri ja viisi NEC:in ohjelmoitavaa logiikkapiiriä (https://www.dropbox.com/s/fdgmos3oy6o0b7i/nec_d65010_664551.pdf?dl=0) Noilla logiikkapiireillä on toteutettu se enkooderien laskenta. Kaikki tuo löytyy esimerkiksi stm32f/h7 prossusta. Koko lankun saisi pienempään tilaan kuin mitä nuo NEC:in logiikat vie...

Hiekkaranta_92

Hei

Täältä tulee nyt skooppikuvia ja dataa vähän aioitusta jäljessä. Valitettavasti ei oikein pitkiin datanloggauksiin taida tuo oskilloskooppini taipua. Kenties arduinolla vois lukea vähän järkevämmin noita datapaketteja. No nyt ei aika riittänyt sellaiseen.
Koitin pikaisesti excelillä plottailla käppyrää, mutta aika huonosti tuntuu ison datamäärän kanssa taipuvan ruudukkojen säätämiseen, mikä on sääli. Liitteenä yksi kuva jossa kaksi datapätkää plotattuna. Muutama mittaus on joissa näkyy neljä rimpsua joten kuten luettavana.

Toivottavasti näistä on hyötyä ja kerro toki jos voin jotenkin jelppiä lisää. Eikä sinulla tietysti pitkä matka ole pajallekkaan tulla käymään mikäli oikein muistan asuinpaikan :D

Mittausdataa linkin takaa https://1drv.ms/u/s!AlW5T47uPJwA1znxMLI2roxXDnt7?e=1W9led



Hiekkaranta_92

Kappas vain, tuota skooppia on näköjään helpohko päivittää paremmaksi, täytynee kokeilla kun pääsee taas pajalle.

dzy

Kiitoksia kovasti!

Itelle iski semmoinen "feature creep" tuon disassemblerin/emun kanssa, monenmoista versiota siitä pykäsin ja sitten aloin kirjoittelemaan IDA decompilerillekin jaettua kirjastoa vanhalla SDK:lla, Hexrays ei vastannut pyyntöihin saada IDA sdk 7.nollaa... :) (Linuxille on ilmainen IDA 7.0 mutta se ei tajua kuin puuceen prosessoria) Eivät tainneet tykätä kun huomasin että se kyllä tukee muitakin prossuja mutta ne jaetut kirjastot on vain poistettu ilmaisversiosta.

Tässä on nyt aikaa ennen yö vuoroa niin kiitollisena alan tutkailemaan noita antamiasi tietoja.

dzy

#29
Aloitin koittaa tulkita noita skooppidataa. Iloinen yllätys että löysin vastaavuutta siihen mitä luulen saaneen jo selville. Aloittelen noista datoista mitä voin verrata omiin kokeiluihin.

Tuo "no-op" paketti minkä oma kone huolii on se 0x50 alkuinen (ja loput nollaa) ja Hiekkarannan skooppauksista löysin sen tuosta kansiosta "käsipyörätila"

Ilmeisesti Hiekkarannan kapulan lähetys on ilman pariteettia, jos nyt olen oikein tulkannut.

EDIT: eikun juu, en tainnut tulkata oikein. Ei ole viisasta laittaa starttibittiä datan bittien joukkoon heti alkuunsa...

Lainaa
MSB first
I = Idle
S = Start
s = Stop

I S01234567s I S01234567s I S01234567s I S01234567s I
0 1010111111 0 1111111111 0 1111111111 0 1111111111 0

  ~AF=50       ~FF=00       ~FF=00       ~FF=00


Powered by EzPortal
SMF spam blocked by CleanTalk