Advanced programming techniques
다른 테크닉...

본 장에서는 ISaGRAF Workbench와 타겟 시스템에 대한 보다  상세한 정보를 해설합니다. 본 장을 읽기 전에 ISaGRAF의 기본적인 지식을 준비해 둘 필요가 있습니다.

ISaGRAF 도구에 관한 상세 정보

잠금 I/O 와 가상I/O의 차이

통신 Link 설정(Workbench타겟) 동작 확인

ISaGRAF 디렉토리 구성

어플리케이션 심벌 파일(APPLI.TST)

ISaGRAF (WDL) Workbench무제한판의 제한


More about ISaGRAF tools
ISaGRAF 도구에 관한 상세 정보

ISaGRAF 편집기도구를 사용하고 있을 때 마우스 오른쪽 버튼을 클릭하면PopUp 메뉴를 열 수 있습니다.

PopUp 메뉴는 커서의 현재 위치에서 열기 위해 마우스 작동을 최소한 멈출 수 있게 하는데 효과가 있습니다.

ISaGRAF Workbench의 각 창은 처음은 기본 좌표에서 열리지만, 한번 창 사이즈와 장소를

설정해서 창을 닫으면, 이 정보들이 보관되기 위해서 다음 창을 닫을 때는 앞의 종료한

상태로 열수 있습니다.

ISaGRAF Workbench 편집기에서는, 다른 소스 파일의 편집은 동시에 창을 여는 일을 병행해서

작업을 진행할 수 있습니다. 단, 동일 소스 파일을 2개이상 열 수는 없습니다.

또한, 모든 프로젝트 내에서 도구바 공백 영역을 마우스로 더블클릭하면, 도구 바 명령어 아이콘 전체

해설을 위해 PopUp이 열립니다. 또한, 마우스 커서가 도구 바 명령어 아이콘 위에 있을 때는 명령어

텍스트 표시가 가능합니다.


Locked I/Os and virtual I/Os
잠금 I/O 와 가상I/O 의 차이

I/O접속 편집기로 I/O 보드를 가상보드에 설정하는 것으로, 물리I/O채널 처리를 하지 않게 됩니다.

I/O보드가 가상과 정의되어 있어도 ISaGRAF 타겟 에서의 처리에 변화는 없습니다. I/O 보드가

실제 보드에 설정되어 있을 때와의 차이는 입력 장치로 읽어 넣기가 되지 않는 것, 출력 장치로

적어 넣기가 되지 않는 것 뿐 입니다. 입력변수의 값 변경은 ISaGRAF 디버거를 사용하는 것에 따라

가상설정은 보드 단위로 하게 됩니다. (각각의 I/O변수에 대해서는 불가능합니다)

또한, 가상보드의 설정은 I/O 접속 편집기로  정의한 후에 어플리케이션을 생성할 필요가 있습니다. 가상보드의 설정(속성설정)은 Static이고 어플리케이션 코드에 포함되기 때문에 어플리케이션이 시작할 때에 가상설정에서 시작 합니다.

이것과는 달리 I/O변수를 잠금 하면 물리I/O와 분리하는 것도 가능합니다. I/O변수의 잠금/잠금해제

는ISaGRAF 디버거에서 명령어로 합니다. 변수의 잠금은 다이나믹한 조작이고, 어플리케이션 코드에는

보존되지 않습니다. 변수의 잠금조작은 한번에 하나의 변수에 대해서 가능합니다.

이하에서는 테이블에 가상보드 설정, I/O변수의 잠금에 대해 정리합니다.

가상I/O보드	I/O변수 잠금

설정 도구	I/O접속 편집기	디버거

정의	Static	다이나믹

선택모드	보드 단위	변수 단위

적용 예	검증, 테스트	유지

아래의 그림에서 ISaGRAF에서의 I/O데이터 프로를 나타냅니다.

입력변수가 잠금 되어 있을 때는 입력장치로 여러가지 억세스에 변경은 없지만, 장치와 입력장치는 잠금 되어 （분리되어）있습니다. 입력장치에서는 디버거가 데이터 적어 넣기를 하고, ISaGRAF Runtime Kernel에 따라 통상대로 처리됩니다

출력 변수 잠금되어 있을 때, Runtime Kernel과 출력장치 사이는 잠금 되어 （분리되어）있습니다. 이 경우는 출력장치를 통해서 출력장치에서의 억세스는 디버거에 따라 가능합니다.

가상입력보드의 설정은  입력 장치와 사이가 분리되게 합니다. 가상I/O 드라이브는 실제I/O

드라이브를 대신해서 사용  됩니다.

