ILA Servo Berger/Schneider

Robot, CNC, Pneumatik, Hydraulik, mm
Användarvisningsbild
swapper
Inlägg: 1076
Blev medlem: 14 augusti 2012, 23:18:15
Ort: Helsingborg

ILA Servo Berger/Schneider

Inlägg av swapper »

Hej!
Är ny här på forumet, har dock läst många av trådarna med stort intresse!.
Såg tipset på servos av Olle61
Lyckades få tag i ett gäng av dessa då jag tyckte de såg lagom ut för lite hobby projekt då de har drivningen direkt på enheten.
Sitter nu och mest och kliar mig i huvet när jag försöker förstå mig på RS422 vilket verkar vara de signal nivåer som dessa servos accepterar.

Manualen för dessa har jag hittar här Berger blev nog uppköpta eller något, det står något annat på själva servon men det finns en översättnings lista på produktnr.
http://www.global-download.schneider-el ... ogo-en.pdf

Långt ner under Electrical installation sidan 72 står det att man kan köra servona med step dir, detta i sig har jag gjort tidigare med vanligt stegmotorer men då med vanlig TTL funkade direkt.
Skillnaden här är att det står att signalnivåerna är RS422 och att det är + och - ingångar för step och dir.
Vad jag tidigare vet om RS422 och igentligen RS485 är att det är 2 ledare och att det är diffen mellan dessa (10v?) som ger logisk 0 och 1.

Så här står det i manualen

• Logic 0
– 0 level at input "+"
– 1 level at input "-"
• Logic 1
– 1 level at input "+"
– 0 level at input "-"
Open inputs are logic 0.

Vad jag vill få detta till är att jag behöver något chip (line driver?) som kan konvertera min TTL nivå (Mach3/Arduino) till att även gå negativ.
Kollade på MAX3082 men det är väll här jag känner att jag inte kan hitta mkt mer info om hur jag skall gå till väga och om det ens är rätt tänkt.
http://www.electrokit.com/max3082cpa-di ... gare.42286

Sen om någon vet en bra canbus adapter som fungerar med Lexium CT (en mjukvara för att programmera controllern) de som rekommenderas i manualen kostar 2500kr vilket jag inte har för avsikt att lägga... :)
När man startar programmet vill den ha "USB" eller parallelt interface, finns även PCI kort för det tydligen.
Senast redigerad av swapper 30 mars 2016, 14:18:17, redigerad totalt 1 gång.
H.O
Inlägg: 5891
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: ILA Servo Berger/Schneider

Inlägg av H.O »

Hej,
Jag tror inte du behöver göra nånting faktiskt. Börja med att lämna de två negativa ingångarna (pin 11 & 12 i CN2) ej anslutna och dra dina 5V steg- och riktningsignaler till de positiva ingångarna (pin 5 och 6 i CN2) - det kan fungera men det är inte säkert.

Om det inte fungerar (och/eller du vill göra det riktigt) så kan du använda t.ex en AM26C31 för att få dina differentiella signaler. Ett annat alternativ är att du med hjälp av en spänningsdelare (två motstånd) lägger de negativa ingångarna på en spänning runt 1.5V och sedan matar dina 5V-signaler till de positiva ingångarna.

/Henrik.
Användarvisningsbild
swapper
Inlägg: 1076
Blev medlem: 14 augusti 2012, 23:18:15
Ort: Helsingborg

Re: ILA Servo Berger/Schneider

Inlägg av swapper »

Hej!
Tack för svaret, jag har redan testat det du sa gällande att bara köra TTL på + ingångarna.
Det händer dock inte något med servon när jag gör detta, läste dock på lite mer gällande kontrollmjukvaran till servon och det verkar som att man måste aktivera själva enheten innan den kommer acceptera "Electronic Gear" mode.

Skall försöka hitta en kompatibel USB > Can adapter så att jag kan ställa in de olika drivlägena.
Användarvisningsbild
swapper
Inlägg: 1076
Blev medlem: 14 augusti 2012, 23:18:15
Ort: Helsingborg

Re: ILA Servo Berger/Schneider

Inlägg av swapper »

