Using the code generator
 코드 생성기 사용법

코드 생성기는 각종ISaGRAF  Workbench 윈도우 「만들기 」또는「검증」명령어를 선택하면 어플리케이션 생성 윈도우가 자동으로 열립니다. 코드가 생성된 후 이 윈도우는 자동으로 닫히지 않습니다. 그 사이에 user는 코드만들기 메뉴에 억세스할 수 있습니다.

명령어

Compiler 선택

C 소스 코드 만들기

정보 보기

리소스 정의


Main commands
명령어

「파일」메뉴에는 프로그램의 문법체크와 어플리케이션의 코드생성을 위해 명령어가 포함되어 있습니다.

만들기(TIC)

프로그램 문법 검사

시뮬레이션


Make application code
만들기(TIC)

 파일 - 만들기 명령어에 따라 어플리케이션 코드(중간코드, TIC 코드 )를 생성합니다. 프로젝트 코드 생성 전에는 프로그램과 모음의 문법을 체크(검증) 합니다. 다음에 수치변환 테이블 처리후,I/O접속의 처리, 또한 라이브러리 와 매칭을 합니다. 도중에 에러가 발생한 경우는, 에러를 수정하지 않는 한 다음 스텝으로 나아가지 않습니다.

이미 검증이 에러 없이 행해지고 있고, 그 후 프로그램 수정과 모음수정이 되지않는 경우에는 검증 스텝은 생략됩니다. 변수설정 및 프로그램 copy lent체크는 매회 됩니다. 만들기 명령어 실행중에 처리를 중단하고 싶은 경우는 ESC키를 사용합니다.

주의：	프로그램 local변수가 변경된 경우는 그 프로그램이 검증 됩니다. 전역 변수가 변경된 경우는 모든 프로그램이 검증 됩니다.


Program syntax checking
프로그램 문법 검사

파일 - 만들기  명령어로 프로젝트의 모든 모음설정내용 문법이 체크됩니다.

「파일」－「검증」명령어로 프로젝트 내의 모든 프로그램이 검증 됩니다. 예를 들면, 마지막 수정시에 변경을 가하지 않는 경우에도 모든 프로그램이 검증 됩니다.　 이 검증은 에러가 발생해도 도중에 중지 되지 않습니다.　모든 프로그램으로 검증하지 않는 에러리스트를 작성할 수 있습니다. 단, 검증을 중단할 경우에는 ＥＳＣ키를 사용합니다.


Simulating a modification
시뮬레이션

파일 - Touch 명령어로 다음의 만들기 실행시에 모든 프로그램이 검증 되도록 유사한 모든 프로그램의 수정을 더하게 됩니다. 파일 - 열기 명령어로 마지막에 검증 되어 있던 프로그램을 엽니다.

에러 발생시에는 에러 메시지를 더블클릭하면, 에러 프로그램을 열어, 에러 장소까지 커서를 이동시킵니다.


Compiler options
컴파일러 선택

「옵션」－「 컴파일러 선택」명령어로 어플리케이션 코드생성시에 타겟 코드를 최적화 하기 위한 parameter설정이 가능합니다. 생성된 타겟 코드 타입의 선택, 최적화 parameter설정이  있습니다.

타겟 선택

SFC processing

최적화


Selecting targets
타겟 선택

다이아로그 박스 상부 리스트는 타겟코드 종류를 나타냅니다.

"V"마크는 선택된 타겟코드를 표시합니다.(영문 WindowNT 해당, 한글 WindowsNT에선 않 나타남)

 ISaGRAF코드generate는 한번 compiler로 최대 3종류의 코드생성이 가능합니다. 선택 - 선택해제 버튼으로 생성하고 싶은 타겟코드를 선택합니다. 이하에서 표준으로 선택가능한 타겟코드를 나타냅니다.

SIMULATE:	이 코드는 workbench상에서 ISaGRAF시뮤레이션 전용코드 입니다. 시뮤레이션 전에 선택된 시뮤레이션용 코드를 생성해 둘 필요가 있습니다.

ISA86M:	이 코드는 Intel베이스 CPU프로세스 상에서 실행되는 Target용 TIC(Target Independent Code)코드입니다. 프로세스 타입은 바이트 나열만을 고려하고 있습니다.

