싸이텍

**싸이텍**(Citect)은 오스트레일리아의 자동화 및 제어 산업에 특화된 소프트웨어 회사였으며, 현재는 슈나이더 일렉트릭의 사업부 중 하나이다. 주력 상품으로는 싸이텍 스카다(CitectSCADA), 히스토리안(CitectHistorian), 앰플라(Ampla)가 있다.
# 역사
싸이텍은 1973년 알파 러밸이라는 업체의 자회사로 시작하였으며, 당시의 이름은 컨트롤 인스트루먼테이션(Control Instrumentation)이었다. 이후 앞 글자를 따서 싸이 테크놀러지(Ci Technologies)가 되었으며, 주력 상품이 된 싸이텍 스카다의 이름을 따 다시 싸이텍으로 사명을 바꾸었다. 싸이텍은 소프트웨어 개발 업체로 알려졌지만 전문적인 서비스 부서도 함께 운영하고 있었으며 이것은 싸이텍의 사업 성공에 큰 도움을 주었다. 2006년 슈나이더 일렉트릭 그룹에 인수되었고,url-status=dead 2008년 말 개별업체로서의 주식 거래가 중단되며 완전히 슈나이더 일렉트릭에 합병되었다. 2011년 3월, 모기업의 일부 다른 자회사들과 함께 오스트레일리아 뉴사우스웨일스주의 맥쿼리 파크에 위치한 사옥으로 이전하였다.
# 상품

## 앰플라
앰플라는 생산관리 통합 솔루션(Manufacturing Execution Systems, MES)이다.
## 히스토리안
히스토리안은 생산 및 자동화에 대한 정보를 수집하고 분석하는 데이터 저장/보고 프로그램(Data storage and reporting software)이다. 리브랜딩에 따라 싸이텍 히스토리안(CitectHistorian) 또는 비지오 히스토리안(VijeoHistorian)으로 판매된다.
## 싸이텍 스카다
https://sw.aveva.com/monitor-and-control/hmi-supervisory-and-control/citect-scada 싸이텍 스카다는 HMI(Human Machine Interface, 인간과 기계 인터페이스)/스카다 소프트웨어이다. 프로세스 자동화 솔루션의 일종이며 생산성 향상과 비용 절감 효과가 있다."삼영시스템, 슈나이더 솔루션 도입 후 생산량·효율성↑",*아이뉴스 24*, 2012년 2월 6일 확인. OPC(OLE for process control, 공정 제어를 위한 OLE) 디바이스 드라이버 또는 싸이텍 스카다 전용 "네이티브" 드라이버를 통해 슈나이더 일렉트릭 및 기타 여러 회사의 프로그래머블 로직 컨트롤러(PLC)를 지원하며, 제한적이지만 사용자가 직접 드라이버를 제작할 수도 있다. 함께 제공되는 싸이텍 그래픽 빌더를 통해 GUI를 제작할 수 있으며, 이를 위해 산업 현장과 관련된 여러 가지 그래픽 꾸러미를 제공한다. 연동해서 쓸 수 있는 프로그래밍 언어로 싸이코드와 비주얼 베이직 포 애플리케이션(VBA)이 있다. 싸이코드로 프로그램을 작성하고 디버깅을 할 수 있는 IDE형태의 싸이코드 에디터 역시 스카다 소프트웨어와 함께 제공된다. 소프트웨어 구성에 따라, 비지오 싸이텍(VijeoCitect), 파워로직 스카다(PowerLogicSCADA)등의 리브랜딩이 존재하며 핵심적인 기능을 공유한다.
### 도스용 버전
도스용 버전은 마틴 로버츠에 의해 개발되었으며 1987년에 발표되었다. 당시의 구성은 dBASE포맷의 환경설정 데이터베이스, 256컬러 비트맵 및 애니메이션 파일이었다. Dr. Halo당시의 대한민국에는 닥터 할로라는 이름으로 널리 알려진 드로잉 프로그램으로 디지털 리서치사의 상품이었다.로 사용자가 직접 그래픽을 작성할 수 있었으며, "애니메이션 포인트"(Animation Points)라는 개념을 통해 이 그래픽을 원하는 곳에 배치할 수 있었다. 장치와의 데이터 입출력 통로가 되는 "태그"(Tags)는 환경설정 데이터베이스를 통해 정의되었으며, 스카다 소프트웨어가 통신하고자 하는 PLC 장치의 주소를 지정하는 방식이었다. 태그를 애니메이션 포인트에서 참조함으로써 사용자들은 "작동 중", "정지", "오류 발생"과 같은 장치의 상태를 실시간으로 파악할 수 있었다. 이 도스용 버전은 여러 장치가 사용하는 다양한 시리얼 통신채널을 지원했다. PC에 기본 내장되어 있었던 시리얼 포트를 이용하는 것도 있었고, 특정 장치를 위해 설계된 별도의 애드온 통신카드를 사용하는 것도 있었다. 이에 따른 다양한 통신 프로토콜을 드라이버를 통해 자체 지원하였으며 필요에 따라 새 드라이버를 개발하기도 했던 것이 싸이텍의 장점이 되었다. 이 때는 ISA슬롯에 장착되는 32비트 보조 프로세서를 탑재한 애드온 카드를 통해 동작했는데, 이것은 당시의 80286과 80386 PC의 성능이 그다지 좋지 않았기 때문이었다.
### 마이크로소프트 윈도우용 버전

