Q03 UDVCPU의 이더넷 포트를 이용해 PC와 통신을 하려고 한다.
이번에는 Binary 모드로 통신을 하려 한다.

Project > Parameter > PLC Parameter를 더블클릭하여 Q Parameter Setting 팝업창을 연다.
Communication Data Code를 Binary Code로 세팅한다.
이하 PLC 처리는 https://it-technician.tistory.com/5 이전 글을 참조한다.
Visual Studio 2022 > 콘솔 앱을 생성한다.
using System.Globalization;
using System.Net;
using System.Net.Sockets;
internal class Program
{
private static async Task Main(string[] args)
{
IPAddress ipAddress = IPAddress.Parse("192.168.1.233");
IPEndPoint ipEndPoint = new(ipAddress, 2500);
using Socket client = new(
ipEndPoint.AddressFamily,
SocketType.Stream,
ProtocolType.Tcp);
await client.ConnectAsync(ipEndPoint);
// Send request.
string message = "500000FFFF03000C00100001040000881300900300";
byte[] messageBytes = new byte[message.Length / 2];
int index = 0;
for (int i = 0; i < message.Length; i += 2)
{
string sub = message.Substring(i, 2);
byte result = 0;
byte.TryParse(sub, NumberStyles.HexNumber, null, out result);
messageBytes[index++] = result;
}
_ = await client.SendAsync(messageBytes, SocketFlags.None);
Console.WriteLine($"sent : \"{message}\"");
// Receive response.
var buffer = new byte[1_024];
var received = await client.ReceiveAsync(buffer, SocketFlags.None);
int dataLength = int.Parse(buffer[7].ToString(), NumberStyles.HexNumber, null);
var receiveBuffer = new byte[8 + dataLength];
Array.Copy(buffer, receiveBuffer, 8 + dataLength);
string hex = BitConverter.ToString(receiveBuffer);
var response = hex.Replace("-", "");
Console.WriteLine($"received: \"{response}\"");
client.Shutdown(SocketShutdown.Both);
}
}
Program.cs 파일을 위 코드로 바꿔준다.

M5000 메모리에서 시작하여 2 워드(M5000~M5047)까지 메모리 값을 가져온다.
received의 마지막 6바이트가 메모리 값이다. (000000000000 모든 메모리 값이 0)
'IOT > PLC' 카테고리의 다른 글
[OpenPLC] KITS ESP32 EDU 디바이스에서 Blink 예제 실행 (0) | 2024.12.13 |
---|---|
[OpenPLC] ESP32에서 Blink 예제 실행 (0) | 2024.12.07 |
[OpenPLC] Modbus 아두이노 4 Digits 7 Segment (0) | 2024.01.12 |
[OpenPLC] Modbus 아두이노 통신 (1) | 2024.01.05 |
[XGemPro] dotNet6.0 실행시 dll오류 (0) | 2023.12.26 |