How to Remotely Control Your PWG System


     The PC on the PWG system can accept commands from another PC, called the Remote Host.  The Remote Host can be used to run waveforms and collect data from the PWG system.

     To Remotely control the PWG system you'll need to connect the two computer's serial ports together, and write a program that allows you send or receive serial data from the PWG system.


Build a serial cable

     To connect the Remote Host to the PWG's P.C. you'll need a "null modem" cable.  The cable needs only three wires: TxD to RxD, RxD to TxD, and Gnd to Gnd.

     Start by determining the connectors used by your PWG P.C. and your Host P.C. (they should be either a 9 Pin male or a 25 Pin male connector). Then use the information provided here to make the cable.




Note: * indicates required connections.



Standard Null Modem

    Connections               Computer connector pin outs

 PWG PC   Remote Host                __________

  Txd   -  Rcd  *                   (1........5)  9 Pin

  Rcd   -  Txd  *                    \ 6....9 /   Male

  Gnd   -  Gnd  *                     `------'    "AT Style"

  CTS   -  RTS

  RTS   -  CTS                  _________________

  DTR   -  DSR                 (1..............13)  25 Pin

  DSR   -  DTR                  \14...........25/   Male

  DTR   -  DCD                   `-------------'    "XT Style"

  DCD   -  DTR

Note: DTR often goes to the other computers' DSR and DCD





           Pin out of computer connectors.

  Pin #  9 Pin Signal         Pin #  25 Pin Signal

   1       DCD                 2        TxD x

   2       RxD *               3        RxD x

   3       TxD *               4        RTS

   4       DTR                 5        CTS

   5       GND *               6        DSR

   6       DSR                 7        GND x 

   7       RTS                 8        DCD

   8       CTS                 20       DTR

   9       RI

Note: you'll need a 9 or 25 Pin female connectors to build the cable.



The connections you need for the common cables configurations:

 9 Pin -- 25 Pin      25 Pin to 25 Pin    9 Pin to 9 Pin

 Pin 2    Pin 2         Pin 2    Pin 3    Pin 2    Pin 3

 Pin 3    Pin 3         Pin 3    Pin 2    Pin 3    Pin 2 

 Pin 5    Pin 7         Pin 7    Pin 7    Pin 5    Pin 5

   

Connect the cable carefully

     Be cautious and double check your equipment grounding before connecting the cable.  Start by making sure both P.C's are connected to the same wall outlet.  Then use a volt meter to measure the voltage from the Remote Host case ground to the PWG P.C. case ground.  The voltage should be less than 0.5 volts (measured on both AC and DC settings).

     If the voltage is too large, one of the P.C's is not grounded properly, there is a large AC magnetic field source within a few feet of your location or the P.C's are not connected to the same outlet.  Fix the problem before proceeding.


Writing your software

     To control the PWG system you need to know the COM port settings, how to put the PWG P.C. in "remote mode," how to send commands and how to receive data.

The com port settings:

     The PWG P.C. expects to communicate over COM1 at 19200 baud with 8 bit characters, no parity and one stop bit (19200, 8N1).


Entering remote mode:

     The process of entering remote mode helps make sure your Host P.C. and the PWG P.C. are syncronized.  When things work, here's what happens.  You (the host) send $03 to the PWG P.C., then you receive $03.  You send $02, you receive $02.  You send $01, you receive $01.  Then you receive the character 'P'.  You are now in Remote Mode.

     This sequence can be used at any time to ensure you are in remote mode.  If you don't receive what you expected - or the receive timed out (a 50 mSec timeout should work well) then restart the sequence.  If you've sent more than about 10 characters and you are still not syncronized then something is wrong and you should alert your operator.




Pseudocode for entering remote mode:



Note - SendChar() sends an RS-232 character

       ReceiveChar() receives an RS-232 character



Initialization

  CurrentChar = $03

  SendCounter = 10



Main loop

while (CurrentChar is not equal to $00) and (SendCounter is not equal to 0)

    SendChar(CurrentChar)

    decrement SendCounter

    RecChar = ReceiveChar()        */note: use a 50 mSec timeout

    if not timed out and RecChar equal SendChar then decrement SendChar

    otherwise SendChar = $03

end-while


if SendChar equals 0 then you probably made it to remote mode so 

  PassFailChar = ReceiveChar()

  if PassFailChar equal 'P' then you are now in remote mode so

  this routine is done



  otherwise inform the user that you can't gain control of 

  the PWG system or try again.



Sending commands and receiving data:

     You send commands to the PWG PC.  The commands are actually just script file commands.  The same line of text that would appear in a script file is what gets sent over the serial port to the PWG PC.

     A command is a string of printable characters that is terminated with a carrage return character (ascii character number 13).  Here's how a simple command works: You send each character of the command string, then you receive a "W" character signalling the PWG system is working on the command.  The command is performed.  You receive a "P" signaling the command finished sucessfully.

     A command sequence follows these definitions:




  Command sequences:


    A Command:

      String of printable characters terminated with Carrage Return [CR].

      Example :  "Create lin 4.0 4.0 0.1\m" 

                  where "\m" means [CR]


    A Command response:

      Two or three parts:

      1)  Parser Response Character  (? or W or D)

      2)  Data Block(s) (only present if Parser Response Char was D)

      3)  Command response character (P or B)

      
    Parser Response Characters:

      ?  (Unknown command) Parser didn't understand the command's keyword (in
this case the command response will always be B) 

      W  (Working) Parser understood keyword and passed the command string to
the command routine - this command doesn't return data

      D  (Data) Parser understood the keyword, passed the command string to
the command routine AND you will be receiving a data block


    Command Response Characters:

      P  (Passed) Command was performed (it finished okay).

      B  (Bye) The PWG P.C. has exited remote mode.  You'll need to go back
into remote mode to send a command



    Data Block:


      A Data Block:

        BlockHeader character (really a byte)

        Block data (0 to 127 bytes)


      BlockHeader:

        A byte, the upper bit is a flag that alerts you if more Data Blocks
will follow this block in the transmittion, the remaining 7 bits tell you how
many bytes are in this block (0 to 127).



          MoreToFollow = BlockHeader upper bit;

          if MoreToFollow = 1 then more blocks follow this block

          in the transmittion - you need to read them all

          if MoreToFollow = 0 then this is the last Data Block

          in this command.



          Length = BlockHeader with the upper bit masked off;

          Length is in the range 0 to 127.  If Length is 0 then

          there are no bytes in the block.  If length is 1 then the

          block has one byte (and you should read it now).



    Command process:         


      You send the command string

      You receive ? or W or D

      If you received ? then the command wasn't understood and you'll be
getting a B character.

      If you received W the command is being processed.

      If you received D then Data Blocks will be sent - read them all.


        To read all the blocks:

          ResultArray = an array where the incoming data will be stored

          clear the ResultArray

          repeat

            BlockHeader = ReadChar()

            MoreToFollow = (BlockHeader and $80) equals $80

            Length = MoreToFollow and $7F

            while (Length > 0)

              Put ReadChar() in the ResultArray; 

              decrement Length

            end-while

          until not MoreToFollow 

        Done reading the blocks

      
      you receive P or B

      If you received P then everything completed okay

      If you received B then an error occured and the PWG P.C. exited Remote
Mode and is displaying the error.


Return to Tech-Support Request page