X-SCADA, .Net Framework 연동 방법 (XISOM.NET Library 활용)

ETC

X-SCADA, .Net Framework 연동 방법 (XISOM.NET Library 활용)

관리자 0 175

XISOM.NET Library(X-SCADA 또는 X-DAS + Visual Studio)는 별도의 미들웨어 없이 X-SCADA 또는 X-DAS를 Visual Studio 프로그래밍을 통해 X-SCADA or X-DAS Component Class와 연동이 가능합니다. 또한, 확장성이 뛰어나기에 다른 소프트웨어와 손쉽게 Integration할 수 있습니다.


c643a6152da0b67b44955ace177f6567_1669265616_6051.jpg<XISOM.NET Library 구성도>


XISOM.NET Library의 주요 기능 및 브로슈어 등 더 자세한 정보는 아래 링크에 접속하시면 얻을 수 있습니다.


https://www.xisom.com/ko-kr/php/products/xnet-library.php




1. 프로젝트 참조 등록하기

c643a6152da0b67b44955ace177f6567_1669265657_1019.png
- X-SCADA 설치 Folder에 있는 DLL 파일을 참조로 등록

* Xisom.Scada.Browser.dll

* Xisom.Scada.Core.dll

* Xisom.Scada.Model.dll

* Xisom.Scada.WinForm.dll



2. X-SCADA Interface 등록하기

c643a6152da0b67b44955ace177f6567_1669265673_5525.png
① Scada Context 초기화

② X-SCADA에서 작화 된 xix 파일을 DocumentContext에 할당

③ DocumentContext의 Document 할당

④ DocumentContext Dispose

⑤ ScadaContext.Uinitalize


※ X-SCADA xix 파일 프로젝트에 포함

- 출력디렉토리로 복사 설정



3. X-SCADA Tag에 Value Changed Event 등록하기

c643a6152da0b67b44955ace177f6567_1669265699_9336.png
① Event 등록

item.LiveChanged += item_LiveChanged;


② Event 등록 가능한 Tag 종류

- Analog Tag

- Digital Tag

- String Tag

※ Group Tag는 Event 등록 불가


③ 전체 Tag 목록 추출

Program.document.Tags



4. Tag Value Changed Event 처리하기

c643a6152da0b67b44955ace177f6567_1669265753_5915.png
① Tag object casting

IDataTag dataTag = sender as IDataTag;


② Tag Name 추출

dataTag.Name //GroupTag 제외


③ Tag Full Name 추출

dataTag.FullName //GroupTag 포함


④ Tag Descript 추출

dataTag.Description


⑤ Tag 값 추출

dataTag.Value

dataTag.StringValue

dataTag.BoolValue

dataTag.DoubleValue


⑥ Tag 종류 확인

dataTag.IsAnalog()

dataTag.IsGroup()

dataTag.IsDigital()

dataTag.IsString()


⑦ Tag 종류에 대한 세부 속성

// Tag의 세부속성을 접근하기 위해서는 해당 형으로 변환

var tag = dataTag as IStringTag; 

var tag = dataTag as IDigitalTag; 

var tag = dataTag as IAnalogTag;


⑧ 그룹에 대한 Children Tag

var g = Program.document.Tags.GetByFullName(Group명);

foreach (var tag ing.Children) 

{

...

}

var port = network.RemotePort; //port


⑨ 특정 Tag 정보 추출

Program.document.Tags.GetByFullName(FullTag명); 


⑩ Tag 값쓰기

var tag = Program.document.Tags.GetByFullName(FullTag명);

tag.Value = “값";


⑪ Tag 값읽기

var tag = Program.document.Tags.GetByFullName(FullTag명);

var value = tag.Value;


⑫ Device 정보 추출

var tag = Program.document.Tags.GetByFullName(FullTag명);

var device = tag.Device as IDevice; //Device 정보

device.IsAlive //Device 연결상태

//Network 정보추출

var network = device.Connections[0] as INetworkConnection;

var address = network.RemoteAddress; //IP



5. X-SCADA로 작화한 HMI를 WinForm에 적용하기

1) 도구상자에 ScadaBrowser 등록하기

(X-SCADA 설치 폴더)\Xisom.Scada.Browser.dll

c643a6152da0b67b44955ace177f6567_1669265820_0536.png
 

