피노타이핑 XYZ-스테이지 PLC 구동 프로그램 설명서

최초작성일: 2021년 9월15일 (작성자: 진창호)

마지막수정일: 2021년 9월 16일 (작성자: 진창호)


1. 프로그램 개요

1.1. 프로그램의 목적

본 프로그램의 목적은 XYZ-스테이지의 이동, 정지를 비롯하여 일련의 명령을 자동화하여 수행하는 데에 있습니다. 파이썬3 환경에서 명령어를 호출하여 이용할 수 있도록 API (Application Programming Interface; 어플리케이션 프로그래밍 인터페이스) 라이브러리로 작성하여, 독립적으로 외부 프로그램으로 실행하지 않고 일반적인 파이썬 응용프로그램과 작성 시에도 손쉽게 코드를 삽입하여 이용할 수 있습니다.

1.2. 구동환경

  • Linux OS (Ubuntu 20.04 LTS 버전에서 테스트 완료)
  • Python 3.6 이상
  • 파이썬 라이브러리
    • pyserial
    • datetime

Ubuntu 20.04 LTS에서 다음 명령어를 입력함으로써 소프트웨어 및 의존성 라이브러리를 설치할 수 있습니다.

#레퍼지토리 갱신
sudo apt update
#파이썬3 설치
sudo apt install python3 python3-pip -y
#파이썬 라이브러리 설치
sudo pip3 install datetime
sudo pip3 install pyserial

2.사용방법

2.1. 설치

사용자의 작업디렉토리(Current working directory)에 API 디렉토리를 생성하고, kistxyz.py 파일을 API 디렉토리에 복사하여 넣습니다.

2.2. API (Application Programming Interface)

파이썬 라이브러리로 작성된 API는 활용하기 이전에 반드시 import하여야합니다. 작업디렉토리에서 파이썬3 쉘을 실행하여 다음 명령어로 import 할 수 있습니다.

from API import kistxyz

kistxyz 라이브러리를 import 한 뒤 수행할 수 있는 명령어는 다음과 같습니다.

conn_open()

XYZ스테이지 하드웨어와 통신연결을 수립합니다. 다른 모든 명령을 수행하기 전에 한 번 실행해주어야하는 명령입니다.

conn_close()

XYZ스테이지 하드웨어와 통신연결을 종료합니다. 본 명령 수행 후, conn_open() 명령으로 통신연결을 재수립하기 전까지 다른 명령어를 활용할 수 없습니다.

pos()

반환값[X],[Y],[Z] – int,int,int
[X],[Y],[Z]는 각각 헤드의 X축, Y축, Z축의 좌표값을 나타냄

XYZ스테이지에 위치한 헤드의 위치를 반환합니다.

stop()

반환값“success” – string
“fail” – string

XYZ스테이지에 위치한 헤드의 이동을 멈춥니다. 정상적으로 명령이 수행되었을 경우에는 “success“를, 그렇지 않은 경우에는 “fail” 값을 반환합니다.

move([X],[Y],[Z])

매개변수[X] – int
[Y] – int
[Z] – int
반환값“success” – string
“fail” – string

XYZ스테이지에 위치한 헤드를 지정한 X축, Y축, Z축 좌표로 이동시킵니다. 매개변수로 아무값도 입력하지 않으면 (0,0,0) 좌표로 이동합니다. 정상적으로 명령이 수행되었을 경우에는 “success“를, 그렇지 않은 경우에는 “fail” 값을 반환합니다.

automate([csvfile_path])

매개변수[csvfile_path] – “string
[csvfile_path]는 자동화 정보가 입력된 csv 파일의 경로를 의미

자동으로 실행할 작업 스케줄이 입력된 csv 파일의 경로를 입력하여, 작업을 자동으로 수행합니다. csv 파일의 서식은 “2.3.자동화” 단락에서 설명합니다.

2.3. 자동화

kistxyz 라이브러리의 automate 함수는 매개변수로 입력받은 [csvfile_path]-지정한 경로에 있는 csv 파일에 작성된 정보대로 자동화 작업을 수행합니다. csv파일의 작성규칙은 다음과 같습니다.

  • csv파일은 RFC4180 표준에 따라 작성된 형식으로 작성함을 원칙으로 한다.
  • csv파일은 N행 6열로 작성되어야 하며, 여기서 N은 자연수이다. 각 행은 6열로 이루어져 있으며, 각 열의 정보는 다음과 같다.
제1열제2열제3열제4열제5열제6열
순번X좌표Y좌표Z좌표이동 전
수행명령
이동 후
수행명령
  • 제1열의 순번은 숫자, 혹은 문자 중 한가지 형태로 입력해야하며, 하나의 csv파일에 숫자와 문자가 섞인 순번이 존재할 경우 오류가 발생할 수 있다.
  • 제1열의 순번 앞에 “#” 기호를 삽입하면, 해당 행의 내용은 무시하고 다음 순번 명령을 진행한다.

csv 파일의 예시는 다음과 같습니다.

#No Index#X#Y#Z#Start function#End function
150245-60import os, time
print(“Work Start”)
time.sleep(3)
os.system(“python3 picture.py 1”)
2356245-60os.system(“python3 picture.py 2”)
#3662245-60os.system(“python3 picture.py 3”)
4969245-60os.system(“python3 picture.py 4”)
51275245-60os.system(“python3 picture.py 5”)
print(“Work Done!”)
위의 CSV파일의 첫번째 행은 순번 앞에 “#”기호를 추가함으로서 자동화 작업은 무시하게되며, 파일을 작성하는 이용자가 참고할만한 테이블 헤더로써의 기능을 수행한다.

2.4. 사용예시

예시1.

원점에서 출발한 헤드가 세군데 지점을 거쳐 다시 원점으로 돌아오는 코드.

from API import kistxyz
kistxyz.conn_open() #connection start
kistxyz.move() #매개변수를 지정하지 않으면, (0,0,0)으로 이동
kistxyz.move(500,0,-60)
kistxyz.move(500,500,-60)
kistxyz.move(0,500,-60)
kistxyz.conn_close() #connection close

예시2.

position_test.csv 파일에 작성된 자동화 순서대로 명령을 수행하는 코드.

from API import kistxyz

kistxyz.conn_open() #connection start
kistxyz.automate("position_test.csv")
kistxyz.conn_close() #connection close

3. 기타사항

하드웨어 정보

XYZ 랙타워 내 피씨에 연결된 RS232 시리얼과 PLC가 통신.

시리얼 접속정보

  • baudrate: 19200
  • Data 8bit
  • stop 1bit
  • parity None
  • ASCII/ASCII (send/recv)