Link Support
The future of Device Support & Soft Links?

Andrew Johnson
APS

18 May 1999

Executive summary

This proposal solves the long-term inflexibility of hardware link addresses, allowing device support to define arbitrary structures for address information. A new functional layer is introduced called link support, which encapsulates the existing Channel Access and Database link operations and allows new link types to be added in a similar manner to adding new record and device types. The ability to automatically convert existing database files to the new formats is taken as a prerequisite.

The DTYP field is removed from dbCommon. Device support entries in the dbd file will take the form:

devicetype(rectype,linkname,dset,"description"){
    field definitions ...
}
The new link support layers will declare an entry:
linktype(dbftype,linkname,lset,"description"){
    field definitions ...
}
All link field addresses, whether referring to device or link support, will be defined within a single string thus:
linkname(arg1,arg2,...)
Correct operation of updated soft channel device support layers requires device support to be informed before and after a link address changes. Introduction of an optional Device Support eXtension Table is proposed which enhanced devices that wish to support online address changes must register at initialization time.

The proposal retains more backwards compatibility than previously suggested solutions, and allows device support developers to decide how much effort to expend when converting existing software.

Problems this proposal addresses

Requirements for new Link Support

Proposal

Link Addresses

linkname(arg1,arg2,...)

Process Variable Links

Implementation

Changing link addresses at run-time

Changing device support address at run-time

Changes to Record Support

Converting existing Device Support

devicetype(ai,symbol,devAiSymb,"vxWorks Variable"){
    include "inst_io.dbd"
}

New Device Support

menu(devDirectNetADDRTYPE){
    choice(devDirectNetADDRTYPEV,"V")
    choice(devDirectNetADDRTYPEX,"X")
    choice(devDirectNetADDRTYPEY,"Y")
    choice(devDirectNetADDRTYPET,"T")
}
devicetype(mbbi,dnet,devMbbiDnet,"DirectNet PLC"){
    field(plcName,DBF_STRING){
        prompt("DirectNet PLC Name")
    }
    field(addrTyp,DBF_MENU){
        prompt("PLC Address type")
        menu(devDirectNetADDRTYPE)
    }
    field(address,DBF_ULONG){
        prompt("Memory Address")
    }
    field(private,DBF_NOACCESS){
        prompt("Link Private")
        extra("struct dnRef *private")
    }
}

Link Support

Soft Channel Device Support

Constant links

linktype(DBF_INLINK,const,lnkConstLSET,"Constant"){
    field(value,DBF_STRING) {
        prompt("Value")
        size(40)
    }
}
const(5.3E-3)
const(IOC Rebooted)

New link type examples

Link support could also allow
  • Alternative hardware I/O models
  • Communication with IOCs running a different Channel Access server protocol
  • Connections to host databases (CORBA IIOP?)
  • Interoperation with other control system products