В разработке и тестировании автомобильных ЭБУ совместная симуляция — ключевой способ повысить эффективность тестирования и обеспечить стабильность системы. TSMaster как комплексный инструмент симуляции и тестирования в сочетании с профессиональными возможностями ECUTEST позволяет строить эффективные автоматизированные тесты. В статье — как импортировать плагин TSMasterAPI и разбор основных API-функций.

Ключевые слова: TSMasterAPI, ECUTEST, API, SIL, совместная симуляция.

1. Плагин TSMasterAPI

Для пользователей ECUTEST TSMaster предоставляет интерфейсы программного управления ПО TSMaster и аппаратурой; в ECUTEST видны соответствующие имена интерфейсов. Интерфейс управления UI TSMaster на верхнем уровне для SIL-симуляции называется TOSUN: TSMaster SIL Kit; интерфейс управления аппаратными продуктами TOSUN для SIL-симуляции — TOSUN: Hardware SIL Kit (рис. 1-1).

Интерфейсы TSMasterAPI в ECUTEST
Рис. 1-1. Интерфейсы TSMaster SIL Kit и Hardware SIL Kit в ECUTEST

1.1. Импорт TSMasterAPI

1.1.1. Развёртывание плагина. При установке TSMaster официально предоставляется среда плагина ECUTEST: пользователь выбирает, устанавливать ли плагин, — тем же способом, что и среды C++\Python (рис. 1-2). Если хочется получить плагин как можно раньше, можно запросить пакет плагина у TOSUN и вручную поместить его в ПО ECUTEST (рис. 1-3).

Установка плагина
Рис. 1-2. Установка плагина ECUTEST вместе с TSMaster
Ручное размещение плагина
Рис. 1-3. Ручное размещение плагина в ECUTEST

1.1.2. Импорт плагина в рабочую область. При создании workspace в ECUTEST отметьте «Show workspace settings» → «Copy tutorial files» → в выпадающем списке выберите «TSMasterAPI» → «OK» — в рабочей области появятся «TOSUN: TSMaster SIL Kit» и «TOSUN: Hardware SIL Kit» (рис. 1-4).

Импорт в workspace
Рис. 1-4. Импорт TSMasterAPI в рабочую область

1.2. TOSUN: TSMaster SIL Kit

1.2.1. Создание test bench configuration. Сначала создайте «test bench configuration» → «create new tool host» → «Local» — в окне tool host появится «TOSUN: TSMaster SIL Kit». Щёлкните правой кнопкой «TOSUN: TSMaster SIL Kit» → «Add tool» → в поле «TSMaster_project_path» укажите путь к проекту TSMaster и сохраните.

  1. Шаг 1. Создайте «test bench configuration» (рис. 1-5).
  2. Шаг 2. «Create new tool host» (рис. 1-6).
  3. Шаг 3. «TOSUN: TSMaster SIL Kit» → «Add tool» (рис. 1-7).
  4. Шаг 4. «Сохранить» (рис. 1-8).
  5. Шаг 5. «Запустить» (рис. 1-9).
  6. Шаг 6. «Connect tool» (рис. 1-10).
  7. Шаг 7. Вызов интерфейсов (рис. 1-11).
Создание test bench configuration
Рис. 1-5. Создание test bench configuration
Create new tool host
Рис. 1-6. Create new tool host
Add tool
Рис. 1-7. Add tool для TSMaster SIL Kit
Сохранение
Рис. 1-8. Сохранение конфигурации
Запуск
Рис. 1-9. Запуск
Connect tool
Рис. 1-10. Connect tool
Вызов интерфейсов
Рис. 1-11. Вызов интерфейсов

1.3. TOSUN: Hardware SIL Kit

1.3.1. Создание test bench configuration. Создайте «test bench configuration» → «create new tool host» → «Local» — в окне tool host появится «TOSUN: Hardware SIL Kit». Щёлкните правой кнопкой → «Add tool» → в поле «TSMaster_App_Name» укажите имя приложения TSMaster и сохраните. Шаги те же: создание конфигурации (рис. 1-5), tool host (рис. 1-6), Add tool (рис. 1-12), сохранение (рис. 1-8), запуск (рис. 1-13), Connect tool (рис. 1-14), вызов интерфейсов (рис. 1-15).

Add tool Hardware SIL Kit
Рис. 1-12. Add tool для Hardware SIL Kit
Запуск Hardware SIL Kit
Рис. 1-13. Запуск
Connect tool Hardware
Рис. 1-14. Connect tool
Вызов интерфейсов Hardware
Рис. 1-15. Вызов интерфейсов

2. Описание интерфейсов TSMasterAPI

2.1. TOSUN: TSMaster SIL Kit

ФункцияОписаниеПараметрыВозвращаемое значениеПример
start_simulation()RPC-клиент запускает симуляцию на стороне сервера TSMaster; вызывается после создания RPC-клиентанет==0 — успех; другие значения — неудачаstart_simulation()
simulation_is_running()Возвращает, запущена ли симуляция на сервере TSMaster; вызывается после создания RPC-клиентанет==0 — успех; другие значения — неудачаret = simulation_is_running()
if ret:
  print("симуляция запущена")
