PDComm.GemHost
클래스
HSMS TCP 연결 하나를 사용하는 동기식 GEM(SEMI E30) 호스트 끝점입니다.
public sealed class GemHost : GemEndpoint호스트는 GEM 요청을 보내고, 그 응답을 GemEndpoint.HandleEvent에서 GemResult 객체로 받습니다. 응답과 요청은 GemResultInfo.Token으로 대응시킵니다. 장비의 S1F1(Are You There)과 S1F13(Establish Communications)에는 자동으로 응답합니다. 요청 메서드는 응답이 도착할 때가 아니라 전송이 메시지를 수락할 때 반환됩니다. GEM 요청은 한 번에 최대 32개까지 대기할 수 있으며, 요청된 ID는 GemHostOptions.MaxPendingIds를 공유합니다.
애플리케이션은 GemEndpoint.Poll, GemEndpoint.NextEvent, GemEndpoint.HandleEvent로 끝점을 구동합니다. 호출은 내부 잠금으로 직렬화됩니다. 폴링 스레드에서 끝점을 실행하려면 GemHostWorker를 사용합니다.
using GemHost host = GemHost.Create("127.0.0.1:5000", transportOptions,
new GemHostOptions { MaxPendingIds = 64, ItemLimits = limits });
host.Start();
bool began = false;
while (running)
{
host.Poll();
if (!began && host.GetTransportState().State == HsmsConnectionState.Selected)
{
host.BeginCommunication();
began = true;
}
HsmsEvent? current;
while ((current = host.NextEvent()) is not null)
{
using (current)
using (GemResult result = host.HandleEvent(current))
{
GemResultInfo info = result.GetInfo();
if (info.Kind != GemResultKind.Response) continue;
if (info.Outcome == GemOutcome.CommunicationEstablished) host.AreYouOnline();
else if (info.Outcome == GemOutcome.EquipmentIdentity) host.RequestStatusValues([1, 2]);
}
}
Thread.Sleep(2);
}
host.Stop();멤버
AcknowledgeAlarm
메서드
수신한 S5F1 알람 보고에 S5F2(Alarm Report Acknowledge) 응답을 보냅니다.
public void AcknowledgeAlarm(GemResult result, byte acknowledgement)호스트는 알람 보고에 자동으로 확인 응답하지 않습니다. 결과가 보고를 소유하므로 원래 HsmsEvent는 이미 해제되었어도 됩니다. 응답이 송신 대상으로 수락된 뒤에만 결과가 확인됨으로 표시됩니다. 백프레셔나 할당 실패 후에는 다시 호출할 수 있습니다. 호출은 result의 getter와 함께 직렬화됩니다.
매개변수
| 이름 | 설명 |
|---|---|
result | W 비트가 설정된, 수신한 알람 보고의 결과(GemOutcome.AlarmReceived)입니다. |
acknowledgement | 확인 코드(ACKC5)이며 0~63입니다. 0은 수락을 뜻합니다. |
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 끝점 또는result가 해제되었습니다.PdcommException예외:acknowledgement가 63보다 크거나result가 알람 결과가 아니면PdcommStatus.InvalidArgument입니다. 결과가 목록 응답이거나 W 비트 없이 보낸 보고이거나, GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 보고에 이미 확인 응답했거나 보고가 다른 끝점, 연결 또는 선택에 속하면PdcommStatus.StaleToken입니다. 전송이 응답을 수락할 수 없으면PdcommStatus.Backpressure입니다. 그 밖의 네이티브 실패 상태일 수도 있습니다.
AcknowledgeEvent
메서드
장비에서 받은 이벤트 보고서에 대해 S6F12(Event Report Acknowledge)를 보냅니다.
public void AcknowledgeEvent(GemResult result, byte acknowledgement)호스트는 S6F11에 자동으로 확인 응답하지 않습니다. 애플리케이션이 보고서를 수락하거나 거부한 뒤에 이 메서드를 호출합니다. 성공하면 결과가 확인됨(GemEventInfo.Acknowledged)으로 표시되고 GemResultInfo.Acknowledgement와 GemResultInfo.ReplySent가 갱신됩니다. 할당 실패나 백프레셔 실패 후에는 결과가 바뀌지 않으므로 확인 응답을 다시 시도할 수 있습니다. 이 호출은 호스트의 잠금과 결과의 잠금을 보유하므로 결과의 getter와 경합하지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 결과가 GemOutcome.EventReceived인, 수신한 S6F11의 결과입니다. |
acknowledgement | 확인 코드(ACKC6)이며 0~63입니다. 0은 수락을 뜻합니다. |
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 호스트 또는result가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.acknowledgement가 63보다 크거나 결과가 수신한 이벤트 보고서가 아니면PdcommStatus.InvalidArgument, 이벤트에 이미 확인 응답했거나 다른 끝점, 연결 또는 선택에서 받은 이벤트이면PdcommStatus.StaleToken, 응답을 보낼 수 없으면 다른 상태입니다.
AreYouOnline
메서드
장비에 S1F1(Are You There)을 보냅니다.
public HsmsToken AreYouOnline()GemCommunicationState.Communicating이 필요합니다. 유효한 S1F2 응답은 GemOutcome.EquipmentIdentity를 만들며, 그 본문은 모델(MDLN)과 소프트웨어 리비전(SOFTREV)의 리스트입니다.
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 통신이 수립되지 않았으면PdcommStatus.InvalidState이고, 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
CancelProgramGrant
메서드
응답한 S7F1 요청으로 활성화된 허가를 철회합니다.
public void CancelProgramGrant(GemResult result)해제된 허가는 더 이상 저장소 용량을 예약하지 않으며, 이후 해당 S7F3은 허가되지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 응답으로 프로그램을 허가한 원래 S7F1 요청 결과입니다. 같은 PPID의 다른 결과로는 충분하지 않습니다. |
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 끝점 또는result가 해제되었습니다.PdcommException예외: 결과가 허가가 남아 있는 응답한 S7F1 요청이 아니거나, 다른 끝점이나 이전 연결 또는 선택에 속하면PdcommStatus.StaleToken입니다. 결과가 프로그램 결과가 아니거나 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
ChangeConstants
메서드
새 장비 상수 값을 담은 S2F15(New Equipment Constant Send)를 보냅니다.
public HsmsToken ChangeConstants(ReadOnlySpan<GemConstantChange> changes)GemCommunicationState.Communicating이 필요합니다. 유효한 S2F16 응답은 GemResultInfo.Acknowledgement에 EAC가 있는 GemOutcome.ConstantChangeAck를 만듭니다. 호스트는 장비의 상수 정의를 알지 못합니다. 형식, 개수, 범위는 장비가 검사하며, EAC 0이 물리적 설정이 바뀌었음을 증명하지는 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
changes | 요청 순서대로 나열한 ECID/ECV 쌍입니다. ID는 ASCII 아이템 또는 스칼라 정수 아이템이어야 합니다. 아이템은 복사됩니다. |
반환값
요청의 토큰입니다.
참고
ArgumentNullException예외: 변경 항목, 또는 그 ID나 값이null입니다.ObjectDisposedException예외: 끝점 또는 변경 항목의 아이템이 해제되었습니다.PdcommException예외: 아이템이나 메시지가GemHostOptions.ItemLimits를 초과하거나 값에 JIS-8 아이템이 있으면PdcommStatus.LimitExceeded입니다. ID가 ASCII 아이템도 스칼라 정수 아이템도 아니면PdcommStatus.InvalidArgument입니다. 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
ConfigurePrograms
메서드
프로세스 프로그램 저장소를 설치하고 스트림 7 프로세스 프로그램 거래를 활성화합니다.
public void ConfigurePrograms(GemProgramOptions options, string? path = null)끝점이 중지된 동안 한 번 호출합니다. 경로를 지정하면 저장소는 저장 파일 옆의 잠금 파일로 단독 쓰기 잠금을 얻고, 저장된 프로그램을 로드하여 검증합니다. 파일이 없으면 빈 저장소로 시작합니다. 열기나 로드가 실패하면 저장소는 설치되지 않으며 기존 파일은 그대로 남습니다. 이후 변경이 있을 때마다 완전한 새 파일을 쓰고, 이전 파일을 교체하며, 부모 디렉터리를 동기화합니다. 이 파일 I/O는 호출 스레드에서 동기적으로 실행됩니다. PPID는 파일 이름으로 사용하지 않습니다.
그 뒤에는 수신한 S7F1, S7F3, S7F5, S7F17, S7F19 1차 메시지가 GemOutcome.ProgramReceived로 보고되며 GemHost.RespondProgram을 기다립니다. 자동으로 응답하거나 저장하는 것은 없습니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 저장소 한도, 요청 예산, 허가 정책입니다. |
path | 저장 파일 경로입니다. 저장소를 메모리에만 두려면 null이나 빈 문자열을 지정합니다. 부모 디렉터리가 있어야 합니다. |
참고
ArgumentNullException예외:options가null입니다.ArgumentOutOfRangeException예외:GemProgramOptions.GrantPolicy가 정의된 값이 아닙니다.ArgumentException예외:path에 NUL 문자가 있거나 UTF-8로 인코딩할 수 없습니다.ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 끝점이 중지되어 있지 않거나 프로그램이 이미 구성되어 있으면PdcommStatus.InvalidState입니다. 보류된 전송 이벤트가 대기 중이거나 다른 기록기가 저장 잠금을 보유하고 있으면PdcommStatus.Backpressure입니다. 파일을 열거나 읽을 수 없으면PdcommStatus.IoError입니다.path에 파일 이름이 없으면PdcommStatus.InvalidArgument입니다. 파일이 유효한 프로그램 저장소가 아니면PdcommStatus.InvalidData입니다. 파일이GemProgramOptions.MaxSerializedBytes보다 크거나 내용이 저장소 한도를 초과하면PdcommStatus.LimitExceeded입니다.
ConfigureSpoolHost
메서드
호스트 스풀링 요청을 활성화하고 그 한도를 설정합니다.
public void ConfigureSpoolHost(GemSpoolHostOptions options)GemEndpoint.Start 전에 한 번 호출합니다. 호스트는 자체 스풀을 보관하지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 요청의 한도와 호스트가 수락하는 응답의 한도입니다. |
참고
ArgumentNullException예외:options가null입니다.ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외: 끝점이 시작되었거나 스풀링 한도가 이미 구성되어 있으면PdcommStatus.InvalidState이고, 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure입니다.
ConfirmProgramReply
메서드
확인되지 않은 설치를 수락하여 저장된 응답을 보낼 수 있게 합니다.
public void ConfirmProgramReply(GemResult result)이 호출은 응답을 보내지 않고 동기화도 수행하지 않습니다. 내구성을 GemProgramDurability.Confirmed로 설정하고 저장된 응답을 송신 준비 상태로 만듭니다. 응답은 같은 모드와 결정으로 GemHost.RespondProgram을 다시 호출하여 보냅니다.
매개변수
| 이름 | 설명 |
|---|---|
result | GemProgramInfo.ConfirmationRequired가 true인 수신 S7F3 또는 S7F17 요청입니다. |
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 끝점 또는result가 해제되었습니다.PdcommException예외: 결과에 확인되지 않은 응답이 없거나, 프로그램 결과가 아니거나, 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 요청에 이미 응답했거나 요청이 다른 끝점이나 이전 연결 또는 선택에 속하면PdcommStatus.StaleToken입니다. 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
Create
메서드
HSMS 끝점을 만들고 GEM 호스트로 구성합니다.
public static GemHost Create(string numericAddress, HsmsOptions options, GemHostOptions gemOptions)매개변수
| 이름 | 설명 |
|---|---|
numericAddress | 127.0.0.1:5000 같은 숫자 IPv4 또는 IPv6 소켓 주소입니다. DNS 조회는 수행하지 않습니다. 패시브 끝점은 즉시 이 주소에 바인딩하고(포트 0이면 빈 포트를 선택), 액티브 끝점은 이 주소로 연결합니다. |
options | HSMS 전송 옵션입니다. |
gemOptions | GEM 호스트 옵션입니다. |
반환값
중지된 끝점입니다. 시작하려면 GemEndpoint.Start를 호출합니다.
참고
ArgumentNullException예외:numericAddress,options또는gemOptions가null입니다.PdcommException예외: 끝점을 만들거나 구성할 수 없었습니다. 예를 들어 숫자가 아닌 주소나 잘못된 전송 옵션이면PdcommStatus.InvalidArgument입니다.
DefineReports
메서드
장비에 S2F33(Define Report)을 보냅니다.
public HsmsToken DefineReports(uint dataId, ReadOnlySpan<GemReportSpec> reports)제출은 확인 응답이 아닙니다. 나중에 장비의 S2F34가 GemOutcome.DefineReportsAck이고 GemResultInfo.Acknowledgement에 DRACK 코드(0~4)가 있는 결과를 만듭니다. 0은 수락, 1은 공간 부족, 2는 잘못된 형식, 3은 이미 정의된 RPTID가 있음, 4는 존재하지 않는 VID가 있음입니다(SEMI E5). 호출은 끝점의 내부 잠금으로 직렬화됩니다.
매개변수
| 이름 | 설명 |
|---|---|
dataId | 요청의 데이터 ID(DATAID)입니다. |
reports | 정의할 보고서입니다. 빈 범위를 전달하면 장비에 모든 보고서와 그 연결을 삭제하도록 요청하고, 변수 ID가 없는 보고서는 해당 보고서를 삭제하도록 요청합니다. 지정 내용은 호출이 반환되기 전에 복사됩니다. |
반환값
대기 중인 S2F33/S2F34 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외: 인코딩된 요청이 호스트의 아이템 한도를 초과하게 되면PdcommStatus.LimitExceeded입니다. 그 밖에는 네이티브 상태입니다. 예를 들어 호스트가 통신 중이 아니면PdcommStatus.InvalidState, 빈 대기 요청 슬롯이 없으면PdcommStatus.Backpressure입니다.
DeleteLocalPrograms
메서드
로컬 저장소에서 프로세스 프로그램을 삭제합니다.
public GemProgramWriteInfo DeleteLocalPrograms(ReadOnlySpan<SecsItem> ids)로컬 변경에는 중지된 끝점이 필요하며 메시지를 주고받지 않습니다. 변경은 메모리에 확정되기 전에 검증되고 저장 파일에 기록됩니다. 설치 전에 실패하면 저장소는 바뀌지 않습니다.
영구 저장을 확인할 수 없어도 메서드는 반환됩니다. 이때 변경은 설치된 상태이며 GemProgramWriteInfo.Durability는 GemProgramDurability.Unconfirmed입니다. 변경이 롤백된 것처럼 다시 수행하지 마십시오.
매개변수
| 이름 | 설명 |
|---|---|
ids | 삭제할, 서로 다른 저장된 PPID이며 최대 GemProgramOptions.MaxRequestIds개입니다. 비어 있으면 모든 프로그램을 삭제합니다. |
반환값
변경이 설치되었는지 여부와 내구성 수준입니다.
참고
ArgumentNullException예외: ID가null입니다.ObjectDisposedException예외: 끝점 또는 ID가 해제되었습니다.PdcommException예외: 끝점이 중지되어 있지 않거나 프로그램이 구성되어 있지 않으면PdcommStatus.InvalidState입니다.ids의 항목이GemProgramOptions.MaxRequestIds보다 많으면PdcommStatus.LimitExceeded입니다. PPID가 잘못되었거나 중복되면PdcommStatus.InvalidArgument입니다. PPID가 저장되어 있지 않으면PdcommStatus.OutOfRange입니다. 저장 파일을 쓸 수 없으면PdcommStatus.IoError입니다. 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
DeletePrograms
메서드
장비의 프로세스 프로그램을 삭제하는 S7F17(Delete Process Program Send)을 보냅니다.
public HsmsToken DeletePrograms(ReadOnlySpan<SecsItem> ids)GemCommunicationState.Communicating이 필요합니다. PPID는 요청이 완료될 때까지 GemProgramOptions.MaxPendingIds, GemProgramOptions.MaxPendingIdentifierBytes, GemHostOptions.MaxPendingIds에 포함됩니다. 유효한 S7F18 응답은 GemResultInfo.Acknowledgement에 ACKC7이 들어 있는 GemOutcome.ProgramAckReceived를 만듭니다.
매개변수
| 이름 | 설명 |
|---|---|
ids | 삭제할 PPID이며 각각 ASCII 아이템 또는 바이너리 아이템입니다. 모든 프로그램을 삭제하려면 비워 둡니다. 아이템은 복사됩니다. |
반환값
요청의 토큰입니다.
참고
ArgumentNullException예외: ID가null입니다.ObjectDisposedException예외: 끝점 또는 ID가 해제되었습니다.PdcommException예외: 프로그램이 구성되어 있지 않거나 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. PPID가 비어 있거나 ASCII 아이템도 바이너리 아이템도 아니면PdcommStatus.InvalidArgument입니다.ids의 항목이GemProgramOptions.MaxRequestIds나 남은 대기 예산보다 많거나, PPID가 120바이트보다 길거나, 메시지가 아이템 한도를 초과하면PdcommStatus.LimitExceeded입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
EnableAlarm
메서드
알람 하나에 대한 S5F3(Enable/Disable Alarm Send) 요청을 보냅니다.
public HsmsToken EnableAlarm(uint id, bool enabled, bool replyExpected)replyExpected를 지정하면 S5F4 응답이 GemOutcome.AlarmEnableAck이고 GemResultInfo.Acknowledgement에 수신한 ACKC5가 있는 GemResult로 도착합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 알람 ID(ALID)입니다. |
enabled | 알람 보고를 활성화하려면 true(ALED 0x80), 비활성화하려면 false(ALED 0)입니다. |
replyExpected | W 비트를 설정하고 S5F4(Enable/Disable Alarm Acknowledge) 응답을 기대하려면 true입니다. |
반환값
수락된 요청의 전송 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState, 전송이 가득 찼거나replyExpected를 지정했을 때 대기 요청 테이블이 가득 찼으면PdcommStatus.Backpressure이거나, 그 밖의 네이티브 실패 상태입니다.
EnableEvents
메서드
장비에 S2F37(Enable/Disable Event Report)을 보냅니다.
public HsmsToken EnableEvents(bool enabled, ReadOnlySpan<uint> eventIds)제출은 확인 응답이 아닙니다. 나중에 장비의 S2F38이 GemOutcome.EnableEventsAck이고 GemResultInfo.Acknowledgement에 ERACK 코드(0 또는 1)가 있는 결과를 만들며, 0은 수락을 뜻합니다. 호출은 끝점의 내부 잠금으로 직렬화됩니다.
매개변수
| 이름 | 설명 |
|---|---|
enabled | 수집 이벤트 활성화/비활성화 플래그(CEED)입니다. 활성화하려면 true, 비활성화하려면 false입니다. |
eventIds | 변경할 수집 이벤트 ID(CEID)입니다. 빈 범위는 연결 여부와 관계없이 모든 이벤트를 선택합니다. ID는 호출이 반환되기 전에 복사됩니다. |
반환값
대기 중인 S2F37/S2F38 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. 예를 들어 호스트가 통신 중이 아니면PdcommStatus.InvalidState, 요청이 호스트의 아이템 한도를 초과하게 되면PdcommStatus.LimitExceeded, 빈 대기 요청 슬롯이 없으면PdcommStatus.Backpressure입니다.
EnhancedRemoteCommand
메서드
S2F49(Enhanced Remote Command) 요청을 보냅니다.
public HsmsToken EnhancedRemoteCommand(uint dataId, SecsItem objectName, SecsItem name, ReadOnlySpan<GemCommandParameter> parameters)요청에는 항상 W 비트가 설정됩니다. 아이템은 메서드가 반환되기 전에 송신 메시지에 복사됩니다. 토큰이 반환되었다는 것은 요청이 제출되었다는 뜻이며 명령이 실행되었다는 뜻이 아닙니다. S2F50 응답은 GemOutcome.EnhancedCommandAck인 GemResult로 도착합니다. 수신한 HCACK는 GemResultInfo.Acknowledgement에 있으며, 매개변수 확인 응답은 GemResult.GetEnhancedCommandAcknowledgements로 읽습니다.
매개변수
| 이름 | 설명 |
|---|---|
dataId | U4로 전송되는 데이터 ID(DATAID)입니다. |
objectName | 객체 지정자(OBJSPEC)입니다. ASCII 아이템입니다. |
name | 원격 명령 이름(RCMD)입니다. 비어 있지 않은 ASCII 아이템이거나 -128~255 범위의 스칼라 정수 아이템(I1 또는 U1로 전송)입니다. |
parameters | 전송 순서대로 나열한 명령 매개변수(CPNAME과 CEPVAL)입니다. 값은 중첩된 리스트일 수 있으며 JIS-8을 제외한 모든 형식을 사용할 수 있습니다. |
반환값
수락된 요청의 전송 토큰입니다.
참고
ArgumentNullException예외:objectName,name, 매개변수, 또는 매개변수 이름이나 값이null입니다.ObjectDisposedException예외: 끝점 또는 아이템 중 하나가 해제되었습니다.PdcommException예외:objectName이 ASCII 아이템이 아니거나,name이나 매개변수 이름이 유효한 식별자 아이템이 아니거나, 값에 JIS-8 아이템이 있으면PdcommStatus.InvalidArgument입니다. 매개변수 수나 메시지가GemHostOptions.ItemLimits를 초과하면PdcommStatus.LimitExceeded입니다. GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 전송이나 대기 요청 테이블이 가득 찼으면PdcommStatus.Backpressure입니다. 그 밖의 네이티브 실패 상태일 수도 있습니다.
GetProgram
메서드
저장된 프로세스 프로그램 본문의 복사본을 가져옵니다.
public SecsItem GetProgram(SecsItem id)매개변수
| 이름 | 설명 |
|---|---|
id | 프로세스 프로그램 ID(PPID)입니다. ASCII 아이템 또는 바이너리 아이템이며, 형식도 식별자의 일부입니다. |
반환값
PPBODY를 담은 새 아이템입니다. 호출자가 소유하며 해제해야 합니다.
참고
ArgumentNullException예외:id가null입니다.ObjectDisposedException예외: 끝점 또는id가 해제되었습니다.InvalidOperationException예외: 네이티브 라이브러리가 본문을 반환하지 않았습니다.PdcommException예외:id가 ASCII 아이템도 바이너리 아이템도 아니면PdcommStatus.InvalidArgument, PPID가 저장되어 있지 않으면PdcommStatus.OutOfRange, 프로그램이 구성되어 있지 않으면PdcommStatus.InvalidState, 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
GetProgramAt
메서드
저장소에서 지정한 위치에 저장된 프로세스 프로그램의 복사본을 가져옵니다.
public GemProgramEntry GetProgramAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 0부터 시작하는 위치이며 GemProgramState.ProgramCount보다 작아야 합니다. |
반환값
PPID와 PPBODY를 담은 새 항목입니다. 호출자가 소유하며 해제해야 합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:index가 너무 크면PdcommStatus.OutOfRange, 프로그램이 구성되어 있지 않으면PdcommStatus.InvalidState, 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
GetProgramState
메서드
프로세스 프로그램 저장소의 카운터를 가져옵니다.
public GemProgramState GetProgramState()반환값
프로그램 수, 바이트 수, 허가 수와 저장소에 저장 파일이 있는지 여부입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 프로그램이 구성되어 있지 않으면PdcommStatus.InvalidState이고, 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
GrantProgram
메서드
상대방에게 프로세스 프로그램 수락을 요청하는 S7F1(Process Program Load Inquire)을 보냅니다.
public HsmsToken GrantProgram(SecsItem id, uint length)GemCommunicationState.Communicating이 필요합니다. PPID는 요청이 완료될 때까지 GemProgramOptions.MaxPendingIds, GemProgramOptions.MaxPendingIdentifierBytes, GemHostOptions.MaxPendingIds에 포함됩니다. 유효한 S7F2 응답은 GemResultInfo.Acknowledgement에 PPGNT가 들어 있는 GemOutcome.ProgramGrantReceived를 만듭니다. 제출은 허가가 아닙니다. 허가를 받은 뒤 GemHost.SendProgram으로 프로그램을 보냅니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 프로세스 프로그램 ID(PPID)입니다. ASCII 아이템 또는 바이너리 아이템입니다. |
length | 전송할 본문 페이로드의 길이(바이트)입니다(LENGTH). |
반환값
요청의 토큰입니다.
참고
ArgumentNullException예외:id가null입니다.ObjectDisposedException예외: 끝점 또는id가 해제되었습니다.PdcommException예외: 프로그램이 구성되어 있지 않거나 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. PPID가 비어 있거나 ASCII 아이템도 바이너리 아이템도 아니면PdcommStatus.InvalidArgument입니다. PPID가 120바이트보다 길거나, 메시지가 아이템 한도를 초과하거나, 요청이GemProgramOptions.MaxPendingIds,GemProgramOptions.MaxPendingIdentifierBytes또는GemHostOptions.MaxPendingIds를 초과하게 되면PdcommStatus.LimitExceeded입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
LinkReports
메서드
장비에 S2F35(Link Event Report)를 보냅니다.
public HsmsToken LinkReports(uint dataId, ReadOnlySpan<GemLinkSpec> links)제출은 확인 응답이 아닙니다. 나중에 장비의 S2F36이 GemOutcome.LinkReportsAck이고 GemResultInfo.Acknowledgement에 LRACK 코드(0~5)가 있는 결과를 만들며, 0은 수락을 뜻합니다. 호출은 끝점의 내부 잠금으로 직렬화됩니다.
매개변수
| 이름 | 설명 |
|---|---|
dataId | 요청의 데이터 ID(DATAID)입니다. |
links | 추가할 이벤트 연결입니다. 보고서 ID가 없는 이벤트는 장비에 그 이벤트에서 모든 보고서의 연결을 해제하도록 요청합니다. 지정 내용은 호출이 반환되기 전에 복사됩니다. |
반환값
대기 중인 S2F35/S2F36 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외: 인코딩된 요청이 호스트의 아이템 한도를 초과하게 되면PdcommStatus.LimitExceeded입니다. 그 밖에는 네이티브 상태입니다. 예를 들어 호스트가 통신 중이 아니면PdcommStatus.InvalidState, 빈 대기 요청 슬롯이 없으면PdcommStatus.Backpressure입니다.
PutProgram
메서드
프로세스 프로그램을 로컬 저장소에 저장합니다.
public GemProgramWriteInfo PutProgram(SecsItem id, SecsItem body, GemProgramPutMode mode)로컬 변경에는 중지된 끝점이 필요하며 메시지를 주고받지 않습니다. 변경은 메모리에 확정되기 전에 검증되고 저장 파일에 기록됩니다. 설치 전에 실패하면 저장소는 바뀌지 않습니다.
영구 저장을 확인할 수 없어도 메서드는 반환됩니다. 이때 변경은 설치된 상태이며 GemProgramWriteInfo.Durability는 GemProgramDurability.Unconfirmed입니다. 변경이 롤백된 것처럼 다시 수행하지 마십시오.
매개변수
| 이름 | 설명 |
|---|---|
id | 프로세스 프로그램 ID(PPID)입니다. 비어 있지 않은 ASCII 아이템 또는 바이너리 아이템이며, GemProgramOptions.MaxIdentifierBytes와 120바이트 이하여야 합니다. 형식도 식별자의 일부입니다. |
body | 프로세스 프로그램 본문(PPBODY)입니다. ASCII, 바이너리, I1~I8 또는 U1~U8 아이템이며 비어 있을 수 있습니다. 형식과 원시 바이트가 그대로 보존됩니다. |
mode | PPID가 이미 있을 때 프로그램을 저장하는 방식입니다. |
반환값
변경이 설치되었는지 여부와 내구성 수준입니다.
참고
ArgumentOutOfRangeException예외:mode가 정의된 값이 아닙니다.ArgumentNullException예외:id또는body가null입니다.ObjectDisposedException예외: 끝점,id또는body가 해제되었습니다.PdcommException예외: 끝점이 중지되어 있지 않거나 프로그램이 구성되어 있지 않으면PdcommStatus.InvalidState입니다. PPID나 본문이 잘못되었거나, 이미 저장된 PPID에GemProgramPutMode.Create를 사용했거나, 알 수 없는 PPID에GemProgramPutMode.Replace를 사용했으면PdcommStatus.InvalidArgument입니다. 프로그램이 저장소 한도나GemProgramOptions.MaxSerializedBytes를 초과하면PdcommStatus.LimitExceeded입니다. 저장 파일을 쓸 수 없으면PdcommStatus.IoError입니다. 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
QueryRemoteSpooling
메서드
장비의 현재 스풀링 선택을 요청하는 S2F59를 보냅니다.
public HsmsToken QueryRemoteSpooling()S2F60 응답은 GemOutcome.SpoolConfigurationData인 GemResult로 도착하며, 각 스트림은 GemResult.GetSpoolSelection으로 읽습니다.
반환값
요청의 전송 토큰입니다.
참고
ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외: 스풀링 한도가 구성되어 있지 않거나 GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState, 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure이거나, 전송 실패입니다.
RemoteCommand
메서드
S2F41(Host Command Send) 원격 명령 요청을 보냅니다.
public HsmsToken RemoteCommand(SecsItem name, ReadOnlySpan<GemCommandParameter> parameters)요청에는 항상 W 비트가 설정됩니다. 아이템은 메서드가 반환되기 전에 송신 메시지에 복사됩니다. 토큰이 반환되었다는 것은 요청이 제출되었다는 뜻이며 명령이 실행되었다는 뜻이 아닙니다. S2F42 응답은 GemOutcome.CommandAck인 GemResult로 도착합니다. 수신한 HCACK는 GemResultInfo.Acknowledgement에 있으며, CPACK 항목은 GemResult.GetCommandIssue로 읽습니다. CPACK 이름은 요청과 대조하지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
name | 원격 명령 이름(RCMD)입니다. 비어 있지 않은 ASCII 아이템이거나 -128~255 범위의 스칼라 정수 아이템(I1 또는 U1로 전송)입니다. |
parameters | 전송 순서대로 나열한 명령 매개변수(CPNAME과 CPVAL)입니다. |
반환값
수락된 요청의 전송 토큰입니다.
참고
ArgumentNullException예외:name, 매개변수, 또는 매개변수 이름이나 값이null입니다.ObjectDisposedException예외: 끝점 또는 아이템 중 하나가 해제되었습니다.PdcommException예외:name이나 매개변수 이름이 유효한 식별자 아이템이 아니면PdcommStatus.InvalidArgument입니다. 매개변수 수나 메시지가GemHostOptions.ItemLimits를 초과하면PdcommStatus.LimitExceeded입니다. GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 전송이나 대기 요청 테이블이 가득 찼으면PdcommStatus.Backpressure입니다. 그 밖의 네이티브 실패 상태일 수도 있습니다.
RequestAlarmList
메서드
선택한 알람 또는 모든 알람에 대한 S5F5(List Alarms Request)를 보냅니다.
public HsmsToken RequestAlarmList(ReadOnlySpan<uint> ids)이 요청은 항상 응답을 기대합니다. S5F6 응답은 GemOutcome.AlarmListReceived인 GemResult로 도착하며, GemResult.GetAlarmInfo와 GemResult.GetAlarmAt으로 읽습니다. 명시적 ID 목록을 보낸 경우 성공 응답은 요청한 개수 및 ID 순서와 일치해야 합니다.
매개변수
| 이름 | 설명 |
|---|---|
ids | 나열할 알람 ID(ALID)이거나, 모든 알람을 나열하려면 빈 범위입니다. 순서와 중복은 유지됩니다. |
반환값
수락된 요청의 전송 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: ID가 다른 대기 요청의 ID와 합쳐GemHostOptions.MaxPendingIds를 초과하거나 메시지가GemHostOptions.ItemLimits를 초과하면PdcommStatus.LimitExceeded입니다. GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 전송이나 대기 요청 테이블이 가득 찼으면PdcommStatus.Backpressure입니다. 그 밖의 네이티브 실패 상태일 수도 있습니다.
RequestAnnotatedQuery
메서드
보고서에 대한 S6F21(Annotated Individual Report Request)을 보냅니다.
public HsmsToken RequestAnnotatedQuery(uint id)GemHost.RequestReportQuery를 참고합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 보고서 ID(RPTID)입니다. |
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 요청을 보내지 않았습니다.GemHost.RequestReportQuery를 참고합니다.
RequestConstantMetadata
메서드
장비 상수 메타데이터를 요청하는 S2F29(Equipment Constant Namelist Request)를 보냅니다.
public HsmsToken RequestConstantMetadata(ReadOnlySpan<SecsItem> ids)GemCommunicationState.Communicating이 필요합니다. ID는 요청이 완료될 때까지 GemHostOptions.MaxPendingIds에 포함됩니다. 유효한 S2F30 응답은 GemOutcome.ConstantMetadataReceived를 만들며, 그 필드(ECID, ECNAME, ECMIN, ECMAX, ECDEF, UNITS)는 GemResult.GetConstantMetadata로 읽습니다.
매개변수
| 이름 | 설명 |
|---|---|
ids | 장비 상수 ID(ECID)입니다. 각각 ASCII 아이템 또는 스칼라 정수 아이템이며, 모든 상수를 요청하려면 비워 둡니다. 순서와 중복은 유지되며 아이템은 복사됩니다. |
반환값
요청의 토큰입니다.
참고
ArgumentNullException예외: ID가null입니다.ObjectDisposedException예외: 끝점 또는 ID가 해제되었습니다.PdcommException예외:ids의 항목 수가 다른 대기 요청의 ID와 합쳐GemHostOptions.MaxPendingIds가 허용하는 수보다 많거나, ID나 메시지가GemHostOptions.ItemLimits를 초과하면PdcommStatus.LimitExceeded입니다. ID가 ASCII 아이템도 스칼라 정수 아이템도 아니면PdcommStatus.InvalidArgument입니다. 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
RequestConstantValues
메서드
장비 상수 값을 요청하는 S2F13(Equipment Constant Request)을 보냅니다.
public HsmsToken RequestConstantValues(ReadOnlySpan<SecsItem> ids)GemCommunicationState.Communicating이 필요합니다. ID는 요청이 완료될 때까지 GemHostOptions.MaxPendingIds에 포함됩니다. 유효한 S2F14 응답은 GemOutcome.ConstantValuesReceived를 만들며, 그 항목은 GemResult.GetConstantValue로 읽습니다. 제출은 응답이 아닙니다. 형식과 범위는 장비가 자체적으로 적용합니다.
매개변수
| 이름 | 설명 |
|---|---|
ids | 장비 상수 ID(ECID)입니다. 각각 ASCII 아이템 또는 스칼라 정수 아이템이며, 모든 상수를 요청하려면 비워 둡니다. 순서와 중복은 유지되며 아이템은 복사됩니다. |
반환값
요청의 토큰입니다.
참고
ArgumentNullException예외: ID가null입니다.ObjectDisposedException예외: 끝점 또는 ID가 해제되었습니다.PdcommException예외:ids의 항목 수가 다른 대기 요청의 ID와 합쳐GemHostOptions.MaxPendingIds가 허용하는 수보다 많거나, ID나 메시지가GemHostOptions.ItemLimits를 초과하면PdcommStatus.LimitExceeded입니다. ID가 ASCII 아이템도 스칼라 정수 아이템도 아니면PdcommStatus.InvalidArgument입니다. 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
RequestDataDirectory
메서드
장비에 S1F21(Data Variable Namelist Request)을 보냅니다.
public HsmsToken RequestDataDirectory(ReadOnlySpan<uint> ids)GemDirectoryKind.Data로 GemHost.RequestDirectory를 호출하는 것과 같습니다.
매개변수
| 이름 | 설명 |
|---|---|
ids | 요청할 변수 ID(VID)이거나, 모든 항목을 요청하려면 비워 둡니다. |
반환값
대기 중인 S1F21/S1F22 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외: 요청이 실패했습니다.GemHost.RequestDirectory를 참고합니다.
RequestDirectory
메서드
장비에 S1F21(Data Variable Namelist Request) 또는 S1F23(Collection Event Namelist Request)을 보냅니다.
public HsmsToken RequestDirectory(GemDirectoryKind kind, ReadOnlySpan<uint> ids)제출은 응답이 아닙니다. 나중에 장비의 S1F22 또는 S1F24가 GemOutcome.DataDirectoryReceived 또는 GemOutcome.EventDirectoryReceived인 결과를 만들며, 행은 GemResult.GetDirectoryAt과 GemResult.GetDirectory로 읽습니다. 명시적 ID에 대한 응답은 요청한 ID를 같은 순서로 정확히 나열해야 합니다. 이름이 비어 있다고 해서 장비가 ID를 아는지 알 수는 없습니다.
매개변수
| 이름 | 설명 |
|---|---|
kind | 요청할 디렉터리입니다. |
ids | 요청할 VID(GemDirectoryKind.Data) 또는 CEID(GemDirectoryKind.Event)이거나, 장비의 저장 순서대로 모든 항목을 요청하려면 비워 둡니다. 순서와 중복은 유지되며, ID는 호출이 반환되기 전에 복사됩니다. |
반환값
대기 중인 S1F21/S1F22 또는 S1F23/S1F24 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외:kind가 정의된 값이 아니면PdcommStatus.InvalidArgument입니다.ids의 항목이GemHostOptions.MaxPendingIds보다 많거나, 모든 대기 요청의 ID가 그 한도를 초과하게 되거나, 요청이 아이템 한도를 초과하게 되면PdcommStatus.LimitExceeded입니다. 그 밖의 네이티브 상태일 수도 있습니다. 예를 들어 호스트가 통신 중이 아니면PdcommStatus.InvalidState, 빈 대기 요청 슬롯이 없으면PdcommStatus.Backpressure입니다.
RequestEnabledAlarmList
메서드
보고가 활성화된 알람에 대한 S5F7(List Enabled Alarm Request)을 보냅니다.
public HsmsToken RequestEnabledAlarmList()S5F8 응답은 GemOutcome.EnabledAlarmListReceived인 GemResult로 도착합니다.
반환값
수락된 요청의 전송 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState, 전송이나 대기 요청 테이블이 가득 찼으면PdcommStatus.Backpressure이거나, 그 밖의 네이티브 실패 상태입니다.
RequestEventDirectory
메서드
장비에 S1F23(Collection Event Namelist Request)을 보냅니다.
public HsmsToken RequestEventDirectory(ReadOnlySpan<uint> ids)GemDirectoryKind.Event로 GemHost.RequestDirectory를 호출하는 것과 같습니다.
매개변수
| 이름 | 설명 |
|---|---|
ids | 요청할 수집 이벤트 ID(CEID)이거나, 모든 항목을 요청하려면 비워 둡니다. |
반환값
대기 중인 S1F23/S1F24 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외: 요청이 실패했습니다.GemHost.RequestDirectory를 참고합니다.
RequestEventQuery
메서드
수집 이벤트에 대한 S6F15(Event Report Request)를 보냅니다.
public HsmsToken RequestEventQuery(uint id)GemHost.RequestReportQuery를 참고합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 수집 이벤트 ID(CEID)입니다. |
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 요청을 보내지 않았습니다.GemHost.RequestReportQuery를 참고합니다.
RequestIndividualQuery
메서드
보고서에 대한 S6F19(Individual Report Request)를 보냅니다.
public HsmsToken RequestIndividualQuery(uint id)GemHost.RequestReportQuery를 참고합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 보고서 ID(RPTID)입니다. |
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 요청을 보내지 않았습니다.GemHost.RequestReportQuery를 참고합니다.
RequestOffline
메서드
장비에 S1F15(Request Off-line)를 보냅니다.
public HsmsToken RequestOffline()유효한 S1F16 응답은 GemResultInfo.Acknowledgement에 OFLACK이 있는 GemOutcome.OfflineAck를 만듭니다. GemCommunicationState.Communicating이 필요합니다.
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 통신이 수립되지 않았으면PdcommStatus.InvalidState이고, 대기 요청 슬롯 32개가 모두 사용 중이면PdcommStatus.Backpressure입니다.
RequestOnline
메서드
장비에 S1F17(Request On-line)을 보냅니다.
public HsmsToken RequestOnline()유효한 S1F18 응답은 GemResultInfo.Acknowledgement에 ONLACK이 있는 GemOutcome.OnlineAck를 만듭니다. 0은 수락, 1은 허용 안 됨, 2는 이미 온라인입니다. GemCommunicationState.Communicating이 필요합니다.
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 통신이 수립되지 않았으면PdcommStatus.InvalidState이고, 대기 요청 슬롯 32개가 모두 사용 중이면PdcommStatus.Backpressure입니다.
RequestProgram
메서드
상대방의 프로세스 프로그램을 요청하는 S7F5(Process Program Request)를 보냅니다.
public HsmsToken RequestProgram(SecsItem id)GemCommunicationState.Communicating이 필요합니다. PPID는 요청이 완료될 때까지 GemProgramOptions.MaxPendingIds, GemProgramOptions.MaxPendingIdentifierBytes, GemHostOptions.MaxPendingIds에 포함됩니다. 유효한 S7F6 응답은 GemOutcome.ProgramDataReceived를 만듭니다. GemResult.GetProgramBody는 본문을 반환하며, 상대방에게 프로그램이 없으면 null을 반환합니다. 수신한 프로그램은 저장되지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 프로세스 프로그램 ID(PPID)입니다. ASCII 아이템 또는 바이너리 아이템입니다. |
반환값
요청의 토큰입니다.
참고
ArgumentNullException예외:id가null입니다.ObjectDisposedException예외: 끝점 또는id가 해제되었습니다.PdcommException예외: 프로그램이 구성되어 있지 않거나 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. PPID가 비어 있거나 ASCII 아이템도 바이너리 아이템도 아니면PdcommStatus.InvalidArgument입니다. PPID가 120바이트보다 길거나, 메시지가 아이템 한도를 초과하거나, 요청이GemProgramOptions.MaxPendingIds,GemProgramOptions.MaxPendingIdentifierBytes또는GemHostOptions.MaxPendingIds를 초과하게 되면PdcommStatus.LimitExceeded입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
RequestProgramDirectory
메서드
장비의 프로세스 프로그램 목록을 요청하는, 헤더만 있는 S7F19(Current EPPD Request)를 보냅니다.
public HsmsToken RequestProgramDirectory()GemCommunicationState.Communicating이 필요합니다. 유효한 S7F20 응답은 GemOutcome.ProgramDirectoryReceived를 만듭니다. PPID는 GemProgramInfo.IdCount까지 GemResult.GetProgramId로 읽습니다.
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 프로그램이 구성되어 있지 않거나 통신이 수립되지 않았으면PdcommStatus.InvalidState이고, 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
RequestReportQuery
메서드
장비에 S6 보고서 조회를 보냅니다.
public HsmsToken RequestReportQuery(GemReportQueryKind kind, uint id)ID는 요청이 완료될 때까지 GemHostOptions.MaxPendingIds의 항목 하나를 사용합니다. 유효한 응답은 GemOutcome.EventQueryReceived, GemOutcome.IndividualQueryReceived 또는 GemOutcome.AnnotatedQueryReceived를 만들며, GemResult.GetQueryInfo, GemResult.GetQueryReport, GemResult.GetQueryValue로 읽습니다. S6F16 응답은 요청한 CEID를 그대로 돌려주어야 합니다. 빈 응답만으로는 ID가 정의되어 있는지 알 수 없습니다.
매개변수
| 이름 | 설명 |
|---|---|
kind | 조회 종류입니다. GemReportQueryKind.Event는 S6F15, GemReportQueryKind.Individual은 S6F19, GemReportQueryKind.Annotated는 S6F21을 보냅니다. |
id | 이벤트 조회이면 수집 이벤트 ID(CEID)이고, 그 밖에는 보고서 ID(RPTID)입니다. |
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:kind가 정의되지 않았으면PdcommStatus.InvalidArgument, 통신이 수립되지 않았으면PdcommStatus.InvalidState, 남은 대기 ID 항목이 없으면PdcommStatus.LimitExceeded, 대기 요청 슬롯 32개가 모두 사용 중이면PdcommStatus.Backpressure입니다.
RequestSpoolConfiguration
메서드
장비의 스풀링 선택을 설정하는 S2F43(Reset Spooling Streams and Functions)을 보냅니다.
public HsmsToken RequestSpoolConfiguration(ReadOnlySpan<GemSpoolSelection> selections)S2F44 응답은 GemOutcome.SpoolConfigurationAck인 GemResult로 도착합니다. RSPACK은 GemResult.GetSpoolInfo의 GemSpoolInfo.Acknowledgement에서 읽고(0은 수락, 1은 거부), 거부된 각 스트림은 GemResult.GetSpoolError로 읽습니다.
매개변수
| 이름 | 설명 |
|---|---|
selections | 스풀할 스트림이며 반복하면 안 됩니다. 펑션 목록이 비어 있으면 그 스트림의 모든 펑션을 요청하고, 빈 범위를 전달하면 어떤 스트림도 스풀하지 않도록 요청합니다. 값은 복사됩니다. |
반환값
요청의 전송 토큰입니다.
참고
ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외: 스풀링 한도가 구성되어 있지 않거나 GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 선택이GemSpoolHostOptions.MaxStreams,GemSpoolHostOptions.MaxFunctionsPerStream,GemSpoolHostOptions.MaxPendingItems, 남은GemHostOptions.MaxPendingIds또는 아이템 한도를 초과하거나, 스트림이나 펑션을 반복하면PdcommStatus.LimitExceeded입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure입니다. 전송 실패일 수도 있습니다.
RequestSpooledData
메서드
장비가 스풀을 전송하거나 비우도록 S6F23(Request Spooled Data)을 보냅니다.
public HsmsToken RequestSpooledData(GemSpoolCommand command)S6F24 응답은 GemOutcome.SpoolControlAck인 GemResult로 도착하며, RSDA는 GemResult.GetSpoolInfo의 GemSpoolInfo.Acknowledgement에서 읽습니다. PDComm 장비는 수락하면 0, 전송이나 전달이 대기 중이면 1, 스풀이 비어 있으면 2로 응답합니다. Transmit을 수락한 뒤에는 스풀된 각 1차 메시지를 원래의 스트림과 펑션으로 보냅니다.
매개변수
| 이름 | 설명 |
|---|---|
command | 스풀 데이터 요청 코드(RSDC)입니다. |
반환값
요청의 전송 토큰입니다.
참고
ArgumentOutOfRangeException예외:command가 정의된GemSpoolCommand값이 아닙니다.ObjectDisposedException예외: 호스트가 해제되었습니다.PdcommException예외: 스풀링 한도가 구성되어 있지 않거나 GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState, 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure이거나, 전송 실패입니다.
RequestStatusNames
메서드
상태 변수 이름과 단위를 요청하는 S1F11(Status Variable Namelist Request)을 보냅니다.
public HsmsToken RequestStatusNames(ReadOnlySpan<uint> ids)ID는 메서드가 반환되기 전에 복사되며, 요청이 완료될 때까지 GemHostOptions.MaxPendingIds에 포함됩니다. 유효한 S1F12 응답은 GemOutcome.NamesReceived를 만들며, 항목은 GemResult.GetStatusName으로 읽습니다. GemCommunicationState.Communicating이 필요합니다.
매개변수
| 이름 | 설명 |
|---|---|
ids | 설명을 요청할 상태 변수 ID(SVID)입니다. 빈 범위를 전달하면 모든 변수를 요청합니다. |
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 통신이 수립되지 않았으면PdcommStatus.InvalidState, ID가 남은 대기 ID 예산이나 아이템 한도를 초과하면PdcommStatus.LimitExceeded, 대기 요청 슬롯 32개가 모두 사용 중이면PdcommStatus.Backpressure입니다.
RequestStatusValues
메서드
상태 변수 값을 요청하는 S1F3(Selected Equipment Status Request)을 보냅니다.
public HsmsToken RequestStatusValues(ReadOnlySpan<uint> ids)ID는 메서드가 반환되기 전에 복사되며, 요청이 완료될 때까지 GemHostOptions.MaxPendingIds에 포함됩니다. 유효한 S1F4 응답은 GemOutcome.ValuesReceived를 만들며, 값은 GemResult.GetStatusValue로 읽습니다. 값의 개수가 요청한 ID 수와 다른 응답은 GemError.Correlation과 함께 GemResultKind.InvalidResponse로 보고됩니다. GemCommunicationState.Communicating이 필요합니다.
매개변수
| 이름 | 설명 |
|---|---|
ids | 읽을 상태 변수 ID(SVID)이며 응답 순서대로 나열합니다. 빈 범위를 전달하면 모든 값을 요청합니다. |
반환값
요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 통신이 수립되지 않았으면PdcommStatus.InvalidState, ID가 남은 대기 ID 예산이나 아이템 한도를 초과하면PdcommStatus.LimitExceeded, 대기 요청 슬롯 32개가 모두 사용 중이면PdcommStatus.Backpressure입니다.
RespondProgram
메서드
수신한 스트림 7 프로세스 프로그램 요청에 응답합니다.
public void RespondProgram(GemResult result, GemProgramPutMode mode, byte decision)S7F2, S7F4, S7F6, S7F18 또는 S7F20을 보냅니다. 수락 결정보다 저장소 자체의 검사가 우선합니다. 허가 정책, 저장소 한도와 허가 한도, 선언된 길이, 모드, PPID 존재 여부에 따라 해당 PPGNT 또는 ACKC7로 요청이 여전히 거부될 수 있습니다. GemProgramOptions.MaxRequestIds보다 많은 PPID를 지정한 S7F17에는 ACKC7 3(matrix overflow)으로, 저장되지 않은 PPID를 지정한 S7F17에는 ACKC7 4(PPID not found)로 응답합니다. 반복된 PPID는 한 번만 삭제합니다. S7F6에는 저장된 프로그램이 들어가며, 알 수 없는 PPID이면 빈 PPID와 빈 본문이 들어갑니다. S7F20은 저장된 PPID를 나열합니다. 프로그램을 저장하거나 확인 응답해도 프로세스를 선택하거나 실행하지는 않습니다.
수락된 S7F3 또는 S7F17이면 확인 응답을 보내기 전에 변경을 기록하고 확정하며, 결과는 준비된 응답을 보관합니다. 송신이 실패하면(예: PdcommStatus.Backpressure) 변경이 이미 적용되었을 수 있습니다. 같은 모드와 결정으로 다시 호출하면 저장된 응답만 보냅니다. 영구 저장을 확인할 수 없으면 변경은 설치된 상태로 남고, 응답은 보내지 않으며, 메서드는 PdcommStatus.ProgramUnconfirmed를 throw합니다. 필요하면 GemHost.ResyncPrograms를 호출한 다음 GemHost.ConfirmProgramReply를 호출하고, 이 메서드를 같은 인수로 다시 호출합니다.
허가는 S7F2가 큐에 들어간 뒤에만 활성화되며, 해당 S7F3이 저장되거나, 연결이 끝나거나, GemHost.CancelProgramGrant를 호출하면 끝납니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 결과가 GemOutcome.ProgramReceived인 결과입니다. |
mode | PPID가 이미 있을 때 허가된(S7F1) 프로그램이나 수신한(S7F3) 프로그램을 저장하는 방식입니다. 모든 요청 종류에서 정의된 값이어야 합니다. |
decision | 애플리케이션 결정입니다. S7F1에서는 0이 허가이고, 1~5는 각각 PPGNT 1(이미 있음), 2(공간 없음), 3(잘못된 PPID), 4(사용 중), 5(수락하지 않음)로 거부합니다. S7F3과 S7F17에서는 0이 수락이고, 1~5는 각각 ACKC7 1(권한 없음), 2(길이 오류), 3(매트릭스 오버플로), 4(PPID 없음), 5(지원되지 않는 모드)로 거부합니다. S7F5와 S7F19에는 0이 필요합니다. |
참고
ArgumentNullException예외:result가null입니다.ArgumentOutOfRangeException예외:mode가 정의된 값이 아닙니다.ObjectDisposedException예외: 끝점 또는result가 해제되었습니다.PdcommException예외: 변경은 설치되었지만 영구 저장을 확인할 수 없으면PdcommStatus.ProgramUnconfirmed입니다. 요청에 이미 응답했거나 요청이 다른 끝점이나 이전 연결 또는 선택에 속하면PdcommStatus.StaleToken입니다.decision이 요청 종류에 유효하지 않거나, 재시도에서 다른 모드나 결정을 사용하면PdcommStatus.InvalidArgument입니다. 결과가 수신한 프로그램 요청이 아니거나, 프로그램이 구성되어 있지 않거나, 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 변경을 기록할 수 없으면PdcommStatus.IoError또는PdcommStatus.LimitExceeded이며, 이때 저장소는 바뀌지 않습니다. 보류된 전송 이벤트를 먼저 읽어야 하거나 전송이 응답을 수락할 수 없으면PdcommStatus.Backpressure입니다.
ResyncPrograms
메서드
저장 파일의 부모 디렉터리를 다시 동기화합니다.
public void ResyncPrograms()확인되지 않은 변경 후 애플리케이션에 확인된 디렉터리 동기화가 필요할 때(예: GemHost.ConfirmProgramReply 전에) 사용합니다. 프로그램 데이터를 다시 쓰지 않고, 이전 변경에 대해 보고된 내구성을 바꾸지 않으며, 보류된 응답을 확인하지도 않습니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 프로그램이 구성되어 있지 않거나 저장소가 메모리에만 있으면PdcommStatus.InvalidState입니다. 동기화가 실패하면PdcommStatus.IoError입니다. 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
SendProgram
메서드
프로세스 프로그램을 담은 S7F3(Process Program Send)을 보냅니다.
public HsmsToken SendProgram(SecsItem id, SecsItem body)GemCommunicationState.Communicating이 필요합니다. PPID는 요청이 완료될 때까지 GemProgramOptions.MaxPendingIds, GemProgramOptions.MaxPendingIdentifierBytes, GemHostOptions.MaxPendingIds에 포함됩니다. 유효한 S7F4 응답은 GemResultInfo.Acknowledgement에 ACKC7이 들어 있는 GemOutcome.ProgramAckReceived를 만듭니다. 응답은 상대방이 프로그램을 얼마나 영구적으로 저장했는지 알려 주지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 프로세스 프로그램 ID(PPID)입니다. ASCII 아이템 또는 바이너리 아이템입니다. |
body | 프로세스 프로그램 본문(PPBODY)입니다. ASCII, 바이너리, I1~I8 또는 U1~U8 아이템입니다. |
반환값
요청의 토큰입니다.
참고
ArgumentNullException예외:id또는body가null입니다.ObjectDisposedException예외: 끝점,id또는body가 해제되었습니다.PdcommException예외: 프로그램이 구성되어 있지 않거나 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. PPID가 비어 있거나 ASCII 아이템도 바이너리 아이템도 아니거나,body가 지원되지 않는 형식이면PdcommStatus.InvalidArgument입니다. PPID가 120바이트보다 길거나, 메시지가 아이템 한도를 초과하거나, 요청이GemProgramOptions.MaxPendingIds,GemProgramOptions.MaxPendingIdentifierBytes또는GemHostOptions.MaxPendingIds를 초과하게 되면PdcommStatus.LimitExceeded입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.