Shelve

     작업하던 소스를 적용하지 않고, 잠시 다른 작업을 해야 할 때 백업을 해주는 기능 ( 1.10.1.28295 version 부터 지원 )


SVN SHELVE 1.pngSVN SHELVE 2.png



SVN SHELVE 3.pngSVN SHELVE 4.png



Unshelve

    Shelve 했던 부분을 다시 불러오게 할 때 사용하는 명령어


SVN UNSHELVE 1.pngSVN UNSHELVE 2.png



SVN UNSHELVE 3.png

되돌리기


revert : 로컬에서 작업을 하다가 문제가 되어 원상 복귀를 하고싶을 때 사용


SVN REVERT 1.png


SVN REVERT 2.png



추가하기


  폴더 또는 파일 등을 추가 할 때 사용


브라우저에서 바로 추가 : local에 추가된 파일을 svn server에 드래그 앤 드롭 후 업데이트 명령 실행


SVN ADD DRAG 1.PNGSVN ADD DRAG 2.PNG



add -> commit 하기 : locap에 파일 추가후 commit 명령 실행


SVN ADD 2.png

SVN ADD 1.png



SVN ADD 3.png



변경사항 적용


commit : 본인이 작업한 소스를 서버에 적용 할 때 사용


 SVN COMMIT 1.png

SVN COMMIT 2.png






update : 다른 개발자가 SVN 서버에 commit한 소스를 local에 적용 할 때 사용


SVN UPDATE 1.png


SVN UPDATE 2.png







update to revision : 사용자가 지정한 버전으로 업데이트


SVN UPDATE TO REVISION 1.png



SVN UPDATE TO REVISION 2.png

SVN UPDATE TO REVISION 3.png






내려받기[편집]


  • checkout : 소스코드 공동 작업을위해 최초로 내려 받을 경우에 사용, export와는 달리 버전관리 정보가 저장된 [ .svn ] 폴더를 포함하여 소스를 받아 옴,
    SVN CHECKOUT 1.png 
 SVN CHECKOUT 2.png
SVN CHECKOUT 3.png
  • export : 주로 배포용으로 사용, 버전관리를 위한 부속 파일들이 제외된 순수 소스만 받아 옴


  SVN EXPORT 1.png
SVN EXPORT 2.png
SVN EXPORT 3.png



* 공통부분

사용자가 이전 버전의 소스를 필요로 할 경우 해당 리비전 내려받기 가능


    SVN CHK+EXPORT.png




SVN이란?

SVN은 SubVersion의 줄임말로 형상관리/소스 관리 툴이다
하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와주는 툴


형상관리란? (Software Configuration Management)

개발 및 유지보수 과정에서 발생하는 소스코드, 문서, 인터페이스 등 각종 결과물에 대해 형상을 만들고, 이들 형상에 대한 변경을 체계적으로 관리, 제어하기 위한 활동

SVN의 사용목적 정리

SVN의 사용목적은 아래와 같습니다. 각 사용목적의 순서가 중요도를 의미하지는 않습니다.

  1. 항상 배포 가능한 제품 소스를 유지
  2. 작업 내용과 변경된 소스의 연관성 유지
  3. 다수의 개발자가 각자 작업한 내용을 통합하여 최신 형상을 유지 관리
  4. 공통된 소스를 공유함으로써 중복개발 문제하고, 최신 형상의 모호성을 해결
  5. 예전 버전의 파일 복원
  6. 수정한 부분의 검증 (코드 리뷰 기능)

SVN의 용어 정리

  • Revision: 수정 후 Commit을 하면 숫자가 증가 / 저장소에 저장된 파일 버전을 의미
  • Repository: 프로젝트 파일 및 변경 정보가 저장되는 장소
  • Import: 빈 Repository에 맨 처음 파일들을 채우는 것
  • Export: 버전 관리 파일들을 뺀 순수 파일만 빼내는 것
  • Checkout: 저장소에서 최신 버전의 소스코드를 최초로 받아오는 것 / Repository에서 프로젝트 관련 파일들을 받아온다
  • Update: 로컬 저장소에 있는 파일들을 저장소의 최신 버전으로 받아 오기
  • Commit: 로컬 저장소의 변경된 내용을 서버로 전송 / Checkout한 파일의 수정사항을 갱신
  • Revert: 로컬 저장소의 내용을 이전 상태로 돌림
  • Add: 버전관리 대상으로 파일 등록
  • Shelve : 로컬 작업 내용을 잠시 백업하는것
  • Trunk: 개발 소스를 commit 했을 때 개발 소스가 모이는 곳 / 프로젝트에서 가장 중심이 되는 디렉토리, 소스와 파일 포함
  • Branch: trunk에서 분리/복사한 소스로 버전별 배포판을 만들거나 trunk와 별도로 운영환경을 위한 안정화된 소스 관리 목적으로 사용
  • Tag: 특정 시점의 상태 보존 목적으로 사용 장기적으로 1.0, 1.1 등 버전 별로 소스 코드를 따로 저장 특정 시점에서 프로젝트의 스냅샷을 찍어두는 것
  • Merge: 내가 작업한 부분과 다른 사람이 작업한 부분을 병합 한다.





