Connecting EPICS to a TwinCAT system ·...

14
Connec&ng EPICS to TwinCAT Torsten Bögershausen SW Engineer Mo&on Control and Automa&on Group www.europeanspalla&onsource.se 2015E05E19

Transcript of Connecting EPICS to a TwinCAT system ·...

Connec&ng(EPICS(to(TwinCAT(

Torsten(Bögershausen(SW(Engineer(

Mo&on(Control(and(Automa&on(Group(

www.europeanspalla&onsource.se(2015E05E19(

Overview(

•  What(is(a(TwinCAT(system(?(•  Our(EPICS(Com(Module(for(TwinCAT(•  Using(StreamDevice(–(Chopper((spinning(disc)(•  Using(MotorRecord(–(Linear(axis(•  Ongoing(developments((

(

TwinCAT:(a(soU(PLC(system(

SW( PC(“SoU(PLC”(

IO( IO( IO( IO(

“real&me”(Fieldbus(

Connec&ons(to(TwinCAT(

PLC( Mo&on(

Ethercat(master(

TwinCAT(real(&me((kernel(

winsock(

Motor( Encoder,(switches(

COM(

OPC(

EPICS(IOC(

ADS(

Control(network:(EPICS(channel(access(

FB_DriveVirtual(

EPICS(Com(Module(

PLC( Mo&on(

Ethercat(master(

TwinCAT(real(&me((kernel(ADS(Router(

(

winsock(

EPICS(Com(Module((real&me(under(((TwinCAT)(

EPICS(IOC( Motor( Encoder,(switches(

FB_DriveVirtual(

ASCII(data(

6(

IOC(StreamE(Device(

TwinCAT(System(

“Main.M1.fPosi&on=10.0;\n”(

“OK;\n”(

$(telnet(192.168.88.48(200(Main.M1.bBusy?;\r\n(0;\r\n(

Low(level(debugging(

EPICS(TwinCAT(

Disc(synchronized(with(the(14(Hz(pulse:(Baby(Chopper(

7(

Chopper(Control(Demo(

8(

Chopper(Control(Service(Mode(

9(

MotorRecord::(move()(

•  TwincatMotorAxis::move(double(posi&on,(int(rela&ve,(double(minVelocity,(double(maxVelocity,(double(accelera&on)(

•  {(/*(status(checking(not(shown(*/(•  ((stopAxisInternal();(•  ((setValueOnAxis("nCommand”,(rela&ve(?(2(:(3);(•  ((setValueOnAxis("fPosi&on",(posi&on);(•  ((sendVelocityAndAccelExecute(maxVelocity);(•  }(

10(

Single(Axis(

11(

Ongoing(developments(E(1(

•  Single(transac&on:(chain(commands(“Main.M1.bBusy?;Main.M1.fActPosition?;\n” “0;11.417835;\n”"

•  Retrieving(complete(motor(status(as(a(struct(“Main.M1.stAxisStatus?;\n”(“Main.M1.stAxisStatus:(1=0,(2=0,(3=0,(4=0,(5=0,6=0.000000,7=0.000000,8=0.000000,9=0.000000,(10=0,(11=0,12=1,(13=1,14=0.000000,15=0,…;\n”(

•  Read(the(“RAW”(encoder(value:((ADR=16#3040020,16#80000049,2,18/ADSPORT=501/?;"

(12(

Mo&on(Control(E(TODO(

•  Op&mize(•  More(homing(procedures(

E  Implement(in(the(mo&on(control(unit((MCU)(E  Expose(them(via(EPICS(?(

•  (configura&on(parameters((E(Which(are(needed(in(the(MCU((E(which(need(to(be(exposed(via(EPICS(?(((((Accelera&on,(Jerk,(SoU(limits)(

•  ((Health(status/alarms((E(Internal(alarms(from(the(MCU(

•  More(automated(tes&ng(–  python(based,(pyEpics,(nose(

((

13(

Thanks(

•  Anders(Sandström,(MCAG(•  EPICS(community((

•  Ques&on(s)(?(

14(