출력 보드  가상의 설정은 입력보드 가상의 설정과 같은 모양으로 출력장치와 출력장치의 사이가 분리됩니다. Kernel은 출력장치를 변경시킵니다. 가상I/O드라이브가 실제 I/O 드라이브를 대신해서 사용  됩니다.

모든 편성을 아래 그림에 나타냅니다.


PC-PLC link validation
통신 Link설정(Workbench타겟) 동작 확인

디버거 창의 상태 설정 이 차단상태 가 되어 있는 경우는 대개 Workbench와 타겟 간의 통신에러가

나는 일이 많습니다. 뭔가 구체적인 프로그램 타겟 상에서의 동작 확인하기 전에 반드시 타겟 에서의 실

행중인 어플리케이션이 없는 상태에서 Workbench와 타겟 사이에 통신이 정상인가를 확인해 둘 필요가 있

습니다.

이 경우는 디버거 메시지가 어플리케이션이 없습니다 가 됩니다. 변환함수와 C언어 함수에서

사용자 프로그램으로 C언어가 사용된 경우는 사용자프로그램이 타겟 시스템에 직접 억세스하면 타겟 시스템 에러가 되는 일도 생각할 수 있습니다. ISaGRAF I/O개발 도구kit에서 I/O드라이브를 C언어로 기술할 경우,

예를 들면 보드설정 어드바이스를 틀리게 한 것도 포함됩니다.

아래 표에 디버거 메시지에서 판단할 수 있는 현상의 원인 예를 간단히 나타냅니다.

Status	모드	원인（예）
"차단상태" (다운로드 전)		- 타겟 시스템이 올라가 있지 않음. - 통신 케이블이 없고 정상이 아님. - 통신 설정 데이터    에러  - 타겟이 정상으로 인스톨 되어 있지 않음.
"차단상태" (다운로드 후)	사이클모드 작동모드	- I/O구성 에러 - 타겟 시스템이 정상이 아님
	Real time 모드 작동모드	- I/O구성 에러 - 타겟 시스템이 정상이       아님   (Ｃ프로그램 에러)
"어플리케이션이 없습니다."		- 어플리케이션이 되어 있지 않음. - "어플리케이션이 RUN하고 있지 않음  (Ｃ프로그램 에러) - Intel/Motorola 의TIC코드 불량 - 타겟 어플리케이션  번호(no) 불일치


ISaGRAF directories
ISaGRAF 디렉토리 구성

ISaGRAF Workbench는 특정 디스크 디렉토리 구성의 근본으로 동작합니다. 루트 디렉토리명은 Workbench

인스톨시에 설정가능 합니다. 기본에서는 "Isawin" 디렉토리가 됩니다. 이하에서는 Workbench가 만드는 표

준 디스크 디렉토리 구성을 나타냅니다.

다음은 ISaGRAF 서브 디렉토리에 대해 설명 합니다

디렉토리	내용
APL	ISaGRAF 프로젝트를 위한 루트 디렉토리명 프로젝트는 대응한 하나의 디렉토리를 가집니다. 이하의 서버 디렉토리에는 프로젝트에 필요한 데이터를 모두 포함하고 있습니다.
	기타 프로젝트 loop를 작성하고, 다른 디렉토리에 프로젝트 디렉토리를 작성하는 것도 가능합니다. Installer는 샘플 어플리케이션이 들어 있던 SMP라는 디렉토리를 작성합니다.
COM	공통 데이터 프로젝트간에 공통으로 다루는 데이터
EXE	ISaGRAF 프로그램과 도움말 파일
LIB	ISaGRAF 라이브러리 데이터 - 라이브러리element - 각 element에 대한 파라미터와Interface - 기술 메모
LIB\IOC	I/O 구성 소스 코드
LIB\FNC	ＩＥＣ언어로 기술 된 Function 소스 코드
LIB\FBL	ＩＥＣ 언어로 기술 된 FunctionB잠금 소스 코드
LIB\SRC	변환 함수 Ｃ언어 Function 소스 코드
LIB\DEFS	변환 함수 Ｃ언어 Function 헤드파일
LIB\RELS	변환 함수 Ｃ언어 Function 오브젝트 코드
LIB\DEV	Ｃ언어 라이브러리를 작성하기 위한 명령어 파일 （ "C" libraries, makefiles, link lists_.）
TMP	Temporary파일 ISaGRAF 코드 Generation Temporary파일 을 보존하기 위한 영역으로 삭제할 수 없습니다.
이 서브디렉토리들은 다른 디스크 (또는 서버 디렉토리)로 이동할 수 있습니다. 만약, 표준 이외의 디스크 디렉토리를 구성할 경우는 서버 디렉토리의 패스명은 EXE 서버 디렉토리내의 ISA.ini파일인 WS001섹션에 기술해야만 합니다.

