COM["이름"] 으로 Communication Editor 에 등록된 통신 채널(TCP Server/Client,
Serial, Modbus, MES, AWS S3 등)에 접근합니다. 이벤트 함수로 비동기 수신/연결
이벤트를 받고, WriteStr 또는 SendCustomData 로 송신합니다.
// 수신 이벤트 연결
COM[ "MES" ].LinkModuleName = "MES" ;
COM[ "MES" ].LinkFunctionName = "OnReceiveFromServer" ;
// 연결 이벤트 연결
COM[ "MES" ].ConnectedLinkModuleName = "MES" ;
COM[ "MES" ].ConnectedLinkFunctionName = "OnConnected" ;
FUNCTION OnReceiveFromServer ( string data )
{
Log ( "READ: '{0}'" , data);
array items = STR. ParseCommaString (data);
for (i, 0 , items.Count - 1 )
{
string line = items[i];
if (line == "" )
{
continue ;
}
array pair = STR. ParseSplitString (line, ":" );
string name = pair[ 0 ];
string value = pair[ 1 ];
if ( TodoSomething (name, value) == false )
{
continue ;
}
}
return true ;
}
FUNCTION SendToServer ( string data )
{
if (COM[ "MES" ]. WriteStr (data) == false )
{
return false ;
}
return true ;
}
STX/ETX 가 붙은 길이+유닛 번호 프레임을 구성해 송신하고, 응답을 파싱 후
타임아웃 대기.
FUNCTION Send ( int unit , string cmd , string data , bool wait )
{
if (COM[ "Cube" ]. IsOpen () == false )
{
return false ;
}
int unit_no = Common :: GetUnitNo (unit);
ResponseOk = false ;
string sendData ;
if (STR. IsNullOrWhiteSpace (data))
{
sendData = MakeSendData (unit_no, cmd);
}
else
{
sendData = MakeSendData (unit_no, cmd + "," + data);
}
LastCommand = cmd;
if (COM[ "Cube" ]. WriteStr (sendData) == false )
{
return false ;
}
if (wait == false )
{
return true ;
}
int start = SYS. GetTickCount ();
while ( true )
{
if (ResponseOk)
{
break ;
}
Sleep ( 20 );
if (SYS. GetTickCount () - start > TCP_TIMEOUT)
{
return false ;
}
}
return ReplyOk;
}
시그니처 설명 bool Open(void) 연결 시작 void Close(void) 연결 종료 bool IsOpen(void) 연결 상태 bool IsLiveConnection(void) 라이브 체크 bool OpenTcpIpServer(void) / void CloseServer(void) / bool IsOpenServer(void) 서버 모드 int GetCount(void) 접속 클라이언트 수
시그니처 설명 bool WriteStr(string data) 문자열 송신 (프로토콜 래핑) bool WriteStrRaw(string data) 원시 송신 bool SendCustomData(string data) 커스텀 포맷 송신 bool SendCustomData(string group, string data) 그룹 지정 송신 bool SendCommand(string command, string data = "") 명령 송신
시그니처 설명 string ReceiveCustomData(string option = "") 커스텀 포맷 수신 bool Parse(string data) 등록된 파서 실행 void SeparateData(void) 프레임 분리 void StartCustomReadThread(void) / void StopCustomReadThread(void) 읽기 스레드 bool ReadCustom(void) 단발 읽기
시그니처 설명 bool SetValue(double value) / double GetValue(bool wait = false) 단일 값 bool SetChannelValue(int channel, double value) 채널별 값 설정 double GetChannelValue(int channel) 채널 값 조회 bool SetChannelAll(double value) 전 채널 void SetChannelMinMaxValue(int channel, double min, double max) 채널 범위
시그니처 설명 bool SetCustomConnectionParameters(void) 연결 파라미터 재설정 void SetPort(string portName) Serial 포트 지정 void IdleCheckFunc(void) Idle 체크 콜백 void SendLinkTest(void) 링크 테스트 프레임 송신 string GetDesc(void) / string ToString(void) 정보 문자열
프로퍼티 타입 설명 Name / ClassName string 식별 Address / PortName / BaudRate / IsBaudRateFix 연결 파라미터 Url / AccessKey / SecretKey / Region string HTTP/S3 파라미터 OpenOnStart bool 시작 시 자동 오픈 Filter string 수신 필터 MinDataSize int 최소 프레임 크기 CurrentChannel / MaxChannel / IsChannel 멀티채널 PacketStartDelimiter / PacketEndDelimiter / DataDelimiter string 프레임 구분자 MaxValue / MinValue int 값 범위 IdleCheckTimeSec / LinkTestTimeMsec int 주기 UseDebugLog / UseLinkTest / UseIdleTimeOut / UseInternalTimer bool 옵션 OnIdle / IsLinkTestOk / ResponseOk bool 상태
연결 필드 호출 시점 LinkModuleName + LinkFunctionName 데이터 수신 ConnectedLinkModuleName + ConnectedLinkFunctionName 연결 상태 변화 OnParseFunctionName 커스텀 파서
수신 콜백은 통신 스레드에서 호출 — UI 업데이트는 반드시 디스패처를 통해.
타임아웃 없는 while 대기는 금물 → SYS.GetTickCount() 로 elapsed 관리.
바이너리 프로토콜은 WriteStrRaw + PacketStartDelimiter/EndDelimiter 조합이 안정적.
서버 API 호출은 SYS.SendHttpGet/Post/Delete 헬퍼를 우선 사용 (SYS.HTTP_ERROR_STR 리턴값 체크).