Измените значения данных во время симуляции

Как изменить значения данных Stateflow

Когда ваш график находится в режиме отладки, можно протестировать симуляцию путем изменения значений данных в графике. После того, как подсказка debug>> появляется, как описано в Смотрят Stateflow Data в Окне Команды MATLAB, можно присвоить различное значение данным. Чтобы изменить значение данных, введите новое значение в подсказке с помощью следующего формата:

data_name = new_value

Чтобы изменить значения данных непосредственно в Окне Символов, смотрите, Управляют Данными, Событиями и сообщениями в Окне Символов.

Для списка данных, которые вы не можете изменить, смотрите Данные, Которые Только для чтения Во время Симуляции. Вы не можете изменить значения данных сообщения в командной строке.

Примеры изменения значений данных

Скалярный пример

Предположим, что, после того, как подсказка debug>> появляется, вы вводите whos в подсказке и видите следующие данные:

  Name         Size      Bytes  Class       
                                            
  airflow      1x1           1  uint8 array 
  temp         1x1           8  double array
Измениться...К этому значению...Войти...
airflow2airflow = uint8(2)
temp68.75temp = 68.75

При попытке ввести airflow = 2, вы получаете сообщение об ошибке, потому что MATLAB® интерпретирует то выражение как присвоение значения double к данным типа uint8. Для ссылки смотрите Случаи, Когда Кастинг Будет Необходим.

Многомерный пример

Предположим, что, после того, как подсказка debug>> появляется, вы вводите whos в подсказке и видите следующие данные:

  Name                  Size                Bytes  Class       
                                                               
  ball_interaction      16x16                 256  int8 array 
  last_vel              16x2                  256  double array
  stopped               16x1                   16  int16 array 
Измениться...К этому значению...Войти...
Элемент в строке 8, столбце 8 ball_interaction1ball_interaction(8,8) = int8(1)
Элемент в строке 16, столбце 1 last_vel120.52last_vel(16,1) = 120.52
Последний элемент в stopped0stopped(16) = int16(0)

Индексация на основе одна применяется, когда вы изменяете значения данных Stateflow®, в то время как график находится в режиме отладки.

Пример переменного размера

Предположим, что, после того, как подсказка debug>> появляется, вы вводите whos в подсказке и видите следующие данные:

  Name   Size   Bytes  Class                                
                                                               
  y1     1x1        8  double array (variable sized: MAX 16x16)
  y2     1x1        8  double array (variable sized: MAX 16x4)
Измениться...К...Войти...
y110 5 массив из единицy1 = ones(10,5)
y26 4 массив нулейy2 = zeros(6,4)

Изменение размерностей данных переменного размера работает только, когда новый размер не превышает границы размерности.

Пример фиксированной точки

Предположим, что, после того, как подсказка debug>> появляется, вы вводите whos в подсказке и видите следующие данные:

  Name      Size     Bytes  Class                         
                                                          
  y_n1      1x1          2  fixpt (int16 array (2^-10)*SI)
  x_n1      1x1          2  fixpt (int16 array (2^-12)*SI)

И y_n1 и x_n1 подписали фиксированные точки с размером слова 16. y_n1 имеет дробную длину 10, и x_n1 имеет дробную длину 12.

Измениться...К этому значению фиксированной точки...Войти...
y_n10.5410y_n1 = fi(0.5412,1,16,10)
x_n10.4143x_n1 = fi(0.4142,1,16,12)

Для получения дополнительной информации об использовании объектов fi см. документацию Fixed-Point Designer™.

Перечислимый пример

Предположим, что, после того, как подсказка debug>> появляется, вы вводите whos в подсказке и видите следующие данные:

Name                  Size     Bytes  Class      
                                                 
CurrentRadioMode      1x1           4  int32 array
MechCmd               1x1           4  int32 array

Примите, что CurrentRadioMode и MechCmd используют перечислимые типы RadioRequestMode и CdRequestMode, соответственно.

Измениться...К этому перечисляемому значению...Войти...
CurrentRadioModeCDCurrentRadioMode = RadioRequestMode.CD
MechCmdИграMechCmd = CdRequestMode.PLAY

Необходимо включать перечислимый тип явным образом в присвоение. В противном случае ошибка появляется в подсказке debug>>.

Ограничения на изменение значений данных

Данные, которые только для чтения во время симуляции

Вы не можете изменить данные следующих осциллографов, в то время как график находится в режиме отладки:

  • Постоянный

  • Входной параметр

Ограничения на изменяющийся тип и размер

Следующие свойства данных не могут измениться:

  • Тип данных

  • Размер

Однако для данных переменного размера, можно изменить размерности данных, пока размер находится в пределах границ размерности. Например, varsizedData = ones(5,7); является допустимым присвоением для переменного размера 10 10 массив.

Ограничения для данных фиксированной точки

  • Не присваивайте значение, которое выходит за пределы области значений значений, которые может представлять фиксированная точка. Постарайтесь не выбирать значение, которое вызывает переполнение.

  • Знак, размер слова, дробная длина, наклон и смещение не могут измениться.

Ограничения для структур

  • Вы не можете изменить тип данных или размер никаких полей.

  • Сложение или удаление полей не работают, потому что размер структуры не может измениться.

Случаи, когда кастинг необходим

Когда вы изменяете значение данных, необходимо явным образом бросить значения для данных следующих встроенных типов:

  • single

  • int32

  • int16

  • int8

  • uint32

  • uint16

  • uint8

Например, следующие присвоения допустимы:

  • my_data1 = uint8(2)

  • my_data2 = single(5.3)

Кастинг не необходим, когда вы изменяете значение данных, которые имеют тип double.