이하에서는 테이블에 WS001섹션 엔트리 포인트를 나타냅니다.

Isa	ISaGRAF Workbeanch 루트 디렉토리명
IsaExe	ISaGRAF 프로그램과 도움말 파일용 루트 디렉토리명
IsaApl	ISaGRAF 프로젝트용 루트 디렉토리명
IsaTmp	Temporary파일용의 디렉토리명
IsaSrc	라이브러리소스 코드용의 디렉토리명
IsaDefs	라이브러리소스 헤드용 디렉토리명
주의:	만약, IsaTmp 디렉토리를 다른 디렉토리에 변경할 경우는 반드시 서버 디렉토리 OBJS,  RELS,  DATA를 아래에 작성할 필요가 있습니다. 이하에 WS001섹션을 변경한 custom 디렉토리 구성의 경우의 설정 예를 나타냅니다.

;file c:\ISAWIN\EXE\ISA.ini

[WS001]

Isa=c:\isawin

IsaExe=c:\isawin\exe

IsaApl=c:\isawin\apl

IsaTmp=c:\isawin\tmp

IsaSrc=c:\isawin\lib\src

IsaDefs=c:\isawin\lib\defs

C언어 Function과 FunctionBlock잠금을 추가할 경우는 \ISAWIN\LIB\DEV 디렉토리에 명령어 파일, MAKE파일

등을 보존할 수 있습니다. 또한, \ISAWIN\LIB\RELS 디렉토리에는 C  컴파일러로 만들어진 오브젝트와 link에 필요한 C 라이브러리를 보존할 수 있습니다.


Application symbols
어플리케이션 심벌 파일 (APPLI.TST)

ISaGRAF 어플리케이션의 각 오브젝트는 이름(변수명)과 가상주소(코드 생성시에 계산 됨)에 따라

참조됩니다. 여기서 가상주소와 변수 선언시에 입력수 네트워크 주소와는 다릅니다.

virture주소는 I/O드라이브 개발 kit을 포함한 C언어 어플리케이션에서 억세스할 때 드에 사용됩니다.

ISaGRAF코드 생성시에 프로젝트를 구성하고 있는 프로젝트명(변수, 프로그램명, 스텝명)과 가상주소와의 관계가 하나의 하나의 _ ASCII파일에 보존됩니다. 이 파일에는 user어플리케이션이 ISaGRAF 시작 데이터를 억세스하기 위한 정보가 포함되어 있습니다. 이 파일명은 "APPLI.TST"로

"\ISAWIN\APL\proname" (proname은 프로젝트명)디렉토리에 포함되어 있습니다. 이하에 "APPLI.TST" 기술

포맷에 대해 나타냅니다.

주된 용어로 이하의 3개가 있습니다.

VA	가상address

ATTR	attribute of a variable

USP	"C" function

변수 속성으로서는 이하의 4가지가 있습니다. 이들은 "변수 속성" 파일에 적혀 있습니다.

+X	internal variable

+C	read-only internal variable

+I	input variable

+O	output variable

가상주소 이외의 모든 번호는 10진수로 표현됩니다. 가상주소(VA)는 "!"가 선두로 16진

4행으로 표현됩니다.

예를 들면,

123	10진수

!A003	16진수 가상주소

"APPLI.TST" 파일 구성은 이하에 표시합니다. 파일은 복수 블록에서 이루어집니다. 블록은 복수 레코드에서 이루어집니다. 각 코드는 １행의 텍스트로 기술됩니다. 각 블록은 １행의 헤드에서 개시됩니다

Start b잠금

description b잠금

end b잠금

아래에서 한 Block의 예를 나타냅니다:

@ <b잠금_name> <arguments>

#record...

#record...

...

start b잠금에는 어플리케이션 기본 정보가 포함되어 있습니다. 아래에 그 예를 나타냅니다.

@ISA_SYMBOLS,<appli_crc>

#NAME,<appli_name>,<version>

#DATE,<creation_date>

#SIZE,G=<nbprg>,S=<nbstep>,T=<nbtra>,L=0,P=<nbpro>,V=<nbvar>

#COMMENT,cj international

여기에서 <  > 내의 약칭은 아래와 같습니다.

appli_crc	어플리케이션 심벌 CheckSum

appli_name	어플리케이션 이름

version	ISaGRAF workbench 버젼

