Using the ISaGRAF simulator
 시뮬레이터 사용법

프로그램 관리 창의 「디버그」－「시뮬레이션」명령어에 따라 ISaGRAF 시뮬레이션이 디버거와 함께 작동됩니다.  시뮬레이션은 off line 디버거 라 할 수 있습니다. 이 시뮬레이션에서는 ISaGRAF 타겟 시스템을 창 위에서 완전하게 시뮬레이션 합니다. 단, function block과 Ｃ언어 관수 등에 관해서는 준비set에 관해서만 support되고 있습니다.（user정의 관수 등을 시뮬레이션에 집어넣는 경우는 workbench 관수 kit：옵션 소프트에 따라 Customize 할 필요가 있습니다.）I/O보드는 가상 I/O판넬로서 그래픽컬 하게 창 상에 시뮬레이션 됩니다. 어떤 종류의I/O보드（가상I/O도 포함해서）에 관해서도 시뮬레이션 됩니다.

디버거 연결

I/O 시뮬레이션

라이브러리 구성요소

옵션

ISaGRAF 시뮬레이션은 시뮬레이션 및 진단의 기능을 갖고 있습니다.

입력 상태 저장

주기 개요

시뮬레이션 메모


Links with the debugger
디버거 연결

시뮬레이션은  디버그ger간의 통신을 완전히 support합니다. 온라인 디버그로 생각되는 조작이 가능하게 되어 있습니다. 단,  「파일」 - 「어플리케이션시작 , 어플리케이션 정지 , 다운로드 , 어플리케이션의 갱신」 명령어에 관해서는 무효가 됩니다.

시뮬레이션하기 위해서는 미리 시뮬레이션용의 어플리케이션 코드가 필요합니다. 그러므로 프로그램 관리 창의「코드 생성」-「컴파일러 선택」설정으로 시뮬레이션용 코드가 선택되어 있는 확인한 후에「어플리케이션 코드 생성」을 실행할 필요가 있습니다.

Kernel 시뮬레이션 창（가상I/O판넬）와 디버그창을 닫는 것으로 디버그 session으로 열려 있는 창은 전부 닫힙니다.


I/O simulation
I/O 시뮬레이션

슬롯 번호마다 I/O보드가 가상I/O판넬 창에 그래픽컬하게 시뮬레이션 됩니다. ISaGRAF표준 I/O보드(Boolen형, 변수.실수형, 문자열형)를 다룰 수 있습니다. 보드 상에는 슬롯 번호, I/O보드명, 채널 번호가 표시됩니다.

입력 보드는 버턴 또는 파일과 함께 표시되고, 출력 보드는 ＬＥＤ 또는 파일과 함께 표시됩니다. I/O접속 편집기 에서 가상 I/O보드로서 설정되어 있는 경우도, 보드는 그래픽컬 하게 시뮬레이션 됩니다.

 	Boolen형 입력 보드

      Boolen형 보드는 작은 버턴과 함께 표시됩니다. 채널 번호가 버턴 옆에 표시됩니다. 버턴을 누르면, TRUE상태가 되고, 다시 한번 누르면 FALSE상태가 됩니다. 오른쪽 마우스를 클릭하면, 누르고 있는 사이에만 TRUE 상태가 됩니다.

 	Boolen형 출력 보드:

      Boolen형 출력 보드는 LED표시와 함께 표시됩니다. 채널 번호가 LED옆에 표시됩니다. 값이 TRUE상태일때 LED가 점화됩니다.

 	정수형 입력 보드: 정수형 입력 보드는 입력용 수치 필드와 함께 표시됩니다. 수치 필드를 클릭해서 숫자를 입력하면 대응한 변수명에 아나로그 값을 대입할 수 있습니다. ENTER키의  입력은 필요 없고, 상하 버턴을  클릭하면 입력 가능합니다. 아나로그 값은 10진수, 16진수 중에서도 입력 가능합니다.

 	정수형 출력 보드:

      정수형 출력 보드는 출력용 수치 필드와 함께 표시됩니다. 수치 필드에는 변수의 값이10진수 또는16진수로 표시됩니다. 이 값은 변경할 수 없습니다.

 	문자열형 입력 보드:

      문자열 입력 보드는 텍스트 입력 필드와 함께 표시됩니다. 텍스트 입력 필드에 커서를 이동해서, 문자열을  입력하면 대응한 변수로의 문자열 입력이 가능합니다. ENTER키의 입력은 필요 없습니다.

 	문자열형 출력 보드:

      문자열 출력 보드는 텍스트 출력 필드와 함께 표시됩니다. 이 문자열의 변경은 불가능합니다.


