Documentation

Test Sequence Action and Transition Operations

Transition Between Steps Using Temporal or Signal Conditions

The Test Sequence block uses MATLAB® as the action language. You can transition between test steps by evaluating the component under test. You can use conditional logic, temporal operators, and event operators.

Consider a simple test sequence that outputs a sine wave at three frequencies. The test sequence transitions between steps:

  • From Initialize to Sine when Switch changes

  • From Sine to Sine8 when Switch changes from the value 1

  • From Sine8 to Sine16 when Switch changes to the value 13.344

Link a Test Assessment to an Active Test Sequence Step

If you use a separate Test Assessment block, you can link test assessments to the active test step in a Test Sequence block. You link the two blocks with data monitoring the active step:

  1. Open the Model Explorer by selecting View > Model Explorer > Model Explorer.

  2. Select the Test Sequence block in the Model Hierarchy.

  3. In the properties, select Create data to monitor the active step.

    This creates a new enumerated data output. Enter a name for the enumeration.

  4. Create a data input for the Test Assessment block.

    1. Open the Test Assessment block.

    2. In the Symbols sidebar, next to Input, click the Add data icon. Name the input.

  5. In the test harness, connect the Test Sequence block step output to the Test Assessment block step input.

  6. In the test assessments, use the enumeration in actions and transitions.

    For example, this Test Assessment block verifies that when the test step down_4_3 is active, gear ~= 2.

Temporal Operators

To create an expression that evaluates the simulation time, use temporal operators. Variables used in signal conditions must be inputs, parameters, or constants in the Test Sequence block.

OperatorSyntaxDescriptionExample
et

et(TimeUnits)

The elapsed time of the test step in TimeUnits. Omitting TimeUnits returns the value in seconds.

The elapsed time of the test sequence step in milliseconds:

et(msec)
t

t(TimeUnits)

The elapsed time of the simulation in TimeUnits. Omitting TimeUnits returns the value in seconds.

The elapsed time of the simulation in microseconds:

t(usec)
after

after(n, TimeUnits)

Returns true if n specified units of time in TimeUnits elapse since the beginning of the current test step.

After 4 seconds:

after(4,sec)
before

before(n, TimeUnits)

Returns true until n specified units of time in TimeUnits elapse, beginning with the current test step.

Before 4 seconds:

before(4,sec)
duration

ElapsedTime = duration (Condition, TimeUnits)

Returns ElapsedTime in TimeUnits for which Condition has been true. ElapsedTime is reset when the test step is re-entered or when Condition is no longer true.

Return true if the time in milliseconds since Phi > 1 is greater than 550:

duration(Phi>1,msec) > 550

Syntax in the table uses these arguments:

 TimeUnits

 Condition

Transition Operators

To create expressions that evaluate signal events, use transition operators. Common transition operators include:

OperatorSyntaxDescriptionExample
hasChanged
hasChanged(u)

Returns true if u changes in value since the beginning of the test step, otherwise returns false.

u must be an input data symbol.

Transition when h changes:

hasChanged(h)
hasChangedFrom
hasChangedFrom(u,A)

Returns true if u changes from the value A, otherwise returns false.

u must be an input data symbol.

Transition when h changes from 1:

hasChangedFrom(h,1)
hasChangedTo
hasChangedTo(u,B)

Returns true if u changes to the value B, otherwise returns false.

u must be an input data symbol.

Transition when h changes to 0:

hasChangedTo(h,0)

Use Messages in Test Sequences

Messages carry data between Test Sequence blocks and other blocks such as Stateflow® charts. Messages can be used to model asynchronous events. A message is queued until you evaluate it, which removes it from the queue. You can use messages and message data inside a test sequence. The message remains valid until you forward it, or the time step ends. For more information, see Messages in the Stateflow® documentation.

Receive Messages and Access Message Data

If your Test Sequence block has a message input, you can use queued messages in test sequence actions or transitions. Use the receive command before accessing message data or forwarding a message.

To create a message input, hover over Input in the Symbols sidebar, click the add message icon, and enter the message name.

receive(M) determines whether a message is present in the input queue M, and removes the message from the queue. receive(M) returns true if a message is in the queue, and false if not. Once the message is received, you can access the message data using the dot notation, M.data, or forward the message. The message is valid until it is forwarded or the current time step ends.

The order of message removal depends on the queue type. Set the queue type using the message properties dialog box. In the Symbols sidebar, click the edit icon next to the message input, and select the Queue type. For more information see Queuing Behavior of Stateflow Messages.

Send Messages

To send a message, create a message output and use the send command. To create a message output, hover over Output in the Symbols sidebar, click the add message icon, and enter the message name.

You can assign data to the message using the dot notation M.data, where M is the message output of the Test Sequence block. send(M) sends the message.

Forward Messages

You can forward a message from an input message queue to an output port. To forward a message:

  1. Receive the message from the input queue using receive.

  2. Forward the message using the command forward(M,M_out) where M is the message input queue and M_out is the message output.

Compare Test Sequences Using Data and Messages

This example demonstrates message inputs and outputs, sending, and receiving a message. The model compares two pairs of test sequences. Each pair is comprised of a sending and receiving test sequence block. The first pair sends and receives data, and the second sends and receives a message.

Set the following path and model name variables.

filePath = fullfile(matlabroot,'examples','simulinktest');
model = 'sltest_testsequence_data_vs_message';

Open the model.

open_system(fullfile(filePath,model))

Test Sequences Using Data

The DataSender block assigns a value to a data output M.

The DataReceiver block waits 3 seconds, then transitions to step S2. Step S2 transitions to step S3 using a condition comparing M to the expected value, and does the same for S3 to S4.

Test Sequences Using Messages

The MessageSender block assigns a value to the message data of a message output M_out, then sends the message to the MessageReceiver block.

The MessageReceiver block waits 3 seconds, then transitions to step S2. Step S2's transition evaluates the queue M with receive(M), removing the message from the queue. receive(M) returns true since the message is present. M.data == 3.5 compares the message data to the expected value. The statement is true, and the sequence transitions to step S3.

When step S3's transition condition evaluates, no messages are present in the queue. Therefore, S3 does not transition to S4.

Run the test and observe the output comparing the different behaviors of the test sequence pairs.

open_system([model '/Scope'])
sim(model)

See Also

|

Related Topics

Was this topic helpful?