PnC (Plug and Charge, 충전 과금 자동 결제)

기존의 충전 과금 결제 방식은 충전건을 연결한 후 충전기에서 결제를 하는 방식이라면, PnC 는 충전건 연결과 동시에 결제를 진행하는 방식이다. 차량에 저장된 운전자의 결제 정보를 통해 자동으로 결제되기 때문에 운전자는 별도의 결제를 진행할 필요가 없다. PnC는 차량과 충전기 간 결제에 필요한 개인 정보, 차량 정보 등을 교환하기 때문에 보안이 중요하다. 이를 위해 인증서 및 TLS(Transport Layer Security) 보안 통신에 기반하여 차량과 충전소 간 통신이 적용된다. PnC 는 ISO 15118 표준에서 정의하고 있고 이를 바탕으로 운전자 및 차량 확인, 인증, 암호화 방식이 적용된다. PnC 를 통해 운전자는 간편하고 안전하게 충전 및 결제를 수행할 수 있다.

 

 

WPT (Wireless Power Transfer, 무선 전력 전송)

WPT는 무선으로 전기차를 충전하는 기술이다. 기존 차량은 충전건을 꽂아 유선으로 충전이 되는 방식이지만, 미래에는 충전건을 연결하지 않아도 무선으로 충전이 되도록 WPT이 적용될 것으로 예상된다. 현재 핸드폰, 가전 등을 무선 충전하듯이 자동차 무선 충전도 상용화될 것으로 예상된다. 다만, 자동차 배터리는 고전력이므로 이를 위한 기술 개발이 필요하다.

WPT는 단순하게 충전소에서 무선 충전 패드 위해서 충전하는 것 뿐만 아니라, 주차장에서 주차를 하는 동안 충전하거나 도로 위에서 차량이 주행하면서 충전하는 것까지 기대할 수 있다. 물론 WPT가 상용화되기 위해서는 안정성과 과금 방식에 대해서도 논의가 필요할 것이며 무선 충전을 위한 인프라 구축이 중요하다.

 

 

BPT (Bidrectional Power Transfer, 양방향 전력 전송)

전기차는 배터리에 전력을 저장한다. 그리고 충전 요금은 심야 시간에 저렴하다. 저렴한 심야 시간에 저장한 배터리를 다른 전력망에 전송하여 수익이 창출하는 모습을 그려볼 수 있다. 이렇듯 충전으로 저장된 에너지를 전기차 주행을 위해서만 사용하는 것이 아니라 에너지가 필요한 다른 대상으로 전송할 수 있는 기술이 BPT이다. 전기차를 매개체로 전기를 교환할 수 있는 것이다. 다만, 개인적으로 전기차의 배터리의 전력 및 잉여 전력이 다른 전력망에 전송할만큼 충분한지와 전기를 교환하는 행위가 큰 의의가 있는 것인지는 의문이다. BPT는 더 넓은 범위로 V2G(Vehicle to Grid) 라고 불리기도 한다.

 

 

ACD (Automatic Connection Device, 자동 연결 장치)

ACD는 자동으로 충전 패드를 차량에 연결하는 방식이다. 팬터그래프 방식으로 충전하는 것인데, 기차나 지하철의 상부에 연결되어 전력을 전달하는 장치가 팬터그래프이다. 팬터그래프가 충전 대상과 자동으로 연결되고 나면 충전이 빠르게 수행된다. ACD는 전기 버스와 전기 트럭 같은 상용차에 적용되고 향후 승용차까지 적용될 것으로 생각된다. ACD는 팬터그래프 장치가 차량 상부/하부/측면부 등 어느 위치에 연결되냐에 따라 ACD-x 로 불린다.

 

 

 


 

전기차 시대가 가까워짐에 따라 전기차를 충전과 관련된 신기술들을 정리해보았다. 아직까지 상용화되지 않은 기술이기 때문에 상용화가 된다면 편리하게 전기차를 이용할 수 있을 것이다. 위 4가지 기술 중 PnC 와 WPT가 가장 기대되는 기술이다. 충전 과금 자동 결제와 무선 충전을 결합된다면 운전자에게 충전이라는 행위가 번거롭지 않게 느껴질 것이고, 전기차를 구매하게 되는 이유로 작용하게 될 것 같다. BPT와 ACD는 비교적 먼 미래의 기술이라 느껴진다.

 

 