creation_date	application 작성일자

nbprg	프로그램수

nbstep	SFC 수

nbtra	SFC transitions수

nbpro	"C" functions수

nbvar	모든 변수의 수

end b잠금에는 파일 마지막의 의미가 포함되어 있습니다. 아래와 같습니다.

@END_SYMBOLS

description b잠금에는 어플리케이션 프로그램 기술이 포함되어 있습니다. 이하에서 그 예를 나타냅니다

@PROGRAMS,<nbprg>

#<va>,<name>

#...

nbprg	이 블록에 정의되어 있는 프로그램 수

va	프로그램 Virture주소

name	프로그램명

SFC스텝을 기술하는 블록을 아래에서 나타냅니다. SFC이외의 프로그램에는 가상적인 스텝이 정의 되어

있습니다.

@STEPS,<nbsteps>

#<va>,<name>,<father>

#...

nbsteps	이 블록에 포함되어 있는 스텝 수

va	스텝의 가상 주소

name	스텝명

father  Father프로그램 가상 주소

SFC transition을 기술하는 블록을 아래에서 나타냅니다.

@TRANSITIONS,<nbtrans>

#<va>,<name>,<father>

#...

nbtrans	이 블록에 포함되는transition수

va	transition 가상 주소

name	transition명

father	Father프로그램 가상 주소

Boolean형 변수를 기술하는 블록을 아래에서 나타냅니다.

@BOOLEANS,<nb_boo>

#<va>,<name>,<attr>,<program>,<eq_false>,<eq_true>

#...

변수의 수가 4095을 넘은 경우는

X#(1.<varno>),<name>,<attr>,<program>,<eq_false>,<eq_true>

nb_boo	이 블록에 포함되는 변수의 수

va	변수의 가상주소

varno	Boolean형 변수 내에서의 주소

name	변수명

attr	변수속성

program	Father프로그램 가상주소

또는 "!0000" (글로벌 변수 때)

eq_false	FALSE시의 문자열

eq_true	TRUE시의 문자열

정/실수형 변수를 기술하는 블록을 아래에서 나타냅니다.

@ANALOGS,<nb_ana>

#<va>,<name>,<attr>,<program>,<format>,<unit>

#...

변수의 수가4095을 넘은 경우는

X#(2.<varno>),<name>,<attr>,<program>,<eq_false>,<eq_true>

nb_ana	이 블록에 포함되는 변수의 수

va	변수의 가상주소

varno	정.실수형 정수에서의 주소

name	변수명

attr	변수 속성

program	Father프로그램의 가상주소

또는 "!0000" (글로벌 변수 때)

format	= "I" (정수형 변수)

= "F" (실수형 변수)

unit	단위를 나타내는 문자

타임형 변수를 기술하는 블록을 아래에서 나타냅니다.

@TIMERS,<nb_tmr>

#<va>,<name>,<attr>,<program>

#...

변수의 수가4095을 넘을 경우는

X#(3.<varno>),<name>,<attr>,<program>,<eq_false>,<eq_true>

nb_tmr	이 블록에 포함되는 변수의 수

va	변수의 가상주소

varno	타임형 변수 내에서의 주소

name	변수명

attr	변수 속성 (항상 +X: 내부변수)

program	Father프로그램의 가상주소

또는 "!0000"（글로벌 변수 때）

문자열형 변수를 기술하는 블록을 아래에서 나타냅니다.

@MESSAGES,<nb_msg>

#<va>,<name>,<attr>,<program>,< max_len>

#...

변수의 수가4095을 넘은 경우는

X#(4.<varno>),<name>,<attr>,<program>,<eq_false>,<eq_true>

nb_msg	이 블록에 포함되는 변수의 수

va	변수의 가상주소

varno	 문자열형 변수 내에서의 주소

name	변수명

attr	변수속성

program	Father프로그램의 가상주소

또는 "!0000"  (글로벌 변수 때)

lg_max	메시지 최대 길이

C언어 Function을 기술하는 블록을 아래에서 나타냅니다.

@USP,<nb_usp>

#<va>,<name>

#...

nb_usp	이 블록에 포함되는 C언어 Function의 수

va	C언어 Function의 가상주소

name	C언어 Function명

C언어 FunctionBlock잠금을 기술하는 블록을 아래에서 나타냅니다.

@FBINSTANCES,<nb_fb>

#<va>,<inst_name>,<fb_name>

#...

nb_fb	C언어 FunctionBlock잠금 instance의 수

va	C언어 FunctionBlock잠금 instance의  가상주소

inst_name	C언어 FunctionBlock잠금 instance명