2) X-SCADA에서 작화한 HMI의 Page 등록

browser.Navigate(Program.document.Pages[0])

페이지가 여러 개일 경우 해당 페이지 index 지정

c643a6152da0b67b44955ace177f6567_1669265833_3311.png



6. Build 전 반드시 설정해야 하는 항목

1) App.config 설정

c643a6152da0b67b44955ace177f6567_1669265847_9706.png 

 ......

<!--- for plugins -->

<runtime>

<assemblyBinding xmlns="urn:schemasmicrosoft-com:asm.v1">

<probing

privatePath="Views;Protocols;Drivers"/>

</assemblyBinding>

</runtime>

.......


2) X-SCADA 설치 폴더에 있는 dll 파일을 복사하여 프로젝트에 추가

- post.bat 배치 파일 생성 및 작성

- 프로젝트 속성의 빌드 이벤트 등록

c643a6152da0b67b44955ace177f6567_1669265880_273.png
[빌드 후 이벤트 명령줄(O)]

$(ProjectDir)\Post.bat $(ConfigurationName)



7. post.bat 배치 파일 내용 

@ECHO OFF

SET XSCADA_DIR=C:\XISOM\X-SCADA

SET OUTPUT_DIR=.

COPY /Y "%XSCADA_DIR%\license4.hpo" "%OUTPUT_DIR%"

COPY /Y "%XSCADA_DIR%\NAudio.dll" "%OUTPUT_DIR%"

COPY /Y "%XSCADA_DIR%\Xisom.*.dll" "%OUTPUT_DIR%"

COPY /Y "%XSCADA_DIR%\DocumentFormat.OpenXml.dll" "%OUTPUT_DIR%"

COPY /Y "%XSCADA_DIR%\apidsp_windows.dll" "%OUTPUT_DIR%"

COPY /Y "%XSCADA_DIR%\apidsp_windows_x64.dll" "%OUTPUT_DIR%"

COPY /Y "%XSCADA_DIR%\hasp_net_windows.dll" "%OUTPUT_DIR%"

COPY /Y "%XSCADA_DIR%\hasp_windows_25108.dll" "%OUTPUT_DIR%"

COPY /Y "%XSCADA_DIR%\hasp_windows_x64_25108.dll" "%OUTPUT_DIR%"

IF NOT EXIST "%OUTPUT_DIR%\Drivers" MKDIR "%OUTPUT_DIR%\Drivers"

XCOPY /S /E /Y "%XSCADA_DIR%\Drivers\*.*" "%OUTPUT_DIR%\Drivers"

IF NOT EXIST "%OUTPUT_DIR%\Protocols" MKDIR "%OUTPUT_DIR%\Protocols"

XCOPY /S /E /Y "%XSCADA_DIR%\Protocols\*.*" "%OUTPUT_DIR%\Protocols"

IF NOT EXIST "%OUTPUT_DIR%\Views" MKDIR "%OUTPUT_DIR%\Views"

XCOPY /S /E /Y "%XSCADA_DIR%\Views\*.*" "%OUTPUT_DIR%\Views"

IF NOT EXIST "%OUTPUT_DIR%\Licenses" MKDIR "%OUTPUT_DIR%\Licenses"

XCOPY /S /E /Y "%XSCADA_DIR%\Licenses\*.*" "%OUTPUT_DIR%\Licenses"



8. X-SCADA HTTP Server 실행하기 

c643a6152da0b67b44955ace177f6567_1669265953_062.png
 

 /// <summary>

/// HttpServer 시작

/// </summary>

private static void StartHttpServer() {

var httpService = GetHttpService();

if (httpService == null) return;

try {

httpService.Start();

} catch (Exception e) {

Debug.WriteLine(e.Message);

Debug.WriteLine(e.StackTrace);

StopHttpServer();

MessageBox.Show("Failed to start the http server.");

}

}


/// <summary>

/// HttpServer 중지

/// </summary>

private static void StopHttpServer() {

var httpService = GetHttpService();

if (httpService == null) return;

httpService.Stop();

}


/// <summary>

/// IHttpService를 가져온다.

/// </summary>

private static IHttpService GetHttpService() {

var context = Program.documentContext;

if (context == null) return null;

return context.GetService(typeof(IHttpService)) as IHttpService;

}




0 답글
제목