본문 바로가기

전체 글841

Open loop, Closed loop 제어시스템은 시스템에 피드백 경로 존재하는지에 따라 다음과 같이 나뉠 수 있다. Open Loop Control System Closed Loop Control System Open Loop Open Loop 시스템은 Output signal이 Input으로 피드백되지 않는 시스템으로, Non-Feedback system 이라고도 한다. Open Loop 시스템은 입력과 출력 간의 관계(전달함수)를 설정한 후, 출력이 실제로 원하는 목표에 도달하는지 확인하지 않고 일련의 명령을 실행한다. 이러한 시스템에서는 제어 프로세스가 진행되는 동안에도 상태를 감지하거나 피드백을 사용하지 않는다. 주로 간단한 작업에 사용되며, 시간과 환경의 변화에 따른 영향을 받지 않는 경우에 유용하다. 장점 : - 구현이 간단하고.. 2023. 6. 9.
Waveform types Sine wave Sine waves are signals that oscillate smoothly either side of a central value - normally zero volts. The sine wave follows the values of sine over the period of the cycle. As one cycle is equivalent to 360° or 2Π radians, the instantaneous value of sine can be calculated from the angle in degrees or radians, i.e. how far advanced the waveform is in its cycle. Parameters like the phase .. 2023. 6. 9.
Slew Rate Slew Rate 출력 전압이 입력 신호에 얼마나 빨리 응답하며 변화할 수 있는가의 척도. 입력에서 빠른 큰 변화가 있을때, 출력이 이를 빠르게 응답할 수 있는 최대 기울기. 일반적으로 Slew Rate는 V/μs로 표시된다. 예를 들면, 1V/µs는 1µs로 1V 전압을 변동시킬 수 있다는 의미이다. 위 그림에서 Turn-on과 Turn-off의 Slew Rate는 다음과 같다. Reference : http://www.ktword.co.kr/test/view/view.php?m_temp1=4319 https://www.rohm.co.kr/electronics-basics/opamps/op_what5 2023. 6. 9.
하모닉(고조파, Harmonics) 출처 : https://www.astint.co.kr/default/mp5/mp5_sub2.php?com_board_basic=read_form&com_board_idx=294&&com_board_search_code=&com_board_search_value1=&com_board_search_value2=&com_board_page=11&&com_board_id=2&&com_board_id=2 AST-에이에스티 www.astint.co.kr 하모닉(고조파, Harmonics) 일반적으로 진동과 소음의 분야에서 가장 낮은 주파수 성분을 기본 주파수(또는 1 order)라고 하고, 기본 주파수 성분의 정수배가 되는 성분들을 하모닉(고조파)이라고 말한다. 하모닉파형은 기본 주파수(주로 회전기계의 회전수)를 .. 2023. 5. 31.
CAN ISO-TP Classic CAN 프레임의 경우 페이로드가 8바이트로 제한되고 CAN FD의 경우 페이로드가 64바이트로 제한된다. 이보다 큰 대용량 페이로드를 전송하려면 어떻게 해야할까? ISO-TP (ISO transfer protocol)는 이 문제를 해결하기 위해 ISO 15765-2 표준에 정의된 프로토콜로, 페이로드 데이터 크기를 최대 4095바이트까지 확장한다.ISO-TP의 가장 일반적인 기능은 송신측에서 패킷을 작은 조각(세그먼트)으로 분할하고 수신측에서 다시 재조립해 원래의 데이터로 복원하는 것이다.       ISO TP가 정의하는 Frame type은 다음의 4가지이다. Frame별로 1~3바이트 길이의 PCI(Protocol Control Information).. 2023. 5. 31.
ARINC-429 Word Format ARINC-429 글 : 2023.05.31 - [DSP, MCU/펌웨어공부] - ARINC-429 HTML 삽입 미리보기할 수 없는 소스 ARINC 429 의 data words 는 일반적으로 아래의 5개의 필드로 구성된 32 bit words이다. Parity - 1 bit Sign/Status Matrix (SSM) - 2 bits Data - 19 bits Source/Destination Identifier (SDI) - 2 bits Label - 8 bits 단, 이중에서 Parity bit와 Label 만 필수이고 나머지 비트들은 비표준에서 high resolution data 등을 전송하기 위해 다양한 포맷으로 사용될 수 있다. 연결된 Transmitter는 항상 data words 또는 .. 2023. 5. 31.
ARINC-429 Protocol ARINC ARINC는 미국 소유 비영리단체인 Aeronautical Radio, Inc.의 약자로 여기서 제정된 항공전자 표준이 ARINC 프로토콜이다. 항공 기술 분야에서 사용되는 매우 다양한 ARINC 표준이 있으며 ARINC 400, 500, 600, 700, 800 같은 다양한 하위 시리즈들이 있다. ARINC 429 그 중에서도 ARINC 429는 항공전자 장비간 데이터 전송을 위한 가장 널리 사용되는 표준으로 Mark 33 Digital Information Transfer System(DITS)으로 알려져 있기도 하다. Network Topology ARINC 429 네트워크는 single transmitter(source)에 receivers(sink)가 연결된 구조로 한 transmit.. 2023. 5. 31.
경기도 광주 천진암 계곡 관산등산로공용주차장에 무료주차가 가능하다. 연휴였지만 늦은시간에 와서 그런지 한산했다. 등산로가 있다고는 하는데 보이진 않았다. 2023. 5. 30.
C ] 포인터와 const const는 변수나 함수 매개변수를 선언할 때 사용되는 한정자로 값을 변경할 수 없음을 나타낸다. 변수를 상수로 취급하고자 할 때 유용하며, 많은 곳에서 참조되고 변경되는 것을 원하지 않는 정적인 정보를 보호하는데 사용된다. 포인터 형식과 const 한정자가 같이 쓰일 때 const의 위치에 따라 다음과 같은 차이가 있다. 1. 상수를 가리키는 포인터 : const int* ptr 인 경우, ptr의 역참조를 통해 값을 변경할 수 없지만, ptr이 다른 주소를 가리키도록 변경할 수 있다. 2. 상수 포인터 : int* const ptr 인 경우, ptr 자체를 다른 주소를 가리키도록 변경할 수 없지만, ptr의 역참조를 통해 값을 변경할 수 있다. 3. 상수를 가리키는 상수 포인터 : const int*.. 2023. 5. 30.
C ] 비트필드와 공용체 사용 #include #include typedef struct { uint32_t bit1 : 1; uint32_t bit2 : 2; uint32_t bit3 : 3; } MyBits; union MyUnion { uint32_t all; MyBits bits; }; int main() { union MyUnion myUnion; myUnion.all = 0; myUnion.bits.bit1 = 1; myUnion.bits.bit2 = 2; myUnion.bits.bit3 = 5; printf("all: %u\n", myUnion.all); printf("bit1: %u\n", myUnion.bits.bit1); printf("bit2: %u\n", myUnion.bits.bit2); printf("bit3.. 2023. 5. 29.
C++ ] Format-Hex 명령어(Hex 덤프) 직접 구현 #include #include #include #include using namespace std; namespace fs = filesystem; void printhex(char *path) { // ios::binary 플래그를 사용해 이진모드로 파일 열기 ifstream file(path, ios::binary); if (!file) { cerr 2023. 5. 29.
시맨틱 버저닝 (Semantic Versioning) 시맨틱 버저닝은 소프트웨어의 버전 번호를 관리하기 위한 규칙 및 방법론이다. 버전 번호를 통해 소프트웨어의 변경 내용과 호환성을 명확히 표현하는 데 그 목적이 있으며, 일반적으로 "MAJOR.MINOR.PATCH" 형식으로 버전 번호를 표기한다. 1. MAJOR (주 버전): 기존 버전과 호환되지 않는 주요 변경사항이 있을 때 증가. 일반적으로 API의 큰 변경이나 하위 시스템의 구조적 변화를 의미하므로 주 버전이 변경되면 이전 버전과의 호환성이 보장되지 않을 수 있다. 2. MINOR (부 버전): 이전 버전과의 하위 호환성을 유지하면서 새로운 기능이 추가되거나 기존 기능이 변경될 때 증가. 주 버전 변경 없이 부 버전이 업데이트되면, 사용자는 새로운 기능을 사용하거나 개선된 기능을 기대할 수 있다. .. 2023. 5. 28.
C++ ] Manipulator와 iomanip 헤더 iomanip 헤더에는 스트림을 제어하기 위한 다양한 Manipulator가 포함되어 있다. 스트림은 C++에서 데이터의 입력 및 출력을 처리하는 방식을 말하며, 이를 위해 "iostream" 라이브러리에서 제공하는 클래스와 함수를 사용하는데, Manipulator는 이러한 스트림을 조작하여 데이터의 포맷팅, 출력 형식을 유연하게 지정할 수 있게 한다. endl; 도 개행 문자를 출력하고 버퍼를 비우는 Manipulator이다. #include #include int main() { int number = 12345; double pi = 3.14159; // setw()를 사용하여 출력 폭(width) 지정 std::cout 2023. 5. 28.
C++ ] static_cast와 reinterpret_cast. 그 외 const_cast, dynamic_cast C++에서 C 스타일의 캐스팅은 더 이상 권장되지 않는다. C 스타일 캐스팅은 실수할 여지가 많고 의도하지 않은 형식 변환이 발생할 수 있기 때문에 C++에서는 대신 static_cast, reinterpret_cast, const_cast, dynamic_cast와 같은 명시적인 캐스팅 연산자들을 사용하는 것을 권장한다. 1. static_cast : 정적 캐스트 - 고정된 표준 형식 변환에 사용된다. - 상속 관계가 아닌 타입 간의 변환, 숫자형 타입 간의 변환, 포인터 간의 변환 등. int num = 10; double numDouble = static_cast(num); // int를 double로 변환 2. reinterpret_cast : 재해석 캐스트 - 다른 타입과 포인터 사이의 비트 패.. 2023. 5. 28.
C++ ] 예외처리 try-catch C++에서 try-catch 문은 예외가 발생할 수 있는 코드 블록을 감싸고, 발생한 예외를 적절하게 처리하는 메커니즘을 제공한다. try-catch 기본 구문 try { // 예외가 발생할 수 있는 코드 } catch (예외_유형1& e) { // 예외_유형1에 해당하는 예외 처리 } catch (예외_유형2& e) { // 예외_유형2에 해당하는 예외 처리 } catch (...) { // 기타 모든 예외를 처리하는 블록 } try 블록: 예외가 발생할 수 있는 코드를 포함하는 블록. 이 블록 내에서 예외가 발생하면 예외를 던진다. catch 블록: 발생한 예외를 처리하기 위한 블록. catch 블록은 발생한 예외의 유형에 따라 여러 개를 사용할 수 있다. 가장 specific한 예외 유형부터 순서대.. 2023. 5. 28.
Visual Studio 디버깅시 main함수에 명령인수 전달하기 프로젝트 우클릭 - 구성 속성 - 디버깅 - 명령 인수 2023. 5. 28.
C++ ] filesystem 라이브러리 filesystem 라이브러리는 파일 및 디렉토리 작업을 단순화하고 일반화하는 기능을 제공한다. C++ 17 표준 부터 포함되었으며, gcc/g++ 8 이상 최신 컴파일러에서 지원된다. experimental/filesystem 헤더를 포함하면 이전 버전에서 사용할 수 있을 수도 있다. 📂 현재 경로 출력 #include #include using namespace std; namespace fs = filesystem; int main() { fs::path currentPath = fs::current_path(); cout 2023. 5. 28.
C#, WinForms ] 자식 폼에서 부모 폼으로 데이터 전달 방법, 이벤트 / 프로퍼티 자식폼에서 dataGridView의 selectedIndex 전달 받기 1. 이벤트 활용 방법 자식폼 public partial class DeviceListForm : Form { // ... public event EventHandler OnItemSelected; // OK 버튼 클릭 시 private void buttonOk_Click(object sender, EventArgs e) { if(deviceList.SelectedIndex != -1) { OnItemSelected?.Invoke(this, deviceList.SelectedIndex); } } // ListBox 더블클릭 시 private void deviceList_MouseDoubleClick(object sender, Mous.. 2023. 5. 14.
WinForms ] Anchor, Dock properties Anchor 속성의 default 값은 Top, Left인데 이 값을 변경하면 bold 체로 바뀐다. Anchor 속성 미사용시 Anchor 속성 사용 Dock 속성 default 값은 None이다. toolStrip은 top에 dock하고 statusStrip은 bottom에 dock할 수 있다. 여러 컨트롤을 같은 방향에 dock할 수 있고 어떤걸 먼저 dock하느냐에 따라 화면에 표시되는게 달라진다. textBox의 multiLine 속성을 true로하고 dock 속성을 fill로 하면 마치 메모장같은 GUI를 볼 수 있다. splitContainer를 먼저 만들고 그 안에서 컨트롤을 dock하는 것도 가능하다. 2023. 5. 14.
C#, WinForms ] Event 와 delegate C#에서 이벤트를 사용하면 프로그램의 느슨한 결합(loose coupling)을 통해 객체 간 상호작용을 구현할 수 있다. 이벤트는 객체가 발생시키는 특정한 동작을 나타내며, 이벤트를 구독하는 다른 객체는 해당 이벤트를 수신하고 이벤트 처리기를 호출한다. 이를 통해 클래스 내부에서 발생한 동작을 외부에서 알림으로써 더욱 유연하고 효율적인 프로그래밍을 구현할 수 있다. 이벤트를 발생시키는 쪽이 Publisher이고 이벤트를 수신하고 처리하는 쪽이 Subscriber가 된다. 1. delegate 정의 및 이벤트 선언하기 Publisher 쪽에서 메서드를 참조하는 형식인 delegate를 사용하여 이벤트를 선언하면 된다. 직접 delegate 정의를 할 수도 있고 system namespace에 이미 정의된.. 2023. 5. 14.
C++ ] JSON 데이터 포맷, rapidjson 라이브러리 사용해 파싱 HTML 삽입 미리보기할 수 없는 소스 JSON(JavaScript Object Notation) 은 데이터 교환을 위한 경량화된 포맷으로, 객체와 배열 등의 데이터 구조를 표현한다. 객체는 중괄호 {} 로 감싸진 key-value 쌍들의 집합이며, 각각의 key는 문자열이고, value는 JSON에서 허용되는 모든 데이터 타입으로 표현될 수 있다. 배열은 대괄호 [] 로 감싸진 값들의 리스트이며, 역시 값은 JSON에서 허용되는 모든 데이터 타입으로 표현될 수 있다. JSON에서 객체의 속성들과 배열의 원소들은 콤마 , 로 구문하며 배열과 객체는 함께 사용할 수 있다. 객체는 배열의 요소로 포함될 수 있는데, 이 경우, 객체는 배열의 요소가 된다. 또한, 객체 안에 배열이 포함될 수 있으며. 이 경우,.. 2023. 5. 14.
Vector CANdb++ editor 아래 주소에서 다운로드 https://www.vector.com/int/en/download/candb-31-sp3/ 공식 매뉴얼 중국사이트이긴 한데 자세히 나와있는 매뉴얼 https://blog.csdn.net/qfmzhu/article/details/111403266 【DBC专题】-1-如何使用CANdb++ Editor创建并制作一个DBC_【dbc专题】-11_汽车电子助手的博客-CSDN博客 目录 0关键字/术语描述 1 启动“CANdb++ Editor” 2 创建一个新的DBC(CANdb network file (Data Base for CAN)) 3 创建CAN网络当中的Network nodes网络节点 4 创建CAN网络当中的Message消息 5 创建Message消息中Signals信 blog.csdn.net 2023. 5. 14.
C#, WinForms ] CRC Checker private void button1_Click(object sender, EventArgs e) { // 초기 디렉토리 설정 openFileDialog1.InitialDirectory = "C:\\"; // 파일 필터 설정 openFileDialog1.Filter = "모든 파일 (*.*)|*.*|텍스트 파일 (*.txt)|*.txt|바이너리 파일 (*.bin)|*.bin|데이터 파일 (*.dat)|*.dat"; // 마지막으로 파일 대화 상자에서 선택한 디렉토리를 기억하고, 다음번 파일 대화 상자를 열 때에는 이전에 선택한 디렉토리를 자동으로 선택 openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() == DialogRes.. 2023. 5. 14.
C#, WinForms ] Drag & Drop 으로 파일 경로 얻기 파일 시스템에 액세스하기위해 using System.IO; 선언 Form의 AllowDrop 속성 true 일반적으로 Form이나 Control에는 파일을 Drop할 수 없기 때문에, 해당 Form이나 Control에 AllowDrop 속성을 true로 설정해주어야 한다. this.AllowDrop = true; DragEnter, DragDrop 이벤트 핸들러 추가 this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop); this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter); DragEnter 이벤트 : 사용자가 무언인가를 .. 2023. 5. 14.
C# ] delegate C#의 delegate는 메서드를 참조하는 객체로 C/C++의 함수포인터와 비슷한 개념이다. C#의 메서드포인터라고 보면 된다. 이 Delegate는 이벤트 핸들러나 콜백 함수를 구현하거나, 대리자 메서드를 호출하는 등 용도로 사용할 수 있다. using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { MyClass mc = new MyClass(); mc.Perform(); } } class MyClass { // 1. delegate 선언 private delegate void printInt2Consol(int i); public void Perform() { // 2. delegate 인스턴스 생성... 2023. 5. 14.
C++ ] stream 상속관계 ios_base : 다른 입출력 클래스들의 기반이 되는 클래스로서, 입출력 스트림의 상태와 플래그를 관리 ios : ios_base 클래스를 상속하며, 입출력 스트림의 상태와 플래그를 조작할 수 있는 멤버 함수를 제공 istream : 입력 스트림을 다루는 클래스. 콘솔 입력 및 파일 읽기 등을 다룰 수 있다. ostream : 출력 스트림을 다루는 클래스. 콘솔 출력 및 파일 쓰기 등을 다룰 수 있다. fstream : 파일 입출력을 다루는 클래스. 파일의 읽기 및 쓰기를 다룰 수 있다. stringstream : 메모리상에서 문자열을 읽고 쓰기 위한 클래스. std::string과 유사한 인터페이스를 제공하며, 문자열을 파싱하거나 변환하기 위한 용도로 사용된다. ifstream : 파일 입력에 특화된.. 2023. 5. 14.
C#, WinForms ] 폼 시작시, 종료시 이벤트 호출 순서 HTML 삽입 미리보기할 수 없는 소스 폼이 Show() 메소드로 호출되면 다음과 같은 순서로 이벤트가 발생한다. 1. 폼의 생성자(Constructor)가 호출된다. 2. 폼의 Load 이벤트(이벤트 핸들러)가 발생한다. 3. 폼의 Shown 이벤트(이벤트 핸들러)가 발생한다. 생성자는 Form 객체를 생성할 때 호출되며, Load 이벤트는 Form이 로드될 때 발생하고, Shown 이벤트는 폼이 처음 화면에 표시될 때 발생한다. 폼 Load 이벤트 호출 시점에는 폼과 관련된 컨트롤들이 메모리에 로드되고 초기화되지만, 아직 폼이 화면에 보이지는 않는 상태이다. 따라서 이 때 폼의 크기나 위치를 변경하거나, 다른 컨트롤의 위치나 크기를 폼에 맞게 조정할 수 있다. 또한 Form이 화면에 나타나기 전이므로.. 2023. 5. 14.
C#, WinForms ] program.cs C# 프로그램 진입점 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace Appname1 { internal static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } using 문을 .. 2023. 5. 14.
Winforms ] ToopStrip, MenuStrip 속성 ToolStrip 화살표클릭 - Dock 을 통해 ToolStrip의 위치를 정할 수 있으며 ToolStrip size는 Form의 size에 맞게 자동 조정된다. 그리고 아래 버튼을 클릭해 다양한 컨트롤을 ToolStrip 안에 추가할 수 있다. ToolStrip 을 선택하며 속성을 변경할 수 있고, ToolStrip 내의 컨트롤을 클릭하여 각자 속성을 변경할 수도 있다. ToolStrip 내의 컨트롤을 우클릭하여 주요 속성을 변경할 수도 있는데 ToolStripButton 의 경우 DisplayStyle 을 Text/Image/ImageAndText 중에서 선택할 수 있다. AutoSize 를 False로 하면 ToolStrip의 크기를 임의로 조절할 수 있다. 우클릭 - 이미지 설정 또는 속성의 I.. 2023. 5. 14.
Windows ] 윈도우에서 파일 Hex dump 하는 방법 파워쉘을 열고 아래 명령어 뒤에 hex dump할 파일 경로를 입력하면 된다. format-hex Format-Hex C:\Users\Username\Documents\example.bin Format-Hex 명령어는 내부적으로 아래의 과정으로 처리된다. Get-Content -Path [파일 경로] -Encoding Byte | Format-Hex 2023. 5. 14.