sending com port command

David McFarlane mcfarla9 at msu.edu
Thu Feb 23 04:23:24 UTC 2012


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 at http://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 here http://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.siebert 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