[time-nuts] OT: Anyone programmed HP 59306A relay actuator (orother old device)?
Dr. David Kirkby
david.kirkby at onetel.net
Sat May 24 11:03:01 EDT 2008
Daun Yeagley wrote:
> Hi David
> You'll need a scope to look at the lines. If you try reading with a
> voltmeter, you'll only get the average value of the data that is being
> There are a couple of "control" line as part of the bus. The most important
> one for our purposes here is the "ATN" line. When this line is asserted,
> Data on the 8 DATA lines is in what is known as the COMMAND mode. In this
> mode, the ASCII code you see make up the commands to do the "Unlisten",
> "Untalk", "Listen", and "Talk" commands and the associated addresses. You
> don't need to worry about that stuff. That's what the drivers are for. At
> the programming level, all you need to be concerned with is who's talking
> (the controller, i.e. the computer), and who's the listener (the 59306). As
> an aside, there can be only one talker, but many listeners. Other
> (transparent) details include the handshake lines and some other dedicated
> support lines that may or may not be used in any particular scenario.
> So again, all you need to do is address the 59306 as a listener, and send
> the specific ASCII characters that comprise the command. With this
> instrument, since it is so very simple, doesn't even know what to do with
> end of line sequences. (CR/LF). It would simply ignore them. (I say this
> because most computers customarily send this unless specifically
Although I'm not doing this under Linux, I found this page on the
To quote from it " If |ud| is a device descriptor, then the library
automatically handles addressing the device as listener and the
interface board as talker, before sending the data bytes onto the bus."
That suggests to me that using the ibwrt command should address the
relays as listener, so the relay actuator should need no more than
dd=ibdev(0, gpib_address, 0, T3s, 1, 0);
which gets a device descriptor and
which writes "A1" to the device with device descriptor dd. I've just
checked the National Instruments manual and it says the same thing about
the ibwrt() command setting the device as a listener. Perhaps trying to
send the '"%" which the relay's manual says addresses the device as a
listener is not needed. Perhaps it was messing things up. I'm pretty
sure I have tried it with and without that, and it did not work in
either case, but I will try again later - I'm not at home now.
> Hope this helps. If not enough, I'll have to see if I can dig out some of
> the old "HPIB" tutorials I used to teach from twenty some years ago.
> -----Original Message-----
> From: Dr. David Kirkby [mailto:david.kirkby at onetel.net]
> Sent: Saturday, May 24, 2008 10:13 AM
> To: daun at yeagley.net; Discussion of precise time and frequency measurement
> Subject: Re: [time-nuts] OT: Anyone programmed HP 59306A relay actuator
> (orother old device)?
> Daun Yeagley wrote:
>> Hi David
>> Don't worry about all the level stuff. That's internal to the box
>> The only thing you need to worry about is how to generate the proper
>> commands on the bus for your particular H/W-S/W combination.
> But looking at the example program, one sends
> * "?" to clear all listeners
> * "%" to listen
> * The commands to set relays, such as "B123", or "A1"
> * REN=H to reset to local control.
> But all 4 combinations have different TTL levels on the control lines.
> On my bench multimeter, something as simple as
> dd=ibdev(0, gpib_address, 0, T3s, 1, 0); /* open a device at address
> 'gpib_address' with 3 s timeout. */
> ibclr(dd); /* Clear it */
> ibwrt(dd,"PRESET",6); /* Can't recall what this command did on my
> meter, but it works! */
> ibwrt(dd,"DCV",3); /* Set to DC voltage. Command ends in 3, as DCV is 3
> characters */
> will set it to DC voltage. If I want frequency, the last command would be
> ibwrt(dd,"FREQ",4); /* ends in 4, as FREQ is 4 characters */
> But this HP 59306A relay actuator will *not* respond similarly if I send
> ibwrt("A1",2); /* Unsuccessfully try to join contacts A-C on relay 1 */
> In various attempts, I've managed to get the odd click from the relays,
> but nothing useful is happening. I've got two of these, and neither is
> doing what I expect, so I suspect the units are not faulty, but just my
> bad programming.
>> In hopefully simple terms, you need to address the 59306 as a listener,
>> then send the ASCII string that represents the relay state you need. In
>> Didier's example:
>>> 1) to turn all channels off, send "B123456"
>>> 2) to turn channel 1 on: send "A1"
>> You don't need (or want an end of line sequence or anything). When done
>> sending the command, just unaddress it.
> Perhaps that is what I am doing wrong. I am not un-addressing it. But
> I've never had to before. I've normally on other instruments just sent
> the command via ibwrt(), then read responses with ibrd(). For this
> instrument, I don't believe there is anything that can be read - you
> can't for example read the state of the relays, so I don't think there
> is any need for using ibrd().
>> Hope that removes a bit of fog.
> time-nuts mailing list -- time-nuts at febo.com
> To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts
> and follow the instructions there.
More information about the time-nuts