개인적으로 상용화 시기가 언제가 될 지는 의문이다. 기본적으로 충전이라는 행위는 차량과 충전기 두 매체 간 커뮤니케이션하는 것이다. 단순히 전기차에 신기술이 적용되었다고 해서 전부가 아니라는 것이다. 충전기 측의 개발도 필요하고, 충전 신기술을 위한 인프라 구축도 필요하다. 전기차는 당연히 거대 기업 들이 열심히 준비하고 개발하고 있지만, 상대 측인 충전기와 인프라는 누가 주도하여 준비하고 개발하고 있는지 잘 그려지지 않는다. 충전기와 충전 인프라에 대한 주도권을 갖는 대상이 누가 될 것인지가 앞으로 기대되는 바이다.

 

'관심 산업 > 자동차' 카테고리의 다른 글

OTA 관련 기사  (0) 2021.10.25
미래자동차의 4가지 키워드 : CASE  (0) 2021.10.25
OTA(Over The Air, 무선 업데이트)  (0) 2021.10.13

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/42579

 

코딩테스트 연습 - 베스트앨범

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가

programmers.co.kr

해당 문제는 map, vector, priority_queue, compare()를 자유롭게 사용할 수 있어야 풀이가 쉬운 문제였다.

map을 vector로 복사하는 방법과 map의 value로 pq를 정의하고,  sort()와 pq의 우선순위를 compare() 함수로 정의하는 방법을 익힐 수 있었다.

 

2. 풀이

 

1. 장르별 총 재생횟수를 map에 저장하였다. --> map<장르, 총count>
2. 위 map을 총 재생횟수를 기준으로 내림차순 정렬하기 위해 vector로 복사하였다. --> vector<장르, 총 count>
3. 내림차순으로 정렬된 벡터로부터 장르를 얻어온다.
4. 위에서 얻어온 장르 내에서 많이 재생된 2개의 노래를 탐색하기 위해 map을 정의하였다. key는 장르로, value는 우선순위 큐로 정의했다. --> map<key(장르),value(pq(pii<count, id>))>
4. 우선순위 큐는 장르내에서 가장 많이 재생된 노래 순으로, 만약 재생 횟수가 같다면 id 가 낮은 순으로 정의했다.
5. 우선순위 큐를 2번만 삭제하여 가장 많이 재생된 2곡을 answer에 저장하였다.

 

3. 코드

#include <string>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <algorithm>
using namespace std;

#define f	first
#define s	second
typedef pair<int, int> pii;
typedef pair<string, int> psi;

bool cmp(psi a, psi b) {
	return (a.s > b.s);
}

// 우선순위1 : count 내림차순
// 우선순위2 : id 오름차순
struct cmp2 {
	bool operator() (pii a, pii b) {
		if (a.f == b.f)
			return (a.s > b.s);
		else
			return (a.f < b.f);
	}
};

// 장르별 총 재생횟수 저장 map<장르, 총count>
// 위 map을 vector로 복사 후 내림차순 정렬-> vector<장르, 총 count>
// 장르내 많이 재생된 2개 노래 탐색 -> map<key(장르),value(pq(pii<count, id>))>
// 장르내 많이 재생된 2개의 노래 id를 answer에 저장

vector<int> solution(vector<string> genres, vector<int> plays) {
	vector<int> answer;
	map<string, int> genre_map;
	map<string, priority_queue<pii, vector<pii>, cmp2>> genre_queue;
	// pq를 내림차순으로 하는 경우
	// map<string, priority_queue<pii, vector<pii>, greater<pii>>> map_queue;

	for (int id = 0; id < genres.size(); ++id) {
		string genre = genres[id];
		int play = plays[id];

		genre_map[genre] += play;
		genre_queue[genre].push(pii(play, id));
	}

	vector<psi> genre_vec(genre_map.begin(), genre_map.end());
	sort(genre_vec.begin(), genre_vec.end(), cmp);

//     for (psi p : genre_vec)
//         printf("%s %d\n", p.f.c_str(), p.s);

	for (psi p : genre_vec) {
		string genre = p.f;
		printf("%s %d\n", p.f.c_str(), p.s);

		int n = 0;
		while (!genre_queue[genre].empty()) {
			pii cur = genre_queue[genre].top();
			genre_queue[genre].pop();
			printf("%d %d\n", cur.first, cur.second);
			answer.push_back(cur.second);
			n++;
			if (n == 2)
				break;
		}

	}

	return answer;
}

