C sharp - traducir tramas modbus

 
Vista:

traducir tramas modbus

Publicado por etziel (2 intervenciones) el 18/03/2017 16:29:36
Hola....

Soy nuevo en esto de modbus y estoy realizando una aplicación en Visual Studio C# esta se conecta a un plc llamado omni, ya pude realizar la comunicación pero las tramas que recibo son de esta manera:

12595 | 14900 | 13882 | 13105 | "Se supone que esta seria la hora"

Alguien por favor podría apoyarme a ver la manera de que se muestre la hora normal por favor!!!!!

no se si existe alguna función o como podría ser.

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Enrique
Val: 189
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

traducir tramas modbus

Publicado por Enrique (69 intervenciones) el 03/04/2017 22:49:14
Puedes poner el código que imprime esto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

traducir tramas modbus

Publicado por etziel (2 intervenciones) el 04/04/2017 07:47:39
ya logre traducir eso pero quisiera saber si podrias ayudare a saber como llamar y leer las de 32 bits ya que solo puedo con las de 16 si no es mucha molestia por favor aqui esta el codigo que utilizo para llamarlas

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
private byte[] ReadInputRegistersMsg(byte slaveAddress, ushort startAddress, byte function, uint numberOfPoints)
{
    byte[] frame = new byte[8];
    frame[0] = slaveAddress;			    // Slave Address
    frame[1] = function;				    // Function             
    frame[2] = (byte)(startAddress >> 8);	// Starting Address High
    frame[3] = (byte)startAddress;		    // Starting Address Low            
    frame[4] = (byte)(numberOfPoints >> 8);	// Quantity of Registers High
    frame[5] = (byte)numberOfPoints;		// Quantity of Registers Low
    byte[] crc = this.CalculateCRC(frame);  // Calculate CRC.
    frame[frame.Length - 2] = crc[0];       // Error Check Low
    frame[frame.Length - 1] = crc[1];       // Error Check High
    return frame;
}
 
 
/// <summary>
/// CRC Calculation 
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
private byte[] CalculateCRC(byte[] data)
{
    ushort CRCFull = 0xFFFF; // Set the 16-bit register (CRC register) = FFFFH.
    byte CRCHigh = 0xFF, CRCLow = 0xFF;
    char CRCLSB;
    byte[] CRC = new byte[2];
    for (int i = 0; i < (data.Length) - 2; i++)
    {
        CRCFull = (ushort)(CRCFull ^ data[i]); // 
 
        for (int j = 0; j < 16; j++)
        {
            CRCLSB = (char)(CRCFull & 0x00000001);
            CRCFull = (ushort)((CRCFull >> 1) & 32767);
 
            if (CRCLSB == 1)
                CRCFull = (ushort)(CRCFull ^ 0x1021);
        }
    }
    CRC[1] = CRCHigh = (byte)((CRCFull >> 8) & 0xFFFF);
    CRC[0] = CRCLow = (byte)(CRCFull & 0xFFFF);
    return CRC;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar