Envíe el comando FINS de C # a PLC

Intento enviar ALETAS comandos a través de UDP desde la PC (C # .NET) al módulo Ethernet del PLC (Omron), pero no recibe ninguna respuesta del PLC y no tengo idea de dónde puedo comenzar a solucionar problemas.

PLC tiene una lógica de escalera muy simple como sigue: siDM100 tiene valor de#0001, luego dispare en la salida101.00. (Aquí, "Trigger" es solo un nombre de símbolo para el área de memoriaD100, y "Salida" es un símbolo para la salida101.00)

Entonces escribí una pieza de C # que ejecuta el comando FINS de "Memory Area Write" que tiene el código de comando de01 02, seguido de la dirección inicial, el número de elementos que se escribirán y los datos. El código C # debe escribir un valor de #0001 a PLC'sD100 area para activarse en101.00.

[código eliminado que no funciona] ..

La salida101.00 no se activó, ni recibí ninguna excepción. Me he asegurado de lo siguiente:

Port, nodo y dirección configurados correctamente según lo confirmado por "Work Online" en CX-Programmer. También hice ping a cada IP para asegurarme de que los nodos estén conectados.LosUdpClientl código @ es válido ya que escribí un código de servidor / cliente muy simple que envía y recibe paquetes con éxito.a lógica de @Ladder no tiene ningún problema. Transferí la escalera al PLC y la probé mediante Work Online en modo Monitor y configuréD100 un valor manualmente.

Sospecho que hay un error en lafins_cmnd array, pero como se ve en mi código, he comentado lo más detalladamente posible sobre cada valor; No puedo encontrarme perdiendo nada. Sospecho que es posible que no esté analizando el hexadecimal correctamente, pero nuevamente, no tengo ninguna excepción para guiarme.

No tengo idea de dónde y cómo puedo solucionar el problema. Espero que alguien aquí conFINS La experiencia en programación o PLC me puede ofrecer alguna ayuda.

[RESPONDER
Gracias Porge para el enlace, eso me hizo descubrir el problema. Después de un par de senderos finalmente lo pones a trabajar. Vea a continuación el código de trabajo.

string SERV_IP_ADDR = "192.168.250.1";
const int FINS_UDP_PORT = 9600;

byte[] sendPacket = new byte[]
{
    // Full UDP packet: 80 00 02 00 00 00 00 05 00 19 01 02 82 00 64 00 00 01 00 01

    // Header
    0x80, //0.(ICF) Display frame information: 1000 0001
    0x00, //1.(RSV) Reserved by system: (hex)00
    0x02, //2.(GCT) Permissible number of gateways: (hex)02
    0x00, //3.(DNA) Destination network address: (hex)00, local network
    0x00, //4.(DA1) Destination node address: (hex)00, local PLC unit
    0x00, //5.(DA2) Destination unit address: (hex)00, PLC
    0x00, //6.(SNA) Source network address: (hex)00, local network
    0x05, //7.(SA1) Source node address: (hex)05, PC's IP is 192.168.250.5
    0x00, //8.(SA2) Source unit address: (hex)00, PC only has one ethernet
    0x19, //9.(SID) Service ID: just give a random number 19

    // Command
    0x01, //10.(MRC) Main request code: 01, memory area write
    0x02, //11.(SRC) Sub-request code: 02, memory area write

    // PLC Memory Area
    0x82, //12.Memory area code (1 byte): 82(DM)

    // Address information
    0x00, //13.Write start address (2 bytes): D100
    0x64, 
    0x00, //15.Bit address (1 byte): Default 0
    0x00, //16.No. of items (2 bytes): only one address which is D100
    0x01,

    // Write Data
    0x00, //18.Data to write (2 bytes): value is 1
    0x01,
};  

UdpClient client = new UdpClient(); //create a UdpClient instance

try
{
    client.Send(sendPacket, sendPacket.Length, SERV_IP_ADDR, FINS_UDP_PORT);
}
catch (SocketException se)
{
    Console.WriteLine(se.ErrorCode + ": " + se.Message);
}

client.Close();

Respuestas a la pregunta(2)

Su respuesta a la pregunta