PDComm.GemEquipment
클래스
HSMS TCP 연결 하나를 사용하는 동기식 GEM(SEMI E30) 장비 끝점입니다.
public sealed class GemEquipment : GemEndpoint장비는 표준 호스트 요청에 자동으로 응답합니다. S1F1(Are You There)에는 모델과 소프트웨어 리비전으로, S1F3과 S1F11에는 등록된 상태 변수로 응답하고, S1F13(Establish Communications)에 응답하며, S1F15와 S1F17(Off-line 및 On-line 요청)에는 제어 상태에 따라 응답합니다. 보고서, 알람, 원격 명령, 상수, 데이터 변수, 프로세스 프로그램 같은 기능 영역은 이 클래스의 다른 멤버로 구성합니다.
애플리케이션은 GemEndpoint.Poll, GemEndpoint.NextEvent, GemEndpoint.HandleEvent로 끝점을 구동합니다. 호출은 내부 잠금으로 직렬화됩니다. 할당 실패 후 GemEndpoint.NextEvent가 보류한 전송 이벤트가 아직 읽히지 않은 동안에는 대부분의 GEM 작업이 PdcommStatus.Backpressure로 실패합니다. 폴링 스레드에서 끝점을 실행하려면 GemEquipmentWorker를 사용합니다.
using GemEquipment equipment = GemEquipment.Create("127.0.0.1:5000", transportOptions, new GemEquipmentOptions
{
Model = "PDComm", SoftwareRevision = "0.1.0", InitialControl = GemControlState.HostOffline,
OnlineMode = GemOnlineMode.Remote, MaxVariables = 8, MaxMetadataBytes = 1024, MaxValueBytes = 8192,
ItemLimits = limits,
});
using (SecsItem temperature = SecsItem.FromF4([21.5f], limits))
equipment.RegisterStatus(1, "Temperature", "C", temperature);
equipment.Start();
while (running)
{
equipment.Poll();
HsmsEvent? current;
while ((current = equipment.NextEvent()) is not null)
{
using (current)
using (GemResult result = equipment.HandleEvent(current))
{
GemResultInfo info = result.GetInfo();
if (info.Kind != GemResultKind.Ignored)
Console.WriteLine($"{info.Kind} {info.RequestKind} {info.Outcome}");
}
}
Thread.Sleep(2);
}
equipment.Stop();멤버
CancelProgramGrant
메서드
응답한 S7F1 요청으로 활성화된 허가를 철회합니다.
public void CancelProgramGrant(GemResult result)해제된 허가는 더 이상 저장소 용량을 예약하지 않으며, 이후 해당 S7F3은 허가되지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 응답으로 프로그램을 허가한 원래 S7F1 요청 결과입니다. 같은 PPID의 다른 결과로는 충분하지 않습니다. |
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 끝점 또는result가 해제되었습니다.PdcommException예외: 결과가 허가가 남아 있는 응답한 S7F1 요청이 아니거나, 다른 끝점이나 이전 연결 또는 선택에 속하면PdcommStatus.StaleToken입니다. 결과가 프로그램 결과가 아니거나 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
CaptureSpool
메서드
스풀링이 활성이고 메시지가 선택되어 있으면 1차 메시지를 스풀에 저장합니다.
public GemSpoolWriteResult CaptureSpool(byte stream, byte function, bool wait, SecsItem? body, ulong now)캡처는 아무것도 보내지 않습니다. 저장된 항목은 호스트가 S6F23으로 전송을 요청한 뒤 GemEquipment.SendNextSpool로 나중에 보냅니다.
매개변수
| 이름 | 설명 |
|---|---|
stream | 스트림이며 2~127입니다. |
function | 1차 메시지의 펑션이며 홀수입니다. |
wait | 나중에 W 비트를 설정하여 메시지를 전달하려면 true입니다. 펑션 255에는 사용할 수 없습니다. |
body | 메시지 본문이거나, 헤더만 있는 메시지이면 null입니다. 본문은 복사됩니다. |
now | 항목의 캡처 시각으로 저장되는 애플리케이션 타임스탬프입니다. |
반환값
새 GemSpoolWriteResult.EntryId가 있는 GemSpoolMutation.Captured입니다. 스풀이 가득 차서 메시지를 버렸으면 GemSpoolMutation.Discarded입니다. 스풀링이 비활성이거나 비활성화되었거나, 메시지가 카탈로그에 없거나 선택되지 않았으면 GemSpoolWriteResult.Selected가 false입니다.
참고
ObjectDisposedException예외: 장비 또는body가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않거나 동기화되지 않았으면PdcommStatus.InvalidState입니다.stream과function이 스풀 가능한 1차 메시지가 아니면PdcommStatus.InvalidArgument입니다. 본문이GemSpoolOptions.MaxBodyBytes,GemSpoolOptions.MaxTotalBodyBytes또는 아이템 한도를 초과하면PdcommStatus.LimitExceeded입니다.GemSpoolOverflow.OverwriteOldest가 전달 중인 항목을 제거해야만 공간을 만들 수 있거나, 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure입니다. 스냅샷 쓰기가 실패하면 그 상태(예:PdcommStatus.IoError)입니다.
CaptureSpoolAlarm
메서드
GemEquipment.PublishAlarm과 같은 방식으로 S5F1(Alarm Report Send)을 만들되, 보내지 않고 스풀에 저장합니다.
public GemSpoolWriteResult CaptureSpoolAlarm(uint alarmId, bool wait, ulong now)보고에는 현재 알람 상태가 들어가며, 캡처해도 상태는 바뀌지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
alarmId | 보고가 활성화된, 구성된 알람의 알람 ID(ALID)입니다. |
wait | 나중에 W 비트를 설정하여 보고를 전달하려면 true입니다. |
now | 항목의 캡처 시각으로 저장되는 애플리케이션 타임스탬프입니다. |
반환값
GemEquipment.CaptureSpool과 같은 캡처 결과입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않거나 동기화되지 않았거나, 알람이 구성되어 있지 않거나, 알람을 알 수 없거나 보고가 비활성화되어 있으면PdcommStatus.InvalidState입니다. 그 밖에는GemEquipment.CaptureSpool의 상태입니다.
CaptureSpoolEvent
메서드
GemEquipment.PublishEventWithData와 같은 방식으로 S6F11(Event Report Send)을 만들되, 보내지 않고 스풀에 저장합니다.
public GemSpoolWriteResult CaptureSpoolEvent(uint dataId, uint eventId, ReadOnlySpan<GemDataSample> samples, ulong now)보고서는 W 비트가 설정된 상태로 저장됩니다.
매개변수
| 이름 | 설명 |
|---|---|
dataId | 메시지에 넣는 데이터 ID(DATAID)입니다. |
eventId | 활성화된 이벤트의 수집 이벤트 ID(CEID)입니다. 연결 여부는 관계없습니다. |
samples | 이 보고서에만 사용하는 데이터 변수 값입니다. 아이템은 복사됩니다. |
now | 항목의 캡처 시각으로 저장되는 애플리케이션 타임스탬프입니다. |
반환값
GemEquipment.CaptureSpool과 같은 캡처 결과입니다.
참고
ArgumentNullException예외: 샘플 또는 그 값이null입니다.ObjectDisposedException예외: 장비 또는 샘플 값이 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않거나 동기화되지 않았거나, 보고서가 구성되어 있지 않거나, 이벤트를 알 수 없거나 비활성화되어 있으면PdcommStatus.InvalidState입니다. 샘플이 거부되면PdcommStatus.LimitExceeded,PdcommStatus.InvalidArgument또는PdcommStatus.InvalidState입니다. 그 밖에는GemEquipment.CaptureSpool의 상태입니다.
ClearDataVariable
메서드
데이터 변수의 캐시 값을 제거합니다.
public void ClearDataVariable(uint id)그 뒤에는 샘플이 값을 제공하지 않는 한, 이 변수가 필요한 이벤트 보고서가 PdcommStatus.InvalidState로 실패합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 데이터 변수 ID입니다. |
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. 알 수 없는 ID이면PdcommStatus.OutOfRange이고, 데이터 변수 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
ClearReportBindings
메서드
명시적 보고서 변수 바인딩을 제거합니다.
public void ClearReportBindings()끝점이 중지된 동안 호출합니다. 그 뒤에는 각 VID가 같은 ID의 상태 변수로 확인됩니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. 끝점이 중지되어 있지 않으면PdcommStatus.InvalidState입니다. 정의된 보고서가 상태 변수 ID가 아닌 VID를 사용하거나, 이벤트 디렉터리가 데이터 바인딩이 필요한 변수를 나열하면PdcommStatus.InvalidArgument입니다.
CompleteSpoolDelivery
메서드
전달에 대한 애플리케이션의 판정을 보고하고, 성공이면 전달된 항목을 스풀에서 제거합니다.
public GemSpoolWriteResult CompleteSpoolDelivery(GemResult result, bool success)응답 본문을 검사하고 메시지의 정책을 적용합니다. 예를 들어 S6F11이면 ACKC6 0입니다. 펑션이 일치한다는 것만으로는 성공을 증명하지 않습니다. W 비트 없는 항목에서 성공은 프레임이 기록되었다는 뜻일 뿐입니다.
성공이 수락되었지만 제거가 실패하면, GemResult.GetSpoolInfo가 GemSpoolInfo.SuccessAccepted와 GemSpoolInfo.DequeuePending을 보고하는 상태에서 메서드가 영구 저장 상태를 throw합니다. 항목을 다시 보내지 말고 GemEquipment.RetrySpoolDequeue로 마무리합니다. 전달은 정확히 한 번(exactly once)을 보장하지 않습니다. 결과가 불확실한 뒤 복구하는 과정에서 항목이 두 번 전송될 수 있습니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 현재 전달의 GemOutcome.SpoolDeliveryResponse 또는 GemOutcome.SpoolDeliveryWritten 결과입니다. |
success | 전달을 수락하려면 true이고, 항목을 유지하고 전송 회차를 끝내려면 false입니다. |
반환값
성공이면 제거된 GemSpoolWriteResult.EntryId가 있는 GemSpoolMutation.Removed이고, 그렇지 않으면 변경이 없는 결과입니다.
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 장비 또는result가 해제되었습니다.PdcommException예외: 결과가 다른 끝점, 연결 또는 선택에 속하거나, 현재 전달이 아니거나, 이미 완료되었으면PdcommStatus.StaleToken입니다. 결과에 전달 증거가 없거나, GEM 통신이 수립되지 않았거나, 스풀이 동기화되지 않았으면PdcommStatus.InvalidState입니다. 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure입니다. 항목을 제거할 수 없었으면 실패한 스냅샷 쓰기의 상태입니다.
ConfigureAlarms
메서드
S5F1 알람 보고와 S5F3, S5F5, S5F7에 대한 자동 응답을 뒷받침하는 알람 저장소를 설치합니다.
public void ConfigureAlarms(GemAlarmOptions options, ReadOnlySpan<GemAlarmDefinition> definitions)끝점이 중지된 동안(예: GemEndpoint.Start 전에) 이 메서드를 한 번 호출합니다. 정의에 발생 이벤트나 해제 이벤트를 사용하면 보고서를 먼저 구성합니다. 저장소 전체를 설치하기 전에 검증하므로, 실패하면 끝점에는 알람이 없습니다. 모든 알람은 비활성이고 보고가 비활성화된 상태로 시작합니다.
설치 후 끝점은 S5F3(Enable/Disable Alarm Send)을 자동으로 처리합니다. 구성된 알람의 활성화 상태를 갱신하고, 응답이 요청되면 구성된 알람에는 ACKC5 0으로, 알 수 없는 알람에는 1로 응답합니다. S5F5(List Alarms Request)와 S5F7(List Enabled Alarms Request)에도 저장소 내용으로 응답합니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 알람 저장소 한도입니다. |
definitions | 등록 순서대로 나열한 알람 정의입니다. 범위는 호출이 반환되기 전에 복사됩니다. |
참고
ArgumentNullException예외:options가null입니다.ArgumentException예외: 정의의 텍스트가null이거나 ASCII가 아닌 문자를 포함합니다.ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 정의 수, 텍스트 하나 또는 텍스트 전체 크기가options나 120바이트 텍스트 한도를 초과하면PdcommStatus.LimitExceeded입니다. 범주가 1~63을 벗어나거나, 알람 ID가 중복되거나,GemAlarmOptions.MaxAlarms가 0이거나, 발생 또는 해제 이벤트가 구성된 보고서 이벤트가 아니면PdcommStatus.InvalidArgument입니다. 끝점이 중지되어 있지 않거나 알람이 이미 구성되어 있으면PdcommStatus.InvalidState입니다. 그 밖의 네이티브 실패 상태일 수도 있습니다.
ConfigureCommands
메서드
수신한 S2F41(Host Command Send) 요청을 검증하는 데 사용하는 원격 명령 저장소를 설치합니다.
public void ConfigureCommands(GemCommandOptions options, ReadOnlySpan<GemCommandDefinition> definitions)끝점이 중지된 동안(예: GemEndpoint.Start 전에) 이 메서드를 한 번 호출합니다. 정의에 완료 이벤트를 사용하면 보고서를 먼저 구성합니다. 저장소 전체를 설치하기 전에 검증하므로, 실패하면 끝점에는 명령이 없습니다.
설치 후 수신한 S2F41은 저장소 기준으로 검증되어 GemOutcome.CommandReceived인 GemResult로 전달됩니다. 자동으로 실행하거나 확인 응답하는 것은 없으므로 GemEquipment.RespondCommand로 응답해야 합니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 명령 저장소 한도입니다. |
definitions | 등록 순서대로 나열한 명령 정의입니다. 정의와 그 이름 아이템은 호출하는 동안에만 읽습니다. |
참고
ArgumentNullException예외:options, 정의, 매개변수 정의 또는 그 이름 중 하나가null입니다.ObjectDisposedException예외: 끝점 또는 이름 아이템이 해제되었습니다.PdcommException예외: 개수나 이름 크기가options를 초과하면PdcommStatus.LimitExceeded입니다. 이름이 잘못되었거나 중복되거나, 형식이나 개수 범위가 잘못되었거나, 숫자 경계에 정수 형식이 없거나 경계가 뒤바뀌었거나,GemCommandOptions.MaxCommands가 0이거나, 완료 이벤트가 구성된 보고서 이벤트가 아니면PdcommStatus.InvalidArgument입니다. 끝점이 중지되어 있지 않거나 명령이 이미 구성되어 있으면PdcommStatus.InvalidState입니다. 그 밖의 네이티브 실패 상태일 수도 있습니다.
ConfigureConstants
메서드
S2F13, S2F29, S2F15에 응답하는 장비 상수 저장소를 설치합니다.
public void ConfigureConstants(GemConstantOptions options, ReadOnlySpan<GemConstantDefinition> definitions)끝점이 중지된 동안 한 번 호출합니다. 저장소 전체를 설치하기 전에 검증하며, 실패하면 아무것도 바뀌지 않습니다. ID, 형식, 개수, 경계 규칙은 GemConstantDefinition을 참고합니다.
구성이 끝나면 장비는 S2F13(Equipment Constant Request)에 S2F14로, S2F29(Equipment Constant Namelist Request)에 S2F30으로 자동 응답합니다. S2F15(New Equipment Constant Send) 요청은 GemOutcome.ConstantChangesReceived로 보고되며 GemEquipment.RespondConstants를 기다립니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 저장소 한도입니다. |
definitions | 등록 순서대로 나열한 상수입니다. 아이템과 문자열은 호출하는 동안에만 읽으며, 소유권은 호출자에게 남습니다. |
참고
ArgumentNullException예외:options, 정의 또는 정의의GemConstantDefinition.Id,GemConstantDefinition.Current,GemConstantDefinition.Name,GemConstantDefinition.Units가null입니다.ArgumentException예외: 이름이나 단위 문자열에 ASCII가 아닌 문자가 있습니다.ObjectDisposedException예외: 끝점 또는 정의 아이템이 해제되었습니다.PdcommException예외: 정의가GemConstantOptions.MaxConstants,GemConstantOptions.MaxIdentifierBytes,GemConstantOptions.MaxMetadataBytes,GemConstantOptions.MaxValueBytes또는GemConstantOptions.ItemLimits를 초과하면PdcommStatus.LimitExceeded입니다. 끝점이 중지되어 있지 않거나, 보류된 전송 이벤트가 대기 중이거나, 상수가 이미 구성되어 있으면PdcommStatus.InvalidState입니다. 옵션이 잘못되었거나 정의가 잘못되었으면PdcommStatus.InvalidArgument입니다. 잘못된 정의의 예로는 중복되거나 형식이 잘못된 ID, 형식 불일치, 범위를 벗어난 개수, 잘못된 경계, 리스트 메타데이터, JIS-8 아이템, NaN 값이 있습니다.
ConfigureDataVariables
메서드
장비의 데이터 변수 저장소를 구성하거나 교체합니다.
public void ConfigureDataVariables(GemDataOptions options, ReadOnlySpan<GemDataDefinition> definitions)끝점이 중지된 동안 호출합니다. 호출이 실패하면 이전 저장소와 카운터가 유지됩니다. 장비는 스스로 값을 샘플링하거나 갱신하거나 영구 저장하지 않습니다. 캐시 값은 GemEquipment.UpdateDataVariable로 갱신하고, 샘플은 GemEquipment.PublishEventWithData로 제공합니다. 호출이 성공한 뒤에는 이 메서드들이 네이티브 라이브러리를 호출하기 전에 값을 GemDataOptions.ItemLimits와 비교해 검사합니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 저장소의 용량 한도입니다. |
definitions | 저장 순서대로 나열한 데이터 변수 정의입니다. 이름, 단위, 캐시 값은 복사됩니다. |
참고
ArgumentNullException예외:options, 정의 또는 정의의 이름이나 단위가null입니다.ArgumentException예외: 이름이나 단위 문자열에 ASCII가 아닌 문자가 있습니다.ObjectDisposedException예외: 장비 또는 캐시 값 아이템이 해제되었습니다.PdcommException예외:GemDataOptions.MaxVariables나 아이템 한도가 0이거나, ID가 중복되거나, 형식이 SECS-II 데이터 형식이 아니거나, 최소 개수가 최대 개수보다 크거나, 캐시 값이 형식과 개수 범위에 맞지 않으면PdcommStatus.InvalidArgument입니다. 정의가options의 한도를 초과하면PdcommStatus.LimitExceeded입니다. 끝점이 중지되어 있지 않으면PdcommStatus.InvalidState입니다. 그 밖의 네이티브 상태일 수도 있습니다. 예를 들어 기존 보고서 바인딩이나 이벤트 디렉터리가 새 저장소에 없는 데이터 변수를 참조하면PdcommStatus.InvalidArgument입니다.
ConfigureEnhancedCommands
메서드
수신한 S2F49(Enhanced Remote Command) 요청을 검증하는 데 사용하는 확장 원격 명령 저장소를 설치합니다.
public void ConfigureEnhancedCommands(GemEnhancedCommandOptions options, ReadOnlySpan<GemEnhancedObjectDefinition> definitions)끝점이 중지된 동안(예: GemEndpoint.Start 전에) 이 메서드를 한 번 호출합니다. 정의에 완료 이벤트를 사용하면 보고서를 먼저 구성합니다. 저장소 전체를 설치하기 전에 검증하므로, 실패하면 이전 상태가 그대로 유지됩니다.
설치 후 수신한 S2F49는 이 저장소 기준으로만 검증되며 GemEquipment.ConfigureCommands의 저장소는 사용하지 않습니다. 검증된 요청은 GemOutcome.EnhancedCommandReceived인 GemResult로 전달됩니다. 자동으로 실행하거나 확인 응답하는 것은 없으므로 GemEquipment.RespondEnhancedCommand로 응답해야 합니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 확장 명령 저장소 한도입니다. |
definitions | 등록 순서대로 나열한 객체 정의입니다. 정의와 그 이름 아이템은 호출하는 동안에만 읽습니다. |
참고
ArgumentNullException예외:options, 객체·명령·매개변수 정의 또는 그 이름 중 하나가null입니다.ObjectDisposedException예외: 끝점 또는 이름 아이템이 해제되었습니다.PdcommException예외: 개수나 이름 크기가options를 초과하면PdcommStatus.LimitExceeded입니다. 객체 이름이 ASCII 아이템이 아니거나, 이름이 잘못되었거나 중복되거나, 형식·개수 범위·숫자 경계가 잘못되었거나,GemEnhancedCommandOptions.ItemLimits의 한도가 0이거나, 완료 이벤트가 구성된 보고서 이벤트가 아니면PdcommStatus.InvalidArgument입니다. 끝점이 중지되어 있지 않거나 확장 명령이 이미 구성되어 있으면PdcommStatus.InvalidState입니다. 그 밖의 네이티브 실패 상태일 수도 있습니다.
ConfigureEventDirectory
메서드
S1F23(Collection Event Namelist Request)에 응답하는 장비의 수집 이벤트 디렉터리를 구성하거나 교체합니다.
public void ConfigureEventDirectory(GemDirectoryOptions options, ReadOnlySpan<GemEventDirectoryDefinition> definitions)끝점이 중지된 동안, 보고서 저장소, 데이터 변수, 보고서 바인딩을 구성한 뒤에 호출합니다. 호출은 디렉터리 전체를 교체하며, 호출이 실패하면 이전 디렉터리가 유지됩니다. 빈 디렉터리와 디렉터리가 없는 것은 다릅니다. 이후의 캐시 갱신과 호스트 보고서 정의(S2F33, S2F35)는 디렉터리를 바꾸지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 디렉터리의 용량 한도입니다. |
definitions | 저장 순서대로 나열한 이벤트 항목입니다. 이름과 변수 ID는 복사됩니다. |
참고
ArgumentNullException예외:options, 정의 또는 정의의 이름이null입니다.ArgumentException예외: 이벤트 이름에 ASCII가 아닌 문자가 있습니다.ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 항목이options의 한도를 초과하면PdcommStatus.LimitExceeded입니다. 이벤트 ID가 중복되거나 항목에 VID가 두 번 나오면PdcommStatus.InvalidArgument입니다. 끝점이 중지되어 있지 않으면PdcommStatus.InvalidState입니다. 그 밖의 네이티브 상태일 수도 있습니다. 예를 들어 이벤트 ID가 보고서 저장소의 이벤트와 정확히 일치하지 않거나 VID가 기존 데이터 변수에 바인딩되어 있지 않으면PdcommStatus.InvalidArgument입니다.
ConfigureFixedCatalog
메서드
완전한 고정 보고서 카탈로그와 명시적 보고서 변수 바인딩을 원자적인 한 단계로 설치합니다.
public void ConfigureFixedCatalog(GemReportOptions reportOptions, IReadOnlyList<GemReportDefinition> reports, IReadOnlyList<GemFixedEventDefinition> events, GemBindingOptions bindingOptions, IReadOnlyList<GemReportBinding> bindings)끝점이 중지된 동안 GemEndpoint.Start 전에 호출합니다. 입력은 호출 중에 복사됩니다. 실패하면 이전 보고서 그래프와 바인딩 저장소가 유지되므로, 카탈로그는 완전히 설치되거나 전혀 설치되지 않으며 한 번만 설치됩니다.
매개변수
| 이름 | 설명 |
|---|---|
reportOptions | 보고서 저장소 한도입니다. |
reports | 보고서 정의입니다. 각 보고서 ID(RPTID)와 그 변수 ID(VID)로 구성됩니다. |
events | 연결된 보고서와 초기 활성화 상태를 가진 수집 이벤트입니다. |
bindingOptions | 바인딩 저장소 한도입니다. |
bindings | 명시적 VID 바인딩입니다. 각 바인딩은 상수 ID 없이 GemDataSourceKind.Status 또는 GemDataSourceKind.Data를 사용해야 합니다. |
참고
ArgumentNullException예외:reports,events또는bindings가null입니다.NotSupportedException예외: 로드된 네이티브 라이브러리가 이 함수를 내보내지 않습니다.ObjectDisposedException예외: 끝점 또는 바인딩의 상수 ID 아이템이 해제되었습니다.PdcommException예외: 끝점이 중지되어 있지 않거나 보고서나 바인딩이 이미 구성되어 있으면PdcommStatus.InvalidState입니다. 정의, 연결 또는 바인딩이 잘못되었거나, 바인딩이 상수 소스를 사용하거나, 보고서가 확인할 수 없는 변수를 참조하면PdcommStatus.InvalidArgument입니다. 카탈로그가reportOptions또는bindingOptions를 초과하면PdcommStatus.LimitExceeded입니다.
ConfigureLocalSpooling
메서드
로컬 스풀링 정책과 스풀링 대상으로 선택한 스트림 및 펑션을 설정합니다.
public GemSpoolWriteResult ConfigureLocalSpooling(GemSpoolPolicy policy, ReadOnlySpan<GemSpoolSelection> selections)끝점이 중지되어 있어야 합니다. 변경은 이후 캡처에만 적용되며, 저장된 항목은 유지됩니다. 변경하면 동기화도 무효화되므로 캡처하기 전에 GemEquipment.SyncSpool을 호출합니다.
매개변수
| 이름 | 설명 |
|---|---|
policy | 오버플로 정책, 전송 한도, 전역 활성화 스위치입니다. |
selections | 스트림 선택입니다. 빈 범위를 전달하면 어떤 스트림도 선택하지 않습니다. 각 스트림과 펑션은 카탈로그에 있어야 합니다. |
반환값
새 구성의 설치 결과입니다(GemSpoolMutation.Configured). 영구 저장을 확인할 수 없으면 GemSpoolWriteResult.Status가 PdcommStatus.SpoolUnconfirmed입니다.
참고
ArgumentNullException예외:policy가null입니다.ArgumentOutOfRangeException예외:GemSpoolPolicy.Overflow가 정의된GemSpoolOverflow값이 아닙니다.ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 끝점이 시작되었거나 스풀링이 구성되어 있지 않으면PdcommStatus.InvalidState입니다. 선택에서 스트림이나 펑션이 반복되거나 카탈로그에 없는 것을 지정하면PdcommStatus.InvalidArgument입니다. 선택이GemSpoolOptions.MaxStreams또는GemSpoolOptions.MaxFunctionsPerStream을 초과하면PdcommStatus.LimitExceeded입니다. 전송이나 전달이 대기 중이거나 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure입니다. 스냅샷 쓰기가 실패하면 그 상태(예:PdcommStatus.IoError)입니다.
ConfigurePrograms
메서드
프로세스 프로그램 저장소를 설치하고 스트림 7 프로세스 프로그램 거래를 활성화합니다.
public void ConfigurePrograms(GemProgramOptions options, string? path = null)끝점이 중지된 동안 한 번 호출합니다. 경로를 지정하면 저장소는 저장 파일 옆의 잠금 파일로 단독 쓰기 잠금을 얻고, 저장된 프로그램을 로드하여 검증합니다. 파일이 없으면 빈 저장소로 시작합니다. 열기나 로드가 실패하면 저장소는 설치되지 않으며 기존 파일은 그대로 남습니다. 이후 변경이 있을 때마다 완전한 새 파일을 쓰고, 이전 파일을 교체하며, 부모 디렉터리를 동기화합니다. 이 파일 I/O는 호출 스레드에서 동기적으로 실행됩니다. PPID는 파일 이름으로 사용하지 않습니다.
그 뒤에는 수신한 S7F1, S7F3, S7F5, S7F17, S7F19 1차 메시지가 GemOutcome.ProgramReceived로 보고되며 GemEquipment.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입니다.
ConfigureReportBindings
메서드
보고서 변수 ID(VID)를 값 소스에 연결하는 명시적 바인딩을 구성하거나 교체합니다.
public void ConfigureReportBindings(GemBindingOptions options, ReadOnlySpan<GemReportBinding> bindings)끝점이 중지된 동안 호출합니다. 호출이 실패하면 이전 바인딩이 유지됩니다. 명시적 바인딩이 없으면 각 VID는 같은 ID의 상태 변수로 확인됩니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 바인딩의 용량 한도입니다. |
bindings | 저장 순서대로 나열한 바인딩입니다. 상수 식별자 아이템은 복사됩니다. 빈 범위를 전달하면 바인딩이 없는 명시적 모드가 설치되므로, 어떤 VID도 상태 변수로 대체되지 않습니다. |
참고
ArgumentNullException예외:options또는 바인딩이null입니다.ObjectDisposedException예외: 장비 또는 상수 식별자 아이템이 해제되었습니다.PdcommException예외: VID가 중복되거나, 소스 종류가 정의되지 않았거나, 상태 또는 데이터 바인딩에 상수 식별자가 있거나, 상수 바인딩의 소스 ID가 0이 아니거나 식별자가 없거나, 식별자가 ASCII도 단일 정수도 아니면PdcommStatus.InvalidArgument입니다. 바인딩이options의 한도를 초과하면PdcommStatus.LimitExceeded입니다. 끝점이 중지되어 있지 않으면PdcommStatus.InvalidState입니다. 그 밖의 네이티브 상태일 수도 있습니다. 예를 들어 소스가 없거나, 정의된 보고서나 이벤트 디렉터리가 새 바인딩에 포함되지 않은 VID를 사용하면PdcommStatus.InvalidArgument입니다.
ConfigureReports
메서드
장비의 이벤트 보고서 저장소를 만들고 수집 이벤트를 등록합니다.
public void ConfigureReports(GemReportOptions options, ReadOnlySpan<uint> eventIds)끝점이 중지된 동안 한 번 호출합니다. 미리 정의된 보고서나 연결은 없으며, 등록된 모든 이벤트는 연결되지 않고 비활성화된 상태로 시작합니다. 통신 중에는 장비가 호스트의 S2F33(Define Report, DRACK), S2F35(Link Event Report, LRACK), S2F37(Enable/Disable Event Report, ERACK) 요청에 이 저장소로 응답합니다. SEMI E30처럼 연결과 활성화 상태는 서로 독립적입니다. S2F37은 존재하는 모든 CEID를 수락하며, 연결된 보고서가 없는 활성화된 이벤트는 빈 보고서 목록으로 보고합니다. 호출이 실패하면 장비는 바뀌지 않습니다. 호출은 끝점의 내부 잠금으로 직렬화됩니다.
매개변수
| 이름 | 설명 |
|---|---|
options | 보고서 저장소의 용량 한도입니다. |
eventIds | 호스트가 보고서를 연결할 수 있는 수집 이벤트 ID(CEID)입니다. ID는 복사됩니다. |
참고
ArgumentNullException예외:options가null입니다.ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. 끝점이 중지되어 있지 않거나 보고서 저장소가 이미 구성되어 있으면PdcommStatus.InvalidState,eventIds의 항목이GemReportOptions.MaxEvents보다 많으면PdcommStatus.LimitExceeded, 이벤트 ID가 중복되면PdcommStatus.InvalidArgument입니다.
ConfigureSpooling
메서드
메모리 또는 스냅샷 파일에 보관하는 스풀을 장비에 연결합니다.
public GemSpoolWriteResult ConfigureSpooling(GemSpoolOptions options, ReadOnlySpan<GemSpoolMessageKey> catalog, string? path = null)GemEndpoint.Start 전에 한 번 호출한 다음, GemEquipment.ConfigureLocalSpooling으로 정책과 선택을 설정합니다. 로드한 파일은 저장된 카탈로그, 정책, 선택, 항목, 카운터를 유지하며, 알리지 않고 교체하거나 마이그레이션하지 않습니다.
파일 기반 스풀은 끝점이 존재하는 동안 path 옆의 잠금 파일에 단독 잠금을 유지합니다. 변경이 있을 때마다 path 옆의 임시 파일에 완전한 스냅샷을 쓰고, 플러시하고, path 위로 이름을 바꾸고, 부모 디렉터리를 동기화합니다. 이 작업은 모두 호출 스레드에서 수행됩니다. 결과의 GemSpoolWriteResult.Status가 PdcommStatus.SpoolUnconfirmed이면 새 스풀은 연결되었지만 디렉터리 동기화가 실패한 것입니다. 이 경우 다시 구성하지 마십시오.
매개변수
| 이름 | 설명 |
|---|---|
options | 스풀 한도입니다. |
catalog | 스풀할 수 있는 1차 메시지 목록이며 순서대로 나열합니다. 새 스풀에는 비어 있지 않은 카탈로그가 필요합니다. 기존 스냅샷 파일이면 저장된 카탈로그를 받아들이려면 빈 범위를 전달하고, 그렇지 않으면 저장된 카탈로그를 같은 순서 그대로 전달합니다. |
path | 메모리 내 스풀이면 null이나 빈 문자열이고, 그렇지 않으면 스냅샷 파일의 경로입니다. 부모 디렉터리가 있어야 합니다. |
반환값
새 스풀이면 초기 구성의 설치 결과입니다(GemSpoolMutation.Configured, 비활성화, 선택된 스트림 없음). 기존 스냅샷 파일을 로드하면 아무것도 쓰지 않으며 변경도 보고하지 않습니다.
참고
ArgumentNullException예외:options가null입니다.ArgumentException예외:path에 NUL 문자가 있거나 UTF-8로 인코딩할 수 없습니다.ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 끝점이 시작되었거나 스풀링이 이미 구성되어 있으면PdcommStatus.InvalidState입니다. 새 스풀의 카탈로그가 비어 있거나, 카탈로그 항목이 잘못되었거나 반복되거나,path에 파일 이름이 없거나, 경로를 지정했는데GemSpoolOptions.MaxSerializedBytes가 144보다 작으면PdcommStatus.InvalidArgument입니다. 카탈로그가GemSpoolOptions.MaxCatalogEntries를 초과하거나, 스냅샷 파일이GemSpoolOptions.MaxSerializedBytes를 초과하거나, 내용이options를 초과하면PdcommStatus.LimitExceeded입니다. 스냅샷 파일이 손상되었거나 카탈로그가catalog와 다르면PdcommStatus.InvalidData입니다. 다른 스풀이 파일 잠금을 보유하고 있거나 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure입니다. 파일 작업이 실패하면PdcommStatus.IoError입니다.
ConfirmProgramReply
메서드
확인되지 않은 설치를 수락하여 저장된 응답을 보낼 수 있게 합니다.
public void ConfirmProgramReply(GemResult result)이 호출은 응답을 보내지 않고 동기화도 수행하지 않습니다. 내구성을 GemProgramDurability.Confirmed로 설정하고 저장된 응답을 송신 준비 상태로 만듭니다. 응답은 같은 모드와 결정으로 GemEquipment.RespondProgram을 다시 호출하여 보냅니다.
매개변수
| 이름 | 설명 |
|---|---|
result | GemProgramInfo.ConfirmationRequired가 true인 수신 S7F3 또는 S7F17 요청입니다. |
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 끝점 또는result가 해제되었습니다.PdcommException예외: 결과에 확인되지 않은 응답이 없거나, 프로그램 결과가 아니거나, 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 요청에 이미 응답했거나 요청이 다른 끝점이나 이전 연결 또는 선택에 속하면PdcommStatus.StaleToken입니다. 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
ConfirmSpoolReply
메서드
보류된 스풀링 응답의 확인되지 않은 영구 저장을 수락하여 GemEquipment.RespondSpool이 응답을 보낼 수 있게 합니다.
public void ConfirmSpoolReply(GemResult result)동기화도 송신도 하지 않습니다. 호출 후 GemResult.GetSpoolInfo는 GemSpoolDurability.Confirmed를 보고하며, 원래의 영구 저장 상태도 계속 보여 줍니다.
매개변수
| 이름 | 설명 |
|---|---|
result | GemEquipment.RespondSpool이 PdcommStatus.SpoolUnconfirmed를 반환한 결과입니다. |
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 장비 또는result가 해제되었습니다.PdcommException예외: 결과가 다른 끝점, 연결 또는 선택에 속하거나 이미 응답했으면PdcommStatus.StaleToken, 결과에 확인되지 않은 응답이 없으면PdcommStatus.InvalidState, 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure입니다.
Create
메서드
HSMS 끝점을 만들고 GEM 장비로 구성합니다.
public static GemEquipment Create(string numericAddress, HsmsOptions options, GemEquipmentOptions gemOptions)매개변수
| 이름 | 설명 |
|---|---|
numericAddress | 127.0.0.1:5000 같은 숫자 IPv4 또는 IPv6 소켓 주소입니다. DNS 조회는 수행하지 않습니다. 패시브 끝점은 즉시 이 주소에 바인딩하고(포트 0이면 빈 포트를 선택), 액티브 끝점은 이 주소로 연결합니다. |
options | HSMS 전송 옵션입니다. |
gemOptions | GEM 장비 옵션입니다. |
반환값
중지된 끝점입니다. 상태 변수를 등록하고 기능을 구성한 다음 GemEndpoint.Start를 호출합니다.
참고
ArgumentNullException예외:numericAddress,options,gemOptions또는 그GemEquipmentOptions.Model이나GemEquipmentOptions.SoftwareRevision이null입니다.ArgumentException예외: 모델 또는 소프트웨어 리비전에 ASCII가 아닌 문자가 있습니다.PdcommException예외: 끝점을 만들거나 구성할 수 없었습니다. 숫자가 아닌 주소, 잘못된 전송 옵션,GemControlState.AttemptOnline인 초기 제어 상태, 정의되지 않은 열거형 값, 0인GemEquipmentOptions.MaxVariables,GemEquipmentOptions.MaxValueBytes또는 아이템 한도이면PdcommStatus.InvalidArgument입니다. 식별 메시지가 아이템 한도에 맞지 않으면PdcommStatus.LimitExceeded입니다.
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입니다.
GetAlarmAt
메서드
등록 순서에서 지정한 위치의 구성된 알람을 가져옵니다.
public GemAlarmEntry GetAlarmAt(nuint index)로컬 조회입니다. 할당 없이 호출자가 제공한 버퍼에 텍스트를 복사하려면 GemEquipment.TryCopyAlarmAt을 사용합니다.
매개변수
| 이름 | 설명 |
|---|---|
index | 등록 순서에서 알람의 0부터 시작하는 위치입니다. |
반환값
알람 상태, 메타데이터, 텍스트입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:index가 알람 수보다 작지 않으면PdcommStatus.OutOfRange, 알람이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.InvalidOperationException예외: 크기 조회와 복사 사이에 네이티브 텍스트 크기가 바뀌었습니다.
GetAlarmState
메서드
구성된 알람 저장소의 카운터를 가져옵니다.
public GemAlarmState GetAlarmState()로컬 조회이므로 연결이나 GEM 통신이 필요하지 않습니다.
반환값
알람 수, 활성 알람 수, 활성화된 알람 수, 텍스트 전체 크기입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 알람이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.
GetBindingAt
메서드
저장 순서에서 지정한 위치의 보고서 변수 바인딩을 가져옵니다.
public GemReportBindingEntry GetBindingAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 0부터 시작하는 위치입니다. |
반환값
호출자가 소유하는 새 항목입니다. 상수 식별자 아이템을 해제하려면 이 항목을 해제해야 합니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. 예를 들어 바인딩이 구성되어 있지 않거나index가 바인딩 수보다 작지 않으면PdcommStatus.OutOfRange입니다.
GetBindingState
메서드
보고서 변수 바인딩의 현재 상태를 가져옵니다.
public GemBindingState GetBindingState()반환값
바인딩 수, ASCII 식별자 크기, 명시적 모드가 활성인지 여부입니다. 바인딩이 구성되어 있지 않으면 모든 값이 0 또는 false입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.
GetCommandAt
메서드
등록 순서에서 지정한 위치의 구성된 원격 명령을 가져옵니다.
public GemCommandEntry GetCommandAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 등록 순서에서 명령의 0부터 시작하는 위치입니다. |
반환값
명령 메타데이터와 이름입니다. 호출자는 반환된 항목을 해제해야 합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:index가 명령 수보다 작지 않으면PdcommStatus.OutOfRange, 명령이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.
GetCommandParameterAt
메서드
구성된 원격 명령의 매개변수 정의 하나를 가져옵니다.
public GemCommandParameterEntry GetCommandParameterAt(nuint commandIndex, nuint parameterIndex)매개변수
| 이름 | 설명 |
|---|---|
commandIndex | 등록 순서에서 명령의 0부터 시작하는 위치입니다. |
parameterIndex | 명령 정의에서 매개변수의 0부터 시작하는 위치입니다. |
반환값
매개변수 검증 규칙과 이름입니다. 호출자는 반환된 항목을 해제해야 합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 인덱스 중 하나가 범위를 벗어나면PdcommStatus.OutOfRange, 명령이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.
GetCommandState
메서드
구성된 원격 명령 저장소의 카운터를 가져옵니다.
public GemCommandState GetCommandState()반환값
명령 수, 매개변수 정의 수, ASCII 이름 전체 크기입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 명령이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.
GetConstant
메서드
등록된 장비 상수의 필드 하나를 가져옵니다.
public SecsItem? GetConstant(SecsItem id, GemConstantField field)매개변수
| 이름 | 설명 |
|---|---|
id | 장비 상수 ID(ECID)입니다. ASCII 아이템이거나 스칼라 정수 아이템입니다. |
field | 읽을 필드입니다. GemConstantField.Current는 현재값(ECV)을 읽습니다. |
반환값
호출자가 소유하며 해제해야 하는 새 아이템이거나, 상수에 기본값, 최솟값 또는 최댓값이 없으면 null입니다. 이름과 단위는 ASCII 아이템으로 반환됩니다. 빈 ASCII 아이템은 값이 없는 것이 아니라 값이 있지만 비어 있다는 뜻입니다.
참고
ArgumentNullException예외:id가null입니다.ObjectDisposedException예외: 끝점 또는id가 해제되었습니다.PdcommException예외:field가 정의되지 않았거나id가 ASCII 아이템도 스칼라 정수 아이템도 아니면PdcommStatus.InvalidArgument입니다. ID가 등록되지 않았으면PdcommStatus.OutOfRange입니다. 상수가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetConstantAt
메서드
등록 순서에서 지정한 위치에 있는 상수의 ID와 선언된 형태를 가져옵니다.
public GemConstantEntry GetConstantAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 0부터 시작하는 위치이며 GemConstantState.ConstantCount보다 작아야 합니다. |
반환값
호출자가 소유하며 해제해야 하는 새 항목입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:index가 너무 크면PdcommStatus.OutOfRange이고, 상수가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetConstantState
메서드
장비 상수 저장소의 카운터를 가져옵니다.
public GemConstantState GetConstantState()반환값
상수 수와, 사용 중인 메타데이터 바이트와 값 바이트입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 상수가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetData
메서드
데이터 변수의 필드 하나를 새 아이템으로 가져옵니다.
public SecsItem? GetData(uint id, GemDataField field)반환된 아이템은 이후 저장소나 끝점이 바뀌어도 유효합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 데이터 변수 ID입니다. |
field | 읽을 필드입니다. |
반환값
호출자가 소유하며 해제해야 하는 새 아이템입니다. GemDataField.Name과 GemDataField.Units이면 ASCII 아이템이고, GemDataField.Cached이면 캐시 값의 복사본입니다. field가 GemDataField.Cached이고 캐시된 값이 없으면 null입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외:field가 정의된 값이 아니면PdcommStatus.InvalidArgument입니다. 그 밖에는 네이티브 상태입니다. 예를 들어 알 수 없는 ID이면PdcommStatus.OutOfRange, 데이터 변수 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.InvalidOperationException예외: 네이티브 라이브러리가 이름이나 단위에 대해 아이템을 반환하지 않았습니다.
GetDataAt
메서드
저장소에서 지정한 위치에 있는 데이터 변수의 형태와 캐시 상태를 가져옵니다.
public GemDataInfo GetDataAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 저장 순서에서 0부터 시작하는 위치입니다. |
반환값
ID, 형식, 개수 범위, 캐시된 값이 있는지 여부입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.index가 변수 수보다 작지 않으면PdcommStatus.OutOfRange이고, 데이터 변수 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetDataState
메서드
장비 데이터 변수 저장소의 현재 카운터를 가져옵니다.
public GemDataState GetDataState()반환값
변수 수, 메타데이터 크기, 캐시 값 크기입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. 예를 들어 데이터 변수 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetDirectory
메서드
이벤트 디렉터리 항목의 필드 하나를 새 아이템으로 가져옵니다.
public SecsItem GetDirectory(uint id, GemDirectoryField field)반환된 아이템은 디렉터리를 다시 구성한 뒤에도 유효합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 수집 이벤트 ID(CEID)입니다. |
field | ASCII 아이템을 가져오려면 GemDirectoryField.Name, U4 배열 아이템을 가져오려면 GemDirectoryField.VariableIds입니다. |
반환값
호출자가 소유하며 해제해야 하는 새 아이템입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외:field가GemDirectoryField.Units이거나 정의된 값이 아니면PdcommStatus.InvalidArgument입니다. 그 밖에는 네이티브 상태입니다. 예를 들어 알 수 없는 ID이면PdcommStatus.OutOfRange, 디렉터리가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.InvalidOperationException예외: 네이티브 라이브러리가 아이템을 반환하지 않았습니다.
GetDirectoryAt
메서드
저장 순서에서 지정한 위치에 있는 디렉터리 항목의 이벤트 ID와 변수 수를 가져옵니다.
public GemDirectoryEntryInfo GetDirectoryAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 0부터 시작하는 위치입니다. |
반환값
수집 이벤트 ID(CEID)와 그 변수 ID의 수입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.index가 항목 수보다 작지 않으면PdcommStatus.OutOfRange이고, 디렉터리가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetDirectoryState
메서드
장비 이벤트 디렉터리의 현재 카운터를 가져옵니다.
public GemDirectoryState GetDirectoryState()반환값
항목 수, 이름 바이트 수, 변수 수, 디렉터리가 구성되어 있는지 여부입니다. 디렉터리가 구성되어 있지 않으면 개수는 0이고 GemDirectoryState.Configured는 false입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.
GetEnhancedCommandAt
메서드
구성된 확장 명령 객체의 명령 정의 하나를 가져옵니다.
public GemCommandEntry GetEnhancedCommandAt(nuint objectIndex, nuint commandIndex)매개변수
| 이름 | 설명 |
|---|---|
objectIndex | 등록 순서에서 객체의 0부터 시작하는 위치입니다. |
commandIndex | 객체 정의에서 명령의 0부터 시작하는 위치입니다. |
반환값
명령 메타데이터와 이름입니다. 호출자는 반환된 항목을 해제해야 합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 인덱스 중 하나가 범위를 벗어나면PdcommStatus.OutOfRange, 확장 명령이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.
GetEnhancedCommandParameterAt
메서드
구성된 확장 명령 객체에 속한 명령의 매개변수 정의 하나를 가져옵니다.
public GemCommandParameterEntry GetEnhancedCommandParameterAt(nuint objectIndex, nuint commandIndex, nuint parameterIndex)매개변수
| 이름 | 설명 |
|---|---|
objectIndex | 등록 순서에서 객체의 0부터 시작하는 위치입니다. |
commandIndex | 객체 정의에서 명령의 0부터 시작하는 위치입니다. |
parameterIndex | 명령 정의에서 매개변수의 0부터 시작하는 위치입니다. |
반환값
매개변수 검증 규칙과 이름입니다. 호출자는 반환된 항목을 해제해야 합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 인덱스가 범위를 벗어나면PdcommStatus.OutOfRange, 확장 명령이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.
GetEnhancedCommandState
메서드
구성된 확장 원격 명령 저장소의 카운터를 가져옵니다.
public GemEnhancedCommandState GetEnhancedCommandState()반환값
객체 수, 명령 수, 매개변수 수와 이름 전체 크기입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 확장 명령이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.
GetEnhancedObjectAt
메서드
등록 순서에서 지정한 위치의 구성된 확장 명령 객체를 가져옵니다.
public GemEnhancedObjectEntry GetEnhancedObjectAt(nuint objectIndex)매개변수
| 이름 | 설명 |
|---|---|
objectIndex | 등록 순서에서 객체의 0부터 시작하는 위치입니다. |
반환값
객체 메타데이터와 이름입니다. 호출자는 반환된 항목을 해제해야 합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:objectIndex가 객체 수보다 작지 않으면PdcommStatus.OutOfRange, 확장 명령이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.
GetEventAt
메서드
장비 보고서 저장소에서 지정한 위치의 수집 이벤트를 가져옵니다.
public GemEventDefinition GetEventAt(nuint index)호스트는 S2F35(Link Event Report)로 연결을, S2F37(Enable/Disable Event Report)로 활성화 상태를 변경합니다. 호출자 버퍼에 복사하려면 대신 GemEquipment.TryCopyEventAt을 사용합니다.
매개변수
| 이름 | 설명 |
|---|---|
index | 등록 순서에서 0부터 시작하는 위치입니다. |
반환값
이벤트 ID, 활성화 상태, 연결된 보고서 ID의 복사본입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.index가 이벤트 수보다 작지 않으면PdcommStatus.OutOfRange이고, 보고서 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.InvalidOperationException예외: 크기 조회와 복사 사이에 네이티브 연결 수가 바뀌었습니다.
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입니다.
GetReportAt
메서드
장비 보고서 저장소에서 지정한 위치의 보고서 정의를 가져옵니다.
public GemReportDefinition GetReportAt(nuint index)호스트는 S2F33(Define Report)으로 보고서를 변경합니다. 호출자 버퍼에 복사하려면 대신 GemEquipment.TryCopyReportAt을 사용합니다.
매개변수
| 이름 | 설명 |
|---|---|
index | 저장 순서에서 0부터 시작하는 위치입니다. |
반환값
보고서 ID와 그 변수 ID의 복사본입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.index가 보고서 수보다 작지 않으면PdcommStatus.OutOfRange이고, 보고서 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.InvalidOperationException예외: 크기 조회와 복사 사이에 네이티브 보고서 크기가 바뀌었습니다.
GetReportState
메서드
장비 이벤트 보고서 저장소의 현재 카운터를 가져옵니다.
public GemReportState GetReportState()반환값
이벤트 수, 보고서 수, 변수 수, 연결 수입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. 예를 들어 보고서 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetReportValue
메서드
보고서 변수 ID가 확인되는 현재 값의 복사본을 가져옵니다.
public SecsItem GetReportValue(uint vid)값은 바인딩과 캐시에서 로컬로 확인합니다. 메시지를 보내지 않으며 보고서 전체 크기도 검사하지 않습니다. 반환된 아이템은 장비와 독립적입니다.
매개변수
| 이름 | 설명 |
|---|---|
vid | 변수 ID(VID)입니다. |
반환값
호출자가 소유하며 해제해야 하는 새 아이템입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. VID나 그 소스를 알 수 없으면PdcommStatus.OutOfRange입니다. 바인딩된 데이터 변수에 캐시 값이 없거나 데이터 변수 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetSpoolCatalogAt
메서드
스풀 카탈로그의 항목 하나를 가져옵니다.
public GemSpoolMessageKey GetSpoolCatalogAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 카탈로그에서 0부터 시작하는 위치입니다. |
반환값
카탈로그 항목의 스트림과 펑션입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외:index가GemSpoolState.CatalogCount보다 작지 않거나 스풀링이 구성되어 있지 않으면PdcommStatus.OutOfRange입니다.
GetSpoolEntryAt
메서드
저장된 스풀 항목 하나의 복사본을 가져옵니다.
public GemSpoolEntry GetSpoolEntryAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 스풀에서 0부터 시작하는 위치입니다. 0은 가장 오래된 항목이며 다음에 전달됩니다. |
반환값
호출자가 소유하며 해제해야 하는 새 항목입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않으면PdcommStatus.InvalidState,index가GemSpoolState.MessageCount보다 작지 않으면PdcommStatus.OutOfRange, 저장된 본문을 디코딩할 수 없으면PdcommStatus.InvalidData이거나,PdcommStatus.AllocationFailed같은 그 밖의 네이티브 실패입니다.
GetSpoolEntryCapturedAt
메서드
스풀 항목에 기록된 캡처 시각을 가져옵니다.
public ulong? GetSpoolEntryCapturedAt(nuint index)시각은 GemEquipment.CaptureSpool 같은 애플리케이션 캡처 호출의 시계를 사용합니다. 바인딩은 이 값을 해석하지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
index | 스풀에서 항목의 0부터 시작하는 위치입니다. |
반환값
항목을 캡처할 때 전달한 now 값입니다. 이전 스풀 스냅샷의 항목처럼 기록된 캡처 시각이 없으면 null입니다.
참고
NotSupportedException예외: 로드된 네이티브 라이브러리가 이 함수를 내보내지 않습니다.ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:index에 항목이 없으면PdcommStatus.OutOfRange이고, 스풀링이 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetSpoolSelectionAt
메서드
현재 스풀링 구성의 스트림 선택 하나를 가져옵니다.
public GemSpoolSelection GetSpoolSelectionAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 선택에서 0부터 시작하는 위치입니다. |
반환값
스트림과, 선택된 펑션을 담은 새 배열입니다. 배열이 비어 있으면 그 스트림의 카탈로그에 있는 모든 펑션을 선택한 것입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않으면PdcommStatus.InvalidState,index가GemSpoolState.SelectionCount보다 작지 않으면PdcommStatus.OutOfRange이거나,PdcommStatus.AllocationFailed같은 그 밖의 네이티브 실패입니다.InvalidOperationException예외: 네이티브 라이브러리가 펑션 목록을 반환하지 않았습니다.
GetSpoolState
메서드
스풀의 카운터, 정책, 플래그를 가져옵니다.
public GemSpoolState GetSpoolState()반환값
현재 스풀 상태입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
GetStatus
메서드
등록된 상태 변수의 현재 값 복사본을 가져옵니다.
public SecsItem GetStatus(uint id)매개변수
| 이름 | 설명 |
|---|---|
id | 상태 변수 ID(SVID)입니다. |
반환값
호출자가 소유하며 해제해야 하는 새 아이템입니다. 끝점을 해제한 뒤에도 유효합니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 알 수 없는 ID이면PdcommStatus.OutOfRange입니다.
GetStatusIdAt
메서드
등록 순서에서 지정한 위치에 있는 상태 변수의 ID를 가져옵니다.
public uint GetStatusIdAt(nuint index)매개변수
| 이름 | 설명 |
|---|---|
index | 0부터 시작하는 등록 위치입니다. |
반환값
상태 변수 ID(SVID)입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:index가GemState.VariableCount보다 작지 않으면PdcommStatus.OutOfRange입니다.
GetStatusMetadata
메서드
등록된 상태 변수의 이름과 단위를 가져옵니다.
public GemStatusName GetStatusMetadata(uint id)매개변수
| 이름 | 설명 |
|---|---|
id | 상태 변수 ID(SVID)입니다. |
반환값
상태 변수 이름과 단위입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 알 수 없는 ID이면PdcommStatus.OutOfRange입니다.InvalidOperationException예외: 읽는 동안 네이티브 메타데이터 크기가 바뀌었습니다.
GrantProgram
메서드
상대방에게 프로세스 프로그램 수락을 요청하는 S7F1(Process Program Load Inquire)을 보냅니다.
public HsmsToken GrantProgram(SecsItem id, uint length)GemCommunicationState.Communicating이 필요합니다. PPID는 요청이 완료될 때까지 GemProgramOptions.MaxPendingIds와 GemProgramOptions.MaxPendingIdentifierBytes에 포함됩니다. 유효한 S7F2 응답은 GemResultInfo.Acknowledgement에 PPGNT가 들어 있는 GemOutcome.ProgramGrantReceived를 만듭니다. 제출은 허가가 아닙니다. 허가를 받은 뒤 GemEquipment.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를 초과하게 되면PdcommStatus.LimitExceeded입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
ObserveAlarm
메서드
메시지를 보내지 않고 구성된 알람의 현재 활성 상태를 기록합니다.
public GemAlarmChange ObserveAlarm(uint id, bool active)상태는 즉시 바뀌며, 이후 송신이 실패해도 되돌리지 않습니다. 전이를 보고하려면 S5F1에 대해 GemEquipment.PublishAlarm을 호출하고, GemAlarmChange.EventId가 있으면 S6F11 이벤트 보고서에 대해 GemEquipment.PublishEvent를 호출합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 알람 ID(ALID)입니다. |
active | 알람 조건이 발생했으면 true이고, 해제되었으면 false입니다. |
반환값
상태가 바뀌었는지 여부, 현재 보고 정책, 전이에 매핑된 발생 또는 해제 수집 이벤트 ID(CEID)입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:id가 구성된 알람이 아니면PdcommStatus.OutOfRange이고, 끝점이 알람이 구성된 장비가 아니면PdcommStatus.InvalidState입니다.
OperatorOffline
메서드
운영자의 OFF-LINE 스위치처럼 장비를 GemControlState.EquipmentOffline으로 전환합니다.
public void OperatorOffline()SEMI E30 제어 상태 모델처럼 GemControlState.OnlineLocal, GemControlState.OnlineRemote, GemControlState.HostOffline에서 허용됩니다. 호스트에 메시지를 보내지 않으며 연결도 필요하지 않습니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 제어 상태가GemControlState.EquipmentOffline또는GemControlState.AttemptOnline이면PdcommStatus.InvalidState입니다.
OperatorOnline
메서드
호스트에 S1F1(Are You There)을 보내 운영자의 온라인 전환 요청을 시작합니다.
public HsmsToken OperatorOnline()세션이 선택된 상태이고 GemControlState.EquipmentOffline일 때만 허용됩니다. 제어 상태는 GemControlState.AttemptOnline이 됩니다. 호스트가 빈 S1F2 리스트로 응답하면 결과는 GemOutcome.OnlineAccepted가 되고 상태는 온라인 모드가 선택한 온라인 상태가 됩니다. 거래가 실패하면 상태는 GemControlState.HostOffline이 됩니다. 결과는 GemRequestKind.OperatorOnline을 보고합니다.
반환값
S1F1 요청의 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 다른 제어 상태이거나 선택된 세션이 없으면PdcommStatus.InvalidState이고, 대기 요청 슬롯 32개가 모두 사용 중이면PdcommStatus.Backpressure입니다.
PublishAlarm
메서드
구성된 알람의 현재 상태를 담은 S5F1(Alarm Report Send) 메시지를 보냅니다.
public HsmsToken PublishAlarm(uint id, bool replyExpected)메시지에는 ALCD(범주, 알람이 활성이면 비트 8 설정), ALID, ALTX가 들어 있습니다. replyExpected를 지정하면 요청이 대기 슬롯 하나를 차지하고, S5F2 응답은 GemOutcome.AlarmAck인 GemResult로 도착합니다. 지정하지 않으면 토큰은 로컬 쓰기만 추적하며, 호스트가 보고를 받았다는 뜻이 아닙니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 알람 ID(ALID)입니다. |
replyExpected | W 비트를 설정하고 S5F2(Alarm Report Acknowledge) 응답을 기대하려면 true입니다. |
반환값
수락된 요청의 전송 토큰입니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:id가 구성된 알람이 아니면PdcommStatus.OutOfRange입니다. 알람이 구성되어 있지 않거나, 이 알람의 보고가 활성화되어 있지 않거나, GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 전송이 가득 찼거나,replyExpected를 지정했을 때 대기 요청 테이블이 가득 찼으면PdcommStatus.Backpressure입니다. 그 밖의 네이티브 실패 상태일 수도 있습니다.
PublishEvent
메서드
활성화된 수집 이벤트에 대한 이벤트 보고서(S6F11)를 보냅니다. 연결된 보고서가 없는 이벤트는 빈 보고서 목록으로 보냅니다.
public HsmsToken PublishEvent(uint dataId, uint eventId)메시지 본문은 메서드가 반환되기 전에 현재 보고서 값으로 만들어지며, 응답 비트를 설정하여 전송됩니다. 값은 보고서 바인딩이 구성되어 있으면 바인딩에서, 그렇지 않으면 ID가 VID와 같은 상태 변수에서 가져옵니다. 제출은 확인 응답이 아닙니다. 나중에 호스트의 S6F12가 GemOutcome.EventAck이고 GemResultInfo.Acknowledgement에 ACKC6 코드(0~63)가 있는 결과를 만듭니다. 데이터 샘플을 제공하려면 GemEquipment.PublishEventWithData를 사용합니다.
매개변수
| 이름 | 설명 |
|---|---|
dataId | 메시지에 넣는 데이터 ID(DATAID)입니다. |
eventId | 수집 이벤트 ID(CEID)입니다. |
반환값
대기 중인 S6F11/S6F12 거래를 식별하는 토큰입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다. 장비가 통신 중이 아니거나 바인딩된 데이터 변수에 캐시 값이 없으면PdcommStatus.InvalidState입니다. 보고서 저장소가 구성되어 있지 않거나 이벤트를 알 수 없거나 비활성화되어 있으면PdcommStatus.InvalidData입니다. 보고서 변수에 값 소스가 없으면PdcommStatus.OutOfRange입니다. 메시지가 아이템 한도를 초과하면PdcommStatus.LimitExceeded입니다. 빈 대기 요청 슬롯이 없으면PdcommStatus.Backpressure입니다.
PublishEventWithData
메서드
데이터 변수 값을 먼저 제공된 샘플에서, 그다음 캐시 값에서 가져오는 이벤트 보고서(S6F11)를 보냅니다.
public HsmsToken PublishEventWithData(uint dataId, uint eventId, ReadOnlySpan<GemDataSample> samples)보고서 전체를 제출 전에 만들므로, 호출이 실패하면 아무것도 보내지 않으며 캐시, 바인딩, 앞서 큐에 넣은 보고서도 바뀌지 않습니다. 제출은 확인 응답이 아닙니다. 나중에 호스트의 S6F12가 GemOutcome.EventAck이고 GemResultInfo.Acknowledgement에 ACKC6 코드가 있는 결과를 만듭니다.
매개변수
| 이름 | 설명 |
|---|---|
dataId | 메시지에 넣는 데이터 ID(DATAID)입니다. |
eventId | 활성화된 이벤트의 수집 이벤트 ID(CEID)입니다. 연결 여부는 관계없습니다. |
samples | 이 보고서에만 사용하는 데이터 변수 값이며, 데이터 변수 ID마다 최대 하나입니다. 연결된 보고서가 사용하지 않는 샘플도 모두 검증합니다. 샘플은 캐시 값을 바꾸지 않으며, 아이템은 호출이 반환되기 전에 복사됩니다. |
반환값
대기 중인 S6F11/S6F12 거래를 식별하는 토큰입니다.
참고
ArgumentNullException예외: 샘플 또는 그 값이null입니다.ObjectDisposedException예외: 장비 또는 샘플 값이 해제되었습니다.PdcommException예외: 샘플이 데이터 변수 저장소의 개수, 바이트 또는 아이템 한도를 초과하면PdcommStatus.LimitExceeded입니다. 샘플 ID를 알 수 없거나 중복되거나, 샘플이 변수의 형식과 개수 범위에 맞지 않으면PdcommStatus.InvalidArgument입니다. 그 밖에는GemEquipment.PublishEvent와 같은 네이티브 상태이며, 샘플을 제공했지만 데이터 변수 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
PurgeSpool
메서드
스풀에서 저장된 모든 항목을 제거합니다.
public GemSpoolWriteResult PurgeSpool()끝점이 중지되어 있어야 합니다. 스풀링이 비활성화되고 시작 시각과 가득 참 시각이 지워집니다. 실행 중인 끝점의 스풀은 호스트가 대신 S6F23으로 비웁니다.
반환값
GemSpoolWriteResult.AffectedCount에 제거된 항목 수가 있는 GemSpoolMutation.Purged입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 끝점이 시작되었거나 스풀링이 구성되어 있지 않으면PdcommStatus.InvalidState, 전송이나 전달이 대기 중이거나 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure이거나, 스냅샷 쓰기가 실패한 경우 그 상태(예:PdcommStatus.IoError)입니다.
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입니다.
RegisterStatus
메서드
장비가 S1F4와 S1F12로 보고하는 상태 변수를 등록합니다.
public void RegisterStatus(uint id, string name, string units, SecsItem value)등록은 끝점이 중지된 동안에만 할 수 있습니다. value는 복사되며, 소유권은 호출자에게 남습니다. 실패하면 레지스트리는 바뀌지 않습니다. GemEquipment.GetStatusIdAt은 등록 순서를 사용합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 상태 변수 ID(SVID)입니다. |
name | 상태 변수 이름(SVNAME)입니다. ASCII만 사용할 수 있으며, 포함된 NUL 문자는 유지됩니다. |
units | 단위(UNITS)입니다. ASCII만 사용할 수 있으며 비어 있을 수 있습니다. |
value | 초기값입니다. 최상위 형식은 이후 갱신에서도 고정됩니다. |
참고
ArgumentNullException예외:name,units또는value가null입니다.ArgumentException예외:name또는units에 ASCII가 아닌 문자가 있습니다.ObjectDisposedException예외: 끝점 또는value가 해제되었습니다.PdcommException예외: 끝점이 시작된 뒤이면PdcommStatus.InvalidState, 중복 ID이면PdcommStatus.InvalidArgument,GemEquipmentOptions.MaxVariables,GemEquipmentOptions.MaxMetadataBytes,GemEquipmentOptions.MaxValueBytes또는 아이템 한도를 초과하게 되면PdcommStatus.LimitExceeded입니다.
RequestProgram
메서드
상대방의 프로세스 프로그램을 요청하는 S7F5(Process Program Request)를 보냅니다.
public HsmsToken RequestProgram(SecsItem id)GemCommunicationState.Communicating이 필요합니다. PPID는 요청이 완료될 때까지 GemProgramOptions.MaxPendingIds와 GemProgramOptions.MaxPendingIdentifierBytes에 포함됩니다. 유효한 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를 초과하게 되면PdcommStatus.LimitExceeded입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
RespondCommand
메서드
수신한 S2F41 원격 명령에 S2F42(Host Command Acknowledge) 응답을 보냅니다.
public GemCommandReply RespondCommand(GemResult result, GemCommandDecision decision, ReadOnlySpan<GemCommandIssue> issues)수신 시 검증에서 요청이 거부되었으면, 응답에는 원래의 HCACK와 매개변수 문제가 들어가며 decision과 issues는 무시됩니다. 검증 결과와 완료 이벤트는 요청을 받을 때 정해지며, 이후 제어 상태가 바뀌어도 달라지지 않습니다. 애플리케이션 인터록은 계속 호출자의 책임입니다.
응답은 보내기 전에 완전히 준비되며, 송신이 성공한 뒤에만 결과가 응답됨으로 표시됩니다. 실패한 뒤에는 작업을 다시 수행하지 말고 같은 결정으로 다시 시도합니다. 지연 작업은 HCACK 4 응답을 보낸 뒤에만 시작하고, 완료 이벤트는 별도로 발행합니다. 호출은 result의 getter와 함께 직렬화됩니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 수신한 요청의 결과(GemOutcome.CommandReceived)입니다. |
decision | 수신 시 검증이 요청을 수락했을 때 HCACK로 보내는 애플리케이션 결정입니다. |
issues | 보낼 매개변수 확인 응답(CPNAME과 CPACK 1~3)입니다. GemCommandDecision.ParameterErrors만 문제를 담을 수 있으며, 최대 GemCommandOptions.MaxErrors개입니다. |
반환값
보낸 HCACK이며, HCACK 0 또는 4이면 완료 수집 이벤트 ID(CEID)도 포함합니다.
참고
ArgumentNullException예외:result, 문제 또는 문제 이름이null입니다.ObjectDisposedException예외: 끝점,result또는 문제 이름이 해제되었습니다.PdcommException예외:decision이 정의되지 않았거나, 결과가 원격 명령 결과가 아니거나, 다른 결정에 문제가 함께 전달되었거나, 문제 코드나 이름이 잘못되었으면PdcommStatus.InvalidArgument입니다. 문제가 명령 한도를 초과하거나 응답이 메시지 한도를 초과하면PdcommStatus.LimitExceeded입니다. 결과가 호스트 쪽 응답이거나 GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 요청에 이미 응답했거나 요청이 다른 끝점, 연결 또는 선택에 속하면PdcommStatus.StaleToken입니다. 전송이 응답을 수락할 수 없으면PdcommStatus.Backpressure입니다. 그 밖의 네이티브 실패 상태일 수도 있습니다.
RespondConstants
메서드
수신한 S2F15 요청에 S2F16(New Equipment Constant Acknowledge) 응답을 보냅니다.
public GemConstantReply RespondConstants(GemResult result, GemConstantDecision decision)수신 검증에서 요청이 거부되었으면 결정과 관계없이 그 EAC(1 또는 3)를 보냅니다. 그렇지 않으면 GemConstantDecision.Apply는 응답이 전송에 넘겨진 뒤에만 저장된 값을 교체합니다. 이 메서드는 물리적 동작, 영구 저장, 이벤트 보고를 수행하지 않습니다. 수신 후 저장소가 바뀌었거나 다시 구성되어 무효화된 요청은 적용할 수 없지만 거부할 수는 있습니다.
GemCommunicationState.Communicating이 필요합니다. 응답을 만들거나 보내는 데 실패하면 저장소와 결과는 바뀌지 않으며 다시 호출할 수 있습니다. 결과에는 한 번만 응답할 수 있습니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 결과가 GemOutcome.ConstantChangesReceived인 결과입니다. GemResult.GetConstantChangeInfo와 GemResult.GetConstantChange로 검사합니다. |
decision | 수신 검증이 요청을 수락했을 때 보낼 EAC입니다. GemConstantDecision.Apply, GemConstantDecision.CannotPerform, GemConstantDecision.OutOfRange 또는 4~63의 장비별 코드입니다. |
반환값
보낸 EAC와 저장소가 바뀌었는지 여부입니다.
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 끝점 또는result가 해제되었습니다.PdcommException예외:decision이 1이거나 63보다 크거나,result가 수신한 S2F15 요청이 아니면PdcommStatus.InvalidArgument입니다. 결과에 이미 응답했거나, 결과가 다른 끝점이나 이전 연결 또는 선택에 속하거나, 무효화된 요청을 적용하려 하면PdcommStatus.StaleToken입니다. 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 보류된 전송 이벤트를 먼저 읽어야 하거나 전송이 응답을 수락할 수 없으면PdcommStatus.Backpressure입니다.
RespondEnhancedCommand
메서드
수신한 S2F49 요청에 S2F50(Enhanced Remote Command Acknowledge) 응답을 보냅니다.
public GemCommandReply RespondEnhancedCommand(GemResult result, GemCommandDecision decision, SecsItem? acknowledgements)수신 시 검증에서 요청이 거부되었으면, 응답에는 원래의 HCACK와 고정된 검증 오류가 들어가며 decision은 무시됩니다. acknowledgements의 이름, 순서, 0 코드는 전달된 그대로 전송되며 요청과 대조하지 않습니다.
송신이 성공한 뒤에만 결과가 응답됨으로 표시됩니다. 실패한 뒤에는 작업을 다시 수행하지 말고 같은 결정으로 다시 시도합니다. 지연 작업은 HCACK 4 응답을 보낸 뒤에만 시작하고, 완료 이벤트는 별도로 발행합니다. 호출은 result의 getter와 함께 직렬화됩니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 수신한 요청의 결과(GemOutcome.EnhancedCommandReceived)입니다. |
decision | 수신 시 검증이 요청을 수락했을 때 HCACK로 보내는 애플리케이션 결정입니다. |
acknowledgements | S2F50의 두 번째 필드로 보내는 매개변수 확인 목록이거나 null입니다. GemCommandDecision.ParameterErrors이면 항목이 L[CPNAME, CEPACK]인 List 아이템이어야 합니다. 여기서 CEPACK은 0~4의 U1 스칼라, U1 스칼라의 List, 또는 중첩된 이름 있는 항목의 리스트입니다. 모든 외부 항목에는 0이 아닌 코드가 하나 이상 있어야 하며, 빈 리스트도 유효합니다. 다른 결정이면 null이어야 합니다. 검증에서 요청이 거부되었으면 무시됩니다. |
반환값
보낸 HCACK이며, HCACK 0 또는 4이면 완료 수집 이벤트 ID(CEID)도 포함합니다.
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 끝점,result또는acknowledgements가 해제되었습니다.PdcommException예외:decision이 정의되지 않았거나, 결과가 확장 명령 결과가 아니거나,acknowledgements가 결정이나 확인 구조와 맞지 않으면PdcommStatus.InvalidArgument입니다. 0이 아닌 코드가GemEnhancedCommandOptions.MaxErrors를 초과하거나 응답이 메시지 한도를 초과하면PdcommStatus.LimitExceeded입니다. 결과가 호스트 쪽 응답이거나 GEM 통신이 수립되지 않았으면PdcommStatus.InvalidState입니다. 요청에 이미 응답했거나 요청이 다른 끝점, 연결 또는 선택에 속하면PdcommStatus.StaleToken입니다. 전송이 응답을 수락할 수 없으면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합니다. 필요하면 GemEquipment.ResyncPrograms를 호출한 다음 GemEquipment.ConfirmProgramReply를 호출하고, 이 메서드를 같은 인수로 다시 호출합니다.
허가는 S7F2가 큐에 들어간 뒤에만 활성화되며, 해당 S7F3이 저장되거나, 연결이 끝나거나, GemEquipment.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입니다.
RespondReportQuery
메서드
수신한 S6F15, S6F19 또는 S6F21 보고서 조회에 S6F16, S6F20 또는 S6F22로 응답합니다.
public void RespondReportQuery(GemResult result, ReadOnlySpan<GemDataSample> samples)보고서 조회에는 자동으로 응답하지 않습니다. 응답은 조회를 받은 시점이 아니라 이 메서드를 호출하는 시점의 보고서 정의와 값으로 만듭니다. 결과가 요청을 보관하므로 원래 HsmsEvent는 이미 해제되었어도 됩니다. 샘플 아이템은 호출하는 동안에만 빌려 씁니다.
실패하면 요청은 응답되지 않은 상태로 남으므로 다시 호출할 수 있습니다. 호출이 성공해야만 GemQueryInfo.Responded와 GemResultInfo.ReplySent가 설정됩니다.
매개변수
| 이름 | 설명 |
|---|---|
result | GemEndpoint.HandleEvent가 반환한 GemOutcome.ReportQueryReceived 결과입니다. |
samples | 응답에 사용할 현재 데이터 변수 샘플입니다. 캐시 값과 등록된 값만 사용하려면 비워 둡니다. 응답에 사용되지 않는 샘플도 모두 검증하며, 샘플은 캐시 값을 바꾸지 않습니다. |
참고
ArgumentNullException예외:result, 샘플 또는 샘플 값이null입니다.ObjectDisposedException예외: 끝점,result또는 샘플 값이 해제되었습니다.PdcommException예외:result가 수신한 보고서 조회가 아니거나 샘플이 잘못되었으면PdcommStatus.InvalidArgument입니다. 통신이 수립되지 않았거나, 데이터 변수가 구성되지 않았는데 샘플을 지정했으면PdcommStatus.InvalidState입니다. 조회에 이미 응답했거나 조회가 다른 끝점, 연결 또는 선택에 속하면PdcommStatus.StaleToken입니다. 샘플이나 응답이 구성된 한도를 초과하면PdcommStatus.LimitExceeded입니다.
RespondSpool
메서드
장비가 받은 스풀링 요청을 적용하고 응답을 보냅니다. S2F43에는 S2F44, S2F59에는 S2F60, S6F23에는 S6F24로 응답합니다.
public PdcommStatus RespondSpool(GemResult result)스트림과 펑션이 모두 카탈로그에 있는 S2F43은 선택을 교체하고 RSPACK 0으로 응답합니다. 그렇지 않으면 응답에 RSPACK 1과 거부된 스트림마다 STRACK 오류 하나가 들어가며 아무것도 바뀌지 않습니다. S2F59에는 카탈로그가 아니라 현재 선택으로 응답합니다. S6F23에는 전송이나 전달이 대기 중이면 RSDA 1, 스풀이 비어 있으면 2, 그 밖에는 0으로 응답합니다. 그다음 Purge는 스풀을 비우고, Transmit은 응답을 보낸 뒤 전송 회차를 시작합니다. 구성과 비우기는 응답을 보내기 전에 설치됩니다.
송신이 실패하면 준비된 응답이 보관됩니다. 같은 결과로 다시 호출하면 그 응답만 다시 보냅니다.
매개변수
| 이름 | 설명 |
|---|---|
result | 요청의 GemOutcome.SpoolReceived 결과이거나, 보관된 응답을 보내기 위해 다시 전달하는 같은 결과입니다. |
반환값
응답을 보냈으면 PdcommStatus.Ok입니다. 변경은 설치되었지만 영구 저장을 확인할 수 없으면 PdcommStatus.SpoolUnconfirmed이며, 이때 응답은 GemEquipment.ConfirmSpoolReply를 호출할 때까지 보내지 않고 보류됩니다.
참고
ArgumentNullException예외:result가null입니다.ObjectDisposedException예외: 장비 또는result가 해제되었습니다.PdcommException예외: 결과가 다른 끝점, 연결 또는 선택에 속하거나 이미 응답했으면PdcommStatus.StaleToken입니다. 결과가 수신한 스풀링 요청이 아니거나, GEM 통신이 수립되지 않았거나, 스풀이 동기화되지 않았으면PdcommStatus.InvalidState입니다. 수락된 전송을 더 이상 시작할 수 없거나 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure입니다. 스냅샷 쓰기가 실패하면 그 상태이고, 전송 실패일 수도 있습니다.
ResyncPrograms
메서드
저장 파일의 부모 디렉터리를 다시 동기화합니다.
public void ResyncPrograms()확인되지 않은 변경 후 애플리케이션에 확인된 디렉터리 동기화가 필요할 때(예: GemEquipment.ConfirmProgramReply 전에) 사용합니다. 프로그램 데이터를 다시 쓰지 않고, 이전 변경에 대해 보고된 내구성을 바꾸지 않으며, 보류된 응답을 확인하지도 않습니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 프로그램이 구성되어 있지 않거나 저장소가 메모리에만 있으면PdcommStatus.InvalidState입니다. 동기화가 실패하면PdcommStatus.IoError입니다. 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
ResyncSpool
메서드
스풀 스냅샷 파일의 부모 디렉터리 동기화를 다시 시도합니다.
public void ResyncSpool()PdcommStatus.SpoolUnconfirmed 결과 후에 사용합니다. 스냅샷을 다시 쓰거나, 응답을 보내거나 확인하거나, 항목을 제거하지 않으며, 이전 결과도 갱신하지 않습니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않거나 스풀이 메모리에 있으면PdcommStatus.InvalidState, 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure, 동기화가 실패하면PdcommStatus.IoError입니다.
RetrySpoolDequeue
메서드
성공이 수락되었지만 제거에 실패한 전달 항목의 제거를 다시 시도합니다.
public GemSpoolWriteResult RetrySpoolDequeue()아무것도 보내지 않으며, 재연결 뒤에 원래 결과 없이도 동작합니다. GemSpoolState.DequeuePending이 제거 대기 여부를 보고합니다.
반환값
제거된 GemSpoolWriteResult.EntryId가 있는 GemSpoolMutation.Removed입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않으면PdcommStatus.InvalidState, 대기 중인 제거가 없으면PdcommStatus.StaleToken, 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure이거나, 실패한 스냅샷 쓰기의 상태입니다.
SendNextSpool
메서드
가장 오래된 저장 항목을 현재 전송 회차의 다음 전달로 보냅니다.
public HsmsToken SendNextSpool()전송 회차는 GemEquipment.RespondSpool이 S6F23 Transmit 요청을 수락할 때 시작되고, 스풀이 비거나 GemSpoolPolicy.MaxTransmit개의 항목이 제거되면 끝납니다. 다음 항목을 자동으로 보내는 것은 없으므로 항목마다 이 메서드를 한 번씩 호출합니다. 전달이 준비된 뒤에 실패하면(대기 슬롯 부족이나 전송 실패 포함) 항목은 유지되고 회차가 끝납니다.
제출은 전달이 아닙니다. 결과는 GemResult로 도착합니다. W 비트를 설정해 보낸 항목에 대한 응답이면 GemOutcome.SpoolDeliveryResponse, W 비트 없는 항목이 기록되면 GemOutcome.SpoolDeliveryWritten, 실패하면 GemOutcome.SpoolDeliveryFailed이며, 실패 시 항목은 유지되고 회차가 끝납니다. 앞의 두 결과는 GemEquipment.CompleteSpoolDelivery에 전달합니다.
반환값
보낸 메시지의 전송 토큰입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않거나 동기화되지 않았거나, GEM 통신이 수립되지 않았거나, 진행 중인 전송 회차가 없으면PdcommStatus.InvalidState입니다. 스풀이 비어 있으면PdcommStatus.OutOfRange이며 회차가 끝납니다. 전달이 진행 중이거나 제거를 기다리는 경우, 항목이 응답을 기대하는데 빈 대기 요청 슬롯이 없는 경우, 보류된 전송 이벤트가 읽기를 기다리는 경우에는PdcommStatus.Backpressure입니다. 전송 실패일 수도 있습니다.
SendProgram
메서드
프로세스 프로그램을 담은 S7F3(Process Program Send)을 보냅니다.
public HsmsToken SendProgram(SecsItem id, SecsItem body)GemCommunicationState.Communicating이 필요합니다. PPID는 요청이 완료될 때까지 GemProgramOptions.MaxPendingIds와 GemProgramOptions.MaxPendingIdentifierBytes에 포함됩니다. 유효한 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를 초과하게 되면PdcommStatus.LimitExceeded입니다. 대기 요청 슬롯 32개가 모두 사용 중이거나 보류된 전송 이벤트를 먼저 읽어야 하면PdcommStatus.Backpressure입니다.
SetOnlineMode
메서드
운영자의 REMOTE/LOCAL 스위치를 설정합니다.
public void SetOnlineMode(GemOnlineMode mode)SEMI E30 제어 상태 모델처럼 모든 제어 상태에서 허용됩니다. 온라인 장비는 즉시 GemControlState.OnlineLocal 또는 GemControlState.OnlineRemote로 바뀌고, 오프라인 장비는 다음에 온라인이 될 때 이 모드를 사용합니다. 호스트에 메시지를 보내지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
mode | 온라인 모드입니다. |
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 정의되지 않은 모드이면PdcommStatus.InvalidArgument입니다.
StopSpoolTransmit
메서드
현재 전송 회차를 끝내고 저장된 항목은 유지합니다.
public void StopSpoolTransmit()새 회차를 시작하려면 S6F23 Transmit 요청을 다시 수락해야 합니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않으면PdcommStatus.InvalidState이고, 전달이 진행 중이거나 제거를 기다리거나 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure입니다.
SyncSpool
메서드
스풀링을 위해 현재 통신 상태와 선택 상태를 기록하고, 통신이 끊긴 동안 스풀링을 활성화합니다.
public GemSpoolWriteResult SyncSpool(ulong now)전송 이벤트와 GEM 이벤트를 처리한 뒤에 호출합니다. 캡처, 응답, 전달에는 현재 상태와 여전히 일치하는 동기화가 필요하며, GemSpoolState.Synchronized가 이를 보고합니다. 전송이 선택(selected) 상태이고 GEM 통신이 GemCommunicationState.Communicating이면 통신이 연결된 상태입니다.
통신이 끊겨 있고 정책이 활성화되어 있으면 스풀링이 활성화됩니다. 빈 스풀을 활성화하면 카운터가 초기화됩니다. 새 연결이 생기거나 연결이 끊어지면 전송 회차가 끝나고 진행 중인 전달은 포기되지만, 제거를 기다리는 전달은 대기 상태로 남습니다. 동기화는 전송을 시작하지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
now | 애플리케이션 타임스탬프입니다. 스풀링이 활성화될 때 GemSpoolState.StartTime으로 저장되며, PDComm은 이 값을 해석하지 않습니다. |
반환값
스풀링이 활성화되었으면 GemSpoolMutation.Activated이고, 그렇지 않으면 변경이 없는 결과입니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 스풀링이 구성되어 있지 않으면PdcommStatus.InvalidState, 보류된 전송 이벤트가 읽기를 기다리면PdcommStatus.Backpressure이거나, 스냅샷 쓰기가 실패한 경우 그 상태(예:PdcommStatus.IoError)입니다.
TryCopyAlarmAt
메서드
등록 순서에서 지정한 위치의 구성된 알람을 호출자가 제공한 버퍼에 복사합니다.
public bool TryCopyAlarmAt(nuint index, out GemAlarmInfo info, Span<byte> text, out nuint required)매개변수
| 이름 | 설명 |
|---|---|
index | 등록 순서에서 알람의 0부터 시작하는 위치입니다. |
info | 이 메서드가 반환될 때 알람 상태와 메타데이터를 담습니다. |
text | 알람 텍스트를 ASCII 바이트로 받는 버퍼입니다. 종결 NUL은 추가하지 않습니다. |
required | 이 메서드가 반환될 때 텍스트 길이(바이트)를 담습니다. |
반환값
텍스트를 복사했으면 true이고, text가 required보다 짧으면 false입니다. 이 경우 text는 바뀌지 않으며, info와 required는 여전히 설정됩니다.
참고
ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외:index가 알람 수보다 작지 않으면PdcommStatus.OutOfRange, 알람이 구성되어 있지 않으면PdcommStatus.InvalidState이거나, 그 밖의 네이티브 실패 상태입니다.
TryCopyEventAt
메서드
장비 보고서 저장소에서 지정한 위치의 수집 이벤트를 호출자 버퍼에 복사합니다.
public bool TryCopyEventAt(nuint index, out uint eventId, out bool enabled, Span<uint> reportIds, out nuint required)매개변수
| 이름 | 설명 |
|---|---|
index | 등록 순서에서 0부터 시작하는 위치입니다. |
eventId | 이 메서드가 반환될 때 수집 이벤트 ID(CEID)를 담습니다. |
enabled | 이 메서드가 반환될 때, 이벤트 보고가 활성화되어 있으면 true를 담습니다. |
reportIds | 연결된 보고서 ID(RPTID)를 받는 버퍼입니다. |
required | 이 메서드가 반환될 때 연결된 보고서 ID 수를 담습니다. |
반환값
보고서 ID를 복사했으면 true이고, reportIds가 required보다 짧으면 false입니다. 이 경우 버퍼는 수정되지 않지만 eventId, enabled, required는 여전히 설정됩니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.index가 이벤트 수보다 작지 않으면PdcommStatus.OutOfRange이고, 보고서 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
TryCopyReportAt
메서드
장비 보고서 저장소에서 지정한 위치의 보고서 정의를 호출자 버퍼에 복사합니다.
public bool TryCopyReportAt(nuint index, out uint id, Span<uint> variableIds, out nuint required)매개변수
| 이름 | 설명 |
|---|---|
index | 저장 순서에서 0부터 시작하는 위치입니다. |
id | 이 메서드가 반환될 때 보고서 ID(RPTID)를 담습니다. |
variableIds | 변수 ID(VID)를 받는 버퍼입니다. |
required | 이 메서드가 반환될 때 보고서의 변수 ID 수를 담습니다. |
반환값
변수 ID를 복사했으면 true이고, variableIds가 required보다 짧으면 false입니다. 이 경우 버퍼는 수정되지 않지만 id와 required는 여전히 설정됩니다.
참고
ObjectDisposedException예외: 장비가 해제되었습니다.PdcommException예외: 네이티브 호출이 실패했습니다.index가 보고서 수보다 작지 않으면PdcommStatus.OutOfRange이고, 보고서 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
TryCopyStatusMetadata
메서드
등록된 상태 변수의 이름과 단위를 호출자 버퍼에 복사합니다.
public bool TryCopyStatusMetadata(uint id, Span<byte> name, out nuint nameRequired, Span<byte> units, out nuint unitsRequired)매개변수
| 이름 | 설명 |
|---|---|
id | 상태 변수 ID(SVID)입니다. |
name | ASCII 이름 바이트를 받는 버퍼입니다. 종결자는 추가하지 않습니다. |
nameRequired | 이름 길이(바이트)를 받습니다. |
units | ASCII 단위 바이트를 받는 버퍼입니다. 종결자는 추가하지 않습니다. |
unitsRequired | 단위 길이(바이트)를 받습니다. |
반환값
두 값을 모두 복사했으면 true이고, 어느 한 버퍼라도 너무 작으면 false입니다. 이 경우 두 버퍼 모두 바뀌지 않으며 필요한 길이가 보고됩니다.
참고
ArgumentException예외:name과units가 겹칩니다.ObjectDisposedException예외: 끝점이 해제되었습니다.PdcommException예외: 알 수 없는 ID이면PdcommStatus.OutOfRange입니다.
UpdateDataVariable
메서드
데이터 변수의 캐시 값을 교체합니다.
public void UpdateDataVariable(uint id, SecsItem value)어떤 통신 상태에서도 호출할 수 있습니다. 이벤트 보고서와 보고서 조회는 샘플이 변수 값을 제공하지 않으면 캐시 값을 사용합니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 데이터 변수 ID입니다. |
value | 새 값입니다. 변수의 형식과 개수 범위에 맞아야 합니다. 호출이 값을 복사하며, 소유권은 호출자에게 남습니다. |
참고
ArgumentNullException예외:value가null입니다.ObjectDisposedException예외: 장비 또는value가 해제되었습니다.PdcommException예외: 값이 저장소의 아이템 한도를 초과하거나 캐시 값이GemDataOptions.MaxValueBytes를 초과하게 되면PdcommStatus.LimitExceeded입니다. 형식이나 개수가 맞지 않으면PdcommStatus.InvalidArgument입니다. 알 수 없는 ID이면PdcommStatus.OutOfRange입니다. 데이터 변수 저장소가 구성되어 있지 않으면PdcommStatus.InvalidState입니다.
UpdateStatus
메서드
등록된 상태 변수의 값을 교체합니다.
public void UpdateStatus(uint id, SecsItem value)끝점이 실행되는 동안에도 갱신할 수 있습니다. value는 복사되며, 소유권은 호출자에게 남습니다. 실패하면 저장된 값은 바뀌지 않습니다.
매개변수
| 이름 | 설명 |
|---|---|
id | 상태 변수 ID(SVID)입니다. |
value | 새 값입니다. 등록된 값과 최상위 형식이 같아야 합니다. |
참고
ArgumentNullException예외:value가null입니다.ObjectDisposedException예외: 끝점 또는value가 해제되었습니다.PdcommException예외: 알 수 없는 ID이면PdcommStatus.OutOfRange, 형식이 다르면PdcommStatus.InvalidArgument,GemEquipmentOptions.MaxValueBytes또는 아이템 한도를 초과하게 되면PdcommStatus.LimitExceeded입니다.