ISA68M:	이 코드는 Motorola베이스 CPU프로세스 상에서 실행되는 Target용 TIC(Target Independent Code)코드입니다. 프로세스 타입은 바이트 나열만을 고려하고 있습니다.

SCC:	이 코드를 선택하면 ISaGRAF compiler는 프로젝트의 프로그램마다 구조화(소스코드를 생성하고) appli.c, appli.h과 개별 프로그램의xxx.c, xxx.h파일걂, Target의 라이브러리와 compiler/링 하면, compiler모드인 ISaGRAF Target 실행 모듈의 생성이 가능합니다. 구조화C와는 보기 쉬운 형식으로 기술된 C소스입니다. [IL언어에는 사용할 수 없습니다]

CC86M:	이 코드를 선택하면 ISaGRAF compiler는 프로젝트로 한 개의 C소스코드를 생성합니다. (appli.c와appli.h파일). 이 compile파일을 Target라이브러리와 compile/링하면, compile모드인 ISaGRAF Target 실행 모듈의 생성이 가능합니다. 이 기능은 구조화 C소스코드  생성기능이 support되지 않았던 ISaGRF V3.23보다 전의 버전과의 호환성 때문에 남아 있습니다. CC86M은 SCC와 다르고, 전체면 쓰기의 C소스 코드가 됩니다.

단, compile 하기 위해서 필요한 Target라이브러리는 I/O개발kit : 옵션이 포함되어 있습니다.

주의：	ＩＬ언어 프로그램에 관해서는 ＳＣＣ로 Ｃ소스가 생성되지 않기 때문에 ＣＣ８６Ｍ을 사용해 주세요.


SFC processing

“embedded ＳＦＣ engine 사용”인 체크 박스를 체크 하면 ISaGRAF Target에 ＳＦＣ엔진을 짜서넣는 것을 전제로 어플리케이션 코드를 생성합니다. 보통때는 이 체크박스를 ＯＮ해 둡니다. Target실행시 퍼포먼스가 높기 때문입니다. 그러나 ISaGRAF Target으로 ＳＦＣ엔진을 내장하지 않는 것이 있습니다. 이 경우에는 이 체크박스를 ＯＦＦ함에 따라 ＳＦＣ프로그램 기술이 모두 low level언어에 번역됩니다. 이러한 코드는 customized  ISaGRAF Target에서 필요로 하는 경우가 있습니다.


Optimizer options
최적화

Target 코드의 최적화를 위해 ISaGRAF코드generation를 다루는 parameter는 컴파일러 선택 명령어로 선택 가능합니다. 디폴트에서는 compile에서는 시간의 단축화을 위해모든 최적화 옵션은 풀어 놓고 있습니다.

“ 2optimizer passes 실행 ” 코드 최적화를 ２회 행합니다. 단, 、통상 ２회째 최적화는 １회째만큼 중요한 의미를 가지지 않습니다.

“evaluate constant expressions" 정수표현 평가 은 정수표현이 compiler에 따라 처리 됩니다. 예를 들면, ２＋３은 ５로 Target에서는 바꿔 놓습니다. 만약 옵션이 set되어 있지 않는 경우는 런타임 중에 ２＋３을 계산합니다.

“미 사용 라벨 압축”  프로그램 중의 미 사용 점프라벨, 라벨을 무시합니다.

“변수복사 최적화” 중간결과 등을 store할 temporary적인 변수를 최적화합니다.“표현의 최적화”옵션과 함께 set됩니다. 예를 들면, 프로그램중에 ２회 이상 사용된 Expression 결과 등을 재 이용합니다.

“미 사용 코드의 압축” 무의미한 코드를 없앱니다. 예를 들면, ＳＴ프로그램 중에서 "var := 1; var := X;"　가 있어 재생되는 코드는 "var := X;"만 됩니다.

“산술연산의 최적화” 산술연산을 최적화합니다. 예를 들면, 연산식　"A + 0" 는 "A"　로 바꿔놓게 됩니다. 같은 형식으로“논리치 연산의 최적화” 옵션은 논리치연산을 최적화합니다. 예를 들면,  "A & A"　는 "A"　로 바꿔놓게 됩니다.