Hej igen!
Jag har nu lyckats införskaffa en USB > RS485/422 converter, denna fungerade bra efter lite inställningar att få igång kontrollmjukvaran till servon.
Kan styra denna i de olika lägen den har, ett av dessa är "electronic gear" vilket är step+dir vilket även detta fungerar precis som du säger nedan Henrik.

Det jag har lite problem med nu är att själva läget "electronic gear" måste aktiveras varje gång servon startas och avslutas direkt när serie kommunikationen avslutas mot servon.
Så min tanke var om jag kunde skriva någon form av rutin för att automatiskt akivera detta läge så den blir mottaglig för step+dir.
Dock har jag lite problem att förstå hela proceduren för hur man konverterar de olika kontrollvärdena till asci/hex och skickar ut dessa på serieporten.
Tänkte att någon här säker har koll på detta, har kodat en del med serie data på Arduino plattformen men detta var lite för mkt att reda ut.

Här är manualen för protokollet som inte är modbus, utan något eget för denna modell tydligen(tänk om det var modbus då vore det lätt!).
http://download.schneider-electric.com/ ... 201_EN.pdf

Det jag lyckats köra är att skickat ut #01 på en serieterminal och får då svaret som servon skall ge med sitt eget ID.
Dock kommer jag inte vidare hur jag skall konvertera kommandona för att kunna skriva ut de på serieporten för att aktivera power stage osv.

Sidan 14 å frammåt i manualen beskriver protokollet vilket verkar göra någon ASCII encode / decode som är över min nivå att förstå.

Steg ett borde vara att lyckas skicka detta

TxD 28.1 Commands.driveCtrl 84h 01h 001Ch 0000 0002h Request to switch on the power
stage: Set bit 1

Men hur skall den datan se ut?

Sen skall servon svara med
RxD 80h xxh xxx4h xxxx xxxxh State transition still pending; cos
= 4, "Ready to switch on"

och efter nästa poll skall det då bli
RxD 80h xxh xxx6h xxxx xxxxh State transition complete: cos =
6, "Operation Enable"

Någon som har input på detta?
H.O
Inlägg: 5891
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: ILA Servo Berger/Schneider

Inlägg av H.O »

Innan vi tittar på protokoll och annat så måste vi utreda om det verkligen inte går att få den att acceptera steg och riktning direkt vid uppstart, det låter ju helkonstigt att det inte skall gå att spara den inställningen så att den bootar upp i rätt mode.

På flera ställen i manualen så nämns Save parameters to EEPROM, om du gör det startar den inte upp i Electronic gear mode då?
Användarvisningsbild
swapper
Inlägg: 1076
Blev medlem: 14 augusti 2012, 23:18:15
Ort: Helsingborg

Re: ILA Servo Berger/Schneider

Inlägg av swapper »

Hej
Nej det går inte att spara ner vilket "mode" den skall vara i vad jag kan se.
Har bifogat en printscreen på de olika fälten, själva inställningen för Electronc gear t.ex. utväxling m.m. går utmärkt att spara till EPROM men inte uppstartsläge.
Den går inte ens i "Enable powerstage" utan att jag klickar på knappen "Enable" i fönstret.
Då tänds den gröna dioden på servon och lyser samt den håller axeln i rätt pos tills jag skickar pulser.
Kopplar jag sen ifrån Lexium CT programmet så börja dioden blinka och servons powerstage stängs av direkt.

Denna pdf beskriver electronic gear och att man skall skicka kommando för att aktivera den funktionen.
Sidan 132 bla.
http://www.global-download.schneider-el ... ogo-en.pdf

Processing is terminated when gear processing is deactivated and the
motor is at a standstill or if the operating mode was interrupted. If the positioning
controller switches from the operating state "6 Operation enable"
to a different state, gear processing is automatically deactivated,
e.g. if the motor is stopped by means of a "Quick Stop". The
Gear.stateGear parameter provides information on the processing
status.

The type of synchronization is set with the parameter
Gear.startGear which also starts the operating mode.

Gear.startGear
38:1 (26:01h)
Start electronic gear
Value 0: Deactivated
Value 1: Immediate synchronization
Value 2: Synchronization with compensation movement

