SampleSmart
1.0.0.0
SampleSmart 사용 방법을 보여 주는 예제 프로젝트입니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
SampleFastech16PointTransport.cs
이 파일의 문서화 페이지로 가기
1
using
System.Text;
2
using
Dreamine.IO.Abstractions.Results;
3
using
Dreamine.IO.Fastech.Ethernet.Transport;
4
5
namespace
SampleSmart.Pages.PageSub.IoTabs
;
6
15
public
sealed
class
SampleFastech16PointTransport
: IFastechEthernetIoTransport
16
{
25
private
readonly
bool
[]
_inputs
=
new
bool
[16];
34
private
readonly
bool
[]
_outputs
=
new
bool
[16];
43
private
bool
_disposed
;
44
53
public
bool
IsConnected
{
get
;
private
set
; }
54
87
public
void
SetInput
(
int
channel,
bool
value)
88
{
89
if
(channel is < 0 or >= 16)
90
{
91
throw
new
ArgumentOutOfRangeException(nameof(channel), channel,
"Channel must be between 0 and 15."
);
92
}
93
94
_inputs
[channel] = value;
95
}
96
105
public
void
ToggleInputPattern
()
106
{
107
for
(var i = 0; i <
_inputs
.Length; i++)
108
{
109
_inputs
[i] = i % 2 == 0
110
? !
_inputs
[i]
111
:
_inputs
[i];
112
}
113
}
114
139
public
Task<IoResult>
ConnectAsync
(CancellationToken cancellationToken =
default
)
140
{
141
ThrowIfDisposed
();
142
IsConnected
=
true
;
143
144
return
Task.FromResult(IoResult.Success());
145
}
146
171
public
Task<IoResult>
DisconnectAsync
(CancellationToken cancellationToken =
default
)
172
{
173
IsConnected
=
false
;
174
175
return
Task.FromResult(IoResult.Success());
176
}
177
226
public
Task<IoResult<byte[]>>
SendAndReceiveAsync
(
227
IReadOnlyList<byte> requestFrame,
228
int
receiveTimeoutMs,
229
int
expectedResponseLength,
230
CancellationToken cancellationToken =
default
)
231
{
232
ArgumentNullException.ThrowIfNull(requestFrame);
233
ThrowIfDisposed
();
234
235
if
(!
IsConnected
)
236
{
237
return
Task.FromResult(IoResult<
byte
[]>.Failure(
"The sample Fastech transport is not connected."
));
238
}
239
240
var request = Encoding.ASCII.GetString(requestFrame as
byte
[] ?? requestFrame.ToArray()).Trim();
241
var response =
HandleRequest
(request);
242
243
return
Task.FromResult(IoResult<
byte
[]>.Success(Encoding.ASCII.GetBytes(response)));
244
}
245
262
public
ValueTask
DisposeAsync
()
263
{
264
_disposed
=
true
;
265
IsConnected
=
false
;
266
267
return
ValueTask.CompletedTask;
268
}
269
294
private
string
HandleRequest
(
string
request)
295
{
296
if
(request.StartsWith(
"RDI"
, StringComparison.OrdinalIgnoreCase))
297
{
298
return
$
"DI {ToBitString(_inputs)}"
;
299
}
300
301
if
(request.StartsWith(
"RDO"
, StringComparison.OrdinalIgnoreCase))
302
{
303
return
$
"DO {ToBitString(_outputs)}"
;
304
}
305
306
if
(request.StartsWith(
"WDO "
, StringComparison.OrdinalIgnoreCase))
307
{
308
var bits = request[4..].Trim();
309
for
(var i = 0; i < _outputs.Length && i < bits.Length; i++)
310
{
311
_outputs
[i] = bits[i] ==
'1'
;
312
}
313
314
return
"OK"
;
315
}
316
317
return
"ERR Unknown sample request"
;
318
}
319
344
private
static
string
ToBitString
(IReadOnlyList<bool> values)
345
{
346
return
new
string(values.Select(x => x ?
'1'
:
'0'
).ToArray());
347
}
348
357
private
void
ThrowIfDisposed
()
358
{
359
ObjectDisposedException.ThrowIf(
_disposed
,
this
);
360
}
361
}
SampleSmart.Pages.PageSub.IoTabs
Definition
IoPointState.cs:3
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport
Definition
SampleFastech16PointTransport.cs:16
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport._disposed
bool _disposed
Definition
SampleFastech16PointTransport.cs:43
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.HandleRequest
string HandleRequest(string request)
Definition
SampleFastech16PointTransport.cs:294
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.DisconnectAsync
Task< IoResult > DisconnectAsync(CancellationToken cancellationToken=default)
Definition
SampleFastech16PointTransport.cs:171
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.DisposeAsync
ValueTask DisposeAsync()
Definition
SampleFastech16PointTransport.cs:262
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.SendAndReceiveAsync
Task< IoResult< byte[]> > SendAndReceiveAsync(IReadOnlyList< byte > requestFrame, int receiveTimeoutMs, int expectedResponseLength, CancellationToken cancellationToken=default)
Definition
SampleFastech16PointTransport.cs:226
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.SetInput
void SetInput(int channel, bool value)
Definition
SampleFastech16PointTransport.cs:87
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.ToggleInputPattern
void ToggleInputPattern()
Definition
SampleFastech16PointTransport.cs:105
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.ConnectAsync
Task< IoResult > ConnectAsync(CancellationToken cancellationToken=default)
Definition
SampleFastech16PointTransport.cs:139
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.IsConnected
bool IsConnected
Definition
SampleFastech16PointTransport.cs:53
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport._inputs
readonly bool[] _inputs
Definition
SampleFastech16PointTransport.cs:25
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.ThrowIfDisposed
void ThrowIfDisposed()
Definition
SampleFastech16PointTransport.cs:357
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport._outputs
readonly bool[] _outputs
Definition
SampleFastech16PointTransport.cs:34
SampleSmart.Pages.PageSub.IoTabs.SampleFastech16PointTransport.ToBitString
static string ToBitString(IReadOnlyList< bool > values)
Definition
SampleFastech16PointTransport.cs:344
Pages
PageSub
IoTabs
SampleFastech16PointTransport.cs
다음에 의해 생성됨 :
1.17.0