개발 관련/SW, App 관련

Autoit3로 Serial 통신 사용하기

by 소서리스25 2023. 5. 12.
반응형

Autoit3로 Serial 통신

 

이번 포스트는 Autoit로 Serial 통신을 할 수 있는 방법에 대해 설명한다.

 

먼저 Autoit의 Koda Form design으로 다음과 같이 폼을 만든다. 간단하게 만들 수 있다.

이 Koda가 없던 시절에는 메모장 같은 SciTE만 가지고 완전히 빈 화면에서 코드로 모든 것을 만들어야 했는데 이 Koda의 등장으로 정말 편하게 Form 디자인을 할 수 있게 되었다. 너무 좋다.

Koda Form Design 활용
Koda Form Design 활용

 

그다음 초록색 플레이버튼을 누르면 코드로 변환된다.

코드로 변환된 내용의 숫자들을 조절하면 폼의 크기나 버튼의 크기등을 세부적으로 조절할 수 있다.

 

그럼 Serial 통신을 하기 위해선 다음의 중요한 라이브러리인 dll 파일과 이를 처리해 주는 통신 au3 파일이 필요하다. 통신을 처리하게 해주는 것이라 생각하면 된다.

 

통신 라이브러리 파일 : commg.dll

통신 처리 함수파일 : CommMg.au3

 

여기서 빌드를 하게 되면 au3 파일은 빌드 시 실행파일 안에 포함됨으로 지정만 해주면 되는데, 라이브러리 파일을 별도로 포함시키려면 다음과 같은 코드를 추가하여 install 형식으로 변경해 주어야 한다.

 

If FileOpen("commg.dll", 0) = -1 Then FileInstall(".\commg.dll", @ScriptDir & "\commg.dll", 1);

 

위 내용은 빌드시 commg.dll 파일이 없을 경우를 대비해 스크립트 파일이 있는 경로의 commg.dll파일을 실행파일에 포함시키는 내용이다.

 

전체 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <CommMG.au3>
 
HotKeySet("{ESC}""_Exit");
If FileOpen("commg.dll"0= -1 Then FileInstall(".\commg.dll", @ScriptDir & "\commg.dll"1);
 
Global $_comport, $sportSetError, $_baudrate;
Global $inputState = False, $instr;
 
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Serial Test"385200246187)
$Button1 = GUICtrlCreateButton("Button On"3211214565)
$Button2 = GUICtrlCreateButton("Button Off"21611214565)
$DebugText = GUICtrlCreateLabel("Debug Text : "321620017)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
 
 
_Ini_read();
_SerialCheck();
 
 
_Main();
 
 
Func _Main()
 
   While 1
 
        ; 이벤트 처리
          $nMsg = GUIGetMsg()
 
        Switch $nMsg
 
            Case $GUI_EVENT_CLOSE
                Exit
 
            Case $Button1
                If $inputState Then _CommSendString("on");
                GUICtrlSetData($DebugText, "Debug Text : on~");
                ConsoleWrite("On~" & @CRLF);
 
            Case $Button2
                If $inputState Then _CommSendString("off");
                GUICtrlSetData($DebugText, "Debug Text : off~");
                ConsoleWrite("Off~" & @CRLF);
 
        EndSwitch
 
       ; 데이터 수신 처리
        If $inputState Then
 
            $instr = _CommGetString();
 
            If($instr <> '' and @error <> -2) Then
 
                If ($instr = '1') then
                    ConsoleWrite("1을 수신함.." & @CRLF);
 
                ElseIf ($instr = '2') then
                    ConsoleWrite("2을 수신함.." & @CRLF);
 
                EndIf
 
            EndIf
 
        EndIf;
 
      Sleep(20);
 
  Wend;
 
EndFunc;
 
 
Func _SerialCheck()
 
   If @error = 1 Then Exit;
 
   If _CommSetPort($_comport, $sportSetError, $_baudrate, 8010<> 1 Then
       MsgBox(0'에러', '접속에러-1 : '&$sportSetError&@CR&'* 통신 없이 시작합니다.', 3);
 
   ElseIf $sportSetError <> '' Then
       MsgBox(262144'에러', '접속에러-2 : '&$sportSetError&@CR&'* 통신 없이 시작합니다.', 3);
 
   Else
       $inputState = True;
       ConsoleWrite("Serial Connected..." & @CRLF);
 
   EndIf
 
EndFunc
 
 
Func _Ini_read()
   $_comport = IniRead("SerialTest.ini""setup""comport""Err");
   $_baudrate = IniRead("SerialTest.ini""setup""baudrate""Err");
EndFunc
 
 
Func _Exit()
    _Commcloseport();
    Exit;
EndFunc
cs

 

아울러 SerialTest.ini 를 만들어줘야 하는데, 이는 내부에서 자체적으로도 생성할 수 있다. 

현재는 별도로 만들어 줘야 한다. 내용은 다음과 같다.

 

[setup]

comport = 4

baudrate = 9600

 

최종적으로 Autoit의 SciTE에서 컴파일과 빌드를 진행하면 실행파일이 생성된다.

해당 폴더에는 실행파일과 ini 파일만 있으면 프로그램을 작동시킬 수 있다.

 

실행해 보면 다음과 같이 나타난다.

빌드하여 실행하기
빌드하여 실행하기

 

하드웨어가 연결되어 있지 않아 발생한 오류로 연결하면 오류창은 뜨지 않는다.

 

HW는 지난번 포스팅했던 Arduino의 코드를 그대로 이용하면 된다.

 

Autoit는 Unity에 비해 굉장히 가볍게 간단한 프로그램을 만들 수 있다. Unity는 거의 그래픽 위주의 개발도구이니 완전히 다른 목적의 개발 툴이라고 생각해야 되겠다.

 

위에서 설명한 필요한 파일은 아래와 같다.

commg.dll
0.40MB

 

 

CommMG.au3
0.04MB

반응형

댓글