Vad tror du, jag kan inte hitta något som tvingar in ett standard startup läge med powerstage + electronic gear mode direkt.
Tanken är väll att dessa skall styras av en PLC som kan detta språket de pratar.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
H.O
Inlägg: 5891
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: ILA Servo Berger/Schneider

Inlägg av H.O »

Den har ju Safe Torque Off....har du den funktionen aktiv eller har du bygeln CN6 monterad för att stänga av den funktionen?

Det verkar ju väldigt konstigt att en servo-drive som kan köra på steg och riktning måste ha ett överordnat system som varje gång drive'n startar talar om för den att den ska göra just det. Då faller ju liksom idén med det enkla interface som steg- och riktning ändå är.

Men det verkar vara som du säger, man måste ha ett överordnat system som styr det hela och vill man köra electronic gear (som verkar vara det enda mode som "tar" steg och riktning) så måste drive'n sättas i det mode av det överordnade systemet - varje gång...men varför går det då att spara gear ratio etc?
Användarvisningsbild
swapper
Inlägg: 1076
Blev medlem: 14 augusti 2012, 23:18:15
Ort: Helsingborg

Re: ILA Servo Berger/Schneider

Inlägg av swapper »

Bygeln är monterad på CN6 tror inte jag skulle få igång den annars.
Jo lite konstigt är det, men antar att step+dir är till för att synca med andra enheter på något sätt nog inte tanken att det skall vara helt fristående och bara ta step dir som en stegmotor t.ex.

Vet inte hur det är på "vanliga" servostyrninga där styrningen är i en egen enhet med encoder feedback osv, här är allt integrerat i själva servon drivsteg och allt, matar bara med spänning.

Min gissning till varför man kan spara ner gear factor och annat är att man skall slippa skicka med det vid kommunikationen med enheten?

Kunde jag bara hitta ett sätt att skicka ut init kommandona så tror jag att det går att lösa, antingen direkt via datorn i de fall jag kör dem med mach 3 (borde gå att kalla på ett script som inita servona) och om jag kör dem med arduino kan ja skicka init den vägen direkt.

Nu är problemet bara att förstå sig på va de menar med encode och decode procedurena i manualen och hur man kan sammanställa de olika parametrarna för att skicka t.ex. enable powerstage och sen enable electronic gear.

Fördelen är att om jag kan lyckas kommunicera vettigt med servona så har de inbyggda I/O för t.ex. gränslägesbrytare som kan användas.

Kanske lättare att göra allt detta via canbus vilket även det är ett interface de har i sig.
Dock rejält dyra datorinterface för canbus så det undviker jag gärna.
H.O
Inlägg: 5891
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: ILA Servo Berger/Schneider

Inlägg av H.O »

Jag ska försöka titta lite på protokollspecifikationen och se om jag förstår hur man ska tolka den för att lista ut vad som skall skickas. Jag har lite info om hur man kan använda serieporten från Mach3 på min hemsida.

Det är inte så att det finns en .dll eller liknande för kommunikation mellan PC och motor/drive när man skriver egen mjukvara på PC'n? Om så är fallet så kan den troligtvis anropas från scriptmotorn i Mach3 och på så sätt "köra" de kommandon som behövs för konfigurera driven korrekt (istället för att skicka "rå data" över serieporten). Slutresultatet blir såklart det samma men det kanske är lättare att använda ett färdigt funktionsbibiotek om sådant finns.

Ett annat alternativ är ju att köra en port monitor/sniffer och se exakt vad datorn skickar till motorn/servon när du gör precis de operationer du behöver i mjukvaran.
Användarvisningsbild
swapper
Inlägg: 1076
Blev medlem: 14 augusti 2012, 23:18:15
Ort: Helsingborg

Re: ILA Servo Berger/Schneider

Inlägg av swapper »

Uppskattas verkligen!
Jag har faktiskt tidigare gjort ett försök att sniffa serietrafiken men verkar endast få svaren ifrån stegmotorn när jag använde ett program för att kunna "clona" en serieport.
Har använt http://www.eterlogic.com/Products.VSPE.html men tror endast att jag då ser svaren från servon.
Vet någon ett program som kan sniffa trafiken i windows mellan comport och program åt båda hållen?