함수의 정의


함수는 여러개의 문장을 하나로 묶어 주는 역할을 하며, 직접 구현을 하거나, 이미 정의되어 있는 함수를 사용 할 수 있다.

반복적으로 사용 할 수있고, 함수 내부에 다른 함수를 호출 할 수도 있다.


함수를 선언하는 방법은 다음과 같다.


def <함수명>(매개변수1, 2, ... N ):

     <구문>

     return <반환값>


예제 )

def test (a, b ):

c = a + b

return c


위와 같이 test라는 함수를 내가 정의를 한다면, 이제 test라는 함수가 생성되고, 다른 함수 내에서 test를 사용 할 수 있게 된다.

test(20,10)을 입력하면 30이 반환된다. 





스코핑룰


먼저 코드를 통해서 예를 들어 보자.


value = 1000  --- ( 1 )


def example():

   value = 200  --- ( 2 )


다음 (2)와 같이 example이라는 함수 내에서 value라는 값에 200을 대입하면 (1)의 값이 200으로 바뀔까? 

아니면 example이라는 함수 내에서 200이라는 값으로 초기화된 value가 생길까??? 


파이썬에서는 스코핑룰에 대해 모르고 변수에 대해 접근을 한다면 생각치 못한 결과를 가져 올 수 있다.


위의 예제에서는 전역함수에서의 value와 함수 내의 지역변수 value 2가지의 value가 생성되었다고 생각하면 된다. 파이썬 내에서는

변수를 지역, 전역, 내장의 순서로 검색을 한다. 그렇다면 만약 example 함수 내의 지역에서 value라는 값을 접근하고 싶다면 어떻게 하면 될까?


value = 1000

def example():
global value
value = 200

example()
c = value
print(c)

위와 같이 global 키워드를 통해 value를 선언하여 주면 전역변수 value를 사용하겠다고 선언하는 것과 같다. 위의 예제를 실행하면

value의 값은 200이 출력이 된다.





람다함수


람다함수는 이름이 없는 함수이다. 즉 다른 함수들 처럼 이름을 통해 호출 하는 것이 아닌 필요로 하는 위치에서 몸체만 정의하여 사용 하는 것이다.


lambda 인자 : < 구문 >


- 람다함수 내에서는 return 구문을 따로 적지 않지만, 하나의 반환 값을 돌려준다. 

- 여러 개의 인자를 일반함수와 동일하게 전달 받을 수 있다.


예제 ) 

x = 3
y = 3

value = (lambda _x, _y : _x * _y) (x,y)
print(value)
출력결과 = 9



pass


함수 지역 내에 아무런 동작도 취하지 않고 넘어 가겠다고 선언하는 키워드


예제)

def test():
pass

test()

출력결과 = 




이터레이터


리스트, 튜플 등 순회 가능한 객체의 각 요소를 순서대로 접근 할 수 있도록 해주는 객체


예제)


l = [1, 2, 3, 4, 5, 6]

for ele in l:
print(ele)


출력결과 :  1

               2 

               3

               4

               5

               6


원리는 다음과 같다. for문 내에서 이터레이터 객체를 가져오고, 이터레이터 내의 __next__() 함수를 실행한다. 그 다음 for문은 StopIteration 예외를 만날때까지 __next__() 함수를 수행한다. 이렇게하여 첫번째 요소부터 마지막 요소까지 순회를 할 수 있다.

__next__()는 내장함수인 next()를 통해서도 사용가능하다.


name = "jaehoon"

it = iter(name)

s = next(it)
print(s)

s = next(it)
print(s)

s = next(it)
print(s)
print ( it.__next__())
print ( it.__next__())


출력결과 :

첫번째 print :  j

두번째 print : a

세번째 print : e

네번째 print : h

다섯번쨰 print : o

   




제너레이터


이터레이터를 만들어주는 도구로서 함수의 반환을 return 대신 yield를 사용한다.


예제)


#1
def returnName():
name = "jaehoon"
for c in name:
yield c

result = iter( returnName() )

print( result.__next__() )
print( result.__next__() )
print( result.__next__() )
print( result.__next__() )
print( result.__next__() )

#2
for c in returnName():
print(c)



#1의 경우 yield가 아닌 return 이였을 경우 j만 반환되고 Stopoperation 예외가 반환이 된다. return을 통해서 해당 함수를 종료하였기 때문이다.

하지만 yield이기 때문에 함수가 최근 호출되었던 정보 상태로 유지가 되기 때문에 

#1의 출력결과는 


첫번째 print :  j

두번째 print : a

세번째 print : e

네번째 print : h

다섯번쨰 print : o 




#2번의 경우 


첫번째 print :  j

두번째 print : a

세번째 print : e

네번째 print : h

다섯번쨰 print : o 

여섯번쨰 print : o 

일곱번쨰 print : n


