'DIY > 상식' 카테고리의 다른 글

PC에서 무선랜카드로 무선공유기 만들기  (0) 2018.08.06
블로그 이미지

UART

,

가끔  팁을 찾다가 보면 C#이 얼마나 편한지 여실히 느낀다.  아래 펌 글은 시리얼 통신의기본 틀을 설명하고 있다.

 

C# 은 시리얼 통신에 대한 모든것을 개발자가 구현할 필요 없이 매우 쉽고 간단하게 사용할 수 있는 객체를 지원한다. 그것은 System.IO.Ports.SerialPort 인데 Visual Basic 을 사용했던 내게는 Visual Basic 6.0 에서 지원하던 Comm 컨트롤과 매우 유사해 사용은 간단했다.

1.객체 생성

SerialPort 객체를 Form에 끌어넣어주면 된다. SerialPort 객체는 Device Components 에 있다.

 

2. 초기화

SerialPort.PortName 속성은 COM1, COM2 등 몇번 COM port를 사용할지 설정

SerialPort.BaudRate 속성은 통신 속도 설정

일반적인 경우 이 두가지만 설정하면 된다.

3.Port 열고 닫기

SerialPort.Open(), SerialPort.Close() method를 이용해 포트를 열고 닫아주면 된다.

그리고 SerialPort.IsOpen 속성을 이용해 현재 포트가 열려있는지 확인할 수 있다.

3. 데이터 전송 및 수신

데이터 전송은 간단하다. txtSend 에 입력한 데이터를 전송하려면 다음과 같은 코드 한줄이면 된다.

SerialPort.Write(txtSend.Text);


하지만 SerialPort로 받아온 데이터를 읽어올 때가 VisualBasic 6.0 이후로는 Visual Basic을 사용하지 않았던 나에게는 낯선 것이었다. 그리고 이것이 C#을 이용한 시리얼 통신에 대한 글을 쓰는 이유이다.


SerialPort가 데이터를 받으면 다음과 같은 event handler 가 호출된다.

 

private void SerialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

{

}


그리고 SerialPort.ReadExisting() 를 후출하면 SerialPort 객체의 버퍼에 남아있는 데이터들을 모두 읽어오게 된다. 하지만 이 데이터들을 main form 의 ListBox 에 넣으려고 하는 순간 exception이 발생했다. MSDN 을 검색해 보면 다음과 같은 설명이 나와있다.


The DataReceived event is raised on a secondary thread when data is received from the SerialPort object. Because this event is raised on a secondary thread, and not the main thread, attempting to modify some elements in the main thread, such as UI elements, could raise a threading exception. If it is necessary to modify elements in the main Form or Control, post change requests back using Invoke, which will do the work on the proper thread.


즉 SerialPort와 main form 은 서로 다른 thread 이다. 그런데 Serial Port 의 thread 에서 다른 main form 의 thread 의 객체를 modify 하려고 하기 때문에 발생하는 문제이다. 이 문제를 해결하기 위해서

SerialPort_DataReceived() event는 main form에서 SerialPort 를 통해 받은 데이터를 이용해 main form을 수정하는 main form 내의 event handler를 invoke 한다.

private void SerialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

{

     this.Invoke(new EventHandler(SerialReceived));

}

그러면 SerialPort 가 데이터를 받아올 때마다 main form 에서 SerialReceived() event handler가 호출되며 이 event handler에서 main form 의 객체를 조작하게 된다.

private void SerialReceived(object s, EventArgs e)

{

     String strReceive = SerialPort.ReadExisting();

    listReceive.Items.Add(strReceive);

}

그러면 exception 이 일어나는 문제가 해결된다. 아래 그림은 학부 2학년인가 3학년때 시리얼통신용으로 사용하는 D-SUB 커넥터를 캐드로 그리고 자주 사용하는 TXD, RXD, GND 를 표시해놓은 그림이다. 종종 시리얼통신을 사용할 때마다 핀 배열이 헷갈려서 항상 찾아보는 그림이다.

*첨부 : 각 2,3,5번 핀,

참고자료

MSDN http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx

출처 : C# 으로 시리얼 통신하기

블로그 이미지

UART

,

Visual C++를 사용하다 보면 여러가지 파일들이 자동으로 생성되는데,
이들 중 다음 파일들은 항상 자동 생성될 수 있으므로 백업시 삭제하여도 무방하며
CVS와 같은 소스관리 프로그램에는 추가되지 않도록 하는 것이 좋다.