Thread-safe vs Reentrant

Thread-safe : 멀티쓰레딩 환경에서 여러 쓰레드에 의해 코드가 실행되더라고 실행 결과의 정확성이 보장되는 것.

 

Reentrant : 멀티쓰레딩 환경에서 여러 쓰레드가 코드를 동시에 수행할 수 있고, 그런 경우에도 실행 결과의 정확성이 보장되는 것.

 

여기서 동시라는 개념에 대해 살펴보자.

예를 들어, 뮤텍스로 특정 임계영역을 보호한다고 하면, 뮤텍스를 기다리는 쓰레드는 대기상태에서 임계영역을 실행 중인 쓰레드가 뮤텍스를 제공할 때까지 기다리게 되는데, 이러한 상황은 쓰레드들이 동시에 수행되는 것으로 볼 수 없다. 그리고 쓰레드가 임계영역에 대한 뮤텍스를 기다리는 상황은 전체적인 성능 저하를 만든다.

반면, 여러 쓰레드에서 특정 코드를 실행할 때 다른 쓰레드의 영향을 받지않고 독립적으로 실행될 때 동시에 실행된다고 볼 수 있다. 따라서, Thread-safe보다 Reentrant가 더 강력한 제약조건이다.

 

Thread-safe 는 뮤텍스와 같은 동기화 메커니즘을 이용해 구현할 수 있다.

Thread-safe 와 달리 Reentrant는 구현이 어렵다. Thread-safe는 내부 구현만 바꾸면 되는 경우가 많지만, Reentrant는 인터페이스를 재설계해야 하는 경우가 많다.

 

Reentrant 와 Thread-safe 의 차이

 

Reentrant 와 Thread-safe 의 차이

오랜만에 S/W개발 관련된 글을 올립니다. 요즘 블로그에 제대로 글을 쓰지도 못하는데 계속해서 RSS 구독자 카운트는 늘어만가니 어찌된 조화인지 모르겠습니다. 늘어나는 구독자수의 압박을 견

yesarang.tistory.com

 

Implementation approach of Thread-safe

Thread-safe는 공유 자원에 대한 경쟁 상태를 회피하기 위한 2가지 접근 방법을 통해 구현할 수 있다.

경쟁 상태 : 동시에 여러 스레드가 동일한 데이터를 접근하여 조작하고, 그 실행 결과가 접근이 발생한 특정 순서의 의존하는 상황

thread-safe 구현을 위해 애초에 공유 상태를 피하는 방법공유 상태를 피할 수 없는 상황에서 동기화를 사용하는 방법이 있다.

 

1. 공유 상태를 피하는데 중점을 두는 방법

  • Re-entrancy

위에서 설명한 Reentrant 을 구현하기 위해서는 공유하는 자원, 즉 임계 영역이 없도록 해야 한다.

각 쓰레드별 지역 변수를 사용하여 여러 쓰레드들이 동시에 같은 코드를 실행할 수 있도록 한다.

  • Thread-local storage

전역변수 대신 쓰레드별로 지역변수를 사용하도록 하여 공유 자원에 경쟁 상태가 일어나지 않게 한다.

  • Immutable object

객체 자체를 생성 한 이후에 수정할 수 없도록 만든다. 읽기 전용 데이터만 공유될 수 있다.

 

2. 공유 상태를 피할 수 없는 상황에서 동기화를 사용하는 방법

  • Mutual exclusion

