Dreamine.PLC.Omron.Fins 1.0.1
Dreamine.PLC.Omron.Fins 산업 자동화 및 I/O 기능을 제공합니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport 클래스 참조sealed

더 자세히 ...

Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport에 대한 상속 다이어그램 :
Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport에 대한 협력 다이어그램:

Public 멤버 함수

 UdpOmronFinsTransport (OmronFinsConnectionOptions options)
async Task< PlcResult > ConnectAsync (CancellationToken cancellationToken=default)
async Task< PlcResult > DisconnectAsync (CancellationToken cancellationToken=default)
async Task< PlcResult< byte[]> > SendAndReceiveAsync (IReadOnlyList< byte > requestFrame, int receiveTimeoutMs, int retryCount, CancellationToken cancellationToken=default)
async ValueTask DisposeAsync ()

속성

bool IsConnected [get]

Private 멤버 함수

void CloseCore ()
void ThrowIfDisposed ()

Private 속성

readonly SemaphoreSlim _syncLock = new(1, 1)
readonly OmronFinsConnectionOptions _options
UdpClient? _udpClient
IPEndPoint? _remoteEndPoint
bool _disposed

상세한 설명

Omron FINS 통신을 위한 UDP 전송을 제공합니다.

UdpOmronFinsTransport.cs 파일의 16 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ UdpOmronFinsTransport()

Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport.UdpOmronFinsTransport ( OmronFinsConnectionOptions options)
inline

T:Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport 클래스의 새 인스턴스를 초기화합니다.

매개변수
options대상과 제한 시간을 지정하는 FINS 연결 옵션입니다.
예외
ArgumentNullExceptionoptionsnull일 때 발생합니다.

UdpOmronFinsTransport.cs 파일의 88 번째 라인에서 정의되었습니다.

89 {
90 _options = options ?? throw new ArgumentNullException(nameof(options));
91 }

다음을 참조함 : _options.

멤버 함수 문서화

◆ CloseCore()

void Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport.CloseCore ( )
inlineprivate

현재 UDP 클라이언트를 닫고 연결 상태를 초기화합니다.

UdpOmronFinsTransport.cs 파일의 415 번째 라인에서 정의되었습니다.

416 {
417 _udpClient?.Dispose();
418 _udpClient = null;
419 _remoteEndPoint = null;
420 }

다음을 참조함 : _remoteEndPoint, _udpClient.

다음에 의해서 참조됨 : ConnectAsync(), DisconnectAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ConnectAsync()

async Task< PlcResult > Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport.ConnectAsync ( CancellationToken cancellationToken = default)
inline

대상 호스트를 확인하고 연결된 UDP 클라이언트를 준비합니다.

매개변수
cancellationTokenDNS 확인과 잠금 대기를 취소하는 토큰입니다.
반환값
성공 또는 유효성·DNS·소켓 오류를 포함하는 연결 결과 작업입니다.
예외
OperationCanceledException동기화 잠금을 기다리는 동안 취소되면 발생합니다.
ObjectDisposedException전송 또는 동기화 잠금이 이미 정리된 경우 발생할 수 있습니다.

Dreamine.PLC.Omron.Fins.Transport.IOmronFinsTransport를 구현.

UdpOmronFinsTransport.cs 파일의 143 번째 라인에서 정의되었습니다.

144 {
145 await _syncLock.WaitAsync(cancellationToken).ConfigureAwait(false);
146 try
147 {
148 ThrowIfDisposed();
149 if (IsConnected)
150 {
151 return PlcResult.Success();
152 }
153
154 if (_options.Port is <= 0 or > 65535)
155 {
156 return PlcResult.Failure($"Invalid FINS UDP port: {_options.Port}.");
157 }
158
159 var addresses = await Dns.GetHostAddressesAsync(_options.Host, cancellationToken).ConfigureAwait(false);
160 if (addresses.Length == 0)
161 {
162 return PlcResult.Failure($"Failed to resolve FINS host: {_options.Host}.");
163 }
164
165 _remoteEndPoint = new IPEndPoint(addresses[0], _options.Port);
166 _udpClient = new UdpClient();
167 _udpClient.Connect(_remoteEndPoint);
168 return PlcResult.Success();
169 }
170 catch (OperationCanceledException ex)
171 {
172 CloseCore();
173 return PlcResult.Failure(ex.Message);
174 }
175 catch (Exception ex)
176 {
177 CloseCore();
178 return PlcResult.Failure(ex.Message);
179 }
180 finally
181 {
182 _syncLock.Release();
183 }
184 }

다음을 참조함 : _options, _remoteEndPoint, _syncLock, _udpClient, CloseCore(), IsConnected, ThrowIfDisposed().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ DisconnectAsync()

async Task< PlcResult > Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport.DisconnectAsync ( CancellationToken cancellationToken = default)
inline

UDP 클라이언트를 닫고 원격 끝점 정보를 초기화합니다.

매개변수
cancellationToken잠금 대기를 취소하는 토큰입니다.
반환값
연결 해제 성공 결과 작업입니다.
예외
OperationCanceledException동기화 잠금을 기다리는 동안 취소되면 발생합니다.
ObjectDisposedException동기화 잠금이 이미 정리된 경우 발생할 수 있습니다.

Dreamine.PLC.Omron.Fins.Transport.IOmronFinsTransport를 구현.

UdpOmronFinsTransport.cs 파일의 226 번째 라인에서 정의되었습니다.

227 {
228 await _syncLock.WaitAsync(cancellationToken).ConfigureAwait(false);
229 try
230 {
231 CloseCore();
232 return PlcResult.Success();
233 }
234 finally
235 {
236 _syncLock.Release();
237 }
238 }

다음을 참조함 : _syncLock, CloseCore().

