'2025/03/02'에 해당되는 글 3건

목표

함수 정리 및 개인적인 시간이 있을 때 설명 읽어두기.

각 함수 설명

sysGetVariableString

  • 시스템 변수(System Variable) 중 문자열(String, char[]) 타입의 값을 가져오는 함수입니다.
  • CANoe의 시스템 변수는 메시지, 신호, 내부 상태 관리 등에 사용되며, 이 함수는 문자열 값을 직접 읽어올 때 유용합니다.

함수의 반환값

반환값설명

0 정상적으로 실행됨 (성공)
1 네임스페이스를 찾을 수 없음 또는 동일한 네임스페이스를 중복 정의
2 변수를 찾을 수 없음 또는 동일한 변수를 중복 정의
3 네임스페이스에 대한 쓰기 권한 없음
4 변수의 타입이 char[]이 아님 (문자열이 아님)

form 1: 네임스페이스와 변수 이름을 문자열로 전달

long sysGetVariableString(char namespace[], char variable[], char buffer[], long bufferSize);
  • namespace → 시스템 변수가 속한 네임스페이스 이름
  • variable → 변수 이름
  • buffer → 가져온 문자열을 저장할 버퍼
  • bufferSize → 버퍼의 크기

예제

char buf[100];
sysGetVariableString("VehicleData", "SpeedText", buf, elcount(buf));
write("SpeedText: %s", buf);

➡️ “VehicleData” 네임스페이스의 “SpeedText” 시스템 변수를 읽어 “buf”에 저장한 후 출력.

form 2: 시스템 변수의 전체 경로를 직접 지정

long sysGetVariableString(SysVarName, char buffer[], long bufferSize);
  • SysVarName → 시스템 변수의 전체 이름 (네임스페이스 포함)
  • buffer → 값을 저장할 버퍼
  • bufferSize → 버퍼 크기

예제

char buf[100];
sysGetVariableString(sysvar::VehicleData::SpeedText, buf, elcount(buf));
write("SpeedText: %s", buf);

➡️ “VehicleData::SpeedText” 시스템 변수 값을 가져와 “buf”에 저장.

시스템 변수 포인터(sysvarString *)를 활용하여 동적으로 문자열 변수를 처리할 수도 있습니다.

예제

on key 'd'
{
  sysvarString * svString1;
  char buf[100];

  // getSysVarString 함수에서 시스템 변수 포인터 가져오기
  svString1 = getSysVarString(0);
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable: %s, Value: %s", svString1.name, buf);

  // 값 변경
  sysSetVariableString(svString1, "OFF");
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable: %s, Value is now: %s", svString1.name, buf);

  svString1 = getSysVarString(1);
  sysGetVariableString(svString1, buf, elcount(buf));
  write("Variable: %s, Value: %s", svString1.name, buf);
}

// 시스템 변수 선택 함수
sysvarString * getSysVarString(int cKey)
{
  switch (cKey)
  {
  case 0:
    return sysvar::FMW1::KeyString;
  case 1:
    return sysvar::DCM::SpeedSignalString;
  default:
    return sysvar::Engine::EngineStateString;
  }
}
블로그 이미지

RIsN

,

목표

함수 정리 및 개인적인 시간이 있을 때 설명 읽어두기.

각 함수 설명

elcount

배열(array)의 요소 개수를 반환하는 함수입니다.

하지만 배열의 사용 방식에 따라 반환값의 데이터 타입이 다릅니다.

예제

int numbers[5] = {1, 2, 3, 4, 5};

void example()
{
  dword size;
  size = elcount(numbers);  // 배열 크기 반환
  write("Array size: %d", size); // 출력: "Array size: 5"
}
블로그 이미지

RIsN

,

목표

함수 정리 및 개인적인 시간이 있을 때 설명 읽어두기.

각 함수 설명

on sysVar

🔹 기능

  • 시스템 변수의 값이 변경될 때 실행됨.
  • 동일한 시스템 변수에 대해 여러 CAPL 노드에서 독립적으로 반응 가능.

🛠 사용법

on sysVar 시스템변수_이름
{
  // 변경된 시스템 변수 값 가져오기
  int newValue = @this;
  write("New value: %d", newValue);
}

📌 예제

on sysVar Vehicle::Speed
{
  write("Speed Changed! New Value: %d", @this);
}

➡️ Vehicle::Speed 시스템 변수 값이 변경될 때마다 실행됨.

※메모: @this를 쓰려면 해당 변수가 int 혹은 float이어야 함

on sysVar_change

🔹 기능

  • 값이 변경될 때만 실행됨.
  • 같은 값이 연속해서 입력되면 실행되지 않음.

🛠 사용법

on sysVar_change 시스템변수_이름
{
  write("Value changed: %d", @this);
}

📌 예제

on sysVar_change Vehicle::RPM
{
  write("RPM Changed! New Value: %d", @this);
}

➡️ Vehicle::RPM 값이 변경될 때 실행됨.

➡️ 같은 값이 입력되면 실행되지 않음.

on sysVar_update

🔹 기능

  • 값이 변경되지 않아도, 업데이트가 발생하면 실행됨.
  • 센서 데이터나 주기적으로 업데이트되는 값 처리에 적합.

🛠 사용법

on sysVar_update 시스템변수_이름
{
  write("Variable Updated: %d", @this);
}

📌 예제

on sysVar_update Vehicle::Speed
{
  write("Speed Updated (Even if unchanged): %d", @this);
}

➡️ Vehicle::Speed가 변경되지 않아도 주기적으로 업데이트될 때 실행됨.

on sysVarMember

🔹 기능

  • 구조체(struct) 또는 배열(array)의 특정 멤버 값이 변경될 때 실행.
  • on sysVar과 같은 역할을 하지만, 특정 멤버 변수만 감지할 수 있음.

🛠 사용법

on sysVarMember 시스템변수_이름::멤버_이름
{
  write("Member value changed: %d", @this);
}

📌 예제

on sysVar Vehicle::Status::EngineTemp
{
  write("Engine Temperature Updated: %d", @this);
}

➡️ Vehicle::Status 구조체의 EngineTemp 값이 변경될 때 실행됨.

on sysVar (변수1 | 변수2 | …)

🔹 기능

  • 여러 개의 시스템 변수에 대한 감지를 한 번에 처리.
  • 모든 변수 타입이 동일해야 this 키워드 사용 가능.

🛠 사용법

on sysVar (변수1 | 변수2 | 변수3)
{
  write("Variable Changed: %s, New Value: %d", this.name, @this);
}

📌 예제

on sysVar (IO::DI_0 | IO::DI_1)
{
  write("Changed Variable: %s, New Value: %d", this.name, @this);
}

➡️ IO::DI_0 또는 IO::DI_1 값이 변경될 때 실행됨.

➡️ this.name을 사용하면 변경된 변수 이름을 출력할 수 있음.

블로그 이미지

RIsN

,