sending com port command

Erin erin.siebert at gmail.com
Fri Feb 24 22:04:51 UTC 2012


Thank you so much for the advice David and Paul.  I also contacted PST
support, and they told me basically the same thing- that I would have
to use a custom DLL to communicate with a USB device (which is outside
the scope of PST support).  Unfortunately, RS232 is not an option with
this particular device, so I will try Paul's second set of
suggestions.  However, I was also able to find a control box from
OnTrak that supports RS232 connections... so that may end up being my
best bet. (I have had success in the past using E-Prime to trigger a
juice pump reward system on an RS232 connection.)   Again, thank you
very much for the advice!

Erin





On Feb 22, 11:23 pm, David McFarlane <mcfar... at msu.edu> wrote:
> Erin,
>
> I second Paul's suggestion that if possible you use a legacy RS232
> connection because, put simply, E-Prime has absolutely no facility for
> communicating through USB.  Now in principle, such a facility can be
> added -- in fact, I have used a USB device with E-Prime, but only
> because that device came with a dll file of external routines which
> could be accessed by using Declare statements in E-Prime.  But short of
> that, you are out of luck.
>
> But please do not take my word for any of this.  Please contact PST Web
> Support athttp://support.pstnet.com/e%2Dprime/support/login.asp, and
> then write back here with their response.
>
> -- David McFarlane
>
> On 21 Feb 2012 Paul Groot wrote:
>
> > Hi Erin,
>
> > Ah, I described a solution for a 'legacy' ADR device because you
> > linked to the RS232 example. But if I understand this correctly, you
> > are using an ADU (USB only) device...
>
> > However, if the device you have supports legacy RS232 connections, you
> > should try the following first because RS232 it is a bit easier to use
> > than the USB interface DLL: First check which (virtual) COM port is
> > being assigned by windows after installing the driver. If the USB
> > device connects as virtual RS232, you should be able to find it under
> > control panel>device manager->COM and LPT ports. Windows often assigns
> > a port number >4, which might be problemematic with EPrime (not sure
> > if this is less critical in EPrime 2.) Just try to change the port
> > number to the first available value below 4. If the PC has 1 or 2
> > physical COM ports, you should skip those numbers. Also note that the
> > port number often changes when a different USB port is used.
>
> > If RS232 is *not* an option (i.e. no new COM port is added when you
> > plugin the USB cable), you should use the DLL interface to connect to
> > the USB channels. EBasic supports calling functions in external DLL's,
> > so that should be no problem. To do this, you should declare all DLL
> > functions first. For example, you can put the following declarations
> > in the global user script section:
>
> > Declare Function OpenAduDevice Lib "AduHid.DLL"  (ByVal iTimeout As
> > Long) As Long
>
> > Declare Function WriteAduDevice Lib "AduHid.DLL"  (ByVal aduHandle As
> > Long, ByVal lpBuffer As String, ByVal lNumberOfBytesToWrite As Long,
> > ByRef lBytesWritten As Long, ByVal iTimeout As Long) As Long
>
> > Declare Function ReadAduDevice Lib "AduHid.DLL" (ByVal aduHandle As
> > Long, ByVal lpBuffer As String, ByVal lNumberOfBytesToRead As Long,
> > ByRef lBytesRead As Long, ByVal iTimeout As Long) As Long
>
> > Declare Function CloseAduDevice Lib "AduHid.DLL" (ByVal iHandle As Long) As Long
>
> > (more info herehttp://www.ontrak.net/ADUSDK/MinimalCompile-VB.html)
>
> > When the declarations are defined, you should be able to call the
> > functions in inline script just as if the functions are part of
> > EBasic:
>
> > ' you would probably put this declaration also in the global section
> > Dim aduHandle As Long
>
> > 'then in some inline script:
> > aduHandle = OpenAduDevice(0)
>
> > The VisualBasic example contains further details on the WriteAduDevice
> > function. Also don't forget to close the channel properly by calling
> > CloseAduDevice(aduHandle) before the end of the experiment.
>
> > best,
> > paul
>
> > 2012/2/21 Erin <erin.sieb... at gmail.com>:
> >> Thanks for the info Paul.  I was thinking something like that may
> >> work.  In the past, I have successfully triggered a serial port pump
> >> (via a usb to 9-pin serial port converter) in E-Prime sending text
> >> commands using a serial.writestring inline.  (I installed a driver for
> >> the computer to recognize the serial-usb converter as a serial com
> >> port.)
>
> >> However, the equipment I am currently working with is a usb to usb
> >> connection, and E-Prime does not recognize it as a serial port.  When
> >> I run the experiment with a serial device added, I get an "unable to
> >> open port" error, even when I go through and try every com port.  Is
> >> there a way to send this signal through a traditional USB connection?
> >> thanks!
>
> >> Erin
>
> >> On Feb 20, 3:47 pm, Paul Groot <pfc.gr... at gmail.com> wrote:
> >>> Hi Erin,
>
> >>> Although, in theory, it would be possible to use the WritePort command
> >>> to send bytes to a classicalserial(non-USB) RS232 port, it is
> >>> definitely not the way to go. Instead you should use a SerialDevice
> >>> object to communicate with a COM port. The easiest way is to add such
> >>> aSerialdevice in the following dialog:
> >>> E-Studio>Menu>Edit>Experiment>Devices>AddSerial. The default setting
> >>> should be OK (9600bps, 8bit, no parity, 1 stopbit). When you add this
> >>> device, EPrime will add a global SerialDevice object variable to your
> >>> script. The name of this variable will be 'Serial' if there is only
> >>> oneserialdevice.
>
> >>> The next thing you should do is to add a single line of inline script
> >>> to send the command:
>
> >>> SerialDevice.WriteString "sk0" & ebCr
>
> >>> The ebCr constant is a cariage return that is probably required by the device.
>
> >>> I'm not sure if the external device also needs to be initialised first
> >>> (by sending "CPA00000000" for example), but that's up to you to find
> >>> out ;-)
>
> >>> Hope this helps,
> >>> Paul
>
> >>> 2012/2/18 Erin <erin.sieb... at gmail.com>:
>
> >>>> I am trying to send a command to an external device via ausb
> >>>> connection.  The external device is an ADU200USBRelay I/O Interface
> >>>> (http://www.ontrak.net/ADUcommands.htm).  This is a control box which
> >>>> triggers an automatic feeder for our monkeys.  Using the control box's
> >>>> test software, I can trigger the auto feeder by sending the control
> >>>> box the command "sk0."  So, I know I need E-Prime to send the command
> >>>> "sk0" to the ADU200 control box via ausbCOM port.
> >>>> I have read the E-Prime help, and it appears it is difficult to send a
> >>>> non binary message via a com port (the WritePort command).  It is
> >>>> possible I may need to use something called a Declare Statement, which
> >>>> is done outside of E-Prime.  However, I am hoping this is not
> >>>> necessary.
> >>>> Reading the OnTrak help, it appear a Visual Basic code similar to
> >>>> MSComm1.Output = "sk0" would work (http://www.ontrak.net/visual.htm),
> >>>> however this does not appear to be an option in E-Prime.
> >>>> Any pointers would be very appreciated.  Thank you!
> >>>> Erin

-- 
You received this message because you are subscribed to the Google Groups "E-Prime" group.
To post to this group, send email to e-prime at googlegroups.com.
To unsubscribe from this group, send email to e-prime+unsubscribe at googlegroups.com.
For more options, visit this group at http://groups.google.com/group/e-prime?hl=en.



More information about the Eprime mailing list