Dreamine.PLC.Omron.Fins
1.0.1
Dreamine.PLC.Omron.Fins 산업 자동화 및 I/O 기능을 제공합니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
OmronFinsPlcClient.cs
이 파일의 문서화 페이지로 가기
1
using
Dreamine.PLC.Abstractions.Devices;
2
using
Dreamine.PLC.Abstractions.Results;
3
using
Dreamine.PLC.Core.Clients;
4
using
Dreamine.PLC.Omron.Fins.Options
;
5
using
Dreamine.PLC.Omron.Fins.Protocol
;
6
using
Dreamine.PLC.Omron.Fins.Transport
;
7
8
namespace
Dreamine.PLC.Omron.Fins.Clients
;
9
18
public
sealed
class
OmronFinsPlcClient
: PlcClientBase
19
{
28
private
readonly
OmronFinsConnectionOptions
_options
;
37
private
readonly
IOmronFinsTransport
_transport
;
46
private
readonly
OmronFinsFrameBuilder
_frameBuilder
;
55
private
readonly
OmronFinsResponseParser
_responseParser
;
56
89
public
OmronFinsPlcClient
(
OmronFinsConnectionOptions
options)
90
: this(options,
CreateTransport
(options), new
OmronFinsFrameBuilder
(), new
OmronFinsResponseParser
())
91
{
92
}
93
142
public
OmronFinsPlcClient
(
143
OmronFinsConnectionOptions
options,
144
IOmronFinsTransport
transport,
145
OmronFinsFrameBuilder
frameBuilder,
146
OmronFinsResponseParser
responseParser)
147
{
148
_options
= options ??
throw
new
ArgumentNullException(nameof(options));
149
_transport
= transport ??
throw
new
ArgumentNullException(nameof(transport));
150
_frameBuilder
= frameBuilder ??
throw
new
ArgumentNullException(nameof(frameBuilder));
151
_responseParser
= responseParser ??
throw
new
ArgumentNullException(nameof(responseParser));
152
}
153
162
public
OmronFinsConnectionOptions
Options
=>
_options
;
163
196
protected
override
Task<PlcResult>
ConnectCoreAsync
(CancellationToken cancellationToken)
197
{
198
return
_transport
.ConnectAsync(cancellationToken);
199
}
200
233
protected
override
Task<PlcResult>
DisconnectCoreAsync
(CancellationToken cancellationToken)
234
{
235
return
_transport
.DisconnectAsync(cancellationToken);
236
}
237
286
protected
override
async Task<PlcResult<bool[]>>
ReadBitsCoreAsync
(
287
PlcAddress address,
288
int
count,
289
CancellationToken cancellationToken)
290
{
291
byte
[] request;
292
try
293
{
294
request =
_frameBuilder
.BuildMemoryAreaRead(
_options
, address, count, bitAccess:
true
);
295
}
296
catch
(Exception ex)
297
{
298
return
PlcResult<bool[]>.Failure(ex.Message);
299
}
300
301
var responseResult = await
_transport
.SendAndReceiveAsync(
302
request,
303
_options
.ReceiveTimeoutMs,
304
_options
.RetryCount,
305
cancellationToken).ConfigureAwait(
false
);
306
307
if
(!responseResult.IsSuccess || responseResult.Value is
null
)
308
{
309
return
PlcResult<bool[]>.Failure(responseResult.Message ??
"Failed to receive FINS bit read response."
, responseResult.ErrorCode);
310
}
311
312
var payloadResult =
_responseParser
.ExtractPayload(responseResult.Value);
313
if
(!payloadResult.IsSuccess || payloadResult.Value is
null
)
314
{
315
return
PlcResult<bool[]>.Failure(payloadResult.Message ??
"Failed to parse FINS bit read payload."
, payloadResult.ErrorCode);
316
}
317
318
return
_responseParser
.ParseBits(payloadResult.Value, count);
319
}
320
369
protected
override
async Task<PlcResult<short[]>>
ReadWordsCoreAsync
(
370
PlcAddress address,
371
int
count,
372
CancellationToken cancellationToken)
373
{
374
byte
[] request;
375
try
376
{
377
request =
_frameBuilder
.BuildMemoryAreaRead(
_options
, address, count, bitAccess:
false
);
378
}
379
catch
(Exception ex)
380
{
381
return
PlcResult<short[]>.Failure(ex.Message);
382
}
383
384
var responseResult = await
_transport
.SendAndReceiveAsync(
385
request,
386
_options
.ReceiveTimeoutMs,
387
_options
.RetryCount,
388
cancellationToken).ConfigureAwait(
false
);
389
390
if
(!responseResult.IsSuccess || responseResult.Value is
null
)
391
{
392
return
PlcResult<short[]>.Failure(responseResult.Message ??
"Failed to receive FINS word read response."
, responseResult.ErrorCode);
393
}
394
395
var payloadResult =
_responseParser
.ExtractPayload(responseResult.Value);
396
if
(!payloadResult.IsSuccess || payloadResult.Value is
null
)
397
{
398
return
PlcResult<short[]>.Failure(payloadResult.Message ??
"Failed to parse FINS word read payload."
, payloadResult.ErrorCode);
399
}
400
401
return
_responseParser
.ParseWords(payloadResult.Value, count);
402
}
403
452
protected
override
async Task<PlcResult>
WriteBitsCoreAsync
(
453
PlcAddress address,
454
IReadOnlyList<bool> values,
455
CancellationToken cancellationToken)
456
{
457
byte
[] request;
458
try
459
{
460
request =
_frameBuilder
.BuildMemoryAreaWriteBits(
_options
, address, values);
461
}
462
catch
(Exception ex)
463
{
464
return
PlcResult.Failure(ex.Message);
465
}
466
467
var responseResult = await
_transport
.SendAndReceiveAsync(
468
request,
469
_options
.ReceiveTimeoutMs,
470
_options
.RetryCount,
471
cancellationToken).ConfigureAwait(
false
);
472
473
if
(!responseResult.IsSuccess || responseResult.Value is
null
)
474
{
475
return
PlcResult.Failure(responseResult.Message ??
"Failed to receive FINS bit write response."
, responseResult.ErrorCode);
476
}
477
478
var payloadResult =
_responseParser
.ExtractPayload(responseResult.Value);
479
return
payloadResult.IsSuccess
480
? PlcResult.Success()
481
: PlcResult.Failure(payloadResult.Message ??
"Failed to parse FINS bit write response."
, payloadResult.ErrorCode);
482
}
483
532
protected
override
async Task<PlcResult>
WriteWordsCoreAsync
(
533
PlcAddress address,
534
IReadOnlyList<short> values,
535
CancellationToken cancellationToken)
536
{
537
byte
[] request;
538
try
539
{
540
request =
_frameBuilder
.BuildMemoryAreaWriteWords(
_options
, address, values);
541
}
542
catch
(Exception ex)
543
{
544
return
PlcResult.Failure(ex.Message);
545
}
546
547
var responseResult = await
_transport
.SendAndReceiveAsync(
548
request,
549
_options
.ReceiveTimeoutMs,
550
_options
.RetryCount,
551
cancellationToken).ConfigureAwait(
false
);
552
553
if
(!responseResult.IsSuccess || responseResult.Value is
null
)
554
{
555
return
PlcResult.Failure(responseResult.Message ??
"Failed to receive FINS word write response."
, responseResult.ErrorCode);
556
}
557
558
var payloadResult =
_responseParser
.ExtractPayload(responseResult.Value);
559
return
payloadResult.IsSuccess
560
? PlcResult.Success()
561
: PlcResult.Failure(payloadResult.Message ??
"Failed to parse FINS word write response."
, payloadResult.ErrorCode);
562
}
563
580
public
override
async ValueTask
DisposeAsync
()
581
{
582
await base.DisposeAsync().ConfigureAwait(
false
);
583
await
_transport
.DisposeAsync().ConfigureAwait(
false
);
584
}
585
626
private
static
IOmronFinsTransport
CreateTransport
(
OmronFinsConnectionOptions
options)
627
{
628
ArgumentNullException.ThrowIfNull(options);
629
630
return
options.TransportType
switch
631
{
632
OmronFinsTransportType.Tcp
=>
new
TcpOmronFinsTransport
(options),
633
OmronFinsTransportType.Udp
=>
new
UdpOmronFinsTransport
(options),
634
_ =>
throw
new
ArgumentOutOfRangeException(nameof(options), options.
TransportType
,
"Unsupported Omron FINS transport type."
)
635
};
636
}
637
}
Dreamine.PLC.Omron.Fins.Clients
Definition
OmronFinsPlcClient.cs:8
Dreamine.PLC.Omron.Fins.Options
Definition
OmronFinsConnectionOptions.cs:1
Dreamine.PLC.Omron.Fins.Options.OmronFinsTransportType.Tcp
@ Tcp
Definition
OmronFinsTransportType.cs:21
Dreamine.PLC.Omron.Fins.Options.OmronFinsTransportType.Udp
@ Udp
Definition
OmronFinsTransportType.cs:31
Dreamine.PLC.Omron.Fins.Protocol
Definition
OmronFinsCommand.cs:1
Dreamine.PLC.Omron.Fins.Transport
Definition
FakeOmronFinsTransport.cs:3
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.CreateTransport
static IOmronFinsTransport CreateTransport(OmronFinsConnectionOptions options)
Definition
OmronFinsPlcClient.cs:626
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.WriteBitsCoreAsync
override async Task< PlcResult > WriteBitsCoreAsync(PlcAddress address, IReadOnlyList< bool > values, CancellationToken cancellationToken)
Definition
OmronFinsPlcClient.cs:452
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.DisconnectCoreAsync
override Task< PlcResult > DisconnectCoreAsync(CancellationToken cancellationToken)
Definition
OmronFinsPlcClient.cs:233
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.ReadBitsCoreAsync
override async Task< PlcResult< bool[]> > ReadBitsCoreAsync(PlcAddress address, int count, CancellationToken cancellationToken)
Definition
OmronFinsPlcClient.cs:286
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient._responseParser
readonly OmronFinsResponseParser _responseParser
Definition
OmronFinsPlcClient.cs:55
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient._frameBuilder
readonly OmronFinsFrameBuilder _frameBuilder
Definition
OmronFinsPlcClient.cs:46
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.Options
OmronFinsConnectionOptions Options
Definition
OmronFinsPlcClient.cs:162
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient._options
readonly OmronFinsConnectionOptions _options
Definition
OmronFinsPlcClient.cs:28
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.OmronFinsPlcClient
OmronFinsPlcClient(OmronFinsConnectionOptions options)
Definition
OmronFinsPlcClient.cs:89
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient._transport
readonly IOmronFinsTransport _transport
Definition
OmronFinsPlcClient.cs:37
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.DisposeAsync
override async ValueTask DisposeAsync()
Definition
OmronFinsPlcClient.cs:580
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.ReadWordsCoreAsync
override async Task< PlcResult< short[]> > ReadWordsCoreAsync(PlcAddress address, int count, CancellationToken cancellationToken)
Definition
OmronFinsPlcClient.cs:369
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.OmronFinsPlcClient
OmronFinsPlcClient(OmronFinsConnectionOptions options, IOmronFinsTransport transport, OmronFinsFrameBuilder frameBuilder, OmronFinsResponseParser responseParser)
Definition
OmronFinsPlcClient.cs:142
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.ConnectCoreAsync
override Task< PlcResult > ConnectCoreAsync(CancellationToken cancellationToken)
Definition
OmronFinsPlcClient.cs:196
Dreamine.PLC.Omron.Fins.Clients.OmronFinsPlcClient.WriteWordsCoreAsync
override async Task< PlcResult > WriteWordsCoreAsync(PlcAddress address, IReadOnlyList< short > values, CancellationToken cancellationToken)
Definition
OmronFinsPlcClient.cs:532
Dreamine.PLC.Omron.Fins.Options.OmronFinsConnectionOptions
Definition
OmronFinsConnectionOptions.cs:12
Dreamine.PLC.Omron.Fins.Options.OmronFinsConnectionOptions.TransportType
OmronFinsTransportType TransportType
Definition
OmronFinsConnectionOptions.cs:41
Dreamine.PLC.Omron.Fins.Protocol.OmronFinsFrameBuilder
Definition
OmronFinsFrameBuilder.cs:16
Dreamine.PLC.Omron.Fins.Protocol.OmronFinsResponseParser
Definition
OmronFinsResponseParser.cs:14
Dreamine.PLC.Omron.Fins.Transport.IOmronFinsTransport
Definition
IOmronFinsTransport.cs:14
Dreamine.PLC.Omron.Fins.Transport.TcpOmronFinsTransport
Definition
TcpOmronFinsTransport.cs:17
Dreamine.PLC.Omron.Fins.Transport.UdpOmronFinsTransport
Definition
UdpOmronFinsTransport.cs:17
Clients
OmronFinsPlcClient.cs
다음에 의해 생성됨 :
1.17.0