# Visual C++에서 지워도 되는 파일들
*.pch *.mdp *.ncb *.clw *.obj *.aps *.cpl *.awk *.exp *.idb
*.opt *.pdb *.map *.res *.ilk *.scc *.bsc *.sbr *.tlb *.plg
*.lib *.dll *.exe

# 그러나, 다음 파일들은 지워서는 안된다.
*.mak, *.dsp, *.c, *.rc, *.rc2, *.ico, *.bmp, *.txt, *.def, *.hpj, *.bat, *.rtf,
*.odl, *.inf, *.reg, *.cnt, *.cpp, *.cxx, *.h, *.hpp, *.hxx, *.inl, *.tpl, *.vtp, *.mst

 

출처 : http://narsus.net/technotes/1300

블로그 이미지

UART

,

Visual Studio 로 개발된 소스를 압축하는 경우 보통 불필요한 파일들 때문에 파일크기가 상당히 커지는데요.

그래서 보통 불필요한 파일을 직접 삭제해주는 경우가 많습니다.


그래서 이런 파일들을 정리해주는 프로그램들도 있습니다.

그리고 위와 같은 프로그램 사용이 번거롭게 생각되는 경우에는 배치파일(bat)을 만들어 사용할 수 있습니다.

del /f /q /s /a rhsa *.bak *.ncb *.obj *.pdb *.idb *.ilk *.pch *.suo *.aps *.opt *.sbr *.bsc *.user
pause

fileCleaner.bat


위 내용은 bak, ncb, obj ...등의 확장자에 해당하는 파일을 삭제하는 명령입니다. 현재 디렉토리를 포함한 하위디렉토리의 모든 파일을 삭제하여 줍니다. 필요에 따라서 옵션이나 확장자를 추가하거나 삭제하셔서 사용하시면 됩니다.

Visual Studio에서 사용하는 파일들의 확장자 정보는 아래 사이트를 참고하시면 됩니다.


출처 : http://smok95.tistory.com/211

블로그 이미지

UART

,

윈도우즈 프로그램에서 사용되는 파일 확장자에 대한 설명

파일 확장자
파일 확장자 내용
C
C언어 소스 파일. C방식으로 컴파일된다. 만약 소스내에 C++코드가 있다면 확장자를 CPP로 변경하거나 컴파일시 옵션을 /TP로 설정한다.

CPP(또는 CXX)
C++언어 소스파일. C++방식으로 컴파일된다. 만약 확장자만 CPP이고 실제 내용이 C코드이면 확장자를 C로 변경하거나 컴파일시 옵션을 /Tc로 설정한다.

H(또는 HPP, HXX)
헤더 파일. 이 파일은 함수의 원형선언, 클래스 정의, 상수정의를 위해 사용된다.

INL
인라인 함수 파일. 이 파일에는 인라인 함수가 정의된다.

RC와 RC2
RC는 리소스 파일을 말하며 리소스 컴파일러(RC.EXE)에 의해 컴파일된다. 다이얼로그, 아이콘, 메뉴, 커서 등과 같은 리소스에 대한 정보가 기술되어 있다. RC2 또한 리소스에 대한 정보가 포함된다.

DEF
모듈 정의 파일(Module definition file). 프로젝트 유형에 따라 사용목적이 다른데 윈도우즈 또는 윈도우즈 NT 기반의 프로그램인 경우 익스포트되는 함수의 리스트, 힙(Hea p)크기, 세그먼트 속성 등을 지정한다.

Developer Studio가 생성하는 파일들에 대한 목록

확장자
파일 확장자 내용
APS
리소스 파일에 대한 바이너리 파일. App Studio에서 리소스 파일을 로딩하는데 사용된다.(로딩 속도 향상)

BSC
소스 브라우저 정보 파일(Browser database file). 이 파일은 BSCMAKER.EXE를 실행할 때 SBR파일로부터 생성된다.

CLW
클래스위저드 상태 파일. 클래스위저드를 사용하여 추가되는 메시지 핸들링 함수 등과 관련된 정보들이 포함된다.

DSP
메이크 파일(MAK)과 동일한 목적의 파일로 VC++5.0에서 사용한다.