Library components
라이브러리 구성요소

 ISaGRAF 시뮬레이션은 표준 변환관수, 관수, 표준 function block을 지원 하고 있습니다. 이하에 지원 되어 있는 오브젝트 리스트를 행합니다.

 변환관수:

DCB	BCD코드 Binary변환(Decimal Coded Binary)

SCALE	LED meter 표시(Volt meter led indicator)

 function:

abs	절대치(absolute value)

acos	arc cosine (arc cosine calculation)

ArCreate	정수배열 생성(create array of integer)

ArRead	실수배열 생성(read array of integers)

ArWrite	정수배열 적어넣기(write array of integers)

ascii	ascii code에서 변환(character => ascii code)

asin	arc sine (arc sine calculation)

atan	arc tangent (arc tangent calculation)

char	character 변환(ascii code => character)

cos	cosine (cosine calculation)

delete	문자열의 일부 삭제(delete sub-string)

expt	exponential(exponent calculation)

find	문자열 검색(find sub-string)

insert	문자열 삽입(insert sub-string)

left	문자열 좌측 추출(extract left sub-string)

limit	값 제한 필터(bound value between limits)

log	log(logarithm (base 10))

max	최대치(maximum of two integers)

mid	문자열 추출(extract middle sub-string)

min	최소치(minimum of two integers)

mlen	message 길이(length of a message)

mod	여분(modulo calculation)

mux4	4입력 multiplexer (multiplexer 4 entries)

mux8	8입력 multiplexer (multiplexer 8 entries)

odd	홀수 parity (odd parity)

rand	random 정수값(random integer value)

replace	문자열 바꿔놓기(replace sub-string)

right	문자열 우측 추출(extract right sub-string)

rol	bit 좌회전(rotate left)

ror	bit 우회전(rotate right)

sel	selector (binary selector)

shl	bit 좌 shift (shift left)

shr	bit 우 shift (shift right)

sin	sine (sine calculation)

sqrt	평방근(square root)

tan	tangent (tangent calculation)

trunc	잘라버림(truncate decimal part)

 Function Block:

average	평균치(running average)

blink	blink (blinking signal)

cmp	비교(full comparison)

ctd	down dounter (down dounter)

ctu	up counter (up counter)

ctud	up/ down counter (up/down counter)

derivate	미분기(derivative regulation)

f_trig	내리기 검출(falling edge detection)

hyster	hysteresis (hysteresis)

integral	적분기(integral regulation)

lim_alrm	lim_alrm (alarm on limits)

pid	PID 적분기 (PID regulation)

pid_cj	PID 적분기 (PID regulation)

r_trig	오르기 검출(rising edge detection)

rs	dominant bistable reset (reset dominant bistable)

sema	semaphore (semaphore)

sr	dominant bistable set( set dominant bistable)

stackint	정수 stack(stack of integer values)

tof	off timer (off-delay timer)

ton	on timer (on-delay timer)

tp	pulse timer (pulse timer)

user정의 C언어관수, function block은 ISaGRAF 시뮬레이션에서는 표준으로 짜넣을 수 없습니다. user정의 관수 등은 타겟 시스템에 의존하고 있어, Windows에서 실행할 수 없는 경우도 있습니다.

ISaGRAF 시뮬레이션은 user정의 변환관수, 관수, function block에 대해서 이하의 표준적인 행동을 제공합니다.

•	새로운 변환관수 가 실행된때, NULL변환됩니다. 즉, 입력신호가 왼전히 변환되지 않고 출력됩니다.

•	괷언어 관수가 실행중 일때는 일절 처리하지 않습니다. 출력치는 항상 제로(또는 NULL문자열)이 됩니다.

•	function block이 실행중 일때는 일절 처리하지 않습니다. Return parameter는 항상 제로(또는 NULL문자열) 가 됩니다.

•	단, workbench 개발 도구kit（옵션소프트）에 따라 시뮬레이션에 user정의 관수 등의 표시를 짜넣을 수 있습니다.


Options
옵션

「옵션」메뉴에 따라 가상I/O판넬 표시 변경이 가능합니다. 시뮬레이션중에 언제라도 명령어를 set, reset할 수 있습니다.

칼라모드 명령어에 따라 I/O채널 표시는 칼라 bit map표시로 됩니다. monochro디스플레이의 경우는 흑백을 표시하기 위해 이 옵션을 빼 주십시오.

변수명  명령어에 따라 I/O채널 오른쪽 옆에 변수명 라벨이 표시됩니다. I/O보드 시뮬레이션 판넬 사이즈를 작게 하기 위해 이 옵션을 빼 주십시오.

16진수값  명령어에 따라 입/출력 아나로그 채널이 16진수로 표시, 입력됩니다.

「항상 앞면」명령어에 따라 가상I/O판넬이 항상 화면 앞면에 표시됩니다.


The Cycle Profiler
주기 개요

사이클 profiler는 어플리케이션 중에서 사용도고 있는 복수 프로그램, 관수, function block 각각의 실행시간이  어느 정도 분포하고 있는가를 표시할 수 있는 상당히 편리한 진단기능입니다. 이 도구에서는 어플리케이션 퍼포먼스 체크 기능과 어느 부분의 코드가 가장 적당한지를 조사하려 할때도 도움이 됩니다.

사이클 profiler의 작동은 시뮬레이션창「주기개요」메뉴명령어로 합니다. 그래서 프로그램, 관수, function block 각각의 실행에 걸리는 시간을 [%]로 표시합니다.

표시 - 평균 옵션을 체크하면, 어플리케이션이 start에서 또는 마지막 재설정  명령어를 실행한 후 평균을 계산해서 표시합니다.

 표시 - 평균 옵션이 체크되어 있지 않을 때는 바로 앞의 사이클 실행중에 관측된 정보를 표시합니다. 어플리케이션 실행 모드를 사이클 에 설정해서 이 기능을 사용하면 어플리케이션  각각의 콘테스트에 따라 실행시간의 관측이 가능합니다.

복사 명령어로 프로그램명과 퍼센테이지를 클립보드에 텍스트 형식으로 copy가능합니다. 이 데이터를 도큐멘트와 서버레드시트에 붙일 수 있습니다.

주의:	이것은 정밀한 계측은 아닙니다. 퍼센테이지(%) 계산은 TIC코드 명령수 카운트에 따라 합니다. C언어로 기술된 관수와 function block 처리시간은 포함되어 있지 않습니다.

관수, function block에 표시되는 값은1사이클 중에 호출되는 모든 처리시간의 합계치가 됩니다.

또, C소스 generate를 사용해서 작성된 타겟의 경우는 신뢰할 수 있는 테이타를 표시할 수 없습니다.


Simulation scripts
시뮬레이션 메모

ISaGRAF 시뮬레이션에는 메모를 작성해 실행할 도구가 있습니다. 시뮬레이션 메모는 ST언어와 비슷한 텍스트 언어로 기술됩니다.

시뮬레이션 메모  편집

시뮬레이션 메모 실행

주석 언어

윗부분의 창은 시뮬레이션 메모를 입력할 텍스트 편집기 입니다. 사용방법은 다른 ISaGRFA 텍스트 편집기 와 동일 합니다.

아랫부분의 창에는 시뮬레이션 메모 가 실행된때의 출력 메시지가 표시됩니다. 창 세퍼레이터는 자유롭게 드래그할 수 있고, 사이즈 변경도 가능합니다. 시뮬레이션 메모 편집시는 이 창은 숨겨져 있을 경우가 있지만, 시뮬레이션 메모 가 실행되면 자동적으로 표시됩니다.


Editing scripts
스크립트 편집

script 파일에 관한 조작은 파일 메뉴 에서 합니다.

신규작성	신규 메모 파일 작성

열기	기존의 메모 파일을 엽니다.

보존	메모 텍스트와 출력 창의 내용을 보존합니다.

이름을 부쳐 보존	메모 텍스트와 출력 창의 내용을  다른 이름으로 보존합니다.

각각의 script에 대해 두개의 파일이 프로젝트 디렉토리에 작성됩니다.

<script명>.SCC	scrip 텍스트 (명령)

<script명>.SCO	출력 창 내용

여기서 <script명>은 script 이름을 가리킵니다. 이 파일들은 통상의 텍스트 파일로 일반 텍스트 편집기 으로 오픈 가능합니다.

 시뮬레이션 메모 편집중「편집－심벌 삽입」명령어로 설정된 변수명을 커서 위치에 삽입 가능 합니다.


Running scripts
시뮬레이션 메모 실행

script는 실행하기 전에 문법 체크와 compiler할 필요가 있습니다. 실행 명령어가 선택된때 필요에 응해서 문법 체크가 자동적으로 됩니다. 아래의 script 메뉴 명령어를 사용합니다.

체크	  script의 문법 체크와 compiler

실행	  script 실행

무제의script경우에는 문법 체크 하기 전에 이름을 부쳐 보존해야만 합니다. 이름이 부쳐진 script의 경우는 문법 체크 전에 자동적으로 파일로 보존 가능 합니다.

