자료 참고 안내 1. 본 자료실의 모든 자료 저작권은 ㈜에이치앤에스에 있습니다.

본 자료는 개발하시는데 참고자료 용도로 사용하실 수 있으며 저작권 표시 없이 복사,게재, 출판 하실 수 없습니다. 외부 게재 사용 시 반드시 출처 항목에 회사명과 사이트 주소를 반드시 명시해 주시기 바랍니다.
[표기 예] 출처 : ㈜에이치앤에스(www.hnsts.co.kr) 또는 ㈜HNS(www.hnsts.co.kr)

2. 제품 개발 시 내용과 예제 코드는 수정 및 검증작업을 직접 하셔야 하며 문제 발생에 대한 책임은 ㈜HNS사와 무관합니다.

본사는 자료를 최신내용으로 유지하기 위해 노력하고 있으며 제공되는 정보의 오류 및 내용이 정확하지 않을 경우 사전 공지 없이 업데이트 될 수 있습니다. 자료의 문제점 발견 시 본사로 문의주시면 검토하여 자료를 수정하도록 하겠습니다.

[C#, VB.NET] Smart IO-I, II, III_통합 예제
작성일 2018-08-28 수정일 2022-10-06 조회수 1855
분류 SmartX Framework
적용
플랫폼
키워드 스마트입출력프로그램, SMARTI/O프로그램, SMARTIO프로그램
첨부파일 TechNote51_Example.zip

본 예제는 IEC-Series에서 지원되는 옵션 제품 중 Smart I/O-I, II, III의 기능을 테스트할 수 있도록 만든 예제 프로그램(C#, VB.NET) 입니다.
본 예제 프로그램으로 아래의 표와 같이 Smart I/O - Block Series와 SmartX Framework의 H/W 제어기능을 연동 테스트하실 수 있습니다.

SmartX
Framework
Smart I/O - Block
Series
SmartGPIO
(INPUT)
INPUT
Block
SmartGPIO
(OUTPUT)
Relay
Block
SmartGPIO
(OUTPUT) SmartPWM
FET
Block
SmartADC ADC
Block
SmartDAC DAC
Block
SmartInputCounter
(INPUT)
InputCounter
Block

SmartX Framework와 관련된 컴포넌트의 사용법은 SmartX Framework Reference Guide(Programming Guide)의 SmartGPIO, SmartPWM, SmartADC, SmartDAC편을 참조하시기 바랍니다. Smart I/O-I, II, III의 하드웨어 설명 및 사용법은 Smart I/O-Series 제품매뉴얼을 참조하시기 바랍니다.


본 자료는
1. SmartGPIO, SmartPWM, SmartADC, SmartDAC, SmartInputCounter의 사용 용도

1-1. SmartGPIO
1-2. SmartPWM
1-3. SmartADC
1-4. SmartDAC
1-5. SmartInputCounter

2. Smart I/O-Series 사용시 주의 사항

2-1. 전기 사용시 주의
2-2. 케이블 사용시 주의

3. 예제 프로그램 동작 설명
4. Smart I/O-Series와 연동 및 테스트 방법

4-1. Smart I/O-I 설정 및 Test 방법
4-2. Smart I/O-II/III 설정 및 Test 방법 의 순서로 설명합니다.

5. 프로그램 전체 소스
순서로 진행합니다.



1. SmartGPIO, SmartPWM, SmartADC, SmartDAC, SmartInputCounter의 사용 용도
1-1. SmartGPIO

스위치, 외부 센서들로부터 데이터를 입력 받을 때(INPUT), 장치 및 장비의 On/Off 제어를 할 경우 (OUTPUT)사용합니다.

1-2. SmartADC

온습도, 근접, 압축, 가속도, 자이로센서 등 아날로그센서로부터 데이터를 입력 받는 용도로 사용합니다.

1-3. SmartDAC

전압을 조절하여 모터드라이버 및 각종 구동장치(Acatuator)의 속도제어 시 사용합니다.

1-4. SmartPWM

DC모터 속도제어, 냉온소자 온도제어, Servo모터 각도제어 등 DutyRate를 이용한 전압제어로 속도 및 강약조절에 사용합니다.

1-5. SmartInputCounter

기존 SmartGPIO의 입력 성능을 대폭 개선하여 SmartGPIO의 입력대비 고속의 입력 처리 기능을 지원합니다.

참고 자세한 컴포넌트 기능 및 설명은 SmartX Framework 프로그래밍 가이드에서 참고하시기 바랍니다.


2. Smart I/O-Series 사용시 주의 사항
2-1. 전기 사용시 주의

Input Block의 경우 Smart I/O보드에 별도의 전원을 연결하지 않아도 기능 사용에 문제가 없지만 Relay, ADC, DAC Block의 경우 입력전원이 없을 경우 기능을 사용할 수 없습니다.

Smart-I/O I, II, III보드 입력전원은 AC(220V) 또는 DC(12V)를 입력해야 하며 Smart-I/O I, II 에 DC전원 사용시 Smart-I/O보드의 SMPS를 제거 후 0Ω을 연결 해야 합니다. Smart-I/O III 에 DC전원 사용시 DC 커넥터를 납땜하여 사용합니다.

참고Smart I/O 보드 제품 구입시 DC전원으로 변경요청 하시면 DC전원으로 바로 사용할 수 있는 상태의 제품으로 받으실 수 있습니다.
2-2. 케이블 사용시 주의

IEC-Series와 Smart I/O 확장 케이블(Extension Port) 연결 시 포트와 케이블이 바뀌지 않도록 주의합니다.



3. 예제 프로그램 동작 설명
예제프로그램 설명 예제프로그램 설명
    ① SmartGPIO
  • 1) 사용하려는 Port의 Pin 방향(INPUT/OUTPUT)을 설정한 뒤 적용합니다.

    (INPUT/OUTPUT) 버튼이 토글 모드라서 클릭할 때 마다 INPUT과 OUTPUT의 방향설정이 변경됩니다. 버튼 클릭으로 입/출력 방향 전환을 한 다음 해당 내용을 적용하려면 Set Apply 버튼을 클릭해야 합니다.

  • 2) 설정이 적용된 GPIO 기능을 시작합니다.

    Start 버튼을 클릭하면 INPUT의 경우 외부에 연결된 입력센서로부터 입력 신호가 감지되는 경우 해당하는 핀 옆에 LED가 ON 되며, OUTPUT으로 사용시 출력전압을 Low/High로 출력신호를 내보낼 수 있습니다.

    ② SmartADC
  • 1) 사용하려는 ADC 채널을 선택한 뒤 시작합니다.

    사용하려는 ADC 채널을 선택한 뒤 Start 버튼을 클릭하면 외부에 연결된 아날로그(Analog) 센서로부터 데이터를 입력 받아 화면에 디지털(Digital)값으로 출력합니다.

    ③ SmartDAC
  • 1) 사용하려는 DAC 채널을 선택한 뒤 시작합니다.

    사용하려는 DAC 채널을 선택한 뒤 Start 버튼을 클릭하면 디지털(Digital)값을 외부에 연결된 장치로 아날로그(Analog) 신호를 출력합니다. (0~5V 또는 0~10V)

    ④ SmartPWM
  • 1) 사용하려는 PWM 채널을 선택한 뒤 시작합니다.

    사용하려는 PWM 채널을 선택한 뒤 Start 버튼을 클릭하면 PWM_Duty 설정 값에 따라 PWM 출력값이 다르게 출력되며 오실로스코프(Oscilloscope)를 통해 파형으로 관찰 가능합니다. 캐리어 주파수는 기본 설정되어 있으며 변경할 수 없고 듀티비(DutyRate)만 변경 가능합니다.

    ⑤ SmartInputCounter
  • 1) Form2로 이동한 뒤 지정한 Port의 입력신호를 고속으로 카운팅합니다.

    화면 우측 상단의 Form2 버튼을 클릭하여 Form2화면으로 이동합니다. A1(A0~A3), A2(A4~A7), B1(B0~B3), B2(B4~B7)포트 중에 고속 카운팅을 원하는 포트(핀)을 체크하여 선택하고 SET버튼을 클릭하면 사용 준비상태가 됩니다. 체크된 포트에서 START버튼을 클릭하면 고속 카운팅의 감지를 시작하고 STOP 버튼을 클릭하면 감지를 중지합니다.



