public RawDevice(Topic pin) {
if(pin==null) {
throw new ArgumentNullException();
}
if(pin.name.Length<3 || !byte.TryParse(pin.name.Substring(2), out _addr) || _addr==0 || _addr>127) {
pin.Remove();
throw new ArgumentException("bad pin name: "+pin.name);
}
if(pin.name.StartsWith("Sa")) {
_sa=pin as DVar<X13.PLC.ByteArray>;
if(_sa==null) {
throw new ArgumentException();
}
_ra=_sa.parent.Get<X13.PLC.ByteArray>(string.Format("Ra{0}", _addr));
} else if(pin.name.StartsWith("Ra")) {
_ra=pin as DVar<X13.PLC.ByteArray>;
if(_ra==null) {
throw new ArgumentException();
}
_sa=_ra.parent.Get<X13.PLC.ByteArray>(string.Format("Sa{0}", _addr));
} else {
throw new ArgumentException();
}
Reset();
}
public override bool VarChanged(Topic snd, bool delete) {