# Process Variables

Most CSS tools support several types of process variables (PVs). When simply using a PV name like

       some_pv_name

this will refer to a default PV type which can be configured in the PV preferences.

To select a specific PV type, use the PV name format

       type://some_pv_name

## Preferences

The default PV type can be selected via the menu CSS/Preferences/Applications/Configuration/Process Variables.

## Type-Specific PV Name Formats

### sys://

System PVs can be used to display information internal to CSS or the local computer:

Name | Detail
--- | ---
    sys://time
| Local date and time
    sys://free_mb
| Free Java VM memory in MB
    sys://used_mb
| Used Java VM memory in MB
    sys://max_mb
| Maximum available Java VM memory in MB
    sys://user
| User Name
    sys://host_name
| Host name
    sys://qualified_host_name
| Full Host Name
    sys://system.*
| Any system property, e.g. "sys://system.user.name"
    sys://pv_count
| Number of "loc:", "sys:" and "sim:" values.

### ca://

EPICS Channel Access PVs can be any record name or record-name-with-field:

      ca://some:record:name
      ca://some_record_name
      ca://some_record_name.SCAN

The "ca://" prefix can be avoided by configuring it as the default.

### loc://

'Local' PVs can be used to communicate between CSS tools within one CSS instance. For example, an instance of Probe and the Data Browser can both use a PV

      loc://demo

When adjusting the value in Probe, the Data Browser will reflect the changes.

Note that if no initial value specified, local PVs have a default initial value of 0. Setting them to anything that parses as a number will create a numeric (double-typed) PV. Otherwise, they behave as String PVs.

You can also give an initial value to a local PV by following one of these formats:

      loc://demo(1.23)

will initialize it to a double value of 1.23.

      loc://demo(1.23, 2.2, 3, 4.5, 6.7)

will initialize it to a double array.

      loc://demo(hello)

will initialize it to a string value of "hello".

Note that if initial values differ between two declarations, the first one wins.

### sim://

Simulated PVs can have these formats:

      sim://noise

generates simulated noise from -5 to 5, updating once every second.

      sim://noise(-10, 10, 0.2)

generates simulated noise from -10 to 10, updating every 0.2 seconds.

      sim://sine(0, 10, 20, 0.5)

generates a simulated sine wave signal valued 0 to 10, split into 20 updates, updating every 0.5 seconds. A full period takes 20 updates, i.e. 5 seconds in this example.

      sim://ramp(0, 10, 0.1, 0.5)

generates a ramp (saw-tooth) valued 0 to 10, stepping 0.1 every 0.5 seconds.

      sim://ramp(0, 100, -1, 2)

generates a negative ramp, i.e. count-down, from 100 to 0, stepping 1 every 2 seconds.

### const://

'Constant' PVs are mostly useful as input to PV-driven code like OPI scripts that need a constant value but at the same time require a PV.

      const://pi(3.14)

a constant double value of 3.14.

      const://name(Fred)

a constant string value of "Fred". As a shortcut, just

      3.14
      "Fred"

will have the same effect.

      const://arrayDemo(1.23, 2.2, 3, 4.5, 6.7)

a constant double array.

Constant PVs are read-only, and only send one initial value update.