다음에 의해서 참조됨 : DisposeAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ DisposeAsync()

async ValueTask Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport.DisposeAsync ( )
inline

UDP 연결을 닫고 동기화 자원을 비동기로 정리합니다.

반환값
비동기 정리 작업을 나타내는 값 작업입니다.
예외
ObjectDisposedException동시 정리로 동기화 잠금이 이미 정리된 경우 발생할 수 있습니다.

UdpOmronFinsTransport.cs 파일의 394 번째 라인에서 정의되었습니다.

395 {
396 if (_disposed)
397 {
398 return;
399 }
400
401 await DisconnectAsync().ConfigureAwait(false);
402 _syncLock.Dispose();
403 _disposed = true;
404 GC.SuppressFinalize(this);
405 }

다음을 참조함 : _disposed, _syncLock, DisconnectAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SendAndReceiveAsync()

async Task< PlcResult< byte[]> > Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport.SendAndReceiveAsync ( IReadOnlyList< byte > requestFrame,
int receiveTimeoutMs,
int retryCount,
CancellationToken cancellationToken = default )
inline

원시 FINS UDP 프레임을 보내고 구성된 횟수만큼 응답 수신을 재시도합니다.

매개변수
requestFrame전송할 원시 FINS 요청 프레임입니다.
receiveTimeoutMs각 시도의 밀리초 단위 수신 제한 시간입니다.
retryCount총 시도 횟수이며 1보다 작으면 한 번 시도합니다.
cancellationToken잠금과 송수신을 취소하는 토큰입니다.
반환값
수신된 원시 FINS 응답 또는 마지막 전송 오류를 포함하는 결과 작업입니다.
예외
ArgumentNullExceptionrequestFramenull일 때 발생합니다.
OperationCanceledException동기화 잠금을 기다리는 동안 취소되면 발생합니다.
ObjectDisposedException전송 또는 동기화 잠금이 이미 정리된 경우 발생할 수 있습니다.

송수신 중 발생한 취소도 재시도 대상으로 포착되며 모든 시도가 끝나면 실패 결과로 반환됩니다.

Dreamine.PLC.Omron.Fins.Transport.IOmronFinsTransport를 구현.

UdpOmronFinsTransport.cs 파일의 320 번째 라인에서 정의되었습니다.

325 {
326 ArgumentNullException.ThrowIfNull(requestFrame);
327
328 await _syncLock.WaitAsync(cancellationToken).ConfigureAwait(false);
329 try
330 {
331 ThrowIfDisposed();
332 if (_udpClient is null)
333 {
334 return PlcResult<byte[]>.Failure("The FINS UDP transport is not connected.");
335 }
336
337 var request = requestFrame as byte[] ?? requestFrame.ToArray();
338 var attempts = Math.Max(1, retryCount);
339 Exception? lastException = null;
340
341 for (var attempt = 0; attempt < attempts; attempt++)
342 {
343 try
344 {
345 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
346 timeoutCts.CancelAfter(receiveTimeoutMs);
347
348 await _udpClient.SendAsync(request, timeoutCts.Token).ConfigureAwait(false);
349 var result = await _udpClient.ReceiveAsync(timeoutCts.Token).ConfigureAwait(false);
350 return PlcResult<byte[]>.Success(result.Buffer);
351 }
352 catch (OperationCanceledException ex)
353 {
354 lastException = ex;
355 }
356 catch (Exception ex)
357 {
358 lastException = ex;
359 }
360 }
361
362 return PlcResult<byte[]>.Failure(lastException?.Message ?? "FINS UDP receive timeout.");
363 }
364 finally
365 {
366 _syncLock.Release();
367 }
368 }

다음을 참조함 : _syncLock, _udpClient, ThrowIfDisposed().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ThrowIfDisposed()

void Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport.ThrowIfDisposed ( )
inlineprivate

이 전송 인스턴스가 아직 정리되지 않았는지 확인합니다.

예외
ObjectDisposedException인스턴스가 이미 정리된 경우 발생합니다.

UdpOmronFinsTransport.cs 파일의 438 번째 라인에서 정의되었습니다.

439 {
440 ObjectDisposedException.ThrowIf(_disposed, this);
441 }

다음을 참조함 : _disposed.

다음에 의해서 참조됨 : ConnectAsync(), SendAndReceiveAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _disposed

bool Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport._disposed
private

disposed 값을 보관합니다.

UdpOmronFinsTransport.cs 파일의 62 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DisposeAsync(), ThrowIfDisposed().

◆ _options

readonly OmronFinsConnectionOptions Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport._options
private

options 값을 보관합니다.

UdpOmronFinsTransport.cs 파일의 35 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ConnectAsync(), UdpOmronFinsTransport().

◆ _remoteEndPoint

IPEndPoint? Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport._remoteEndPoint
private

remote End Point 값을 보관합니다.

UdpOmronFinsTransport.cs 파일의 53 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : CloseCore(), ConnectAsync().

◆ _syncLock

readonly SemaphoreSlim Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport._syncLock = new(1, 1)
private

sync Lock 값을 보관합니다.

UdpOmronFinsTransport.cs 파일의 26 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ConnectAsync(), DisconnectAsync(), DisposeAsync(), SendAndReceiveAsync().

◆ _udpClient

UdpClient? Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport._udpClient
private

udp Client 값을 보관합니다.

UdpOmronFinsTransport.cs 파일의 44 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : CloseCore(), ConnectAsync(), SendAndReceiveAsync().

속성 문서화

◆ IsConnected

bool Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport.IsConnected
get

UDP 클라이언트와 원격 끝점이 준비되었는지 여부를 가져옵니다.

Dreamine.PLC.Omron.Fins.Transport.IOmronFinsTransport를 구현.

UdpOmronFinsTransport.cs 파일의 101 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ConnectAsync().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: