싸이몬은 스크립트를 서밋 라이센스를 구매해서 만들었다
즉 버그가 많음
이렇게 함수를 제공하기 때문에 함수를 이용해서 사용하는 것이 좋다
왜냐면 저거 보듣이 어떤건 가로가 안들어가고
어떤건 가로가 들어가고 불편하게 되어있다
이렇게 쓰면 되긴하는데
좀 불편함
RunScript("내가만든함수")
StopScript("내가만든함수")
명시적 선언은
Dim 변수이름 [As타입] 이렇게 만들고
묵시적은 그냥
변수 이름 이 선언되면 된다
정수형
& : Long (4 Byte)
% : Integer (2Byte)
실수
#: Double (8Byte)
! : Single (4Byte)
문자형
$
변수 1% = 10
변수 1% = 20
날짜 시간
변수5 = Now
문자형
변수6 $ = "안녕하세요"
이건 변수로 못씀
1. Empty • 변수의 값을 초기화 되지 않은 상태로 만드는 키워드
2. IsEmpty • 변수가 초기화 되지 않았는지 확인하는 키워드
3. Nothing • 객체의 값을 초기화되지 않은 상태로 만드는 키워드 • 객체에 값이 있다면 시스템리소스를 해제하는 기능도 한다.
4. Is Nothing • 객체가 초기화되어 있는지 확인하는 키워드
5. Null • 변수가 유효하지 않은 데이터를 가진 상태로 만드는 키워드
6. IsNull • 값이 유효하지 않은 데이터를 가지는지 확인하는 키워드
7. True • 참인 경우의 Boolean 값을 가지는 키워드( 일반적으로 -1)
8. False • 거짓인 경우의 Boolean 값을 가지는 키워드(일반적으로 0 )
형변환
CStr :숫자를 문자로
숫자변수이름1$ = CStr("10.5")
Clnt: 문자를 숫자로
문자변수이름1%= Clnt("10.5")
기타
y1%= Year(Now())
년도 넣기
1. + (더하기)
2. - (빼기)
3. * (곱하기)
4. / (나눈 후 몫)
5. Mod (나눈 후 나머지)
6. 기타 자주 사용되는 함수를 이용한 값의 계산
• Abs(변수) : 변수의 절대값을 계산하고 자 할 때 사용함
• Rnd() : 0 에서 1 사이의 범위를 가지는 임의의 실수 값
• ASC(변수) : 변수의 아스키 코드값을 계산하고 자 할 때 사용함
• Hex(변수) : 변수를 16진수 형태로 변환
• Oct(변수) : 변수를 8진수 형태로 변환
태그를 만들고
이제 이걸 불러와보자
변수1# = GetTagVal("뭔가한다.숫자") ----> 이거 뭔가한다 폴더안에 숫자라는 태그있어서 그런거임
MsgBox CStr(변수1#)
SetTagVal "뭔가한다.문자", "안녕하세요" ---->이건 태그에 값넣는거 난 빼겟음 초기값넣어서
MsgBox CStr(GetTagVal("문자열태그"))
Get 성질을 띄는 내부함수는 괄호를 입력
● Get 성질을 띄는 내부 함수란, 특정 함수 A를 호출 했을 때 리턴 되는 어떤 값이 존재 한다면 그 함수는 Get 성질을 띤 함수이다
예) GetTagVal, TLogVal, CommStatus 함수 등
Set 성질을 띄는 내부함수는 괄호를 입력하지 않음
● Set 성질을 띄는 내부 함수란, 특정 함수 A를 호출 했을 때 리턴 되는 값은 없고 오로 지 특정 명령을 수행하는 함수라면 그 함수는 Set 성질을 띤 함수이다.
예) SetTagVal, OpenFileDlg, LoginEx 함수 등
이상한 애들의 약속
1. 연산식 혹은 명령식 괄호를 입력해야 함.
예를 들어, LoginEx(“userid”,”userpwd”)
2. 스크립트 함수 괄호를 입력하지 말아야 함.
예를 들어, LoginEx “userid”, ”userpwd”
왜이리 만든거야 귀찮게...
모든언어가 쓰는
if 와 select Case 는 다있음
Sub Main()
변수1# = GetTagVal("아날로그태그")
if 변수1# = 0 then
MsgBox "0입니다“
elseif 변수1# = 1 Then
MsgBox “1입니다”
else
MsgBox "0, 1이 아닙니다"
end if
End Sub
위처럼 좀 end if 쳐야함 귀찮음
Sub 반복예제()
합계 = 0
for i = 0 to 10
합계 = 합계 + i
next i //<-----여기 이거 i++같은거임
MsgBox CStr(합계)
End Sub
for문은 또 end 안씀 이상함
Sub DigChange()
While TRUE
Sleep (1000)
a = GetTagVal(“DIG1”)
SetTagVal “DIG1”,1-a
wEnd
End Sub
Sub AnaChange()
While TRUE
Sleep (2000)
a = GetTagVal(“ANA1”)
SetTagVal “ANA1”,a+1
wEnd
End Sub
while 은 또 wEnd로 줄여씀 break 같은거인가 아님 메모리 차지 없에는건가
Exit For 나간다 Break랑 같은듯
Sub 반복예제()
합계 = 0
for i = 0 to 10
if 합계 > 30 then
Exit For
else
합계 = 합계 + i
end if
next i
MsgBox CStr(합계)
End Sub
계속보니깐 대충은 보임
Sub DigChange()
While TRUE
Sleep (1000)
a = GetTagVal(“DIG1”)
SetTagVal “DIG1”,1-a
wEnd
End Sub
Sub AnaChange()
While TRUE
Sleep (2000)
a = GetTagVal(“ANA1”)
SetTagVal “ANA1”,a+1
wEnd
End Sub
c언어를 많이 하다보니깐 이것도 좋은듯한 느낌도 있고
암튼 위에꺼 메인함수에 넣어주던가 어떻게 쓰면 될듯함
슬립도 여기서 하는거 똑같은듯 1000이 1초일듯함
이거 참고하면 좋을듯
Sub 반복예제()
합계 = 0
for i = 0 to 10
if 합계 > 30 then
Exit For
else
합계 = 합계 + i
end if
next i
MsgBox CStr(합계)
End Sub
Exit 예제인듯
Sub Word2Bit()
worddata = GetTagVal("WORDDATA")
BitMask = 1
For i = 0 To 15
tagstr$ = "BIT"+Format(i,"00")
bitdata = worddata AND BitMask
if(bitdata > 0) then
SetTagVal tagstr$, 1
else
SetTagVal tagstr$, 0
end if
BitMask = BitMask * 2
Next
End Sub
이건
아날로그 쪼개기이다
일단 해보자
'[ 충남인력개발원 ] (2019) > ┗SCADA' 카테고리의 다른 글
SIMON DB 만들기 (0) | 2019.12.18 |
---|---|
CIMON OpenPageEx() 함수 (0) | 2019.12.17 |
CIMON 여러가지 설정에 관하여 (0) | 2019.12.17 |
보고서 및 기기랑 통신하기 (0) | 2019.12.16 |
TCP 모두버스(modbus)로 PLC 정보 가저오기 (0) | 2019.12.11 |