Nedan är ett exempel som den ligger och pratar på porten hela tiden, min gissning är att de flesta av dessa är status uppdateringar på spänning/amp/hastighet m.m. som programmet verkar fråga hela tiden.
Något av dem borde vara 27 - 28 v (270 eller vad värdet blir)

Mjukvaran med alla dess DLLer går att ladda ner här:
http://www.global-download.schneider-el ... nstall.exe
Det som körs är %programfiles%\Schneider Electric\Lexium CT\commontools\EN\M1.exe

Något som ser ut som conffiler
Schneider Electric\Lexium CT\commontools\EN\database

En hel del DDLer:
Schneider Electric\Lexium CT\bin\Dlls

Här är sniffen
000001 << svar på #01 (device id)
0A06003000000000
0A07003000000000
0A08003000000000
0A090030FFFFFFFF
0A0A003000000000
0A0B003000000000
0A0C003000000000
0A0B000100000000
0A01001600002580
0A02001600000001
0A03001600000000
0A01000B20202020
0A02000B20202020
0A03000F000000AA
0A04000F000000AA
0A0F000F00000010
0A10000F00000000
0A11000F00004000
0A0B001C00000001
0A0D001C00000000
0A0E001C00000000
0A18001C00000003
0A06000B00000000
0A07000B00000001
0A08000B00000000
0A09000B00000001
0A13000F00000000
0A01001C00000000
0A02002000000000
0A08000F00000028
0A09000F00001388
0A0A000F0000012C
0A0B000F00007FFF
0A14000F00000064
0A15000F00000000
0A0D000F00019339
0A01001500000000
0A06001500005F48
0A02001C0005E024
osv osv.....
H.O
Inlägg: 5891
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: ILA Servo Berger/Schneider

Inlägg av H.O »

OK, han bara titta på det som hastigast nu på morgonen, skall iväg på en grej, men i alla fall.
Med RS485 så är all kommunikation i ASCII vilket gör det relativt enkelt. Varje kommando består av 8 bytes, byte 1-8:
Byte1: Indikerar vad det är för typ av kommando, läs, skriv etc
Byte2: Subindex
Byte3-4: Index
Byte5-8: Data

Dessa 8 bytes kodas sedan om till 16 ASCII tecken och till slutet läggs en <CR> så om du tittar på ditt tigare exempel: TxD 28.1 Commands.driveCtrl 84h 01h 001Ch 0000 0002h Request to switch on the power stage: Set bit 1 så ser du att det innehåller 8 bytes 84h 01h 00h 01h 00h 00h 00h 02h dessa "omvandlas" sedan helt enklet till ASCII och <CR> läggs till slutet så i klartext skickar du 8401000100000002<CR>, alltså 16bytes+CR.

Observera, jag tror det är något fel i kommentarena i manualen för det står på flera ställen Request to switch on the powerstage: Set bit 1 när vad som egentligen händer är att någon annan bit sätts.

Testa lite, så ska jag ta en titt till på det lite senare, måste rusa.

/Henrik.
Användarvisningsbild
swapper
Inlägg: 1076
Blev medlem: 14 augusti 2012, 23:18:15
Ort: Helsingborg

Re: ILA Servo Berger/Schneider

Inlägg av swapper »

inge broska med detta, kul att någon har input på det :)
Testade det du skrev via "putty" hände dock inte mkt, letade lite efter hur jag skulle få iväg ett korrekt "CR" hittade detta då
http://www.millardsoftware.com/puttycs

Kör jag med det och skriver in
#01
8401000100000001

Så får jag svaret
8004E024006FD535

Progress! jag får svar, dock går inte powerstage on (led tänds inte)
Så det kanske är som du säger att det är fel i manualen då... vore typiskt :)

Ursäkta min okunskap men varför har man inte med C i strängen?
84h 01h 001Ch 0000 0002h
Blir: 8401001C00000001 ?

Det som fungerar är dock bevisligen 8401000100000001 utan C
Användarvisningsbild
swapper
Inlägg: 1076
Blev medlem: 14 augusti 2012, 23:18:15
Ort: Helsingborg

Re: ILA Servo Berger/Schneider

Inlägg av swapper »

Mer framsteg!

Tog och installerade detta så att jag kan få data som skickas på båda hållen.
http://www.hhdsoftware.com/device-monitoring-studio