특정 순간의 임계영역에 대한 접근은 한 쓰레드에서만 가능하도록 한다. 한 쓰레드가 임계영역을 접근하고 있는 동안은 다른 쓰레드는 임계영역에 접근할 수 없다. Deadlock 또는 Starvation이 일어나지 않도록 고려되어야 한다.

  • Atomic operation

공유 데이터와 관련된 작업을 Atomic 하게 구현한다. 작업이 원자적이기 때문에 공유 데이터는 멀티쓰레딩 환경에서 일관성을 유지할 수 있다.

 

 

Thread safety - Wikipedia

 

Thread safety - Wikipedia

Thread safety is a computer programming concept applicable to multi-threaded code. Thread-safe code only manipulates shared data structures in a manner that ensures that all threads behave properly and fulfill their design specifications without unintended

en.wikipedia.org

 

Thread-safe in C on Linux

C 표준에는 thread-safe에 대한 개념이 없어 사용자의 구현에 의존적이다. C 표준에서 스레드에 대한 언급이 없는 이유는 멀티스레딩이 존재하지 않는 임베디드 시스템 때문이다.

 

GNU(glibc)에서는 대부분의 FILE*를 다루는 stdio의 고수준의 함수는 thread-safe하다. (printf, scanf..)

반면, write()와 같은 저수준 입출력 함수는 thread-safe 하게 구현되어야 한다.

 

stdout thread-safe in C on Linux?

 

stdout thread-safe in C on Linux?

Is writing to stdout using printf thread-safe on Linux? What about using the lower-level write command?

stackoverflow.com

Thread-safe C library functions

Documentation - Arm Developer

 

Documentation – Arm Developer

 

developer.arm.com

C library functions that are not thread-safe

Documentation - Arm Developer

 

Documentation – Arm Developer

 

developer.arm.com

 

https://www.hankyung.com/it/article/202108269472g

 

테슬라만 하나, 우리도 한다…국내도 자동차 'OTA' 본격화

테슬라만 하나, 우리도 한다…국내도 자동차 'OTA' 본격화, 현대차·폭스바겐·GM 등 OTA 속도 SW 관련 수익 기반 다지기 차원 "해킹, 보안 문제 반드시 짚고 가야"

www.hankyung.com

 

해외와 달리 국내에서의 OTA는 규제에 묶여있다. 그러나 최근 특례를 통해 현대차를 비롯한 기업들이 국내에서도 OTA기술 적용이 가능해졌다. OTA가 상용화되기 위해서는 해킹, 보안 문제가 함께 논의되어야 하고, 특히 국내의 경우 관련 법 개정이 필요하다.

 

해당 기사에서는 2021년 내로 출시되는 제네시스 GV60과 GV90에 OTA 를 적용할 것을 점쳐진다 하였는데, 아래 기사를 통해 예상대로 GV60에 OTA가 적용되어 출시되었음을 알 수 있다. (특히, FOTA)

 

OTA가 인포테인먼트 서비스 분야로 확장되면 수익화 범위가 훨씬 넓어질 수 있다.

 


https://news.hmgjournal.com/Tech/?p=168443 

 

제네시스 GV60, 무선 소프트웨어 업데이트(OTA Software Update) 기술로 언제나 최신 상태를 유지하다

제네시스 GV60는 무선 소프트웨어 업데이트(OTA Software Update) 기술을 적용해 차량 시스템을 언제나 최신 상태로 유지한다. 해당 기술을 개발한 담당 직원들을 만나 GV60의 무선 소프트웨어 업데이트

news.hmgjournal.com

 

 

제네시스 GV60, 무선 소프트웨어 업데이트(OTA Software Update) 기술로 언제나 최신 상태를 유지하다

제네시스 GV60는 무선 소프트웨어 업데이트(OTA Software Update) 기술을 적용해 차량 시스템을 언제나 최신 상태로 유지한다. 해당 기술을 개발한 담당 직원들을 만나 GV60의 무선 소프트웨어 업데이트

news.hmgjournal.com

 