“Binary Decision Diagram작성” 논리식（AND, OR , XOR , NOT 연산자의 편성)을 조건달기 점프로 바꿔 놓습니다. 단, 점프 전의 sequence 처리가 원래 처리보다 짧을 경우에만 적용됩니다.

이하 테이블에 최적화 옵션, 각각의 옵션에 대한 퍼포먼스 효과와 요구되는compile time을 정리합니다.

속도향상	compile time

2화 최적화를 실행	xxxx	(*)

정수표현 최적화	xxxxxxxx	xxxx

미 사용라벨 압축	xxxx	xxxxxxxx

변수copy최적화	xxxx	xxxxxxxx

표현의 최적화	xxxx	xxxxxxxx

미 사용 코드 압축	xxxx	xxxxxxxx

산술연산 최적화	xxxxxxxx	xxxx

논리치 조작 최적화	xxxxxxxx	xxxx

Binary Decision Diagrams 작성	xxxxxxxxxxx	xxxxxxxxxxx

(*)compile 시간은 ２배가 걸립니다.


Producing C source code
C 소스 코드 생성

ISaGRAF  Workbench는 어플리케이션 코드를 C소스 코드로 해서 생성할 수 있습니다. 이경우 SFC차트, Dataase를 포함한 프로그램 모두가 C소스 코드에 포함됩니다. 생성된 코드타입에는 아래의 2가지가 있습니다.

CC86M : C소스 코드V3.04)	비구조화 C소스 코드를 생성합니다. 이 형식은 Target이 ISaGRAF V3.23이전의 버전이 경우에 사용합니다.

SCC : 구조화 C소스 코드 :	구조화 C소스 코드를 생성합니다. Target시스템이 V3.23이후의 경우, 이 형식을 선택해 주세요.

[*] 프로그램에 IL언어를 사용하고 있는 경우 SCC에서는 C소스 코드생성이 불가능합니다. CC86M으로 코드를 생성해 주세요.

CC86M의 경우, 이하 2가지 파일은 편집중인 프로젝트 서버디렉토리로 만들어 집니다.

APPLI.c	공통 어플리케이션 소스 코드파일

APPLI.h	공통 헤드파일

구조화 C소스의 경우 APPLI.c와APPLI.h파일에 추가해서 각 프로그램에 하나씩 확장자.c 소스파일과  .h 헤드파일이 만들어 집니다.

이들 파일은 ISaGRAF Target용 실행모듈을 생성하기 위해 ISaGRAF Target라이브러리와 함께 compile/링크 될 필요가 있습니다. 그래서 별도 Target마다I/O개발 툴kit (옵션)이 필요하게 됩니다. 상세한 것은 I/O개발 kit가이드를 참조 바랍니다.

표준 ISaGRAF Target은, 중간 코드를 소프트웨어 처리(interpreter)해서 실행하기 위해 interpreter형으로 하는데  이 C소스 코드에서 compiler되는 경우는 compile형이라 합니다.

주의：	어플리케이션의 Ｃ compile 판에서는 몇 개의 디버깅 기능을 사용할 수 없게 됩니다. 예를 들면, 어플리케이션의 다운로드, 온라인 수정, 브레이크포인트 설정 ... 등 입니다.


Viewing information
정보 보기

「편집」메뉴명령어로 코드 생성중, 또는 검증 중에 작성된 텍스트파일을 열 수 있습니다. 코드생성 윈도우는 코드생성과 검증 중의 메시지를 표시합니다. 화면표시 메시지는 뒤에 모니터 할수 있도록 하드 윈도우에 보관됩니다.

편집 명령어

편집 - clear 명령어로 코드생성 윈도우에 표시중인 텍스트를 clear합니다. 각 코드생성, 검증 전에는 윈도우는 자동적으로 clear됩니다.

편집 - copy 명령어로 표시되어 있는 텍스트를 클립보드에 copy합니다. 이 내용은 다른 텍스트 에디터 등에서 사용 가능합니다.

compiler출력 메시지 모니터