fb_name	C언어 FunctionBlock잠금 타입


Limits of ISaGRAF "LARGE" (WDL) workbench
ISaGRAF (WDL) workbench I/O 무제한판의 제한

ISaGRAF workbench (I/O무제한판)에 의한 제한을 이하의 표에서 나타냅니다. 물론 이외에 workbench에 사

용 하고 있는 컴퓨터 메모리, 하드디스크 등의 제한, 타겟 시스템에서의 메모리, 리소스 등의 제한도 있습

니다.

프로젝트:

오브젝트	최대값	메모
프로그램	255
계층레벨 수	20
프로젝트 수는 사용중인 컴퓨터 하드 디스크 용량에만 제한을 받습니다.

오브젝트 이름:

오브젝트 명	최대값	메모
프로젝트	8 char
프로그램	8 char
변수	16 char	명령어에 대해 다시 플러스 60 characters
정의 워드	16 char
정의 워드의 내용	255char	명령어에 대해 다시 플러스 60 characters
변환 테이블	16 char
변수 리스트	16 char
FunctionＦＢ （Library）	8 char	Ｃ언어 Function ＦＢ,ＩＥＣ언어 Function ＦＢ
Function파라미터 （Library）	16 char	Ｃ 언어 Function, ＦＢ, ＩＥＣ 언어 Function, ＦＢ
I/O보드	8 char
I/O구성	8 char
ＯＥＭ파라미터	16 char
변환 함수	8 char
편집(하나의 프로그램 내에서):

오브젝트	최대값	메모
ＳＦＣ행	600
ＳＦＣ열	20
ＳＦＣ스텝	4095	하나의 프로젝트 전체에서（마이크로 스텝, INI스텝, end스텝을 포함）
ＳＦＣ transition	4095	하나의 프로젝트 전체에서
ＬＤ／ＦＢＤ편집기	200 열 2000 행	셀 편집 영역.
Quick LD편집기	－	ＰＣ의 제한에 따릅니다.
ＩＬ라벨	251	동일ＩＬ프로그램내
텍스트	40KB	하나의 프로그램내의 텍스트 합계가 40KB이내（Win95의 경우24KB）
모음걁하나의 프로젝트 내에서값:

오브젝트	최대r값	메모
Boolean형변수	65535
정수·실수형 변수	65535	정수형과 실수형의 합계
타임형 변수	65535
문자열 형 변수	65535
정의워드	4095	동일 범위（local, 글로벌）
정의 워드	255	하나의 프로그램내
변환 테이블	127	하나의 프로젝트내
테이블내의 포인트	32	하나의 변환 테이블내

이상의 최대값은 각 속성（내부, 입력, 출력, 정수）의 합계를 나타냅니다. 또한 내부 temporary와 컴파일러가 자동적으로 생성하는 것도 포함합니다. 모음 편집기로 한번에 편집 가능한 변수는 각 변수 타입, 스코프마다 16000개를 넘을 수 없습니다. PC메모리의 용량에 따라 16000이하가 되는 경우도 있습니다. 변수의 수가4095을 넘는 어플리케이션의 경우는, V2.21이전 버전의 타겟 에서는 실행할 수 없습니다. 또한, 네트워크 주소를 사용한 표준MODBUS통신은 4095을 넘는 변수에서는 불가능합니다.

I/O접속 편집기:

오브젝트	최대값	메모
I/O보드	256	하나의 프로젝트내（보드 또는 장치 기기의 합계）
I/O채널	128	동일 보드

I/O보드의 수, 장치기기의 아이템은 256을 넘을 수 없습니다.

Library:

오브젝트	최대값	메모
ＩＥＣ언어 Function	255	Library에 등록 가능 최대 값
ＩＥＣ언어 ＦＢ	255	Library에 등록 가능 최대 값
Ｃ언어 Function	255	Library에 등록 가능 최대 값
Ｃ언어 ＦＢ	255	Library에 등록 가능 최대 값
Ｃ언어 ＦＢinstance	4095	하나의 프로젝트내의 동일 타입의 ＦＢ에 대해
Function입력 파라미터	31	Ｃ언어 Function,ＩＥＣ언어 Function
함수 파라미터 총수	32	적어도 하나의 출력 파라미터 이외는 입출력 할당은 자유
변환 함수	128	라이브러리에 등록 가능 최대 값
I/O구성	255	라이브러리에 등록 가능 최대 값
I/O보드	255	라이브러리에 등록 가능 최대 값
I/O장치 기기	255	라이브러리에 등록 가능 최대 값
I/O보드 OEM 파라미터	16