A central element of the Modelica_Synchronous library is a
**clock**. Below, the most important information for clocks is
summarized. For more details, see the Modelica Language
Specification, Chapter 16 (for Modelica Language Version ≥
3.3).

A **Clock** type is a base data type (introduced in Modelica
3.3, additionally to Real, Integer, Boolean, String) that defines
when a particular partition consisting of a set of equations is
active. Starting with Modelica Language Version 3.3, every variable
and every equation is either continuous-time or is associated
exactly to one clock. This feature is visualized in the figure
below where c(ti) is a clock that is active at particular time
instants ti and r(ti) is a variable that is associated to this
clock. A clocked variable has only a value when the corresponding
clock is active:

Similarly to RealInput, RealOutput etc., clock input and output connectors, called ClockInput and ClockOutput, are defined in sublibrary ClockSignal.Interfaces in order to propagate clocks via connections. A clock signal can be generated with one of the blocks of sublibrary ClockSignals.Clocks:

The output signals of the blocks in the above figure are clock signals, by default visualized with dotted grey lines.

With the blocks of sublibrary ClockSignals.Sampler a clock signal can be sub-sampled, super-sampled, or shift-sampled to generate a new clock signal. For example, with the following model, a periodic clock signal of 0.1 s is sub-sampled with a factor 3 and therefore a clock signal with a period of 0.3 s is generated:

As usual in synchronous languages, a clock is represented by a
**true** value when the clock is active. The relationship
between such derived clocks is **exact**, so it is guaranteed
that at every 3rd tick of clock "periodicRealClock.y", the clock
"subSample.y" is active.

If a clock is associated to a clocked continuous-time partition,
then an **integrator** has to be defined that is used to
integrate the partition from the previous to the current clock
tick. This is performed by setting parameter **useSolver** =
**true** and defining the integration method as String with
parameter **solver**. Both parameters are in tab **Advanced**
of one of the clock signal generating blocks. The possible
integration methods are tool dependent. It is expected that at
least the solvers "External" (= use the integrator selected in the
simulation environment) and "ExplicitEuler" (= explicit Euler
method) are supported by every tool. For an example, see
Examples.Systems.ControlledMixingUnit.

A clocked partition is a set of equations that depend on each
other and where the boundary variables are marked with sample and
hold operators. If a clocked partition contains no operator
**der**, **delay**, **spatialDistribution**, no event
related operators (with exception of **noEvent**(..)), and no
**when**-clause with a Boolean condition, it is a **clocked
discrete-time** partition, that is, it is a standard sampled data
system that is described by difference equations. If a clocked
partition is **not** a **clocked discrete-time** partition
and it contains neither operator **previous** nor operator
**interval**, it is a **clocked discretized continuous-time**
partition. Such a partition has to be solved with a **solver**
method. It is an error, if none of the two properties hold, e.g.,
if operators **previous** and **der** are both used in the
same partition. In a clocked discrete-time partition all event
generating mechanisms do no longer apply. Especially neither
relations, nor one of the built-in event triggering operators will
trigger an event.

Generated at 2019-11-20T02:39:14Z by OpenModelicaOpenModelica 1.16.0~dev-21-g8b27e5b using GenerateDoc.mos