IOT/PLC
[GX Works2] MC Protocol을 이용한 PC와 PLC 통신 (Binary)
IT 기술자
2025. 3. 28. 11:00
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)