DSW
워크스페이스 파일. 워크스페이스내의 각 프로젝트에 대한 엔트리 정보를 포함한 파일

PCH
프리컴파일 헤더 파일 (Precompiled header file). 이 파일은 컴파일 속도를 향상시키며 컴파일 옵션/Yc, /Yu 또는 /YX를 사용할 때 생성된다.

PDB
프로그램 정보 파일(Program database file). 이 바이너리 파일은 컴파일링, 링킹 과정을 통해 얻어지는 디버깅 정보를 포함한다.

SBR
소스 브라우저 파일(Source browser file). 이 파일은 소스 파일에 대한 상세한 정보들이 포함된다.

WSP
Workspace information file(16비트 버전)은 통합 개발 환경이 종료될때의 상태 정보를 포함한다.

VCP
Workspace information file(VC++ 2.X버전 또는 이후버전)은 통합개발 환경이 종료될 때의 상태 정보를 포함한다.

EXP
익스포트 파일 (Export file). 익스포트되는 힘수와 데이터 정보를 포함한다.

MAP
맵 파일(Map file). 프로그램의 엔트리 포인트, 심볼이름, 시작 주소, 프로그램에 링크된 정보를 포함한다.

RES
리소스 파일(RC)이 컴파일된 바이너리 파일

HPJ
문맥 감지형 도움말 파일(Context-sensitive help project file). AppWizard 단계 4 에서 [Context-sensitive help]를 체크하면 자동 생성된다.

NCB
Parser information file. 이 파일은 클래스뷰와 컴포넌트 갤러리를 지원하기 위한 정보를 포함한다.

MDP
Microsoft Developer Studio file. 이 파일은 VC++ 2.X 버전에서 사용한 VCP파일을 대체한다.

RCT
리소스 템플릿 파일 (Resource template file)

OPT
워크스페이스 환경설정을 보유

PLG
빌드 로그 파일

[출처] 비주얼 C++ VC 확장자들 설명|작성자 헤더막스

블로그 이미지

UART

,

경기도 수원시 팔달구 매교동 167-3번

블로그 이미지

UART

,

 

개발 일을 하다가 보니 MS SQL2008R2 를 사용하고 있습니다.

고객사의 모니터링 시스템을  만들고 있었습니다.

이미지를  저장에 대하여 관리적인 측면에서  파일을 DB에 저장을 합니다.

SQL2008부터 FILESTREAM이 있고 강력하다는 말에 사용하게 되었습니다.

하지만, 내 생각과 다른 부분이 있어서,  힘들게 셋팅 된 부분과 내용을 지워야 했습니다.

그래서, 제거(삭제) 순서를 이렇게 하였습니다.

1. FileStream이 들어간 테이블  삭제 –> drop table filestream_tablename

2. DB FILE 삭제 -> alter database dbname remove file filestream_filename

3. DB FILEGROUP 삭제 -> alter database dbname remove filegroup filestream _groupname

4. FILE STREAM 기능 해제 –> SQL구성관리자 => SQL Server => 속성 =>FILESTREAM TAB => T-SQL 엑세스에 FILESTREAM사용 해제 => SQL SERVER 재시작

4번에서 기능을 해제하고 재 시작하면 DB접속이 되지 않을 경우가 있습니다. 이 때, 다시 사용을 체크하고 DB 연결이 후 재시작하면 연결되고, 이후  다시  1,2,3,4 을  해 주면  됩니다.

일단 지우고 예전 소스를 돌려도 아직까지는 깔금하게 동작하고 있습니다. 관리 측면도 편합니다.

하지만, FILE STREAM 를 꼭 사용해야 할 경우가 있습니다 .

예전방식에서 FILE이 너무 크면 DB저장이 부적절했습니다.  SELECT와 INSERT가 문제였습니다.

이를 나름 해결점을 제시 하는 방식이 FILESTREAM입니다. 즉, 대용량의 파일을 SQL관리시스템 하에 둘 때

성능저하를 가져오지 않고 사용하고자 할 때 괜찮습니다.

단점은 백업과 저장 위치, 파일삭제 등의 문제가 조금 있습니다. 이곳에 CHECKPOINT 등을 두어 시스템적으로 해결 할 수 도 있습니다.   개인적으로 아직은 편리함 보다 불편함이 많은 기능인 것 같습니다.

블로그 이미지

UART

,

