3.6 Remote Control Interface

The remote control interface (rcontrol) allows other programs to control the PICSimLab simulation through a TCP/IP socket using text formatted commands.

The PICSimLab remote control interface supports TCP connections using telnet or nc (netcat).

The default port is 5000 and can be changed in configuration windows.

The ’rlwrap’ command can be used for best command edition support in telnet or nc:

 rlwrap nc 127.0.0.1 5000

The supported commands can be shown using the “help” command:

 help 
List of supported commands: 
  blist                - list supported boards 
  buclist              - list board supported MCUs 
  clk [val MHz]        - show or set simulation clock 
  dumpe [addr] [count] - dump internal EEPROM memory 
  dumpf [addr] [count] - dump Flash memory 
  dumpr [addr] [count] - dump RAM memory 
  exit                 - shutdown PICSimLab 
  get obj              - get object value 
  help                 - show this message 
  info                 - show actual setup info and objs 
  loadhex file         - load hex/bin file (full path) 
  oscmeasures ch       - read osc channel 1 or 2 measures 
  oscrdcfg             - read osc configuration 
  oscwrcfg idx "cfg"   - write osc configuration 
  oscshow [0/1]        - show status or toggle osc window 
  pins                 - show pins directions and values 
  pinsl                - show pins formatted info 
  quit                 - quit remote control interface 
  reset                - reset the board 
  set obj value        - set object with value 
  sim [start/stop]     - show status or start/stop sim 
  spadd "pname" x y    - adds the named spare part 
  spdel pid/all        - delete one spare part or all 
  sprdcfg pid          - read spare part configuration 
  spwrcfg pid "cfg"    - write spare part configuration 
  splist               - list supported spare parts 
  spshow [0/1]         - show status or toggle sp window 
  sync                 - wait to sync with timer event 
  version              - show PICSimLab version 
Ok

The “info” command show all available "objects" and values:

info 
Board:     Arduino Uno 
Processor: atmega328p 
Frequency:   16000000 Hz 
Use Spare: 1 
    board.out[00] LD_L= 254 
  part[00]: LEDs 
    part[00].out[08] LD_1= 254 
    part[00].out[09] LD_2= 30 
    part[00].out[10] LD_3= 254 
    part[00].out[11] LD_4= 254 
    part[00].out[12] LD_5 254 
    part[00].out[13] LD_6= 254 
    part[00].out[14] LD_7= 254 
  part[01]: Buzzer 
    part[01].out[02] LD_1= 140 
  part[02]: Push buttons 
    part[02].in[00] PB_1= 1 
    part[02].in[01] PB_2= 0 
    part[02].in[02] PB_3= 1 
    part[02].in[03] PB_4= 1 
    part[02].in[04] PB_5= 1 
    part[02].in[05] PB_6= 1 
    part[02].in[06] PB_7= 1 
    part[02].in[07] PB_8= 1 
Ok

The “pins” command show all pins directions and digital values:

pins 
  pin[01] ( PC6/RST) < 0                 pin[15] (  PB1/~9) > 0 
  pin[02] (   PD0/0) < 1                 pin[16] ( PB2/~10) > 0 
  pin[03] (   PD1/1) < 1                 pin[17] ( PB3/~11) > 0 
  pin[04] (   PD2/2) < 1                 pin[18] (  PB4/12) < 0 
  pin[05] (  PD3/~3) > 0                 pin[19] (  PB5/13) > 0 
  pin[06] (   PD4/4) < 1                 pin[20] (     +5V) < 1 
  pin[07] (     +5V) < 1                 pin[21] (    AREF) < 0 
  pin[08] (     GND) < 0                 pin[22] (     GND) < 0 
  pin[09] (  PB6/X1) < 0                 pin[23] (  PC0/A0) < 0 
  pin[10] (  PB7/X2) < 0                 pin[24] (  PC1/A1) < 0 
  pin[11] (  PD5/~5) < 1                 pin[25] (  PC2/A2) < 0 
  pin[12] (  PD6/~6) < 1                 pin[26] (  PC3/A3) < 0 
  pin[13] (   PD7/7) < 1                 pin[27] (  PC4/A4) > 0 
  pin[14] (   PB0/8) > 0                 pin[28] (  PC5/A5) > 0 
Ok

The “pinsl” command show all pins info in text formatted output:

pinsl 
28 pins [atmega328p]: 
  pin[01] D I 0 000 0.000 "PC6/RST " 
  pin[02] D I 1 200 0.000 "PD0/0   " 
  pin[03] D I 1 200 0.000 "PD1/1   " 
  pin[04] D I 1 200 0.000 "PD2/2   " 
  pin[05] D O 0 007 0.000 "PD3/~3  " 
  pin[06] D I 1 200 0.000 "PD4/4   " 
  pin[07] P I 1 200 0.000 "+5V     " 
  pin[08] P I 0 000 0.000 "GND     " 
  pin[09] D I 0 000 0.000 "PB6/X1  " 
  pin[10] D I 0 000 0.000 "PB7/X2  " 
  pin[11] D I 1 200 0.000 "PD5/~5  " 
  pin[12] D I 1 200 0.000 "PD6/~6  " 
  pin[13] D I 1 200 0.000 "PD7/7   " 
  pin[14] D O 0 000 0.000 "PB0/8   " 
  pin[15] D O 0 000 0.000 "PB1/~9  " 
  pin[16] D O 0 000 0.000 "PB2/~10 " 
  pin[17] D O 0 006 0.000 "PB3/~11 " 
  pin[18] D I 0 000 0.000 "PB4/12  " 
  pin[19] D O 0 000 0.000 "PB5/13  " 
  pin[20] P I 1 200 0.000 "+5V     " 
  pin[21] R I 0 000 0.000 "AREF    " 
  pin[22] P I 0 000 0.000 "GND     " 
  pin[23] A I 0 000 0.875 "PC0/A0  " 
  pin[24] A I 0 000 1.925 "PC1/A1  " 
  pin[25] A I 0 000 2.700 "PC2/A2  " 
  pin[26] A I 0 000 4.275 "PC3/A3  " 
  pin[27] D O 1 179 0.000 "PC4/A4  " 
  pin[28] D O 1 186 0.000 "PC5/A5  " 
Ok

You can view one input/output state using the “get” command:

get board.out[00] 
 
get part[02].in[01]

Its possible use the “get” command to view individual pins state:

#digital state 
get pin[19] 
pin[19]= 0 
Ok 
 
#digital mean value (0-200) 
get pinm[19] 
pin[18]= 100 
Ok 
 
#analog state 
get apin[25] 
apin[25]= 2.700 
Ok 
 
#all info 
get pinl[13] 
pin[13] D I 1 200 0.000 "PD7/7   " 
Ok

And set value of one input using the “set” command:

set part[02].in[01]  0 
set part[02].in[01]  1

Or set value of one pin using the “set” command:

#digital 
set pin[10]  2 
 
#analog 
set apin[20] 2.345

For windows users putty telnet client is a good option to access the remote control interface.

3.6.1 PICSimLab Python rcontrol Wrapper Library