로 앞서 배웠던 이터레이터 객체를 사용하는 것과 같은 결과가 나온다.





모터 세팅 과정


금일 모터 튜닝 진행과정은 다음과 같다.



1 Panasonic setting Program 실행

2. 모터 드라이버에 USB 연결

3. 앰프 접속

4. 매개변수 실행

5. A5 매개 변수 일람 클릭

6. 시운전

7. 게인 조정

8. EZ Motion Agent 실





먼저 파나소닉 모터 튜닝 프로그램을 실행하면 다음과 같은 창이 보인다.

이후 USB를 통해 PC와 파나소닉 드라이버를 연결한다.






그다음 앰프 접속을 클릭하여 [ 앰프 접속을 선택 ] 창을 띄운다.


# Linear Type motor의 경우 더블클릭 하여 시리즈 선택 창을 띄운다음에 MINAS-A5L LINEAR를 클릭하여 준다.

 그 외의 타입은 그냥 따로 선택 없이 확인을 누르면 된다.






이렇게 되면 USB로 연결한 해당 모터 드라이버를 세팅 할 수 있는 준비가 끝났다. 그 다음으로는 화면 상단의 [ 매개변수 ] 를 눌러 아래와 같은 창을 띄운다.





그 다음 아래의 콤보박스를 눌러 매개변수 일람을 누른다. 

분류 0 기본을 누른다.

다음으로  세 항목에 대하여 변경을 하고 반드시 Enter를 한번 누른다. ( 엔터를 누르지 않으면 값이 바뀌지 않는.... ) 


005 지령 펄스 입력 선택

008 모터 1회전당 지령 펄스 수

011 모터 1회전당 출력 펄스 수


이 세 항목에 대해서만 변경하고 나머지는 EZ Motion Agent를 통해 변경 한다.


지령 펄스 입력 선택 

: 모션 제어기로부터 위치 지령 펄스 명령을 받아들일것 인지에 대한 유무로 0은 false 1은 true를 나타내는 것으로 보인다. 1을 입력하고 enter를 누른다.


모터 1회전당 지령 펄스 수

지령단위=0.001[mm]. 5리드 기준, 5 / 0.001 = 5000

    리드는 너트가 스크류 1회전당 이동하는 직선 거리이며, 볼 스크류의 일반적인 규격



모터 1회전당 출력 펄스 수

5000 / 4체배 = 1250


이렇게 되면 모든 값을 넣었다. 그다음 저장을 해야 한다. 흰 바탕의 항목은 EEP -> 송신을 누르면 된다.

노랑 바탕의 경우는 리셋후 무효라고 표시가 되어있는데. 해당 값을 변경하였을때 서보 전원을 반드시 껏다 켜야 적용이 된다.


이제 해당 창을 닫고 시운전을 눌러 시운전에 대한 동작 범위 설정을 진행 하면된다.

시운전을 누르면 다음 이미지와 같은 화면이 나온다.



보호기능설정 부분을 보자!

2nd over - speed level

과중부하 레벨

모터 가동 범위 설정에 대한 항목이 있다. 


2nd over - speed level은 0

과중부하 레벨은 0

모터 가동 범위 설정은 10으로 값을 변경 하여 주면된다.


변경하기 전에 먼저 서버오프 혹은 ESC키를 누르고 자동설정 체크박스를 비활성화 해줘야 값을 변경 할 수 있다.


시운전 설정의


JOG 속도는 100,200 부터 시작하여 조금씩 늘려 나간다.

JOG 가감속 시간은 150부터 조금씩 늘려 나간다.


해당 값을 넣고 서보 온을 누른 후 JOG 운전을 통해 모터의 동작을 확인 한다.


그다음 [ 시운전으로 ] 버튼을 이용하고 해당 모터의 구간을 정하여 이동을 확인한다.


※ 모터 펄스 값의 초기화는 서보오프 키를 누르면 0으로 set된다. 



자 이제 관성비 추정을 위해 게인 조정으로 넘어 가보자!


[ 게인 조정 ] 메뉴를 누른다! 그럼 아래와 같은 창이 활성화 된다.



모드 선택은 Z축 모터가 아닌 경우에 1:표준으로 Z축 모터의 경우에는 3: 수직축으로 모드를 변경 해준다. 


여기서 중요한것은 관성비 추정후에 저장을 할 때에는 모드를 무효로 변경후 저장한다. 그렇지 않으면 계속 관성비 추정이 진행 되기 때문... 또한 반드시 시운전창이 꺼져있어야 진행이 가능하다.


강성 설정은 10부터 1단계씩 올리는 것이 좋다. 기타 -> 주파수 특성을 통해서 해당 그래프와 비교해가면서 적당한 강성 값으로 저장을 하면 된다. 














※ Z축 모터의 경우 서보오프시 기본적으로 브레이크가 걸리는 경우가 있다. 모니터 창을 통해서

   서보가 오프되어도 브레이크가 걸리지 않도록 설정 할 수 있다.







+ Recent posts