script가 실행되어 있을 때는 그 내용은 편집할 수 없습니다. script 실행이 종료한때는 메시지가 표시됩니다. 또한, 아래의 script 명령어로 실행중인 script를 중단 하는 것도 가능합니다.

중단	 실행중 script 중단

script 실행은 타겟 사이클 사이에서 실행됩니다. 사이클 중에 무한 루프가 있을 경우는 시뮬레이션은 이 무한 루프를 분할해서 실행하고, 사이클 실행이 잇달아 되고, 다른ISaGRAF 어플리케이션이 lock되지 않도록 하고 있습니다. ISaGRAF script interpreter는 １사이클 중에 같은“라벨”이 ２회 카운트 되면 script실행을 중단합니다. 또한, script 실행은 Cycle과 Wait 인스트럭션에 따라서도 중단됩니다.


Script description language
주석 언어

script 기술언어는 심플한 ST언어와 비슷한 텍스트 언어입니다. 그러나, 각행 끝에 세미콜론（；）은 요하지 않습니다. 도구 바 상의 아래 버턴을 사용해서, 사용 가능한 인스트럭션을 조사해, 커서 위치에 삽입 가능합니다

인스트럭션 삽입 (키워드와 도움말 명령어)

여러가지 인스트럭션이 있습니다. 값을 변수에 대입하는 인스트럭션

:=	assignment

Print	outputs a text string or a variable value

PrintTime	outputs current time stamp

Cycle	let ISaGRAF 시뮬레이션 execute one cycle

Wait	waits during a specified time

Labels	can be placed anywhere in the script

Goto	unconditional jump to a label

If goto	conditional jump to a label

End	terminates script

Script 언어에는 case문은 없습니다. 명령어는 ST언어와 같이"(*" "*)"로 싸여 있고 ; 세미콜론을 처음에 부쳐 기술합니다.


":=" Assignment

의미：	변수의 값을 강제적으로 대입합니다. 내부변수, 입력변수, 출력변수에 대해서 유효합니다.

문법：	<varname> := <constant_expression>

<varname> = <constant_expression>

설명：	<varname>은 변수모음에 등록된 변수명 또는 %문자를 접두자로 사용하는 접두표현 변수입니다.

<constant_expression>는 지정한 변수에 따른 정수치 입니다. Ture / False형 변수에 대해서는１／０를 사용합니다. 또한, 타임변수에 대해서는、T#와 TIME#의 접두문자는 생략 가능합니다.

메모：	script에 의한 입력변수 대한 값을 대입할 경우은 변수의 lock은 불필요합니다.

주의：	변환 관수를 설정하고 있는 입출력 변수에 대한 값의 대입을해서는 않됩니다. script에선 변환 관수와 테이블을 support하고 있지 않습니다.

예：	MyBooVar := 1         (* same as TRUE *)

MyIntVar := 1234

MyRealVar := 1.2345

MyMsgVar := 'Hello'

MyTmrVar := t#12s


Print

의미：	출력 창의 문자열과 변수치의 출력. 출력 창 마지막 문자에서 바뀐행의 새로운 행에 표시됩니다.

문법：	Print '<text>'

Print <varname>

설명：	<text>는 싱글quotation으로 둘러싸인 문자열

<varname>은 변수모음에 등록된 변수명 또는 %문자를 접두자로 사용하는 직접 표현 변수입니다.

메모：	변수치 출력은 IEC규격에 따른 포맷에서 됩니다.

예：	Print 'Hello'

Print MyBooVar

출력：	Hello

MyBoovar = TRUE


PrintTime

의미：	출력 창에 현재 시각을 표시합니다. 출력 창 마지막 문자에서 바뀐행의 새로운 행에 표시됩니다.

문법：	PrintTime

메모：	현재 시각의 출력 포맷은、Windows시스템 설정에 의존하고 있습니다.

예：	Print 'Time now is:'

PrintTime

출력：	Time now is:

15:45:22


Cycle

의미：	다음의 ISaGRAF사이클이 실행되기까지 script 실행을 일시 정지합니다.

문법：	Cycle

메모：	script 실행은 ISaGRAF 사이클 처음에 됩니다. 만약, 시뮬레이션가사이클 모드인 경우 이 Cycle명령은 사이클 실행후에 됩니다. 이후의 script는 디버그ger「１사이클 실행」명령어가 실행된 후에 실행됩니다.

예：	(*ISaGRAF 프로그램에는 A을B로 copy하는 프로그램이 있습니다.*)

A := 0

Cycle

Print B

A := 1

Print B (* no cycle performed / B not set to 1 *)

Cycle

Print B

Output:	B = 0

B = 0

B = 1


Wait