편집 - 메시지 실행  명령어로 마지막의 어플리케이션 코드생성 , 검증 명령어로 표시된 에러 메세지를 포함한 모든 메시지를 재표시합니다.

그 밖의「편집」메뉴 명령어로 코드생성과 검증 중에 생성된 파일을 모니터할 수 있습니다. 통상의 ISaGRAF사용에 있어서는 쓰여지지 않습니다.


Defining resources
리소스 정의

「옵션」－「리소스」 명령어로 리소스를 정의할 수 있습니다. 여기서 말하는 리소스라는 것은 파일과 리스트 등의 형식의 USER정의 데이터（네트워크 구성, 하드웨어 설정등）로 Target코드와merge해서 다운로드 됩니다. 이 데이터는 ISaGRAF 커서를 직접조작 하지 않고, Target측에 인스톨 된 다른 프로그램을 참조하기 위한 것입니다.

리소스 정의 파일

언어

예제

리소스 컴파일

실행


The resource definition file
리소스 정의 파일

리소스 정의는 ISaGRAF프로젝트 파일과 함께“리소스 정의 파일”로서 정의됩니다. 이 파일은 ASCI 텍스트 파일로 ISaGRAF 리소스 compiler로 처리됩니다. 리소스 compiler는 어플리케이션 코드 생성시에 자동적으로 작동합니다. 파일 내의 기술은 ＳＴ언어 문법에 따라 적힙니다. 예를 들면 명령어는(*    *)로, 문자열은 '　' 로 둘러싸입니다. 상세한 문법은 해당사항을 참조 바랍니다.


Language reference
언어

이하에서는 리소스 파일 중에 사용되는 키워드와 그 기술방법을 나타냅니다.

ULONGDATA

VARLIST

BINARYFILE

TEXTFILE

TARGET

ANYTARGET

FROM

TO


ULONGDATA

의미:	정수치 리스트. Target코드에unsigned 32 bit integers 로 추가 됩니다. 정수는 리소스 정의 파일로 정의된 순번으로 나열됩니다. 정수는 comma로 구분됩니다. 리소스명은 최대１５문자입니다.

문법:	ULONGDATA '<resource_name>'

BEGIN

...target_selection...

...list of values...

END

예:	ULongData 'MYDATA'

Begin

...

0, -1, 100_000,	(* decimal *)

16#A0B1, 2#1011_0101	(* hexadecimal, binary *)

End


VARLIST

의미:	변수 어드레스를 나타내는 리스트 입니다. 변수는 리소스 정의 파일 내의 변수명으로 식별됩니다. 변수 어드레스는 target코드에서는 unsigned 16 bit integers로 표현됩니다. 어드레스는 리소스 정의 파일 내에서 지정된 정의순이 됩니다. 변수는 comma로 구분되고, 리소스 명칭은 최대15문자입니다.

문법:	VARLIST '<resource_name>'

BEGIN

...target_selection...

...list of variable names...

END

예:	VarList 'LIST'

Begin

...

Var100, MyParameterr, Command, Alarm

End


BINARYFILE

의미:	binary파일 리소스 ＭＳ－ＤＯＳ파일형식으로 보관됩니다. 패스명으로 성립되어 있습니다. End of line 캐릭터는 리소스 compiler로 변환되지 않습니다. 리소스명은 최대１５문자입니다.

문법:	BINARYFILE '<resource_name>'

BEGIN

...target selection...

FROM '<source_pathname>'

TO '<destination_pathname>'

END

예:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TEXTFILE

의미:	텍스트 파일 리소스. 어스키파일로서 보관됩니다. 패스명으로 성립되어 있습니다. End of line 캐릭터는 target 시스템 맞춘 방법으로 리소스compiler로 변환됩니다. 리소스 명칭은 최대괦괫문자입니다.

문법:	TEXTFILE '<resource_name>'

BEGIN

...target selection...

FROM '<source_pathname>'

TO '<destination_pathname>'

END

예:	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TARGET

의미:	지정할 리소스를 포함한 Target코드의 명칭. "Target"스테이트먼트는 복수Target을 선택가능 하게 할 동일 리소스블록 내에 몇회라도 사용됩니다. "AnyTarget" 스테이트먼트가 사용되고 있는 곳에서는 다루지 않습니다.

