EPICS-Device-Driver-Software-Standardization

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

EPICSDeviceDriverSoftwareStandardizationStreamBasedI/O1Asyn•PortDrivers•DeviceDrivers•Interfaces•asynRecord•DiagnosticAids2EtherIPPortDrivers•TCP/IPorUDP/IPPort•TCP/IPorUDP/IPServer•LocalSerialPort(RS232,RS485)•VXI-11•Linux-GPIB•GreenSpringsIP488•NIGPIB-1014D3DeviceDrivers•StreamDevice•Modbus(MarkRivers)•asynPortDriver•“Classic”Implementation4StreamDevice•ProtocolFile•Example5InTerminator=\n;#OutTerminator=\r;OutTerminator=;#@init{outdevice\rapc;}ReplyTimeout=10000;ReadTimeout=500;ExtraInput=Ignore;#globalsetLogin{#sendusernameandpasswordoninitialconnect.reconnectionishandledbyreadtimeoutundergetStatusbelow.InTerminator=:;in\xff\xfb\x01\n\rUserName;outacsw-mgr\rpass4mgr\r;}StreamDevice•Example,continued6getStatus{OutTerminator=;#UseasinputterminatorinordertoreadinalltextincludingthepromptInTerminator=;#Presscontrol-ctoshowmainmenuout\x03;#Readinthefirmwareversions,devicename,anduptimein%.1/AOS.*?v([0-9.]*?)\r\n+/%(\$1:NETFWVERSION.VAL).1/APP.*?v([0-9.]*?)\r\n+/%(\$1:SITEID.VAL).1/Name.*?:(.{0,39})/%(\$1:UPTIMEDAY.VAL).1/UpTime.*?:([0-9]*)Da/%(\$1:UPTIMEHOUR.VAL).1/([0-9]*)Ho/%(\$1:UPTIMEMINUTE.VAL).1/([0-9]*)Min/;#Press1fortheDeviceManagermenuout1\r;in;#Press2fortheOutletManagementmenuout2\r;in;#Press1fortheOutletControl/Configurationmenuout1\r;#Readintheon/offstatesandnamesofalloutletsin%(\$1:1NAME.VAL).1/1-(.{25})/%(\$1:1POWERSTATEIN.VAL)s\r\n%(\$1:2NAME.VAL).1/2-(.{25})/%(\$1:2POWERSTATEIN.VAL)s\r\n%(\$1:3NAME.VAL).1/3-(.{25})/%(\$1:3POWERSTATEIN.VAL)s\r\n%(\$1:4NAME.VAL).1/4-(.{25})/%(\$1:4POWERSTATEIN.VAL)s\r\n%(\$1:5NAME.VAL).1/5-(.{25})/%(\$1:5POWERSTATEIN.VAL)s\r\n%(\$1:6NAME.VAL).1/6-(.{25})/%(\$1:6POWERSTATEIN.VAL)s\r\n%(\$1:7NAME.VAL).1/7-(.{25})/%(\$1:7POWERSTATEIN.VAL)s\r\n%(\$1:8NAME.VAL).1/8-(.{25})/%(\$1:8POWERSTATEIN.VAL)s\r\n;#Presscontrol-ctoreturntothemainmenuout\x03;in;#incaseofdisconnection,whichlookslikeareadtimeout,sendusernameandpasswordagain:@readtimeout{outacsw-mgr\rpass4mgr\r;};}DeviceDriver“Classic”Implementation•DeviceSupport–Initializerecord–RecordIO–RecordProcessing•DriverSupport7asynPortDriver•DeviceSupportisimplementedinasynPortDriverclass.SupportprovidedforallstandardEPICSrecords•Implementsahandfulofvirtualfunctionsthatcanbeoverriddentoimplementspecificfunctionalityinaderivedclass•AnexampleofasynPortDriverimplementationistheAreaDetectorpackage,providingsupportforavarietyofdetectorsincludingdigitalcameras.8MyasynPortDriverTemplatetemp.db9record(stringin,$(P):SI:NAME){field(DTYP,asynOctetRead)field(INP,@asyn($(PORT),$(ADDR),1)SI_NAME)field(SCAN,I/OIntr)field(PINI,1)}Filesarelocatedin/afs/slac/g/testfac/workspace/zms/rhel5/R3.14.11/mod/templMyasynPortDriverTemplate•drvTempl.h(fragments)10#include“asynPortDriver.h”#defineMAX_ADDR1#definesiNameStrSI_NAME//asynOctet,r/oclassdrvTempl:publicasynPortDriver{public:drvTempl(constchar*port,constchar*udp);virtualasynStatuswriteOctet(asynUser*paU,constchar*val,size_tnc,size_t*nActual);virtualasynStatuswriteInt32(asynUser*paUser,epicsInt32value);void_afterInit(intflag);protected://ValuesusedforpasynUser-reason,andindexesintotheparameterlibrary.int_siName;#defineFRST_COMMAND_siName#defineLAST_COMMAND_siNametypedefenum{ixSiName};MyasynPortDriverTemplate•drvTempl.cpp(fragments)11#includedrvTempl.hasynStatusdrvTempl::writeOctet(asynUser*paUser,constchar*v,size_tnc,size_t*nActual){//------------------------------------------------------------------------------//ThismethodoverridesthevirtualmethodinasynPortDriver.Itisused//toprocessstringoutrecords.//------------------------------------------------------------------------------asynStatusstat=asynSuccess;intix,addr;stat=getAddress(paUser,&addr);if(stat!=asynSuccess)return(stat);ix=paUser-reason;switch(ix){default:break;}stat=asynPortDriver::writeOctet(paUser,v,nc,nActual);return(stat);}MyasynPortDriverTemplate•drvTempl.cpp,continued12drvTempl::drvTempl(constchar*port,constchar*udp):asynPortDriver(port,MAX_ADDR,N_PARAMS,asynInt32Mask|asynInt8ArrayMask|asynOctetMask|asynDrvUserMask,asynInt32Mask|asynInt8ArrayMask|asynOctetMask,ASYN_CANBLOCK|ASYN_MULTIDEVICE,1,0,0){//------------------------------------------------------------------------------//ConstructorforthedrvTemplclass.CallsconstructorfortheasynPortDriver//baseclass.Where//portNameThenameoftheasynportdrivertobecreated.//udpPortistheactualdeviceportname.//ParameterspassedtotheasynPortDriverconstructor://portname//maxaddress//parametertablesize//interfacemask//interruptmask,//asynflags,//autoconnect//priority//stacksize//------------------------------------------------------------------------------intstatus=asynSuccess,nbts;MyasynPortDriverTemplate•drvTempl.cpp,continued13nbts=strlen(port)+strlen(udp)+2;_port=(char*)callocMustSucceed(nbts,sizeof(char),dname);_udp=(char*)(_port+strlen(port)+1);strcpy((char*)_port,port);strcpy((char*)_udp,udp);//status=pasynOctetSyncIO-connect(udpPort,0,&_acPvt,0);//if(status!=asynSuccess)//printf(%s::%s:connect:failedtoconnecttoport%s\n,//dname,dname,udpPort);//elseprintf(%s::%s:connect:connectedtoport%s

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功