stop_simulation()RPC-клиент останавливает симуляцию TSMaster; вызывается после создания RPC-клиентанет==0 — успех; другие значения — неудачаstop_simulation()
get_sysvar_value(SysvarName: str) -> (errorcode, double)Получение значения системной переменной; вызывается после активации RPC-клиентаSysvarName — имя системной переменнойRet[0] — код ошибки (==0 успех); Ret[1] — значение сигналаret, value = get_sysvar_value('Var0')
if ret == 0 and value == 100:
  print("ok")
set_sysvar_value(SysvarName: str, value: double) -> errorcodeУстановка значения системной переменной; вызывается после активации RPC-клиентаSysvarName — имя переменной; Value — устанавливаемое значение==0 — успех; другие значения — неудачаset = set_sysvar_value('Var0', 100)
get_cansignal_value(cansignalName: str) -> (errorcode, double)Получение значения CAN-сигнала; вызывается после активации RPC-клиентаcansignalName — адрес сигналаRet[0] — код ошибки (==0 успех); Ret[1] — значение сигналаret, value = get_cansignal_value('0/CAN_FD_Powertrain/Engine/ABSdata/CarSpeed')
set_cansignal_value(cansignal: str, value: double) -> errorcodeУстановка значения CAN-сигнала; вызывается после активации RPC-клиентаcansignalName — адрес сигнала; Value — устанавливаемое значение==0 — успех; другие значения — неудачаset_cansignal_value('0/CAN_FD_Powertrain/Engine/ABSdata/CarSpeed', 100)
get_linsignal_value(linsignalName: str) -> (errorcode, double)Получение значения LIN-сигнала; вызывается после активации RPC-клиентаLinsignalName — адрес сигналаRet[0] — код ошибки (==0 успех); Ret[1] — значение сигналаret, value = get_linsignal_value('0/LIN_Powertrain/Engine/ABSdata/CarSpeed')
set_linsignal_value(linsignal: str, value: double) -> errorcodeУстановка значения LIN-сигнала; вызывается после активации RPC-клиентаLinsignalName — адрес сигнала; Value — устанавливаемое значение==0 — успех; другие значения — неудачаset_linsignal_value('0/LIN_Powertrain/Engine/ABSdata/CarSpeed', 100)
get_frsignal_value(frsignalName: str) -> (errorcode, double)Получение значения FlexRay-сигнала; вызывается после активации RPC-клиентаfrsignalName — адрес сигналаRet[0] — код ошибки (==0 успех); Ret[1] — значение сигналаret, value = get_frsignal_value('0/FR_Powertrain/Engine/ABSdata/CarSpeed')
set_frsignal_value(frsignal: str, value: double) -> errorcodeУстановка значения FlexRay-сигнала; вызывается после активации RPC-клиентаfrsignalName — адрес сигнала; Value — устанавливаемое значение==0 — успех; другие значения — неудачаset_frsignal_value('0/FR_Powertrain/Engine/ABSdata/CarSpeed', 100)

2.2. TOSUN: Hardware SIL Kit

ФункцияОписаниеПараметрыВозвращаемое значениеПример
set_hardware_config() -> error_codeКонфигурация аппаратного устройства для текущей программы; вызывается до подключения, при неизменной конфигурации каналов можно не выполнятьнет==0 — успех; другие значения — неудачаset_hardware_config()
connect() -> error_codeПодключение аппаратного устройства; вызывается после настройки аппаратных каналовнет==0 — успех; другие значения — неудачаconnect()
disconnect() -> error_codeОтключение аппаратного устройстванет==0 — успех; другие значения — неудачаdisconnect()
send_msg(AMsg: TLIBCAN | TLIBCANFD | TLIBLIN | TLIBFlexRay) -> error_codeОднокадровая отправка сообщения; вызывается после подключения аппаратурыAMsg — объект сообщения==0 — успех; другие значения — неудачаAMsg = TLIBCAN(0x123)
send_msg(AMsg)
send_cyclic_can_msg(AMsg: TLIBCAN | TLIBCANFD, ATime) -> error_codeЦиклическая отправка сообщений CAN/CAN FD; вызывается после подключения аппаратурыAMsg — объект сообщения; ATime — период в мс (1 = 1 мс, 100 = 100 мс)==0 — успех; другие значения — неудачаAMsg = TLIBCAN(0x123)
send_cyclic_can_msg(AMsg, 100)
recv_can_msg(AChnidx, ACount, IsIncludeTx) -> AMsgListПриём сообщений CAN; вызывается после подключения аппаратурыAChnidx — канал приёма; ACount — максимальное число сообщений; IsIncludeTx — включать ли отправленные сообщенияAMsgList — список принятых сообщенийAMsgs = recv_can_msg(0, 100, False)
recv_lin_msg(AChnidx, ACount, IsIncludeTx) -> AMsgListПриём сообщений LIN; вызывается после подключения аппаратурыAChnidx — канал приёма; ACount — максимальное число сообщений; IsIncludeTx — включать ли отправленные сообщенияAMsgList — список принятых сообщенийAMsgs = recv_lin_msg(0, 100, False)
recv_flexray_msg(AChnidx, ACount, IsIncludeTx) -> AMsgListПриём сообщений FlexRay; вызывается после подключения аппаратурыAChnidx — канал приёма; ACount — максимальное число сообщений; IsIncludeTx — включать ли отправленные сообщенияAMsgList — список принятых сообщенийAMsgs = recv_flexray_msg(0, 100, False)