OTA가 점차 상용화되고 있음을 알 수 있는 기사이다. OTA 업데이트 시 차량의 안정성을 위해 주행 및 엔진을 정지해야 한다는 사실을 알 수 있다. 또한 GV60의 경우 OTA를 통한 무선 업데이트가 가능한 제어기가 총 17개이고, 이 제어기들은 차량의 성능, 편의, 보안, 안전과 관련된 역할을 수행하기에 업데이트 과정에서의 오류를 최대로 줄이는 것이 중요하다.

 

무선 소프트웨어 업데이트의 종류

- 소프트웨어 업데이트(SOTA) : 내비게이션, 인포테이먼트 시스템의 업데이트 기술. 기존 제네시스 차량에도 적용된 기술

- 펌웨어 업데이트(FOTA) : 차량 내 다양한 제어기를 개선하는 기술. GV60에 제네시스 최초로 적용됨


 

'관심 산업 > 자동차' 카테고리의 다른 글

전기차 충전 신기술  (0) 2022.06.01
미래자동차의 4가지 키워드 : CASE  (0) 2021.10.25
OTA(Over The Air, 무선 업데이트)  (0) 2021.10.13

미래자동차는 C.A.S.E 4가지의 키워드로 설명된다.

 

- Connectivity

V2V, V2X 뿐 아니라 클라우드와의 커넥티비티가 강화되고 있다. 차량 내외에서 모바일, 음성 등을 통해 차량을 제어하는 원격 기술이 개발되고 있다. 커넥티비티를 통해 차량은 금융, 엔터테이먼트, 주거 등 다양한 요소와 연결되고 있다.

이와 더불어 OTA의 중요성도 높아졌다.

 

- Autonomous

자동차가 운전자의 조작 없이 스스로 주행하는 자율주행 기술. 자율주행이 상용화되면 자동차는 프라이빗한 사무, 휴식, 디지털 공간으로 확장될 것이고, 연비 개선, 운전자 과실 사고 예방, 교통 약자의 이동성이 향상될 것이다.

 

- Sharing

한 대의 자동차를 여러 사람이 공유한다. 지정된 장소의 차를 사용하고 반납하는 카셰어링, 필요한 곳에서 차를 호출해 사용하는 카헤일링 등의 자동차 공유 서비스가 등장했다.

 

- Electricfication

자동차의 내연 기관이 점차 전기모터로 전환되고 있다. 이미 배출가스가 없는 전동화 기반의 전기차, 수소전기차, 하이브리드 자동차가 상용화되었다.

 

* V2X(Vehicle-to-Everything) :  V2I(vehicle-to-infrastructure, 차량 대 인프라), V2N(vehicle-to-network, 차량 대 네트워크), V2V(vehicle-to-vehicle, 차량 대 차량), V2P(vehicle-to-pedestrian, 차량 대 보행자), V2D(vehicle-to-device, 차량 대 장치), V2G(vehicle-to-grid, 차량 대 그리드) 등 더 구체적인 유형의 통신 방식을 통합하는 차량 통신 시스템

 

https://news.hmgjournal.com/Tech/reissue-future-case

 

미래자동차의 4가지 키워드

미래자동차를 나타내는 4가지 키워드, C, A, S, E는 어떤 뜻을 지니고 있을까요?

news.hmgjournal.com

 

'관심 산업 > 자동차' 카테고리의 다른 글

전기차 충전 신기술  (0) 2022.06.01
OTA 관련 기사  (0) 2021.10.25
OTA(Over The Air, 무선 업데이트)  (0) 2021.10.13

아래와 같이 git push 명령어 입력 시 올바른 계정과 비밀번호를 입력해도 push 되지 않는 문제가 있었다.

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/~'

 

비밀번호 입력 시 token을 입력해야 하는데, token 발급은 다음과 같이 진행한다.

 

  • github 페이지 우측 상단 계정 클릭
  • Setting 클릭
  • 좌측 하단부의 Developer settings 클릭
  • 좌측의 Personal access tokens 클릭
  • 우측의 Generate new token 클릭
  • 이후 이름과 필요한 권한을 설정하고  token 생성
  • 비밀번호 입력시 생성한 token 입력

https://www.autoelectronics.co.kr/article/articleView.asp?idx=4232 

 

무선 업데이트(OTA)와 ISO 24089