Nedan får köras en per "send" i puttycs

#01
0901001C00000002 < aktivera powerstage
0901002600000001 < aktivera electronic gear i sync mode.

Den tar det direkt och börjar lyssna på steg och riktning ifrån min arduino som kör random code till den.
Frågan är bara om man kan bli lite klokare på de olika delarna så man slipper sniffa alla inställningar.

Vet du något smidigt sätt att skicka ut dessa 3 raderna via mach 3 på serieporten en åt gången?
Såg att du har något bra på din sida som du sa.

Under Config -> General Config you can select the baudrate and either 8-N-1 or 7-N-2. You can then use the macro-call SendSerial ("This is a test") to send a string of data.

Tror du att det räcker med det macrot?
H.O
Inlägg: 5891
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: ILA Servo Berger/Schneider

Inlägg av H.O »

Hej,
OK du verkar vara på gång att knäcka nöten, härligt!
Jag testade med SendSerial i Mach3, först ställer jag in rätt COM-port och baudrate under Config -> General Config, sedan körde jag den här macro-koden:

Kod: Markera allt

SendSerial( "#01" & Chr(13) )
SendSerial( "0901001C00000002" & Chr(13) )
SendSerial( "0901002600000001" & Chr(13) )
Resultatet blir att tre "paket" skickas ut på serie-porten:
SendSerial_1.png
Zoomar jag in på det första paketet får jag:
SendSerial_2.png
Andra paketet:
SendSerial_3.png
Och tredje paketet:
SendSerial_4.png
Så med rätt inställningar så borde du kunna få det att fungera.

/Henrik.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
H.O
Inlägg: 5891
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: ILA Servo Berger/Schneider

Inlägg av H.O »

Fortsätter från föregående inlägg.
Om du tittar i protokollspecifikationens exempel:

Kod: Markera allt

TxD 28.1 Commands.driveCtrl 84h 01h 001Ch 0000 0002h Request: Switch on power stage: Set bit 1
Till att börja med, 28.1 betyder Index 28, subindex 1 och om du tittar på sidan 161 i manualen som du länkade till i ditt första inlägg så ser du vad de olika bitarna i 28.1 betyder och som du ser så betyder bit 1 just Enable Power Stage.

OK, själva kommandot då.
Om du tittar på sidan 17 i protokollspecifikationen så ser du strukturen på den första byte'n. 84h i binärt är 10000100, dvs bit 2 är satt (kom ihåg att den minst signifikanta biten är bit 0) vilket betyder "The master sends a value to the slave which is written to the controller" vilket ju är exakt vad vi vill göra, dvs skriva värdet 2 till register 28.1. Vidare, bit 7 är också satt och här kan det bli lite lurigt. Den betyder, om jag läser rätt, typ "nytt kommando", jag är inte helt säker men du kan komma att behöva toggla denna biten så att den varannan gång är 1 och varannan 0 - jag förstår inte riktigt hur det fungerar (måste läsa mer) så du får själv läsa manualen och se vad du kommer fram till.

OK, sen har vi 01h vilket då är subindex 1 och 001Ch vilket ju är index 28 (001C i hex = 28) och till sist själva datan som skall skrivas till register 28.1, alltså värdet 2 som ju då sätter bit 1 i det register och aktiverar drivsteget.

Sidan 164 i manualen, register 38.1 Start electronic gear, value 1 = Immediate synchornization. Titta nu på det tredje paketet i din "sniff"
0901002600000001
Varför första byten är 09 förstår jag inte, den borde vara antingen 84 eller 2 baserat på tidigare förklaring men min gissning är att det du sniffat är svaret från motorn och inte vad datorn skickar TILL motorn. Så om vi säger att den första byten återigen skall vara 84 så borde kommandot bli 8401002600000001 som ju då sätter subindex 1 i index 38 till värdet 1 - dvs aktiverar Electronic gear.

Jag tror alltså inte att du skall skicka 09 som först byte som jag visade i mitt tidigare inlägg utan 84. Möjligen får du alternera mellan 84 och 02. Det hela blir ju att köra lite i blindo då du inte kan ta emot svaret från motorn med det enkla macro-anropet.
Skriv svar