#### 버전 1
윈도용 첫 버전(윈도용 싸이텍, Citect for Windows)은 1992년에 출시되었다. 마이크로소프트 윈도우가 대중화되고 PC의 성능이 향상됨에 따라, 애드온 카드가 없이도 동작이 가능해졌다. 환경 설정 작업은 기존 버전과 흡사했지만, 윈도용이었기 때문에 더 직관적이 되었다. 이 윈도용 버전은 아가일 다이아몬드(Argyle Diamonds)의 요청에 의해 개발되었다. 이 회사에서는 처음에 하니웰의 제품을 사용하려고 했으나 현장을 통해 해당 제품과 맞지 않는 부분이 기술자들에 의해 지적되었다. 아가일 다이아몬드는 싸이텍의 윈도용 제품 개발에 백만 달러를 투자했고, 이때 설계된 관련 기능 일부(다중 디지털 경보 등)는 버전 7까지도 남아 있다.
#### 버전 2
1993년, BHP 아이언 오어라는 업체에서 오스트레일리아 서부에 위치한 헤들렌드 항의 시설 운용 시스템을 윈도용 싸이텍으로 변경하였다. 당시에 진행된 대규모 설치 과정에서, 버전 1이 가지고 있던 제약 사항이 많이 드러났다. 버전 2는 이러한 제약을 완화하기 위해 개발되었다. 앤드류 앨런에 의해 진행된 그래픽 환경설정 부분이 주요 변경점이었는데, 이 때 Dr. Halo와 애니메이션 포인트 기반이던 그래픽이 "CTG"(싸이텍 그래픽스) 체계로 바뀌었다. CTG는 비트맵 그래픽 파일과 애니메이션 포인트를 파일 기반의 하나의 객체로 모은 것으로, 위지위그방식으로 그래픽을 표현할 수 있게 해 주었다.
#### 버전 3, 4
버전 3은 디바이스에 대한 통신 에러를 나타내는 기능과 같은, 이전 버전에 이미 구현되었어야 했을 기능들을 추가하는 데에 중점을 두었다. 버전 2가 약간 불안정한 면이 있었던 반면, 버전 3은 매우 안정적이 되었다. 버전 4는 기본적으로 버전 3과 같지만, 윈도우 NT에서의 사용을 위해 32비트기반으로 변환되었다.
#### 버전 5, 6
당시 싸이텍은 오스트레일리아의 PC기반 시스템 운용 제어 소프트웨어 시장에서 높은 점유율을 가지고 있었지만, 타사 제품들도 비슷한 특징과 성능을 가지고 경쟁하고 있는 상황이었다. 이러한 상황을 극복하기 위하여 버전 5는 기존의 성능과 기능을 극대화하는 방향으로 개발되었다. 버전 6 역시 이러한 방향으로 개발되었으며, 기존의 폴링 방식의 실시간 제어 시스템에 더해서 스카다 시스템에 어울리는 기능들을 더 추가하였다.
#### 버전 7
버전 7은 2007년 8월에 출시되었다. 윈도우 비스타를 처음으로 지원한다. 버전 7.20에서는 윈도우 7을 지원하며, 싸이텍 스카다를 통한 펠코 카메라 지원 등의 변경점이 있었다."What's New - CitectSCADA V7.20" url=https://web.archive.org/web/20110720021434/http://www.citect.com/index.php?option=com_content&view;=article&id;=1629&Itemid;=1647,*슈나이더 일렉트릭*, 2011년 10월 20일 확인.
# 싸이코드
**싸이코드**(Cicode)는 싸이텍 스카다에서 사용되는 프로그래밍 언어이다. 문법이 C언어 또는 파스칼과 매우 흡사하며, 이들과의 차이는 싸이코드에는 포인터류의 개념이 없다는 것이다. 방대한 양의 API가 제공되므로, 멀티 스레딩과 유사한 동시 작업 수행 및 세마포어를 사용하는 등의 고수준의 프로그래밍을 할 수 있다. 다음 싸이코드 예제는 로그 정보를 파일에 저장하는 함수를 나타낸다. `

FUNCTION I0_Trace(STRING sPrompt)

INT hDev;
INT hTime;
STRING sText;

IF hTraceOn THEN
IF (StrLeft(sPrompt, StrLength(sMask)) = sMask) THEN
TraceMsg(sPrompt);

hTime = TimeCurrent();
sText = TimeToStr(hTime, 2)+" "+TimeToStr(hTime, 1)+" "+sPrompt;

SemWait(hDebugSem, 10);
FileWriteLn(hDebugFile, sText);
SemSignal(hDebugSem);
END
END
END

`