{"id":20179,"date":"2025-07-01T11:39:21","date_gmt":"2025-07-01T03:39:21","guid":{"rendered":"https:\/\/www.tosunai.com\/?p=20179"},"modified":"2025-07-01T11:48:15","modified_gmt":"2025-07-01T03:48:15","slug":"tsmasterapi-plugin-import-and-ecutest-co-simulation-guide","status":"publish","type":"post","link":"https:\/\/www.tosunai.com\/en\/tsmasterapi-plugin-import-and-ecutest-co-simulation-guide\/","title":{"rendered":"Sharing | TSMasterAPI Plugin Import and ECUTEST Co-Simulation Guide"},"content":{"rendered":"
In automotive electronic ECU development and testing, joint simulation has become a key means to improve testing efficiency and ensure system stability. And TSMaster, as a comprehensive tool for automotive electronic simulation and testing, combined with ECUTEST's professional testing capabilities, can realize efficient automated testing. In this article, we will introduce in detail how to import TSMaster API plug-ins and explain the core API interface functions.<\/p>\n\n\n\n
<\/p>\n\n\n\n
Keywords:TSMasterAPI, ECUTEST, API Interface<\/strong><\/strong><\/p>\n\n\n\n Currently, TSMaster provides programmable TSMaster software and hardware interfaces for the majority of ecutest users, and the corresponding interface names can be viewed in the ECUTEST software.<\/p>\n\n\n\n Program control TSMaster UI interface to realize SIL simulation interface name: TSOUN: TSMaster SIL Kit; program control TOSUN hardware products to realize SIL simulation interface name: TOSUN: Hardware SIL Kit. as shown in the figure below:<\/p>\n\n\n <\/p>\n\n\n\n 1.1.1 Deploying the plug-in<\/p>\n\n\n\n TOSUN official will provide ECUTEST plug-in environment when installing TSMaster, users can choose whether to install the plug-in or not, the same way as installing C++\\Python environment to check the box to install.<\/p>\n\n\n <\/p>\n\n\n\n Meanwhile, if you want to use the plug-in at the first time, you can contact TOSUN sales or technology at the same time to get the plug-in package, and then manually put it into the ECUTEST software, the location of which is shown in the figure below:<\/p>\n\n\n <\/p>\n\n\n\n 1.1.2 Workspace Import Plugin<\/p>\n\n\n\n When you create ECUTEST workspace, check \u201cShow workspace settings\u201d -> \u201cCopy tutorial files\u201d -> select \u201cTSMasterAPI\u201d -> \u2018OK\u2019, you can see \u201cTSOUN: TSMaster SATURDAY\u201d in the workspace. \u201cTSMasterAPI\u201d -> \u2018OK\u2019, then you can see \u201cTSOUN: TSMaster SIL Kit\u201d and \u201cTSOUN: Hardware SIL Kit\u201d in the workspace.<\/p>\n\n\n <\/p>\n\n\n\n 1.2.1 Create test bench configuration<\/p>\n\n\n\n First create \u201ctest bench configruation\u201d -> \u201cnew create new tool host\u201d -> \"Local \u201c; then you can see \u201dTOSUN: TSMaster SIL Kit\" in the tool host window.<\/p>\n\n\n\n Right click \u201cTOSUN: TSMaster SIL Kit\u201d -> \u201cAdd tool\u201d -> \"TSMaster_project_path In \u201cTSMaster_project_path\u201d, fill in the project path of TSMaster and click save.<\/p>\n\n\n\n (1) Create \u201ctest bench configruation\u201d.<\/p>\n\n\n <\/p>\n\n\n\n \uff082\uff09\u201cCreate new tool host\u201d<\/p>\n\n\n <\/p>\n\n\n\n \uff083\uff09\u201cTOSUN: TSMaster SIL Kit\u201d->\u201cAdd tool\u201d<\/p>\n\n\n <\/p>\n\n\n\n (4) \u201cSave\u201d<\/p>\n\n\n <\/p>\n\n\n\n (5) \u201cStart\u201d<\/p>\n\n\n <\/p>\n\n\n\n \uff086\uff09\u201cConnect tool\u201d<\/p>\n\n\n <\/p>\n\n\n\n (7) Interface call<\/p>\n\n\n <\/p>\n\n\n\n 1.3.1 Creating a test bench configuration<\/p>\n\n\n\n First create \u201ctest bench configruation\u201d -> \u201cnew create new tool host\u201d -> \"Local \u201c; then you can see \u201dTOSUN: Hardware SIL Kit\" in the tool host window. Right click \u201cTOSUN: TSMaster SIL Kit\u201d -> \u201cAdd tool\u201d -> \u201cTSMaster_App_Name\u201d. Fill in the application name of TSMaster and click Save.<\/p>\n\n\n\n (1) Create \u201ctest bench configruation\u201d.<\/p>\n\n\n <\/p>\n\n\n\n \uff082\uff09\u201cCreate new tool host\u201d<\/p>\n\n\n <\/p>\n\n\n\n \uff083\uff09\u201cTOSUN: TSMaster SIL Kit\u201d->\u201cAdd tool\u201d<\/p>\n\n\n\n <\/p>\n\n\n\n (4) \u201cSave\u201d<\/p>\n\n\n <\/p>\n\n\n\n (5) \u201cStart\u201d<\/p>\n\n\n <\/p>\n\n\n\n \uff086\uff09\u201cConnect tool\u201d<\/p>\n\n\n\n <\/p>\n\n\n\n (7) Interface call<\/p>\n\n\n\n 2.1.1 start_simulation<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.2 simulation_is_running<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.3 stop_simulation<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.4 get_sysvar_value<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.5 set_sysvar_value<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.6 get_cansignal_value<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.7 set_cansignal_value<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.8 get_linsignal_value<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.9 set_linsignal_value<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.10 get_frsignal_value<\/p>\n\n\n\n <\/p>\n\n\n\n 2.1.11 set_frsignal_value<\/strong><\/p>\n\n\n\n <\/p>\n\n\n\n 2.2.1 set_hardware_config<\/p>\n\n\n\n <\/p>\n\n\n\n 2.2.2 connect<\/p>\n\n\n\n <\/p>\n\n\n\n 2.2.3 disconnect<\/p>\n\n\n\n <\/p>\n\n\n\n 2.2.4 send_msg<\/p>\n\n\n\n <\/p>\n\n\n\n 2.2.5 send_cyclic_can_msg<\/p>\n\n\n\n <\/p>\n\n\n\n 2.2.6 recv_can_msg<\/p>\n\n\n\n <\/p>\n\n\n\n 2.2.7 recv_lin_msg<\/p>\n\n\n\n <\/p>\n\n\n\n 2.2.8 recv_flexray_msg<\/p>\n\n\n\n1<\/strong>. TSMasterAPI Plugin<\/strong><\/strong><\/strong><\/strong><\/strong><\/h2>\n\n\n\n
\n\n\n\n<\/figure><\/div>\n\n\n
1.1 Importing TSMasterAPI<\/strong><\/h3>\n\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
1.2 <\/strong>TOSUN: TSMaster SIL Kit<\/strong><\/h3>\n\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
1.3 TOSUN\uff1a<\/strong>Hardware SIL Kit<\/strong><\/h3>\n\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure>\n\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
2. <\/strong><\/strong><\/strong><\/strong><\/strong><\/strong>TSMasterAPI Interface Description<\/strong><\/h2>\n\n\n\n
\n\n\n\n2.1 TOSUN: TSMaster SIL Kit<\/strong><\/h3>\n\n\n\n
Parameter name<\/td> start_simulation()<\/td><\/tr> Function<\/td> RPC client startup server TSMaster emulation<\/td><\/tr> call location<\/td> After creating the rpc client, call<\/td><\/tr> Input parameter<\/td> None<\/td><\/tr> Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> start_simulation()<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> simulation_is_running()<\/td><\/tr> Function<\/td> Returns whether the server-side TSMaster has emulation enabled or not<\/td><\/tr> call location<\/td> After creating the rpc client, call<\/td><\/tr> Input parameter<\/td> None<\/td><\/tr> Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> ret =simulation_is_running()
if ret:
print(\u201cEmulation is turned on\u201d)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\nParameter name<\/td> stop_simulation()<\/td><\/tr> Function<\/td> RPC client stops server side TSMaster emulation<\/td><\/tr> call location<\/td> After creating the rpc client, call<\/td><\/tr> Input parameter<\/td> None<\/td><\/tr> Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> stop_simulation()<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> get_sysvar_value(SysvarName:str)->(errorcode, double)<\/td><\/tr> Function<\/td> Getting system variable values<\/td><\/tr> call location<\/td> Called after activating the rpc client<\/td><\/tr> Input parameter<\/td> SysvarName: System Variable Name<\/mark><\/td><\/tr> Return value<\/td> ==Ret[0]: error code, ==0 for success, other failures
Ret[1]:Signal value<\/td><\/tr>Typical example<\/td> ret,value = get_sysvar_value(‘Var0’)
if ret == 0 and value==100:
Print(“ok”)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\nParameter name<\/td> get_sysvar_value(SysvarName:str, value:double)->errorcode<\/td><\/tr> Function<\/td> Getting system variable values<\/td><\/tr> call location<\/td> Called after activating the rpc client<\/td><\/tr> Input parameter<\/td> SysvarName: System Variable Name
Value: Setting value<\/mark><\/td><\/tr>Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> set = set_sysvar_value(‘Var0’ ,100)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> get_cansignal_value(cansignalName:str)->(errorcode, double)<\/td><\/tr> Function<\/td> Getting system variable values<\/td><\/tr> call location<\/td> Called after activating the rpc client<\/td><\/tr> Input parameter<\/td> cansignalName: signal address<\/mark><\/td><\/tr> Return value<\/td> ==Ret[0]: error code, ==0 for success, other failures
Ret[1]:Signal value<\/td><\/tr>Typical example<\/td> ret, value = get_cansignal_value( ‘0\/CAN_FD_Powertrain\/Engine\/ABSdata\/CarSpeed’)
if ret == 0 and value==100:
Print(“ok”)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\nParameter name<\/td> set_cansignal_value (cansignal:str, value:double)->errorcode<\/td><\/tr> Function<\/td> Setting system variable values<\/td><\/tr> call location<\/td> Called after activating the rpc client<\/td><\/tr> Input parameter<\/td> cansignalName: signal address<\/mark>
Value: Setting value<\/mark><\/td><\/tr>Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> sset_cansignal_value( ‘0\/CAN_FD_Powertrain\/Engine\/ABSdata\/CarSpeed, 100)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> get_linsignal_value (linsignalName:str)->(errorcode, double)<\/td><\/tr> Function<\/td> Getting system variable values<\/td><\/tr> call location<\/td> Called after activating the rpc client<\/td><\/tr> Input parameter<\/td> LinsignalName: signal address<\/mark><\/mark><\/td><\/tr> Return value<\/td> ==Ret[0]: error code, ==0 for success, other failures
Ret[1]:Signal value<\/td><\/tr>Typical example<\/td> ret,value = get_linsignal_value( ‘0\/LIN_Powertrain\/Engine\/ABSdata\/CarSpeed)
if ret == 0 and value==100:
Print(“ok”)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\nParameter name<\/td> set_linsignal_value (linsignal:str, value:double)->errorcode<\/td><\/tr> Function<\/td> Setting system variable values<\/td><\/tr> call location<\/td> Called after activating the rpc client<\/td><\/tr> Input parameter<\/td> LinsignalName: signal address<\/mark>
Value: Setting value<\/mark><\/td><\/tr>Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> set_linsignal_value( ‘0\/LIN_Powertrain\/Engine\/ABSdata\/CarSpeed, 100)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> get_frsignal_value (frsignalName:str)->(errorcode, double)<\/td><\/tr> Function<\/td> Getting system variable values<\/td><\/tr> call location<\/td> Called after activating the rpc client<\/td><\/tr> Input parameter<\/td> frsignalName: signal address<\/mark><\/mark><\/td><\/tr> Return value<\/td> ==Ret[0]: error code, ==0 for success, other failures
Ret[1]:Signal value<\/td><\/tr>Typical example<\/td> ret,value = get_frsignal_value( ‘0\/FR_Powertrain\/Engine\/ABSdata\/CarSpeed)
if ret == 0 and value==100:
Print(“ok”)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\nParameter name<\/td> set_frsignal_value (frsignal:str, value:double)->errorcode<\/td><\/tr> Function<\/td> Setting system variable values<\/td><\/tr> call location<\/td> Called after activating the rpc client<\/td><\/tr> Input parameter<\/td> frsignalName: signal address<\/mark><\/mark>
Value: Setting value<\/mark><\/td><\/tr>Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> set_frsignal_value( ‘0\/FR_Powertrain\/Engine\/ABSdata\/CarSpeed, 100)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n 2.2 TOSUN: Hardware SIL Kit<\/strong><\/h3>\n\n\n\n
Parameter name<\/td> set_hardware_config()->error_code<\/td><\/tr> Function<\/td> Configuring hardware devices for the current program<\/td><\/tr> call location<\/td> Called before connecting, can be left out if not in the case of modifying the channel configuration<\/td><\/tr> Input parameter<\/td> None<\/td><\/tr> Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> set_hardware_config()<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> connect()->error_code<\/td><\/tr> Function<\/td> Connecting Hardware Devices<\/td><\/tr> call location<\/td> After configuring the hardware channel<\/td><\/tr> Input parameter<\/td> None<\/td><\/tr> Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> connect()<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> disconnect()->error_code<\/td><\/tr> Function<\/td> Disconnect hardware devices<\/td><\/tr> call location<\/td> After configuring the hardware channel<\/td><\/tr> Input parameter<\/td> None<\/td><\/tr> Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> disconnect()<\/mark><\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> send_msg(AMsg:TLIBCAN|TLIBCANFD|TLIBLIN|TLIBFlexRay)->error_code<\/td><\/tr> Function<\/td> Single-frame transmitter message<\/td><\/tr> call location<\/td> After connecting the hardware<\/td><\/tr> Input parameter<\/td> AMsg: message object<\/mark><\/td><\/tr> Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> AMsg = TLIBCAN(0x123)
send_msg(AMsg)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\nParameter name<\/td> send_cyclic_can_msg (AMsg:TLIBCAN|TLIBCANFD, ATime)->error_code<\/td><\/tr> Function<\/td> Cyclic transmission of CAN\/CANFD messages<\/td><\/tr> call location<\/td> After connecting the hardware<\/td><\/tr> Input parameter<\/td> AMsg: message object<\/mark>
ATime: period, time in ms 1 means 1ms 100 means 100ms<\/mark><\/td><\/tr>Return value<\/td> ==0: function executed successfully
Other values: function execution failed<\/td><\/tr>Typical example<\/td> AMsg = TLIBCAN(0x123)
send_cyclic_can_msg(AMsg, 100)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\nParameter name<\/td> recv_can_msg (AChnidx, ACount, IsIncludeTx)->AMsgList<\/td><\/tr> Function<\/td> Cyclic transmission of CAN\/CANFD messages<\/td><\/tr> call location<\/td> After connecting the hardware<\/td><\/tr> Input parameter<\/td> AChnidx: Specified channel for incoming messages
ACount: Maximum number of received messages
IsIncludeTx: Whether or not to include sent messages<\/mark><\/td><\/tr>Return value<\/td> AMsgList: list of received messages<\/mark><\/td><\/tr> Typical example<\/td> AMsgs = recv_can_msg(0, 100, False)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> recv_lin_msg(AChnidx, ACount, IsIncludeTx)->AMsgList<\/td><\/tr> Function<\/td> Receive lin messages<\/td><\/tr> call location<\/td> After connecting the hardware<\/td><\/tr> Input parameter<\/td> AChnidx: Specified channel for incoming messages
ACount: Maximum number of received messages
IsIncludeTx: Whether or not to include sent messages<\/mark><\/td><\/tr>Return value<\/td> AMsgList: list of received messages<\/mark><\/td><\/tr> Typical example<\/td> AMsgs = recv_lin_msg(0, 100, False)send_msg(AMsg)<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n Parameter name<\/td> recv_flexray_msg(AChnidx, ACount, IsIncludeTx)->AMsgList<\/td><\/tr> Function<\/td> Receive flexray messages<\/td><\/tr> call location<\/td> After connecting the hardware<\/td><\/tr> Input parameter<\/td> AChnidx: Specified channel for incoming messages
ACount: Maximum number of received messages
IsIncludeTx: Whether or not to include sent messages<\/mark><\/td><\/tr>Return value<\/td> AMsgList: list of received messages<\/mark><\/td><\/tr>