문법:	TARGET '<target_name>'

예:	BinaryFile 'MYFILE'

Begin

Target 'ISA86M'

Target 'ISA68M'

...

End


ANYTARGET

의미:	지정 리소스 코드생성시에 모든 Target 코드에 머지 되는 것을 의미합니다.「어플리케이션 코드생성」명령어로 복수Target zem를 생성할 수 있습니다. 모든Target코드가 대상이 됩니다. "Target" 스테이트먼트가 지정되어 있는 경우는 다루지 않습니다.

Syntax:	ANYTARGET

Example:	ULongData 'MYDATA'

Begin

AnyTarget

...

End


FROM

의미:	소스 파일명을 패스명의 부쳐서 지정합니다. ISaGRAFworkbench가 인스톨 되어 있는 PC내부의 binary파일 또는 텍스트 파일의 파일명을 가리킵니다. 패스명의 기술시에는 MS-DOS시스템 지정에 따를 필요가 있습니다.

문법:	FROM '<target pathname>'

Example:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


TO

의미:	distination(Target시스템)에 있어 binary파일 또는 텍스트  파일명을 가리킵니다. 파일명의 기술은 Target시스템 지정에 따를 필요가 있습니다.

      문법:	TO '<target pathname>'

      Example:	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


Example
예제

이하에서는 하나의 리소스 정의 파일의 예를 나타냅니다.

(*리소스 정의 파일  *)

ULongData 'DATA1'	(* 데이터 리스트 *)

Begin

   Target 'ISA86M'	(* 지정된Target코드에 한정 *)

   1, 0, 16#1A2B3C4D, +1, -1	(* 수치 *)

End

VarList 'VLIST1'	(* 변수 리스트  *)

Begin

   Target 'ISA86M'	(* 이 Target코드에 한정  *)

   Valve1, StateX, Command, Alrm1	(*변수명 *)

End

BinaryFile 'FILE1'	(*binary파일  리소스 *)

Begin

   AnyTarget	(* 모든 Target코드를 대상 *)

   From 'c:\user\updatef.bin'	(* 소스 파일명 *)

   To 'updatef.cfg'	(*Target에서의 파일명  *)

End

TextFile 'FILE2'	(*텍스트 파일 리소스*)

Begin

   Target 'ISA68M'

   From 'c:\nw\nwbd.txt'	(*소스 파일명 *)

   To '/nw/dat/nwbd'	(*Target에서의 파일명*)

End


Resource compiling
리소스compiling

"시작 " 버튼을 선택하면 리소스 compile이 개시됩니다. 출력 메시지와 에러 메시지는 이 윈도우에 표시됩니다. "Exit" 버튼을 선택하면 리소스 compile가 빠집니다. 이 경우는 리소스는 Target코드에 첨가되지 않습니다.


Implementation
실행

리소스 수, 행수, 파일수는 ISaGRAF에서 제한은 없습니다. 리소스는 Target코드의 마지막에 리소스 디렉토리 부치기가 첨가됩니다. 아래에서는 리소스 디렉토리 포맷을 C언어 문법으로 나타냅니다.

__RESOURCE:

{

  long nbres;	/* 정의되어 있는 리소스의 수 */

  {

    char name[16];	/* 리소스명 */

    long type;	/* 리소스 데이터 타입 */

    long size;	/* 데이터 블록장 */

    void *data;

    char *path_offset;	/* 문자열로의 포인트 */

  } /*nb of records */

}

위의 "type" 파일에는 아래 가운데서 지정됩니다.

•	1 = binary파일

•	2 = 텍스트 파일

•	3 = 데이터 리스트:ulong data (이 경우path_offset필드는 사용되지 않습니다.)

•	4 = 변수 리스트:varlist  (이 경우path_offset 필드는 사용되지 않습니다.)

텍스트 파일에 관해서 end of line 캐릭터는 Target시스템을 합쳐서 리소스 compiler가 번역합니다. 모든 포인트는 32비트offset됩니다. 리소스명과 패스명은 NULL로 종료합니다. 패스명과 data는 상기의 리소스 디렉토리 이후에 계속됩니다.