[M.Diary] 네번째 시간입니다.

 

오늘은 본격적으로 코일권선을 위한 프로그램 코딩방법에 대해 알아보겠습니다.

 

먼저 코일 winding 을 위해 셋팅해주어야 하는 값들을 텍스트 박스 형태로 아래 사진처럼 gui 작업을 해줍니다.

이미지 31.jpg

 

각각의 설정해주어야 할 파라메터 값을 대략적으로 정리해 보면

 

먼저 순수한 [코일]의 굵기[Wire Size]

코일에 코팅되어있는 [에나멜]의 두께값 [Coating]

이 있겠죠 이값을 입력받아 실제 코일의 굵기를 계산해서 나온 값이 [Total Wire Size] 입니다.

 

다음은 코일을 감게될 [보빈]에 길이값[Total Wire Size]

코일을 감게될 [보빈]의 지름[Bobbine Diameter]

이값들에 앞서 계산한 코일의 굵기 값을 대입해 계산해 주면

첫번째 층에 감기게될 코일의 턴수 [First Layer Windings]를 계산할수 있습니다.

동시에 그에 따른 첫번째층에 감기게 될 코일에 길이[First Layer Wire Length]도 계산가능 하겠죠?

 

그리고 코일을 감게될 층수[Total Layer]

그리고 그에따른 최종 턴수[Total Windings], 최종길이[Wire Length]를 계산해 주면 됩니다.

 

굳이 위에 값들을 이용해 계산해 주는 이유는 코일의 턴수와 길이에 따라 만들고자 하는

전자석이나 인덕터의 중요 파라메터 값이 되기 때문입니다.

 

이렇게 대략적인 파라메터 설정부분이 끝났으면 본격적으로 코딩에 들어갑니다.

 

먼저 [Calculate] 버튼을 눌렀을때 위의 값을 연산해서 프로그램에서 사용할 파라메타 값을 만들어 줍니다.

소스코드는 다음과 같이 간단하게 작성햇습니다.

이미지 32.jpg


wire = Val(wire_size.Text) + ((Val(wire_size.Text) / 100) * Val(wire_coat.Text))
실제 코일의 굵기[Total Wire Size] = 코일의 굵기[Wire Size] + 코팅되어있는 에나멜의 두께값 [Coating]


winding.Text = Int(Val(bo_width.Text) / Val(wire_total.Text))
코일의 턴수 [First Layer Windings] = 보빈에 길이값[Total Wire Size] / 실제 코일의 굵기[Total Wire Size]

 

wire_length.Text = ((Val(wire_total.Text) / 2) + (Val(bo_diameter.Text) / 2)) * 3.14 * 2
원둘레 공식을 이용해
코일에 길이[First Layer Wire Length] = (실제 코일 반지름 + 보빈의 반지름 ) * 3.141592 * 2

 

t_winding.Text = Val(winding.Text) * Val(t_layer.Text)
최종 턴수 [Total Windings] = 코일의 턴수 * 레이어 층수

 

그리 어렵지않죠?


파라메타 값 연산은 다되었고 이제 [START],[PAUSE],[STOP] 버튼을 구현해 줘야 겠죠?

 

각각의 버튼을 클릭했을때 함수안에 하드코딩을 해주실수도 있겠지만

 

그렇게 코딩하시면 클릭하는 순간 해당 루틴이 끝날때까지 PC가 먹통(?)이 되는 사태가 발생합니다.

 

이런 문제를 해결하기 위해 스레드 프로그램으로 코딩해줘야 합니다.

스레드 프로그래밍 부턴 초보의 영역(?)을 벗어나게 되죠

 

일단 각각의 버튼에 대한 소스는 아래와 같이 작성해 줍니다.

 

[START]

이미지 33.jpg

 

[PAUSE]

이미지 34.jpg

 

[STOP]

이미지 35.jpg

간단히 스레드를 이리저리 조작하게 코딩 되있습니다.

 

그리고 아래 사진이 최종 동작을 구현한 스레드함수의 소스코드 입니다.

이미지 36.jpg
 이미지 37.jpg

이미지 38.jpg

 

간단하게 코딩했는데 이해되실려나 모르겠네요.

 

자세한 소스코드 설명은 시간관계상 다음시간에 알아보겠습니다.

 

그럼 다음시간에 만나요~~^^