• 제품선택
  • Q: 사용자가 원할때만 데이터 수집을 할 수 있나요?

    A: 데이터 수집 기본 기능으로는 CimonX가 실행되는 순간부터 데이터 수집이 되지만 EnableDataLog 함수를 이용하면 가능 합니다.

     

    1. 데이터 수집 모델을 등록 합니다.

    2. 데이터 수집할 태그를 등록하고 디지털 태그 하나를 추가로 등록 합니다. 디지털 태그에는 태그동작을 하나 걸고 RunScript(“main”)을 등록 합니다.

    3. 스크립트를 작성 합니다. EnableDataLog함수 사용방법은 도움말에 나와 있습니다. EnableDataLog “데이터 수집 모델이름”, 1 혹은 EnableDataLog “데이터 수집 모델이름”, 0 입니다. 1일때는 데이터 수집 모델을 실행 시키고, 0일때는 데이터 수집 모델을 정지 시킵니다.

    Main 스크립트를 사용한 이유는 CimonX가 처음 시작 했을 때 D의 태그값의 초기값이 1일 수도 있기 때문에 Main 스크립트를 사용 하였습니다.

    4. CimonX를 처음 실행 했을때의 시스템 상태 화면 입니다.

    Main 스크립트가 돌고 데이터 수집이 Disable된 것을 확인 할 수 있습니다. 그리고 Main 스크립트가 정지 되었습니다. 데이터 수집이 Disable 된 이유는 D 태그의 초기값이 0이기 때문 입니다.

    5. 여기서 D의 태그값을 1로 바꾸고 시스템 상태 화면을 보았습니다.

    Main 스크립트가 돌고 데이터 수집이 Enable 되었습니다. D의 태그값이 1이고 D태그의 태그동작에 RunScript(“Main”)을 사용 하였기에 태그값이 바뀔 때마다 스크립트가 실행 됩니다.

     

    이와 같이 사용자가 원할 때만 EnableDataLog 함수를 이용하여 데이터 수집을 할 수 있습니다.

     

     

  • CIMON-SCADA 스크립트를 사용해서 시간을 변경 할 수 있습니다. 

     

    아래와 같이 스크립트를 작성하면 됩니다. 

     

    Sub PCTIMECHANGE()

     

    Date$ = “2012-07-07”

    Time$ = “14:00:22”

     

    End Sub

     

    명령식이나 스크립트상에서 RunScript (“PCTIMECHANGE”)실행을 하면 pc 시간이  2012년7월7일 오후2시00분22초로 바뀝니다.

    #PC시간#시간#변경#시간변경

  • 안녕하세요,

    CIMON입니다.

     

    HMI에 있어서 감시하거나 제어해야 할 요소들을 “Tag” 또는 “Point”라고 칭합니다.

    하위콘트롤러로서 PLC를 사용하여 HMI와 통신하는 경우 PLC의 Digital접점이나 Analog Point 및 내부메모리접점 중에서

    상위 HMI System에서 감시하거나 제어해야 할 포인트를 계산하시면 필요하신 HMI 모델을 선정하실 수 있습니다.

    물론 향후 설비의 증설이나 확장계획이 있다면, 이 부분까지 고려하여 HMI모델을 선정하셔야합니다.

    일일이 감시/제어포인트를 산정하시기에 애로를 느끼신다면 “PLC의 총사용포인트 X 1.5” 정도로 산정하셔도 크게 무리는 없습니다.

     

    언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.

    감사합니다.

  •  

    안녕하세요,

    CIMON입니다.

     

    VB 함수를 이용하여 스크립트를 작성하는 것으로 엑셀 파일의 시트 이름을 표시할 수 있습니다.

    다음 예제를 참조하여 주시기 바랍니다.

     

    [사용 예제]

     

    1. 시트 이름을 가져올 엑셀 파일의 위치를 확인합니다.

     

    2. [도구]-[스크립트]에 진입하여 다음과 같이 스크립트를 작성합니다.

    Sub ReadExcelSheet()

    Dim ExcelApp As Object

    Dim DayRpt As Object

    ‘Read  파일 이름
    fName$ = “C:\보고서\Test.xls”

    ‘Excel  실행
    Set ExcelApp = CreateObject(“Excel.Application”)

    ‘Excel  파일 열기
    Set DayRpt = ExcelApp.Workbooks.Open (fName$)

    ‘Excel  파일의 모든 시트를 돌며 시트의 이름을 가져와서 표시한다.
    For nIdx = 1 To DayRpt.Worksheets.Count

    shname = DayRpt.Worksheets(nIdx).Name
    msgbox shname

    Next nIdx

    ‘파일을 닫는다.
    DayRpt.Close

    ‘Excel 를 종료한다.
    ExcelApp.Quit

    End Sub

    =====================================

    위 스크립트를 다음 그림과 같이 등록합니다.

    3. CimonX를 실행합니다.

    스크립트를 실행하면, 경로의 엑셀 파일에 저장된 모든 시트 이름을 메시지 박스로 표시합니다.

     

    언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.

    감사합니다.

  • 트랜드 오브젝트의 데이터를 엑셀파일로 출력하는 예제 입니다.  

    [예제]   

    ●예제프로젝트 설명 

    Cycle태그(초단위 주기) 설정에 따라 트랜드 오브젝트에 표시된 데이터를 엑셀 파일로 출력하는 예제  

     

    1.       아래와 같이 데이터 수집모델을 생성합니다. 

             수집방법 : 정주기로 수집 

             수집주기 : 1초

     

    2.       데이터베이스에 3개의 태그를 생성

     

    3.       ANA1과 ANA2에 데이터수집 태그로 설정합니다.  

     

    4.       트랜드 오브젝트를 생성하여 아래와 같이 설정합니다. 

             오브젝트 이름 : Trend 

             펜등록 : ANA1, ANA2

     

     

     

    5.       스크립트를 작성

    아래와 같이 스크립트를 작성합니다.

    Sub StatusSave()

     If GetTagVal(“CYCLE”) <> 0 Then

     ‘주기가 0이 아닐경우

               Set ExcelApp = CreateObject(“Excel.Application”)

                          fFormName$ = “D:TESTSCADAReport양식양식.xlsx”

                          ‘양식파일 위치

                          fTodayName$ = “D:TESTSCADAReport출력”+TimeStr(44)+”.xlsx”

                          ‘생성될 파일 위치

                          If (FileExists(fTodayName$) <> True) Then

                          ‘파일이 없을 경우

                                    FileCopy fFormName$ , fTodayName$

                                    ‘양식파일 복사

                          End If

                          Set DayRpt = ExcelApp.Workbooks.Open(fTodayName$)

                          ‘Excel Workbook Open

                          Set Sheet1 = DayRpt.Worksheets(1)

                                    If GetTrendMode(“Trend”) = 1 Then

                                    ‘과거 트랜드 모드일 경우

                                               hsTrendTime& = TrendGetTime(“Trend”, 4)

                                               ‘트랜드 시작시간

                                               heTrendTime& = TrendGetTime(“Trend”, 5)

                                               ‘트랜드 끝시간

                                               hTrendCycleCounter% = ((heTrendTime& – hsTrendTime&) – ((heTrendTime& – hsTrendTime&) Mod GetTagVal(“Cycle”))) / GetTagVal(“Cycle”)

                                               ‘데이터 갯수

                                               For i = 0 to hTrendCycleCounter%

                                                         hTrendTime& = hsTrendTime& + (i * GetTagVal(“Cycle”))

                                                         ‘시각값

                                                         hTrendTimeStr$ = TimeToStr(hTrendTime&, 12) + TimeToStr(hTrendTime, 5)

                                                         ‘시간 값을 YYYY년MM월DD일hh시mm분ss초 변환

                                                         Set Cell = Sheet1.Range(“A”+CSTR(i + 1))

                                                         Cell.Value = hTrendTimeStr$

                                                         Set Cell = Sheet1.Range(“B”+CSTR(i + 1))

                                                         Cell.Value = Dlogval(“ANA1”,hTrendTimeStr$)

                                                         ‘ANA1의 수집데이터를 셀에 출력

                                                         Set Cell = Sheet1.Range(“C”+CSTR(i + 1))

                                                         Cell.Value = Dlogval(“ANA2”,hTrendTimeStr$)

                                                         ‘ANA2의 수집데이터를 셀에 출력

                                               Next i

                                    Else

                                               ‘과거 트랜드 모드일 경우

                                               rsTrendTime& = TrendGetTime(“Trend”, 0)

                                               ‘트랜드 시작시간

                                               reTrendTime& = TrendGetTime(“Trend”, 1)

                                               ‘트랜드 끝시간

                                               rTrendCycleCounter% = ((reTrendTime& – rsTrendTime&) – ((reTrendTime& – rsTrendTime&) Mod GetTagVal(“Cycle”))) / GetTagVal(“Cycle”)

                                               ‘데이터 갯수

                                               For i = 0 to rTrendCycleCounter%

                                                         rTrendTime& = rsTrendTime& + (i * GetTagVal(“Cycle”))

                                                         ‘시각값

                                                         rTrendTimeStr$ = TimeToStr(rTrendTime&, 12) + TimeToStr(rTrendTime&, 5)

                                                         ‘시간 값을 YYYY년MM월DD일hh시mm분ss초 변환

                                                         Set Cell = Sheet1.Range(“A”+CSTR(i + 1))

                                                         Cell.Value = rTrendTimeStr$

                                                         Set Cell = Sheet1.Range(“B”+CSTR(i + 1))

                                                         Cell.Value = Dlogval(“ANA1”,rTrendTimeStr$)

                                                         ‘ANA1의 수집데이터를 셀에 출력

                                                         Set Cell = Sheet1.Range(“C”+CSTR(i + 1))

                                                         Cell.Value = Dlogval(“ANA2”,rTrendTimeStr$)

                                                         ‘ANA2의 수집데이터를 셀에 출력

                                               Next i

                                    End If

                                    Sheet1.Calculate

                          ‘ Sheet1.PrintOut

                          DayRpt.Save

               ExcelApp.Quit

               Set ExcelApp = Empty

     End If

    End Sub

    이후 CIMONX 실행 후 스크립트 동작 시 설정한 주기로 엑셀파일이 생성되는 것을 확인 할 수 있습니다.  

     

    #트랜드#트렌드#Trend#엑셀#excel#엑셀파일#트렌드데이터#트랜드데이터#data

  • CIMON-SCADA월보인 경우는 3개월을 저장하고 있습니다. 따라서 3개월 이전의 값을 유지 하시려면 가상태그를 만들어서 보관한 후 보고서로 출력할 때 사용 하십시오.

     

    [ 예제설명]       

    스크립트에서 TimeStr(51)  함수를 사용해서 현재 월을 가져옵니다.  

    예제는 ANA1 을 실 태그로 두시고, SUM01~SUM12 는 가상태그입니다.  

    보고서에 출력 전 스크립트를 사용해서 RunScript  를 사용 하시면 됩니다.   

     

    [ 적용방법]  

    ‘ SUM01, SUM02 ~ SUM12  까지가 ANA1  태그에 대한 월 적산합이 들어 갑니다.  

     보고서 셀에는 TLogVal(“SUM01~SUM12″,”-1 “, 적산합) 이 아닌 그냥 SUM01, SUM02  처럼 쓰면 됩니다.  

      

    prevMon$ = TimeStr(51) 

    curMon$ = prevMon$ 

    curMon$ = TimeStr(51) 

        if curMon$ <> prevMon$ then               달이 바뀌었는지 체크  

    nSum = TLogVal (“ANA1″,”-1 “,” 적산값“)               ‘ 전월 적산값을 구한다  

           SetTagVal   “SUM”+prevMon$ , nSum                  전월 태그에 값을 밀어 넣는다  

           prevMon$ = curMon$ 

        end if 

    End Sub 

     

  • 안녕하세요.

    CIMON입니다.

     

    명령식과 스크립트는 태그값 쓰기의 표현 형식 및 내부 함수 사용시 표현 형식에서 차이가 있습니다.

     

    [ 예문]  

     

    1.  태그값 쓰기 (  예를 들어 TAG1  TAG2의  값을 넣을 경우 )  

    ex)

    Sub changevlaue()

    vlaue = gettagval(“TAG1”)

    settagval “TAG2”, value

    end sub

     

    2. 내부함수 사용

    내부 함수를 사용시 명령식은 도움말의 내부함수 표현을 그대로 사용하면 됩니다.  하지만 스크립트의 경우 함수를 사용하여 어떤 값을 쓰거나 지령을 내릴 경우 함수에 괄호가 들어가지 않으며,  그 반대로 값을 불러오거나 상태를 받아올 경우 괄호가 들어 갑니다.

    예를 들어 다음 과 같은 경우 차이점이 발생 합니다.

    1) 트렌드 모드 변경 함수를 이용하여 지령을 내릴 경우

     TrendSetPenVal() 의 자세한 내용은 도움말에 연산식 및 명령식에서 확인하실 수 있습니다.

     – 값 종류에 따라 다음과 같은 Pen에 관련된 값이 설정 됩니다.

    0 : Pen의 이름 (설정값을 문자열로 입력합니다.)

    1 : Pen의 주석 (설정값을 문자열로 입력합니다.)

    2 : Pen에 설정된 최소값

    3 : Pen에 설정된 최대값

    4 : Pen의 연결방법 (0:표시없음, 1:선연결, 2:계단형)


    2) 
    트렌드 모드 함수를 이용하여 펜의 상태를 확인하는 경우

    ※ GetTrendMode()의 자세한 내용은 도움말에 연산식 및 명령식에서 확인하실 수 있습니다.

    – 지정된 Trend Object가 RealTime 트렌드인 경우에는 0을, Historical Trend인 경우에는 1을 출력합니다.

    [T I P] 스크립트 함수와 내부함수의 차이점  

    • 스크립트 : Microsoft 사의 Visual Basic 을 기반으로 만들어진 일종의 컴파일러( 컴퓨터가 인식할 수 있는 언어) 를 사용합니다.  여기서 제공되는 함수를 이용하여Cimon 의 데이터를 접근하여 수정할 수 있습니다.
    • 내부함수( 연산식) : Microsoft 사의 Visual Basic 에서 제공하는 라이브러리를 이용하여 Cimon 을 실행할 때 유용한 함수를 직접 만들어서 Cimon 프로그램 내부에서만 이용할 수 있도록 되어진 함수 입니다.  예를 들어 태그동작이나 터치동작 같은 오브젝트 사용시 동작명령어에 사용할 수 있습니다.  이러한 내부함수는 스크립트 내부에서 사용이 가능합니다.

     

    언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.

    감사합니다.

  • 안녕하세요,

    CIMON입니다.

     

    CIMON-SCADA 에서 사용하는 FEP 포트는 UDP 1609 이며,

    다음 공유기 설정 방법을 통해 적용할 수 있습니다.

     

    [적용 방법]

    ipTIME 공유기를 예로 들어 설명합니다.

    1. 공유기 웹 설정 화면에 진입합니다.

    [고급설정]-[NAT/라우터 관리]-[포트포워드 설정] 메뉴를 선택합니다.

    2. ‘포트포워드 설정’ 화면에서 다음과 같이 설정합니다.

    (1) 규칙 이름을 입력한 후, 내부 IP를 입력합니다. 현재 PC의 IP 어드레스를 사용하려면 ‘현재 접속된 PC의 IP주소로 설정’을 선택합니다.

    (2) 프로토콜을 입력합니다. CIMON-FEP는 UDP 1609 포트를 사용합니다. 외부포트 및 내부포트 입력란에 1609를 입력합니다.

    (3) ‘추가’를 선택합니다.

     

    언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.

    감사합니다.

  • 안녕하세요.

    CIMON입니다.

     

    CIMON-SCADA에서는 기본적으로 아날로그 값이 10진수로 표현됩니다.

    XG 5000 내에서는 디바이스 모니터의 데이터 표시 형식이 ‘명령어에 따른 표시’로 기본값 설정 되어 있습니다.

    이 상태에서 CIMON-SCADA로 아날로그 데이터를 읽어올 경우, 태그값이 각각 다르게 표시될 수 있습니다.

    이 값을 동일하게 맞추고자 하실 경우, 다음 방법을 통해 적용하실 수 있습니다.

     

    [적용 방법]

    XG5000 내 [도구] – [옵션]으로 진입합니다.

    모니터 표시 형식을 ‘명령어에 따라서 표시’에서 ’10진수로 표시’로 변경하여 적용 가능합니다.

     

    언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.

    감사합니다.

  • 안녕하세요.

    CIMON입니다.

     

    스크립트를 작성하실 때, While문 또는 For 문의 중간에 Sleep 함수가 없을 경우 리소스를 계속 점유하여 CPU 사용률이 100%까지 올라가게 됩니다.

    While ~ WEnd문이 실행 중일 경우, 이 문장 사이에 sleep 함수가 있어야 이러한 현상을 방지할 수 있습니다.

     

    예)

    Sub Test()

    While 1

    SetTagVal “TAG1”, 1

    SetTagVal “TAG2”, 1 Sleep(100) Wend

    End Sub

    ======================

     

    언제나 고객을 먼저 생각하는 CIMON이 되겠습니다.

    감사합니다.