Пример #1
0
        public static int Export_ModBus(ref MODBUS_TX_MSG MBTM, ref byte[] Buf)
        {
            int i = 0;
            int CheckValue;

            MBTM.Addr     = Buf[i++];
            MBTM.FuncCode = Buf[i++];
            MBTM.Length   = Buf[i++];
            if (MBTM.Length > 100)
            {
                return(0);
            }
            for (int n = 0; n < (MBTM.Length); n++)
            {
                MBTM.Buf[n] = Buf[n + i];
            }
            i                += MBTM.Length;
            CheckValue        = Tools.GetCrc16(Buf, i);
            MBTM.CheckValue   = Buf[i + 1];
            MBTM.CheckValue <<= 8;
            MBTM.CheckValue  |= Buf[i];
            if (CheckValue == MBTM.CheckValue)
            {
                return(MBTM.Length);
            }
            return(-1);
        }
Пример #2
0
        public static int SendData(SerialPort CommPort, byte[] TxBuffer, int TxLength, ref byte[] RxBuffer, int RxLength)
        {
            int           Length = 0;
            MODBUS_TX_MSG MBTM   = new MODBUS_TX_MSG();

            MBTM.Buf = new byte[100];
            for (int i = 0; i < 2; i++)
            {
                Length = SendDataOne(CommPort, TxBuffer, TxLength, ref RxBuffer, RxLength);
                if (标准ModBus.Export_ModBus(ref MBTM, ref RxBuffer) != -1)
                {
                    break;
                }
            }
            //  MessageBox.Show("重试次数过多");
            return(Length);
        }
Пример #3
0
        private MODBUS_TX_MSG ThreadGetMsg(int Offset, int Count)
        {
            MODBUS_RX_MSG MBRM = new MODBUS_RX_MSG();
            MODBUS_TX_MSG MBTM = new MODBUS_TX_MSG();

            MBTM.Buf = new byte[100];
            byte[] RxBuffer = new byte[200];
            byte[] TxBuffer = new byte[200];
            MBRM.Addr     = Value.RSValue.RS485Addr;
            MBRM.FuncCode = 0x03;
            MBRM.Length   = Count;
            MBRM.Offset   = (byte)Offset;
            int Length = 标准ModBus.CreateMsg_ModBus(MBRM, ref TxBuffer);

            Length = Usart.SendData(serialPort1, TxBuffer, Length, ref RxBuffer, 200);
            标准ModBus.Export_ModBus(ref MBTM, ref RxBuffer);
            return(MBTM);
        }
Пример #4
0
        private MODBUS_TX_MSG GetMsg(int Offset, int Count)
        {
            MODBUS_RX_MSG MBRM = new MODBUS_RX_MSG();
            MODBUS_TX_MSG MBTM = new MODBUS_TX_MSG();

            MBTM.Buf = new byte[100];
            byte[] RxBuffer = new byte[200];
            byte[] TxBuffer = new byte[200];
            MBRM.Addr     = byte.Parse(comboBox3.Text);
            MBRM.FuncCode = 0x03;
            MBRM.Length   = Count;
            MBRM.Offset   = (byte)Offset;
            int Length = 标准ModBus.CreateMsg_ModBus(MBRM, ref TxBuffer);

            serialPort1.ReadTimeout = 500;

            Length = Usart.SendData(serialPort1, TxBuffer, Length, ref RxBuffer, 200);
            标准ModBus.Export_ModBus(ref MBTM, ref RxBuffer);
            return(MBTM);
        }