자동차의 하드웨어와 소프트웨어는 장치의 수명주기 동안에 업데이트되어야 한다. 신뢰점(RoT)과 추적성의 탑재는 보안 위험을 경감시키기 위한 심층방어 전략에 필수적이다.

www.autoelectronics.co.kr

http://eewebinar.co.kr/adi/tech_view.asp?g=3&idx=426 

 

임베디드 MCU 애플리케이션의 OTA 업데이트 설계 시 고려사항 - 한국 아나로그디바이스 | Analog Devic

GO"> --> 기술기고문 임베디드 MCU 애플리케이션의 OTA 업데이트 설계 시 고려사항 임베디드 MCU 애플리케이션의 OTA 업데이트 설계 시 고려사항   글: 벤자민 버클린 브라운(Benjamin Bucklin Brown) / 아나

eewebinar.co.kr

 

자동차가 전통적인 기계 공학의 영역에서 SW 영역으로 변화하고 있다.

 

1. 자동차에 내장된 수백개의 ECU는 기존보다 더 많은 데이터를 수집하고, 다른 ECU로 전송하게 된다. 이로 인해 기존의 차량 내 통신 방식은 많은 양의 데이터를 전송하기에 한계가 있어 CAN 통신에서 점차 Ethernet 통신 방식으로 확장되고 있다.

 

2. 차량 내 반도체를 무선으로 업데이트하는 OTA(Over The Air)의 필요성이 높아졌다. 자동차의 생명 주기 동안 차량 내의 부품의 오류나 결함을 수정하기 위해서는 적절한 업데이트가 필요하다. 특히 자동차 업계에서 SW의 오류로 인한 리콜이 전체 리콜에서 46%를 차지하는 만큼 SW 오류에 대한 무선 업데이트의 중요성과 필요성이 높아졌다. 앞으로 미래의 자동차는 OTA 기능을 내재화할 것으로 예상된다.

 

3. OTA의 주요 요인

 

- 메모리

OTA를 통해 업데이트 되는 SW는 ECU의 메모리에 적재된다. 새로운 SW를 메모리에 적재하는 과정이 먼저 진행되고, 새로운 SW가 정상적으로 동작하는지 확인하는 과정이 필요하다. 만약, 비정상적으로 동작된다면, 업데이트 이전의 기존 SW를 사용해야 하므로 기존의 SW는 적절하게 보존되어야 한다. 

 

- 통신

OTA는 서버에서 ECU로 무선으로 SW를 전송한다. 따라서 패킷, 프로토콜이 고려되어야 한다.

 

- 보안

무선으로 SW를 전송하기 때문에 인증과 보안이 필수적으로 수반되어야 한다. SW 업데이트 과정에서 기밀성, 무결성, 가용성이 유지되어야 한다.

'관심 산업 > 자동차' 카테고리의 다른 글

전기차 충전 신기술  (0) 2022.06.01
OTA 관련 기사  (0) 2021.10.25
미래자동차의 4가지 키워드 : CASE  (0) 2021.10.25

Sort()의 기본적인 형태

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

bool comp(int a, int b) {
	return a > b;
}

int main() {

    vector<int> v = {5, 2, 1, 4, 3, 0};

    // default : 오름차순
	sort(v.begin(), v.end());
    for (int i = 0; i < v.size(); ++i)
    	printf("%d ", v[i]);
    printf("\n");

    // 내림차순
    sort(v.begin(), v.end(), comp);
    for (int i = 0; i < v.size(); ++i)
    	printf("%d ", v[i]);
    printf("\n");

    return 0;
}
/*
실행결과
0 1 2 3 4 5
5 4 3 2 1 0
*/

 

이전 포스팅에서 살펴본 Priority Queue의 Compare와 반대이다.

 

즉, comp(a, b)에서 true를 반환할 때의 a가 "strong" order가 되어 우선순위가 높다고 생각하면 될 것 같다.

 

 

Ref.

https://www.cplusplus.com/reference/algorithm/sort/

'Language > C++' 카테고리의 다른 글

[C++] Priority Queue에서의 Compare  (0) 2021.10.11

+ Recent posts