4. Smart I/O-Series와 연동 및 테스트 방법
4-1. Smart I/O-I 설정 및 Test 방법

Smart I/O-I은 INPUT0~7(B0~B7), OUTPUT(TROUT1~4) `A0~A3, OUTPUT(RY_SW1~4), A4~A7, PWM(PWM1, PWM2), ADC(ADIN0, ADIN1)으로 구성되어 있습니다.

주의Smart I/O-I은 A포트와 B포트의 입/출력 사용이 고정되어 있어 변경 불가함. 아래의 그림 및 표의 설명을 참고하여 사용 바랍니다.
smartI/O - I

① AC90V~240V. 50Hz/60Hz
② Relay S/W 1~4(A4~A7) OUTPUT사용
③ PWM 1~2 사용
④ FETOUT 1~4(A0~A3) OUTPUT사용
⑤ A/DIN 0~1 ADC사용
⑥ INPUT 0~7(B0~B7) INPUT사용

Smart I/O-I 설정

프로그램 실행은 위와 같이 셋팅 후 Set Apply → Start(시작) → Stop(중지)로 실행
Smart I/O-I의 각포트와 프로그램상의 연결(매칭) 정보는 다음과 같습니다.


입력(INPUT). DC입력

Smart I/O-I에서 PORT-B는 INPUT(입력)기능으로 사용하므로 프로그램에서 PORT-B의 모든 핀을 INPUT(입력)으로 설정해야 합니다.

Smart
I/O-I
실크 명칭
INPUT 0
(B0)
INPUT 1
(B1)
INPUT 2
(B2)
INPUT 3
(B3)
INPUT 4
(B4)
INPUT 5
(B5)
INPUT 6
(B6)
INPUT 7
(B7)
Extension
Port-I
PORT-B0 PORT-B1 PORT-B2 PORT-B3
PORT-B4 PORT-B5 PORT-B6 PORT-B7

- 외부상태(입력)에 따른 PortData값 변환

Direction 외부상태
(입력)
PortData 값
(High/Low)
입력 High(12~24V) High(1)
Low(0V) Low(0)

출력(OUTPUT)

Smart I/O-I에서 PORT-A는 OUTPUT(출력)기능으로 사용하므로 프로그램에서 PORT-A의 모든 핀을 OUTPUT(출력)으로 설정해야 합니다.

Smart
I/O-I
실크 명칭
TROUT1
(A0)
TROUT2
(A1)
TROUT3
(A2)
TROUT4
(A3)
RY_SW4
(A4)
RY_SW3
(A5)
RY_SW2
(A6)
RY_SW1
(A7)
Extension
Port-I
PORT-A0 PORT-A1 PORT-A2 PORT-A3
PORT-A4 PORT-A5 PORT-A6 PORT-A7

- PortData값에 따른 외부상태 변화

Direction Port Data 값
(High/Low)
외부상태 LCD
Status
출력 High ON ON
Low OFF OFF

입력(ADC)

ADC는 INPUT(입력)으로 Smart I/O-I에서 A/D IN0과 A/D IN1 기능으로 사용하므로 프로그램에서 ADC1과 ADC2로 설정해야 합니다.

Smart
I/O-I
실크 명칭
A/DIN0 A/DIN1
Extension
Port - I
AIN0 AIN1

- 외부상태(입력전압)에 따른 Digital 값 변환

0 ~ 5V 0 ~ 10V
IEC667
4Ch/12Bit
(4096)
0V : 0
5V : 4095
0V : 0
10V : 4095
IEC1000
4Ch/12Bit
(4096)
0V : 0
5V : 4095
0V : 0
10V : 40955

출력(PWM)
Smart
I/O-I
실크 명칭
PWM1 PWM2
Extension
Port - I
PWM1 PWM2

고속입력(SmartInputCounter)

SmartI/O-I에서 InputCounter(고속입력) 기능은 사용할 수 없습니다

4-2. Smart I/O-II 설정 및 Test 방법

Smart I/O-II는 A0~A7, B0~B7을 전부 입력(INPUT)으로 사용하거나 전부 출력(OUTPUT) 또는 부분 입력과 출력으로 사용이 가능합니다. 각블록 장착 가능위치는 Smart I/O-Series 제품 메뉴얼의 Smart I/O-II, III Base Board 편을 참고바랍니다.

주의Block의 구성에 따라서 입/출력 설정 등이 변경될 수 있음
Smart I/O-II 보드 장착 예시

아래설명은 따라서 해볼 수 있는 예시로서 A0~A3(INPUT Block), A4~A7(FET Block), B0~B3(FET Block), B4~B7(DAC Block)을 사용하는 예시이며 또한 PWM(PWM1, PWM2)보드 포함, ADC(ADIN0, ADIN1) 보드 포함으로 구성되어 있습니다. 실제 개발시에는 개발 환경에 맞게 재구성하여 사용바랍니다.


smartI/O - II

①POWER(AC90V~240V)
②A/D(AIN2~3) 사용안함
③PORT A(A0~A3) INPUT설정
④PORT A(A4~A7) OUTPUT설정
⑤PWM1/PWM2 설정
⑥PORT B(B4~B7) DAC설정
⑦PORT B(B0~B3) OUTPUT설정
⑧ADC(0~5V또는0~10V)
⑨ADC(0~5V또는0~10V)
⑩A/DIN0, A/DIN1설정

Smart I/O-II 설정

프로그램 실행은 위와 같이 셋팅 후 Set Apply → Start(시작) → Stop(중지)로 실행


Smart I/O-II 보드 장착 예시(Form2)

아래설명은 따라서 해볼 수 있는 예시로서 A0~A3(InputCounter Block), A4~A7(InputCounter Block), B0~B3(InputCounter Block), B4~B7(InputCounter Block)를 사용하는 예시입니다.


smartI/O - II

①POWER(AC90V~240V)
②A/D(AIN2~3) 사용안함
③PORT A(A0~A3) InputCounter설정
④PORT A(A4~A7) InputCounter설정
⑤PWM 사용안함
⑥PORT B(B4~B7) InputCounter설정
⑦PORT B(B0~B3) InputCounter설정
⑧ADC(0~5V또는0~10V) 사용안함
⑨ADC(0~5V또는0~10V) 사용안함
⑩A/DIN0, A/DIN1 사용안함

Smart I/O-II 설정

Smart I/O-II 내부에는 Port A 8Ch, Port B 8Ch, A/D 4Ch, PWM 2Ch로 구성되어 있습니다.

입력(INPUT). DC입력

Smart I/O-II에서 PORT-A, PORT-B는 INPUT(입력)으로 사용 가능합니다.

Smart
I/O - II
BLOCK Smart
I/O-II
포트이름
프로그램
위치
Channel
DIGITAL
I/O
PORT
A
A0~A7 PORT
A
0~7
8Ch
PORT
B
B0~B7 PORT
B
0~7
8Ch

외부상태(입력)에 따른 PortData 값 변환

Direction 외부상태
(입력)
PortData 값
(High/Low)
입력 High
(12~24V)
High
(1)
Low
(0V)
Low
(0)

출력(OUTPUT)

Smart I/O-II에서 PORT-A, PORT-B는 입력(INPUT) 또는 출력(OUTPUT)기능으로 사용 가능합니다.

Smart
I/O - II
BLOCK SmartI/O-II
포트이름
프로그램
위치
Channel
DIGITAL
I/O
PORT
A
PORT
A0 ~ A7
PORT
A0 ~ 7
8Ch
PORT
B
PORT
B0 ~ B7
PORT
B0 ~ 7
8Ch

- Port Data값에 따른 외부상태 변화

Direction Port Data 값
(High/Low)
외부상태 LCD Status
출력 High ON ON
Low OFF OFF

입력(ADC)

ADC는 INPUT(입력)으로 Smart I/O-II에서 A/D 0~1(기본제공), A/D 2~3(블록장착) 기능으로 사용하므로 프로그램에서 ADC1~4까지 사용이 가능합니다.

Smart
I/O-II
실크 명칭
A/D
IN0
(기본제공)
A/D
IN1
(기본제공)
A/D
IN2
(블록장착)
A/D
IN3
(블록장착)
Extension Port-I AIN0 AIN1 AIN2 AIN3

- 외부상태(입력전압)에 따른 Digital 값 변환

0 ~ 5V 0 ~ 10V
IEC667
4Ch/12Bit
(4096)
0V : 0
5V : 4095
0V : 0
10V : 4095
IEC1000
4ch/12Bit
(4096)
0V : 0
5V : 4095
0V : 0
10V : 4095

출력(DAC)

DAC는 OUTPUT(출력)으로 DAC1과 DAC2 기능으로 사용하므로 프로그램에서 DAC1과 DAC2만 사용이 가능합니다. Smart I/O-II/III에서 DAC1, DAC2를 사용하려면 DAC Block을 구매하여 장착해야만 합니다.

Smart
I/O-II
실크 명칭
DAC1
PORT B블록
DAC2
PORT B블록
Extension
Port-I
DAC1 DAC2

- 내부 Digital값에 따른 출력전압 변환

0 ~ 5V 0 ~ 10V
IEC-Series
2Ch/12Bit
(4096)
0 : 0V
4095 : 5V
0 : 0V
4095 : 10V
출력(PWM)

PWM은 OUTPUT(출력)으로 PWM1과 PWM2(기본제공) 기능으로 사용하므로 프로그램에서 PWM1과 PWM2만 사용이 가능합니다. Smart I/O-II에서 PWM1, PWM2는 보드에서 기본 제공됩니다.

Smart
I/O-II
실크 명칭
PWM1
(기본제공)
PWM2
(기본제공)
Extension
Port - I
PWM1 PWM2
고속입력(SmartInputCounter)

Smart I/O-II에서 PORT-A, PORT-B는 InputCounter(고속입력) 기능으로 사용 가능합니다.

Smart
I/O-II
BLOCK SmartI/O-II
포트이름
프로그램
위치
Channel
DIGITAL
I/O
PORT
A
PORT
A0~A7
PORT
A 0~7
8Ch
PORT
B
PORT
B0~B7
PORT
B0~7
8Ch

- 외부상태(입력)에 따른 PortData 값 변환

Direction 외부상태
(입력)
PortData 값
(True/False)
입력 High
(12~24V)
False
(0)
Low
(0V)
True
(1)
4-3. Smart I/O-III 설정 및 Test 방법

Smart I/O-III는 A0~A7, B0~B7, C0~C7, D0~D7, E0~E7, F0~F7을 전부 INPUT(입력)으로 사용하거나 전부 출력, 또는 부분 입력과 출력으로 사용이 가능합니다. 각블록 장착 가능위치는 Smart I/O-Series 제품 메뉴얼의 Smart I/O-II, III Base Board 편을 참고바랍니다.

주의Block의 구성에 따라서 입/출력 설정 등이 변경될 수 있음
Smart I/O-III 보드 장착 예시

아래 설명은 따라서 해볼 수 있는 예시로서 A0~A3(INPUT Block), A4~A7(FET Block), B0~B3(FET Block), B4~B7(DAC Block)을 사용하는 예시이며 또한 PWM(PWM1, PWM2)보드포함, ADC(ADIN0, ADIN1) 보드 포함으로 구성되어 있습니다. 실제 개발시에는 개발 환경에 맞게 재구성하여 사용바랍니다.

smartI/O - III

① PORT F0~F3, A/D(AIN 4~5) INPUT설정
② PORT F4~F7 INPUT설정
③ PORT C0~C3, PWM 1,2 PWM설정
④ PORT C4~C7 INPUT설정
⑤ PORT E0~E3 INPUT설정
⑥ PORT E4~E7 INPUT설정
⑦ PORT D0~D3, A/D(AIN 0~1) ADC설정
⑧ PORT D4~D7, A/D(AIN 2~3) ADC설정
⑨ PORT B4~B7, DAC(DAC1, DAC2) DAC설정
⑩ PORT B0~B3 OUTPUT설정
⑪ PORT A0~A3 INPUT설정
⑫ PORT A4~A7 INPUT설정

Smart I/O-III 설정

프로그램 실행은 위와 같이 셋팅 후 Set Apply → Start(시작) → Stop(중지)로 실행

Smart I/O-III 보드 장착 예시(Form2)

아래설명은 따라서 해볼 수 있는 예시로서 A0~A3(InputCounter Block), A4~A7(InputCounter Block), B0~B3(InputCounter Block), B4~B7(InputCounter Block)를 사용하는 예시입니다.

smartI/O - III

① PORT F0~F3, A/D(AIN 4~5) 사용안함
② PORT F4~F7 사용안함
③ PORT C0~C3, PWM 1,2 사용안함
④ PORT C4~C7 사용안함
⑤ PORT E0~E3 사용안함
⑥ PORT E4~E7 사용안함
⑦ PORT D0~D3, A/D(AIN 0~1) 사용안함
⑧ PORT D4~D7, A/D(AIN 2~3) 사용안함
⑨ PORT B0~B3 InputCounter설정
⑩ PORT B4~B7 InputCounter설정
⑪ PORT A0~A3 InputCounter설정
⑫ PORT A4~A7 InputCounter설정

Smart I/O-III 설정

Smart I/O-III 내부에는 Port A 8Ch, Port B 8Ch, Port C 8Ch, Port D 8Ch, Port E 8Ch, Port F 8Ch, A/D 4Ch, PWM 2Ch, DAC 2Ch로 구성되어 있습니다.


입력(INPUT). DC입력

Smart I/O-III에서 PORT-A~F는 입력(INPUT) 또는 출력(OUTPUT)으로 사용 가능합니다.

Smart I/O -
III
TYPE Smart
I/O-III
포트이름
프로그램
위치
Channel
DIGITAL
I/O
PORT
A
PORT
A0~A7
PORT
A0~7
8Ch
PORT
B
PORT
B0~B7
PORT
B0~7
8Ch
PORT
C
PORT
C0~C7
PORT
C0~7
8Ch
PORT
D
PORT
D0~D7
PORT
D0~7
8Ch
PORT
E
PORT
E0~E7
PORT
E 0~7
8Ch
PORT
F
PORT
F0~F7
PORT
F0~7
8Ch

외부상태(입력)에 따른 PortData 값 변환

Direction 외부상태
(입력)
PortData
값(High/Low)
입력 High
(12~24V)
High
(1)
Low
(0V)
Low
(0)

출력(OUTPUT)

Smart I/O-III에서 PORT-A~F는 입력(INPUT) 또는 출력(OUTPUT)으로 사용 가능합니다.

Smart
I/O-III
BLOCK Smart
I/O-III
포트이름
프로그램
위치
Channel
DIGITAL
I/O
PORT
A
PORT
A0 ~ A7
PORT
A 0~7
8Ch
PORT
B
PORT
B0 ~ B7
PORT
B 0~7
8Ch
PORT
C
PORT
C0 ~ C7
PORT
C 0~7
8Ch
PORT
D
PORT
D0 ~ D7
PORT
D 0~7
8Ch
PORT
E
PORT
E0 ~ E7
PORT
E 0~7
8Ch
PORT
F
PORT
F0 ~ F7
PORT
F 0~7
8Ch

- PortData 값에 따른 외부상태 변화

Direction PortData 값
(High/Low)
외부상태 LCD Status
출력 High ON ON
Low OFF OFF

입력(ADC)

ADC는 INPUT(입력)으로 Smart I/O-II에서 A/D 0~1(기본제공), A/D 2~3(블록장착) 기능으로 사용하므로 프로그램에서 ADC1~4까지 사용이 가능합니다. (IEC1000-Series의 경우 A/D IN 0~5(최대 6Ch)을 지원합니다.

Smart
I/O-III
실크 명칭
A/DIN0 A/DIN1 A/DIN2 A/DIN3 A/DIN4 A/DIN5
Extension
Port - II
AIN0 AIN1 AIN2 AIN3 AIN4 AIN5

- 외부상태(입력전압)에 따른 Digital 값 변환

0 ~ 5V 0 ~ 10V
IEC667
4Ch/12Bit
(4096)
0V : 0
5V : 4095
0V : 0
10V : 4095
IEC1000
4Ch/12Bit
(4096)
0V : 0
5V : 4095
0V : 0
10V : 4095

출력(DAC)

DAC는 OUTPUT(출력)으로 DAC1과 DAC2기능으로 사용하므로 프로그램에서 DAC1과 DAC2만 사용이 가능합니다. Smart I/O-II/III에서 DAC1, DAC2를 사용하려면 DAC Block을 구매하여 장착해야만 합니다.

Smart
I/O-III
실크 명칭
DAC1
PORT B블록
DAC2
PORT B블록
Extension Port - II DAC1 DAC2

- 내부 Digital값에 따른 출력전압 변환

0 ~ 5V 0 ~ 10V
IEC-Series
2Ch/12Bit
(4096)
0 : 0V
4095 : 5V
0 : 0V
4095 : 10V
출력(PWM)

PWM은 OUTPUT(출력)으로 PWM1과 PWM2 기능으로 사용하므로 프로그램에서 PWM1과 PWM2만 사용이 가능합니다. Smart I/O-III에서 PWM1, PWM2기능은 보드에서 기본 제공하지 않습니다. PWM1, PWM2 출력은 FET블록 장착을 통해 사용이 가능합니다.

Smart
I/O-III
실크 명칭
PWM1
(블록장착)
PWM2
(블록장착)
Extension
Port - II
PWM1
PORT C블록
PWM2
PORT C블록
고속입력(SmartInputCounter)

Smart I/O-III에서 PORT-A, PORT-B는 InputCounter(고속입력) 기능으로 사용 가능합니다.

Smart
I/O-II
BLOCK Smart
I/O-II
포트이름
프로그램
위치
Channel
DIGITAL
I/O
PORT
A
PORT
A0~A7
PORT
A 0~7
8Ch
PORT
B
PORT
B0~B7
PORT
B 0~7
8Ch

- 외부상태(입력)에 따른 PortData 값 변환

Direction 외부상태
(입력)
PortData 값
(True/False)
입력 High
(12~24V)
False
(0)
Low
(0V)
True
(1)

C# 예제코드

소스코드는 참고 및 학습용으로 버그 및 여러가지 문제가 있을수 있습니다.

// Form1 (SmartGPIO, SmartADC, SmartDAC, SmartPWM) 소스코드 설명
// 각 기능 동작시작(GPIO, ADC, DAC, PWM)
private void btnStart_Click(object sender, EventArgs e)
{
// SmartGPIO
// SmartGPIO 입력 신호 감지 시작)
GPIO_PortA.PortWatchStart();
GPIO_PortB.PortWatchStart();
GPIO_PortC.PortWatchStart();
GPIO_PortD.PortWatchStart();
GPIO_PortE.PortWatchStart();
GPIO_PortF.PortWatchStart();

// SmartADC
// ADC값을 읽어오는 Timer를 시작
smartTimer1.Start();

// SmartDAC
// SmartDAC를 사용하기 전 PortB6,7이 Input이었다면 이전상태 저장
if (btnPortDirB6.ButtonStatus == SmartX.SmartButton.BUTSTATUS.UP)
{
m_bPreB6Status = true;
}
if (btnPortDirB7.ButtonStatus == SmartX.SmartButton.BUTSTATUS.UP)
{
m_bPreB7Status = true;
}

// 선택된 DAC Port
if (radDAC1.Checked == true)
{
m_iDACChannel = 1;
}
else if (radDAC2.Checked == true)
{
m_iDACChannel = 2;
}

if (m_iDACChannel != 0)
{
// DAC를 사용하기 위해 Port B6, B7 방향을 OUTPUT으로 설정
GPIO_PortB.DirPin6 = SmartX.SmartGPIO.PINDIR.OUTPUT;
GPIO_PortB.DirPin7 = SmartX.SmartGPIO.PINDIR.OUTPUT;
btnPortDirB6.ButtonDown();
btnPortDirB7.ButtonDown();
}

// SmartPWM 기능
// 선택된 PWM Port
m_iPWMChannel = (radPWM1.Checked == true) ? 1 : 2;
if (m_iPWMChannel == 1)
{
smartPWM1.StartPWM1();
}
else
{
smartPWM1.StartPWM2();
}
}

//Set Apply 버튼, PORT 방향 재설정
private void btnSetApply_Click(object sender, EventArgs e)
{
int iPortDirA;
// --- 중략 ---

// PORT-A를 선택한 경우. Output : 1 or Input : 0
iPortDirA = (btnPortDirA0.ButtonStatus == SmartX.SmartButton.BUTSTATUS.DOWN) ? 1 : 0;
iPortDirA |= ((btnPortDirA1.ButtonStatus == SmartX.SmartButton.BUTSTATUS.DOWN) ? 1 : 0) << 1;
iPortDirA |= ((btnPortDirA2.ButtonStatus == SmartX.SmartButton.BUTSTATUS.DOWN) ? 1 : 0) << 2;
iPortDirA |= ((btnPortDirA3.ButtonStatus == SmartX.SmartButton.BUTSTATUS.DOWN) ? 1 : 0) << 3;
// --- 중략 ---
GPIO_PortA.PortDirs = iPortDirA;
iPortDirA = 0;
}

// Port를 Output으로 설정 후 버튼을 누르면 해당 포트의 출력 상태 변경(Low/High)
private void PortOutChange_Click(object sender, EventArgs e)
{
int iOutData = 0;
int iOutDatas = 0;

SmartX.SmartButton btn = (SmartX.SmartButton)sender;
string strSelPortPin = btn.Name.Substring(13, 1);

if (btn.ButtonText == "Low")
{
btn.ButtonText = "High";
switch (strSelPortPin)
{
case "0":
iOutData = 1;
break;
case "1":
iOutData = 2;
break;
case "2":
iOutData = 4;
break;
case "3":
iOutData = 8;
break;
// --- 중략 ---
}
}
else
{
btn.ButtonText = "Low";
switch (strSelPortPin)
{
case "0":
iOutData = 0XFE;
break;
case "1":
iOutData = 0XFD;
break;
case "2":
iOutData = 0XFB;
break;
case "3":
iOutData = 0XF7;
break;
// --- 중략 ---
}
}

string strSelPort = btn.Name.Substring(12, 1);

switch (strSelPort)
{
case "A":
if (btn.ButtonText == "Low")
{
iOutDatas = GPIO_PortA.PortDatas & iOutData;
}
else
{
iOutDatas = GPIO_PortA.PortDatas | iOutData;
}
GPIO_PortA.PortDatas = iOutDatas;
break;
// --- 중략 ---
}
}

// PORT-A 감지 이벤트 처리 함수
private void GPIO_PortA_OnPortDatasChange(int iPortDatas)
{
// PORT-A의 각 핀 방향이 INPUT일 때 iPortDatas 값에 따른 Lamp On/Off
if (btnPortDirA0.ButtonStatus == SmartX.SmartButton.BUTSTATUS.UP)
{
pbLampA0.Image = ((iPortDatas & 1) == 1) ? Properties.Resources.on_led : Properties.Resources.off_led;
}

if (btnPortDirA1.ButtonStatus == SmartX.SmartButton.BUTSTATUS.UP)
{
pbLampA1.Image = (((iPortDatas & 2) >> 1) == 1) ? Properties.Resources.on_led : Properties.Resources.off_led;
}

if (btnPortDirA2.ButtonStatus == SmartX.SmartButton.BUTSTATUS.UP)
{
pbLampA2.Image = (((iPortDatas & 4) >> 2) == 1) ? Properties.Resources.on_led : Properties.Resources.off_led;
}

if (btnPortDirA3.ButtonStatus == SmartX.SmartButton.BUTSTATUS.UP)
{
pbLampA3.Image = (((iPortDatas & 8) >> 3) == 1) ? Properties.Resources.on_led : Properties.Resources.off_led;
}
// --- 중략 ---
}

// ADC 입력 값을 확인하는 메서드
private void ADCDisplay()
{
int iChannel = 0;
int iADCData;

// 현재 선택된 아날로그 입력 채널을 확인합니다.
if (radADC1.Checked == true)
{
iChannel = 0;
}
else if (radADC2.Checked == true)
{
iChannel = 1;
}
else if (radADC3.Checked == true)
{
iChannel = 2;
}
else if (radADC4.Checked == true)
{
iChannel = 3;
}
else if (radADC5.Checked == true)
{
iChannel = 4;
}
else if (radADC6.Checked == true)
{
iChannel = 5;
}

// 선택된 채널의 A/D변환 값을 얻습니다.
iADCData = smartADC1.ReadData(iChannel);

// 레이블에 결과를 출력합니다.
labADC.Text = iADCData.ToString();
}

// DAC 선택된 채널로 현재 설정된 값으로 출력 변경
private void DACValueChange(object sender, EventArgs e)
{
if (DACChannel == 1)
{
smartDAC1.DAC_OutPut(SmartX.SmartDAC.DACOUTCHANNEL.DAC_CHANNEL1, (int)udDAC.Value);
}
else
{
smartDAC1.DAC_OutPut(SmartX.SmartDAC.DACOUTCHANNEL.DAC_CHANNEL2, (int)udDAC.Value);
}
}

// PWM Duty값 증가 버튼
private void udPWM_OnUpButtonClick(object sender, EventArgs e)
{
if (m_iPWMChannel == 1)
{
// 현재 PWM1의 Duty값을 1씩 증가 처리
m_iPwm1Duty = (m_iPwm1Duty < 100) ? ++m_iPwm1Duty : 100;
smartPWM1.DutyRate1 = m_iPwm1Duty;
udPWM.Value = m_iPwm1Duty;
}
else
{
// 현재 PWM2의 Duty값을 1씩 증가 처리
m_iPwm2Duty = (m_iPwm2Duty < 100) ? ++m_iPwm2Duty : 100;
smartPWM1.DutyRate2 = m_iPwm2Duty;
udPWM.Value = m_iPwm2Duty;
}
}

// Form2 (SmartInputCounter) 소스코드 설명
private void m_btnSet_Click(object sender, EventArgs e)
{
GPIO_PortA.PortSelect = SmartX.SmartGPIO.PORTID.PORTA;
GPIO_PortB.PortSelect = SmartX.SmartGPIO.PORTID.PORTB;

// **중요** InputCounter 블럭보다 반드시 먼저 설정해 주어야함
// A1이 Output인 경우
if (chkPortA1.Checked == true)
{
// PORT A1을 출력으로 설정
GPIO_PortA.DirPin0 = SmartX.SmartGPIO.PINDIR.OUTPUT;
GPIO_PortA.DirPin1 = SmartX.SmartGPIO.PINDIR.OUTPUT;
GPIO_PortA.DirPin2 = SmartX.SmartGPIO.PINDIR.OUTPUT;
GPIO_PortA.DirPin3 = SmartX.SmartGPIO.PINDIR.OUTPUT;
}

// --- 중략 ---
// A2가 Output인 경우
// B1이 Output인 경우
// B2가 Output인 경우
// --- 중략 ---

// A1을 InputCounter로 사용
if (chkPortA1.Checked == true)
{
smartInputCounter1.InputCounterA1.PortMode = SmartX.SmartInputCounter.PORTMODES.Used;
if (smartInputCounter1.InputCounterA1.Initialize() == true)
{
// 32Bit의 경우 최대 4,294,967,295를 표현 가능하며 64Bit의 경우 최대 1.8E308까지 표현 가능합니다.
smartInputCounter1.InputCounterA1.CounterDataWidth = SmartX.SmartInputCounter.DATAWIDTH._32BIT;
}
}
// A1을 InputCounter로 사용안함
else
{
smartInputCounter1.InputCounterA1.PortMode = SmartX.SmartInputCounter.PORTMODES.NotUsed;
m_btnA1Start.Enabled = false;
m_btnA1Stop.Enabled = false;
}
// --- 중략 ---
// A2를 InputCounter로 사용
// A2을 InputCounter로 사용안함
// B1을 InputCounter로 사용
// B1을 InputCounter로 사용안함
// B2를 InputCounter로 사용
// B2를 InputCounter로 사용안함
// --- 중략 ---
}

// A1 PIN1 Start/Stop
private void btnPortA1Button_Click(object sender, EventArgs e)
{
if (chkPortA1.Checked == true)
{
if (sender == btnPortA1_Start)
{
smartInputCounter1.InputCounterA1.RunCounterPin1();
}
else
{
smartInputCounter1.InputCounterA1.PauseCounterPin1();
}
}
}

// Input Counter의 Count 값, Status 값, Output의 On/Off 출력
private void smartTimer1_Tick(object sender, EventArgs e)
{
// A1의 PIN1 InputCounter 처리
try
{
if (chkPortA1.Checked == true)
{
labPortA1.Text = smartInputCounter1.InputCounterA1.CounterPin1.ToString();
}
}
catch (SmartX.SmartInputCounter.CheckSumErrorException)
{
labPortA1.Text = "Data Error";
labPortA1.Text = "0";
}

// --- 중략 ---
// A2의 PIN1 InputCounter 처리
// B1의 PIN1 InputCounter 처리
// B2의 PIN1 InputCounter 처리
// --- 중략 ---
}

// FORM1 SHOW
private void btnShowForm1_Click(object sender, EventArgs e)
{
// SmartInputCounter Pause
smartInputCounter1.InputCounterA1.PauseCounterPin1();
smartInputCounter1.InputCounterA2.PauseCounterPin1();
smartInputCounter1.InputCounterB1.PauseCounterPin1();
smartInputCounter1.InputCounterB2.PauseCounterPin1();

// CheckBox 초기화
chkPortA1.Checked = false;
chkPortA2.Checked = false;
chkPortB1.Checked = false;
chkPortB2.Checked = false;

smartForm1.Show(0);
}

VB.NET 예제코드

소스코드는 참고 및 학습용으로 버그 및 여러가지 문제가 있을수 있습니다.

' Form1 (SmartGPIO, SmartADC, SmartDAC, SmartPWM) 소스코드 설명
' 각 기능 동작시작(GPIO, ADC, DAC, PWM)
Private Sub btnStart_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnStart.Click
' SmartGPIO
' SmartGPIO 입력 신호 감지 시작)
GPIO_PortA.PortWatchStart()
GPIO_PortB.PortWatchStart()
GPIO_PortC.PortWatchStart()
GPIO_PortD.PortWatchStart()
GPIO_PortE.PortWatchStart()
GPIO_PortF.PortWatchStart()

' SmartADC
' ADC값을 읽어오는 Timer를 시작
smartTimer1.Start()

' SmartDAC
' SmartDAC를 사용하기 전 PortB6,7이 Input이었다면 이전상태 저장
If btnPortDirB6.ButtonStatus = SmartX.SmartButton.BUTSTATUS.UP Then
m_bPreB6Status = True
End If

If btnPortDirB7.ButtonStatus = SmartX.SmartButton.BUTSTATUS.UP Then
m_bPreB7Status = True
End If

' 선택된 DAC Port
If radDAC1.Checked = True Then
m_iDACChannel = 1
ElseIf radDAC2.Checked = True Then
m_iDACChannel = 2
End If

If m_iDACChannel <> 0 Then
' DAC를 사용하기 위해 Port B6, B7 방향을 OUTPUT으로 설정
GPIO_PortB.DirPin6 = SmartX.SmartGPIO.PINDIR.OUTPUT
GPIO_PortB.DirPin7 = SmartX.SmartGPIO.PINDIR.OUTPUT
btnPortDirB6.ButtonDown()
btnPortDirB7.ButtonDown()
End If

' SmartPWM 기능
' 선택된 PWM Port
m_iPWMChannel = If((radPWM1.Checked = True), 1, 2)

If m_iPWMChannel = 1 Then
smartPWM1.StartPWM1()
Else
smartPWM1.StartPWM2()
End If
End Sub

'Set Apply 버튼, PORT 방향 재설정
Private Sub btnSetApply_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSetApply.Click
Dim iPortDirA As Integer
' --- 중략 ---

' PORT-A를 선택한 경우. Output : 1 or Input : 0
iPortDirA = If((btnPortDirA0.ButtonStatus = SmartX.SmartButton.BUTSTATUS.DOWN), 1, 0)
iPortDirA = iPortDirA Or (If((btnPortDirA1.ButtonStatus = SmartX.SmartButton.BUTSTATUS.DOWN), 1, 0)) << 1
iPortDirA = iPortDirA Or (If((btnPortDirA2.ButtonStatus = SmartX.SmartButton.BUTSTATUS.DOWN), 1, 0)) << 2
iPortDirA = iPortDirA Or (If((btnPortDirA3.ButtonStatus = SmartX.SmartButton.BUTSTATUS.DOWN), 1, 0)) << 3
' --- 중략 ---
GPIO_PortA.PortDirs = iPortDirA
iPortDirA = 0
End Sub

' PORT를 Output으로 설정후 버튼을 누르면 해당 포트의 출력상태 변경(Low/High)
Private Sub PortOutChange_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnOutStatusF7.Click
Dim iOutData As Integer = 0
Dim iOutDatas As Integer = 0

Dim btn As SmartX.SmartButton = DirectCast(sender, SmartX.SmartButton)
Dim strSelPortPin As String = btn.Name.Substring(13, 1)

If btn.ButtonText = "Low" Then
btn.ButtonText = "High"
Select Case strSelPortPin
Case "0"
iOutData = 1
Case "1"
iOutData = 2
Case "2"
iOutData = 4
Case "3"
iOutData = 8
' --- 중략 ---
End Select
Else
btn.ButtonText = "Low"
Select Case strSelPortPin
Case "0"
iOutData = &HFE
Case "1"
iOutData = &HFD
Case "2"
iOutData = &HFB
Case "3"
iOutData = &HF7
' --- 중략 ---
End Select
End If

Dim strSelPort As String = btn.Name.Substring(12, 1)

Select Case strSelPort
Case "A"
If btn.ButtonText = "Low" Then
iOutDatas = GPIO_PortA.PortDatas And iOutData
Else
iOutDatas = GPIO_PortA.PortDatas Or iOutData
End If

GPIO_PortA.PortDatas = iOutDatas
End Select
End Sub

' PORT-A 감지 이벤트 처리 함수
Private Sub GPIO_PortA_OnPortDatasChange(ByVal sender As Object, ByVal e As EventArgs) Handles GPIO_PortA.OnPortDatasChange
' PORT-A의 각 핀 방향이 INPUT일 때 iPortDatas 값에 따른 Lamp On/Off
If btnPortDirA0.ButtonStatus = SmartX.SmartButton.BUTSTATUS.UP Then
pbLampA0.Image = If(((iPortDatas And 1) = 1), My.Resources.on_led, My.Resources.off_led)
End If

If btnPortDirA1.ButtonStatus = SmartX.SmartButton.BUTSTATUS.UP Then
pbLampA1.Image = If((((iPortDatas And 2) >> 1) = 1), My.Resources.on_led, My.Resources.off_led)
End If

If btnPortDirA2.ButtonStatus = SmartX.SmartButton.BUTSTATUS.UP Then
pbLampA2.Image = If((((iPortDatas And 4) >> 2) = 1), My.Resources.on_led, My.Resources.off_led)
End If

If btnPortDirA3.ButtonStatus = SmartX.SmartButton.BUTSTATUS.UP Then
pbLampA3.Image = If((((iPortDatas And 8) >> 3) = 1), My.Resources.on_led, My.Resources.off_led)
End If
' --- 중략 ---
End Sub

' ADC 입력 값을 확인하는 메서드
Private Sub ADCDisplay()
Dim iChannel As Integer = 0
Dim iADCData As Integer

' 현재 선택된 아날로그 입력 채널을 확인합니다.
If radADC1.Checked = True Then
iChannel = 0
ElseIf radADC2.Checked = True Then
iChannel = 1
ElseIf radADC3.Checked = True Then
iChannel = 2
ElseIf radADC4.Checked = True Then
iChannel = 3
ElseIf radADC5.Checked = True Then
iChannel = 4
ElseIf radADC6.Checked = True Then
iChannel = 5
End If

' 선택된 채널의 A/D변환 값을 얻습니다.
iADCData = SmartADC1.ReadData(iChannel)

' 레이블에 결과를 출력합니다.
ADLab.Text = iADCData.ToString()
End Sub

' DAC 선택된 채널로 현재 설정된 값으로 출력 변경(증가)
Private Sub udPWM_OnUpButtonClick(ByVal sender As Object, ByVal e As EventArgs) Handles udPWM.OnUpButtonClick
If DACChannel = 1 Then
SmartDAC1.DAC_Output(SmartX.SmartDAC.DACOUTCHANNEL.DAC_CHANNEL1, CInt(udDAC.Value))
Else
smartDAC1.DAC_OutPut(SmartX.SmartDAC.DACOUTCHANNEL.DAC_CHANNEL2, CInt(udDAC.Value))
End If
End Sub
' --- 중략 ---

' PWM Duty값 증가 버튼
Private Sub udPWM_OnUpButtonClick(ByVal sender As Object, ByVal e As EventArgs) Handles udPWM.OnUpButtonClick
If m_iPWMChannel = 1 Then
' 현재 PWM1의 Duty값을 1씩 증가 처리
m_iPwm1Duty = If((m_iPwm1Duty < 100), System.Threading.Interlocked.Increment(m_iPwm1Duty), 100)
SmartPWM1.DutyRate1 = m_iPwm1Duty
udPWM.Value = m_iPwm1Duty
Else
' 현재 PWM2의 Duty값을 1씩 증가 처리
m_iPwm2Duty = If((m_iPwm2Duty < 100), System.Threading.Interlocked.Increment(m_iPwm2Duty), 100)
SmartPWM1.DutyRate2 = m_iPwm2Duty
udPWM.Value = m_iPwm2Duty
End If
End Sub

' Form2 (SmartInputCounter) 소스코드 설명
Private Sub m_btnSet_Click(ByVal sender As Object, ByVal e As EventArgs)
GPIO_PortA.PortSelect = SmartX.SmartGPIO.PORTID.PORTA
GPIO_PortB.PortSelect = SmartX.SmartGPIO.PORTID.PORTB

' **중요** InputCounter 블럭보다 반드시 먼저 설정해 주어야함
' A1이 Output인 경우
If chkPortA1.Checked = True Then
' PORT A1을 출력으로 설정
GPIO_PortA.DirPin0 = SmartX.SmartGPIO.PINDIR.OUTPUT
GPIO_PortA.DirPin1 = SmartX.SmartGPIO.PINDIR.OUTPUT
GPIO_PortA.DirPin2 = SmartX.SmartGPIO.PINDIR.OUTPUT
GPIO_PortA.DirPin3 = SmartX.SmartGPIO.PINDIR.OUTPUT
End If

' --- 중략 ---
' A2가 Output인 경우
' B1이 Output인 경우
' B2가 Output인 경우
' --- 중략 ---

If chkPortA1.Checked = True Then
' A1을 InputCounter로 사용
smartInputCounter1.InputCounterA1.PortMode = SmartX.SmartInputCounter.PORTMODES.Used

If smartInputCounter1.InputCounterA1.Initialize() = True Then
' 32Bit의 경우 최대 4,294,967,295를 표현 가능하며 64Bit의 경우 최대 1.8E308까지 표현 가능합니다.
smartInputCounter1.InputCounterA1.CounterDataWidth = SmartX.SmartInputCounter.DATAWIDTH._32BIT
End If
Else
' A1을 InputCounter로 사용안함
smartInputCounter1.InputCounterA1.PortMode = SmartX.SmartInputCounter.PORTMODES.NotUsed
m_btnA1Start.Enabled = False
m_btnA1Stop.Enabled = False
End If
' --- 중략 ---
' A2를 InputCounter로 사용
' A2을 InputCounter로 사용안함
' B1을 InputCounter로 사용
' B1을 InputCounter로 사용안함
' B2를 InputCounter로 사용
' B2를 InputCounter로 사용안함
' --- 중략 ---
End Sub

' A1 PIN1 Start/Stop
Private Sub btnPortA1Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnPortA1_Stop.Click, btnPortA1_Start.Click
If chkPortA1.Checked = True Then
If sender Is btnPortA1_Start Then
SmartInputCounter1.InputCounterA1.RunCounterPin1()
Else
SmartInputCounter1.InputCounterA1.PauseCounterPin1()
End If
End If
End Sub

' Input Counter의 Count 값, Status 값, Output의 On/Off 출력
Private Sub SmartTimer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles SmartTimer1.Tick
' A1의 PIN1 InputCounter 처리
Try
If chkPortA1.Checked = True Then
labPortA1.Text = SmartInputCounter1.InputCounterA1.CounterPin1.ToString()
End If

Catch __unusedCheckSumErrorException1__ As SmartX.SmartInputCounter.CheckSumErrorException
labPortA1.Text = "Data Error"
labPortA1.Text = "0"
End Try

' --- 중략 ---
' A2의 PIN1 InputCounter 처리
' B1의 PIN1 InputCounter 처리
' B2의 PIN1 InputCounter 처리
' --- 중략 ---
End Sub

' FORM1 SHOW
Private Sub btnShowForm1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnShowForm1.Click
' SmartInputCounter Pause
SmartInputCounter1.InputCounterA1.PauseCounterPin1()
SmartInputCounter1.InputCounterA2.PauseCounterPin1()
SmartInputCounter1.InputCounterB1.PauseCounterPin1()
SmartInputCounter1.InputCounterB2.PauseCounterPin1()

' CheckBox 초기화
chkPortA1.Checked = False
chkPortA2.Checked = False
chkPortB1.Checked = False
chkPortB2.Checked = False

SmartForm1.Show(0)
End Sub

맨 위로
팝업닫기

(주)에이치앤에스('http://hnsts.co.kr/'이하 '(주)에이치앤에스 웹사이트')는 개인정보보호법에 따라 이용자의 개인정보 보호 및 권익을 보호하고 개인정보와 관련한 이용자의 고충을 원활하게 처리할 수 있도록 다음과 같은 처리방침을 두고 있습니다.

(주)에이치앤에스 웹사이트는 개인정보처리방침을 개정하는 경우 웹사이트 공지사항(또는 개별공지)을 통하여 공지할 것입니다.

○ 본 방침은 2011년 4월 1일부터 시행됩니다.

1. 개인정보의 처리 목적 (주)에이치앤에스 웹사이트는 개인정보를 다음의 목적을 위해 처리합니다. 처리한 개인정보는 다음의 목적 이외의 용도로는
사용되지 않으며 이용 목적이 변경될 시에는 사전동의를 구할 예정 입니다.
가. 민원사무 처리
민원인의 신원 확인, 민원사항 확인, 사실조사를 위한 연락 · 통지, 처리결과 통보 등을 목적으로 개인정보를 처리합니다.
2. 개인정보 파일 현황
1. 개인정보 파일명 : 고객의 소리
  • - 개인정보 항목 : 이메일, 휴대전화번호, 자택전화번호, 이름, 서비스 이용 기록, 접속 로그, 쿠키, 접속 IP 정보
  • - 수집방법 : 웹사이트
  • - 보유근거 : 이용자 동의
  • - 보유기간 : 3년
3. 개인정보의 제3자 제공에 관한 사항
① (주)에이치앤에스 웹사이트는 원칙적으로 이용자의 개인정보를 제1조에서 명시한 목적 범위 내에서 처리하며, 본래의 범위를 초과하여 처리하거나 제3자에게 제공하지 않습니다.
다만, 다음의 경우에는 개인정보를 제3자에게 제공할 수 있습니다.
  • – 이용자가 사전에 제3자 제공 및 공개에 동의한 경우
  • – 법령 등에 의해 제공이 요구되는 경우
  • – 서비스의 제공에 관한 계약의 이행을 위하여 필요한 개인정보로서 경제적/기술적인 사유로 통상의 동의를 받는 것이 현저히 곤란한 경우
  • – 개인을 식별하기에 특정할 수 없는 상태로 가공하여 이용하는 경우
4. 정보주체의 권리,의무 및 그 행사방법 이용자는 개인정보주체로서 다음과 같은 권리를 행사할 수 있습니다.
① 정보주체는 (주)에이치앤에스 웹사이트에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다.
  • 1. 개인정보 열람요구
  • 2. 오류 등이 있을 경우 정정 요구
  • 3. 삭제요구
  • 4. 처리정지 요구
② 제1항에 따른 권리 행사는 (주)에이치앤에스 웹사이트에 대해 개인정보 보호법 시행규칙 별지 제8호 서식에 따라 서면, 전자우편, 모사전송(FAX) 등을 통하여 하실 수 있으며 (주)에이치앤에스 웹사이트는
이에 대해 지체 없이 조치하겠습니다.
③ 정보주체가 개인정보의 오류 등에 대한 정정 또는 삭제를 요구한 경우에는 (주)에이치앤에스 웹사이트는 정정 또는 삭제를 완료할 때까지 당해 개인정보를 이용하거나 제공하지 않습니다.
④ 제1항에 따른 권리 행사는 정보주체의 법정대리인이나 위임을 받은 자 등 대리인을 통하여 하실 수 있습니다. 이 경우 개인정보 보호법 시행규칙 별지 제11호 서식에 따른 위임장을
제출하셔야 합니다.
5. 제3자에게의 개인정보 제공
① (주)에이치앤에스 웹사이트는 다음의 개인정보 항목을 처리하고 있습니다.
<민원사무 처리>
– 필수항목 : 이름, 휴대전화번호, 자택전화번호, 이메일, 서비스 이용 기록, 접속로그, 쿠키, 접속IP 정보
6. 개인정보의 파기
(주)에이치앤에스 웹사이트는 원칙적으로 개인정보 처리목적이 달성된 경우에는 지체없이 해당 개인정보를 파기합니다. 파기의 절차, 기한 및 방법은 다음과 같습니다.
  • –파기절차 이용자가 입력한 정보는 목적 달성 후 별도의 DB에 옮겨져(종이의 경우 별도의 서류) 내부 방침 및 기타 관련 법령에 따라 일정기간 저장된 후 혹은 즉시 파기됩니다. 이 때, DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 다른 목적으로 이용되지 않습니다.-파기기한이용자의 개인정보는 개인정보의 보유기간이 경과된 경우에는 보유기간의 종료일로부터 5일 이내에, 개인정보의 처리 목적 달성, 해당 서비스의 폐지, 사업의 종료 등 그 개인정보가 불필요하게 되었을 때에는 개인정보의 처리가 불필요한 것으로 인정되는 날로부터 5일 이내에 그 개인정보를 파기합니다.
  • –파기방법 전자적 파일 형태의 정보는 기록을 재생할 수 없는 기술적 방법을 사용합니다. 종이에 출력된 개인정보는 분쇄기로 분쇄하거나 소각을 통하여 파기합니다.
7. 개인정보의 안전성 확보 조치
(주)에이치앤에스 웹사이트는 개인정보보호법 제29조에 따라 다음과 같이 안전성 확보에 필요한 기술적/관리적 및 물리적 조치를 하고 있습니다.
1. 정기적인 자체 감사 실시
개인정보 취급 관련 안정성 확보를 위해 정기적(분기 1회)으로 자체 감사를 실시하고 있습니다.
2. 개인정보 취급 직원의 최소화 및 교육
개인정보를 취급하는 직원을 지정하고 담당자에 한정시켜 최소화 하여 개인정보를 관리하는 대책을 시행하고 있습니다.
3. 내부관리계획의 수립 및 시행
개인정보의 안전한 처리를 위하여 내부관리계획을 수립하고 시행하고 있습니다.
4. 해킹 등에 대비한 기술적 대책
(주)에이치앤에스 웹사이트는 해킹이나 컴퓨터 바이러스 등에 의한 개인정보 유출 및 훼손을 막기 위하여 보안프로그램을 설치하고 주기적인 갱신·점검을 하며 외부로부터 접근이 통제된 구역에
시스템을 설치하고 기술적/물리적으로 감시 및 차단하고 있습니다.
5. 개인정보의 암호화
이용자의 개인정보는 비밀번호는 암호화 되어 저장 및 관리되고 있어, 본인만이 알 수 있으며 중요한 데이터는 파일 및 전송 데이터를 암호화 하거나 파일 잠금 기능을 사용하는 등의
별도 보안기능을 사용하고 있습니다.
6. 접속기록의 보관 및 위변조 방지
개인정보처리시스템에 접속한 기록을 최소 6개월 이상 보관, 관리하고 있으며, 접속 기록이 위변조 및 도난, 분실되지 않도록 보안기능 사용하고 있습니다.
7. 개인정보에 대한 접근 제한
개인정보를 처리하는 데이터베이스시스템에 대한 접근권한의 부여,변경,말소를 통하여 개인정보에 대한 접근통제를 위하여 필요한 조치를 하고 있으며 침입차단시스템을 이용하여
외부로부터의 무단 접근을 통제하고 있습니다.
8. 문서보안을 위한 잠금장치 사용
개인정보가 포함된 서류, 보조저장매체 등을 잠금장치가 있는 안전한 장소에 보관하고 있습니다.
9. 비인가자에 대한 출입 통제
개인정보를 보관하고 있는 물리적 보관 장소를 별도로 두고 이에 대해 출입통제 절차를 수립, 운영하고 있습니다.
8. 개인정보 보호책임자 작성
① (주)에이치앤에스 웹사이트는 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를
지정하고 있습니다.
▶ 개인정보 보호책임자
성명 : 김진효
소속 : (주)에이치앤에스
전화번호 : 02-6402-8001
이메일 : hns@hnsts.co.kr
② 정보주체께서는 (주)에이치앤에스 웹사이트의 서비스(또는 사업)을 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및
담당부서로 문의하실 수 있습니다. (주)에이치앤에스 웹사이트는 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다.
9. 개인정보침해 구제방법
정보주체는 개인정보침해로부터 구제받고자 하는 경우 다음과 같은 기관에 도움을 요청할 수 있습니다.
▶ 개인정보 침해신고센터 (한국인터넷진흥원 운영)
– 소관업무 : 개인정보 침해사실 신고, 상담 신청
– 홈페이지 : privacy.kisa.or.kr
– 전화 : (국번없이) 118
– 주소 : (138-950) 서울시 송파구 중대로 135 한국인터넷진흥원 개인정보침해신고센터
▶ 개인정보 분쟁조정위원회 (한국인터넷진흥원 운영)
– 홈페이지 : privacy.kisa.or.kr
– 전화 : (국번없이) 118
– 주소 : (138-950) 서울시 송파구 중대로 135 한국인터넷진흥원 개인정보침해신고센터
10. 개인정보 처리방침 변경
① 이 개인정보처리방침은 시행일로부터 적용되며, 법령 및 방침에 따른 변경내용의 추가, 삭제 및 정정이 있는 경우에는 변경사항의 시행 7일 전부터 공지사항을 통하여 고지할
것입니다.
팝업닫기

본 웹사이트에 게시된 이메일 주소가 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단으로 수집되는 것을 거부하며, 이를 위반시 정보통신망법에 의해 형사처벌됨을 유념하시기 바랍니다.

게시일 : 2011.4.1