의미：	지정한 시간이 경과하기까지 script를 일시 정지합니다.

문법：	Wait <delay>

설명：	<delay>는 delay 값으로 시간 정수를 나타냅니다. IEC규격에 따른 표현 방법으로 기술합니다.  "T#" 와 "TIME#" 의 접두문자는 생략 가능합니다. 이 값은、10mS에서 １시간 사이의 값이어야만 합니다.

메모：	"Wait" 인스트럭션 정도는 host시스템 Windows에 의존하고 있기 때문에 정밀한 것은 아닙니다. 또한, ±１사이클 실행시간,분의 오차를 고려할 필요가 있습니다.

"Wait" 인스트럭션이 실행되면 지정된 시간이 경과하기까지ISaGRAF사이클이 실행되고, 그후 script가 실행됩니다.

예：	PrintTime

Wait 2s

PrintTime

Output:	15:45:27

15:45:29


Labels

의미：	라벨은script중의 어디에서나 배치 가능합니다. 라벨은 Goto 인스트럭션 점프 앞에서 사용하고 script의 흐름을 제어하는 것이 가능합니다.

문법：	<labelname>:

설명：	<labelname>은 영문자로 시작되고 영문자와underscore등의 16문자 이내의 유닉크한 문자열입니다. 설정시에는 coma（:）를 뒤에 부쳐야만 합니다.

메모：	라벨을 설정한 행에 다른 인스트럭션은 기술할 수 없습니다.

라벨명은 변수모음에 설정된변수명과 동일해야만 합니다.

예：	(* example of a script with an infinite loop *)

loop:

PrintTime

Wait 1s

Goto loop


Goto

문법：	Goto <labelname>

설명：	<labelname>은 script 중에 설정된 라벨명

메모：	역방향 점프도 가능합니다. 무한 loop의 경우는 ISaGRAF사이클 실행을 유지하기 위해 script실행은 loop에 분할 되어 실행됩니다.

에：	Print 'Before Jump'

Goto MyLabel

Print 'Within Jump' (* instruction never performed *)

MyLabel:

Print 'After Jump'

Output:	Before Jump

After Jump


If Goto

의미：	라벨로의 조건 점프. 조건에는 변수와 변수의 비교 및 변수와 정수의 비교를 사용합니다.

문법：	If <var1> test <var2> Goto <labelname>

If <var1> test <constant_expression> Goto <labelname>

test에 사용가능한 것을 아래에 적으면

=	양변치가 같은 경우에 참

<>	양변치가 같지 않는 경우에 참.

<	좌변이 우변보다 작을 경우에 참.

<=	좌변이 우변 이하의 경우에 참.

>	좌변이 우변보다 큰 경우에 참.

>=	좌변이 우변 이상의 경우에 참.

설명：	<var1> <var2> 는변수모음에 등록된 변수명, 또는 %문자를 접두자로서 사용하는 직접 표현변수입니다.

<constant_expression>는 지정한 변수에 따른 정수치입니다. Booleam형 변수에 대해서는１／０를 사용합니다. 또한, timer변수에 대해서는 T#와 TIME# 접두문자는 생략 가능합니다.

<labelname>는 script중에 설정된 라벨명입니다.

메모：	역방향 점프도 가능합니다. 무한loop의 경우는 ISaGRAF 사이클 실행을 유지하기 위해 script 실행은 loop에 분할되어 실행됩니다.

예：	(* This script loops until MyVar is TRUE *)

Loop:

If MyVar = TRUE Goto TheEnd

Print MyVar

Goto Loop

TheEnd:


End

의미：	script 종료

문법：	End

메모：	script의 마지막 행에 End 인스트럭션을 기술하는 것은 필수 조건은 아닙니다.

예：	(* This script loops until MyVar is TRUE *)

Loop:

If MyVar = FALSE Goto Continue

End

Continue:

Print MyVar

Goto Loop


Saving and restoring input states
입력 상태 저장

 ISaGRAF 시뮬레이션을 사용해서 IO 시뮬레이션판넬 토글 버턴과 편집기  컨트롤박스를 사용한 조작에 따라 입력채널의 강제입력이 가능합니다. 이 입력채널들의 상태를 보존하기도 하고, 읽어 넣기도 하기 위해 아래의 명령어가 [도구] 메뉴에 있습니다.

입력패턴 load	파일에 보존된 입력채널을 입력채널에 설정합니다.

입력패턴 세이브	입력채널 상태를 파일에 보존합니다. 파일은 프로젝트 디렉토리에 보존됩니다.

메모： 	이름이 부쳐져 있는 입력채널（변수 배정이 되어 있는 입력）만이 보존됩니다