250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- MSSQL
- mssql table 용량
- ssh log
- kafka
- Xamarin
- ssh 접속 로그
- 스마트공장
- OPC DA
- OPC UA Write
- Jar 경로
- OPC UA Client Write
- OPC
- SCM
- ssh 접속 실패 로그
- Gradle Jar
- Gradle 빌드 오류
- delete truncate 차이
- table용량
- c#
- MS-SQL
- springboot Gradle
- JOIN DBMS별 차이점
- lock
- Java 버전 여러개 사용
- OPC UA
- CPU 사용량
- kafka listener
- Gradle JDK Path
- c# 강의
- OPC Write
Archives
- Today
- Total
IT’s Ha
[OPC] 5. C#을 통한 OPC UA Client 개발 - Write 본문
728x90
반응형
안녕하세요. 이번 포스팅은 OPC UA Client Write 문의가 와서 급하게 작성하였습니다.
이번 포스팅은 먼저 급하게 작성하고, 그 동안 다른 일에 집중하느라 늦었습니다.
그리고 테스트가 부족하여 양해 부탁드립니다.
이번 포스팅은 소스만 안내드리고, 문제 있는 부분에 대해서는 댓글과 메일 주시면 답변 드리도록 하겠습니다.
먼저, 하기위해 이전글에 대해서 참고 부탁드립니다.
2023.03.30 - [OPC] - [OPC] 4. C#을 통한 OPC UA Client 개발
1. OPC Ua Client Write
private void nodeWrite(Session session, string nodeId, object value)
{
try
{
// Value 값이 없으면 return
if (value == null)
return;
WriteValueCollection nodeValues = new WriteValueCollection();
WriteValue nodeWrite = new WriteValue();
nodeWrite.NodeId = nodeId;
nodeWrite.AttributeId = Attributes.Value;
nodeWrite.Value.WrappedValue = new Variant(value);
/*
* 1. Request Header를 이용한 처리
* */
RequestHeader requestHeader = new RequestHeader();
requestHeader.ReturnDiagnostics = (uint)DiagnosticsMasks.All;
// Result 처리를 위한 변수
StatusCodeCollection results = null;
DiagnosticInfoCollection diagnosticInfos = null;
ResponseHeader responseHeader = session.Write(
requestHeader,
nodeValues,
out results,
out diagnosticInfos);
ClientBase.ValidateResponse(results, nodeValues);
ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodeValues);
//결과에 대한 처리
if (StatusCode.IsBad(results[0]))
{
if (EventList.Items.Count > 100)
EventList.Items.RemoveAt(EventList.Items.Count - 1);
EventList.Items.Insert(0, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
EventList.Items[0].SubItems.Add("[Write 에러 ]");
}
/*
* 2. Session에 Write 처리
* */
ResponseHeader result2 = session.Write(null, nodeValues, out _, out _);
// 결과를 확인하여 에러가 있는지 확인합니다.
}
catch (Exception ex)
{
if (EventList.Items.Count > 100)
EventList.Items.RemoveAt(EventList.Items.Count - 1);
EventList.Items.Insert(0, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
EventList.Items[0].SubItems.Add("[Write 에러 ] : "+ ex.ToString() );
}
}
일단 2가지 방법으로 설명을 하였습니다. 하나는 ResponseHeader에 응답을 기다리고 결과를 처리하기 위한 방법과 그냥 결과를 처리하지 않고 쓰기만 하기 위한 2가지 방법을 표현 하였습니다. 1번이 조금더 여러가지 경우에 수를 대비 할 수있을 거라 예상합니다.
위에서 말씀드린거처럼 테스트화면까지 보여드리지 못하여 죄송합니다. 지금은 PLC가 없어 기회가 생기는데로 다시 한번 올리도록 하겠습니다.
궁금하신 점이나 잘못된 점은 메일 또는 댓글에 남겨 주시면 수정 또는 답변 드리도록 하겠습니다. 감사합니다.
728x90
반응형
'OPC' 카테고리의 다른 글
[OPC] 4. C#을 통한 OPC UA Client 개발 (31) | 2023.03.30 |
---|---|
[OPC] 3. OPC UA와 PLC 통신 예제 (7) | 2023.03.15 |
[OPC] 2. OPC UA와 OPC DA의 차이, PLC와 OPC통신 (0) | 2023.03.15 |
[OPC] 1. OPC UA 서버의 이해 (0) | 2023.03.08 |
[OPC]OPC (0) | 2023.02.15 |
Comments