원본 : http://social.msdn.microsoft.com/Forums/ko-KR/vsko/thread/28cc3dfa-d912-41ff-8ebf-6faf01b297f6

VS 2010에서는 대상 프레임워크를 3.5 로 하여 프로젝트가 생성 가능 하지만 하위버전에서 상위버전의 프로젝트는 열수 없습니다.

VS 2010에서의 프로젝트를 VS 2008로 구동 했을 때 관련 기능과 코드가 제대로 돌아가는지를 먼저 확인하셔야 할 것 같습니다.

2010에서만 지원되는 어셈블리가 있다면 2008에서는 로드가 되지 않거나 제대로 실행이 안될 수 있습니다.

변환하는 방법은 아래와 같습니다만 권장하지는 않습니다.

.sln 파일을 메모장으로 열어

Microsoft Visual Studio Solution File, Format Version 11.00.
# Visual Studio 2010.
=>
Microsoft Visual Studio Solution File, Format Version 10.00.
# Visual Studio 2008.
.csproj 파일을 메모장으로 열어
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">.
=>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">.

 

이렇게 하면 VS2010 프로젝트는 VS2008프로젝트로 됩니다.

'프로그래밍 > C#' 카테고리의 다른 글

List 의 자료 정렬 두가지 방식  (0) 2018.07.30
모달리스 대화상자 제어 하기  (0) 2013.11.07
(참조) C# 으로 시리얼 통신하기  (0) 2013.03.06
블로그 이미지

UART

,

 

유용한 압축 프로그램 및 유틸리티

 

반디집 : 알집파일 포맷과 기타 파일을 모두 풀수 있다. 완전 무료다.

다운로드는 이곳에서 -> 홈페이지 열기

 

가끔 지인이 알집전용포맷으로 자료를 보내 주는 경우가 있습니다.

전 회사에서 노트북에서 작업을 하는데, 이것(알집)이 회사에서 유료입니다.

즉, 설치만 해도 문제(불법사용)가 됩니다. 레지스트리에 남아 있어서 설치 후 지워도 설치하여 사용한 것이 됩니다.

무료로 빵집을 사용했으나 분활된 알집파일에서 에러가 났습니다.

하지만, 반디집은 문제가 없네요. 

개인적으로 빵집도 좋지만 반디집도 강추하고 싶습니다.

'어플소개' 카테고리의 다른 글

윈도우10 설치 USB 만들기  (0) 2018.04.06
블로그 이미지

UART

,

나와 아버지는 내가

네 살 때 : 아버지는 뭐든지 하실 수 있었다.

다섯 살 때 : 아버지는 많은 것을 알고 계셨다.

여섯 살 때 : 아버지는 모든 것을 정확히 아시는 것은 아니었다.

열 살 때 : 아버지가 어렸을 때에는 많은 것이 지금과 확실히 달랐다.

열두 살 때 : 아버지는 어린 시절을 기억하기에는 너무 늙으셨다.

열네 살 때 : 아버지에게는 신경 쓸 필요가 없어. 아버지는 너무 구식이거든!

스물한 살 때 : 우리 아버지 말이야? 구제 불능일 정도로 시대에 뒤지셨지.

스물다섯 살 때 : 아버지는 그것에 대해 약간 알기는 하신다. 그럴 수 밖에 없는 것은 오랫동안 그 일에

경험을 쌓아 오셨으니까...

서른 살 때 : 아마도 아버지의 의견을 여쭈어 보는 것이 좋을 듯하다. 아버지는 경험이 많으시니까.

마흔 살 때 : 아버지라면 이럴 때 어떻게 하셨을까 하는 생각을 종종 한다. 아버지는 그만큼 현명하고

세상 경험이 많으시다.

쉰 살 때 : 아버지가 지금 내 곁에 계셔서 이 모든 것을 말씀드릴 수만 있다면 난 무슨 일이든 할 것이다.

아버지가 얼마나 훌륭한 분이셨는가를 미처 알지 못했던 것이 후회스럽다. 아버지로부터 더 많은 것을 배울

수도 있었는데 난 그렇게 하지 못했다.

- 랜더스 -

 

이 글을 읽고 기분이 짢해 졌습니다. 저와 오버랩이 되는 것이...

'좋은글' 카테고리의 다른 글

이순신장군님의 글에서 ...  (0) 2013.01.08
블로그 이미지

UART

,