Exemplo n.º 1
0
        //创建用于485通讯的Modus命令
        private static byte[] CreatSerialModbusCommand(byte[] BaseModbusCommand)
        {
            List <byte> SerialModbusCommand = new List <byte>();

            SerialModbusCommand.AddRange(BaseModbusCommand);
            byte[] CRCArray = CRCCalculate.CRC_16(BaseModbusCommand);
            SerialModbusCommand.AddRange(CRCArray);
            return(SerialModbusCommand.ToArray());
        }
Exemplo n.º 2
0
        //校验数据
        private COMMUNICATERESULT CheckData(byte[] RecData, byte[] SendData)
        {
            byte[] myrecdata = new byte[RecData.Length - 2];
            Array.Copy(RecData, myrecdata, RecData.Length - 2);

            byte[] CRC = CRCCalculate.CRC_16(myrecdata);
            if (RecData[RecData.Length - 1] != CRC[1] || RecData[RecData.Length - 2] != CRC[0])
            {
                return(COMMUNICATERESULT.DataCheckFail);
            }

            if (RecData[0] != SendData[1])
            {
                return(COMMUNICATERESULT.FailUnitID);
            }
            if (RecData[1] != SendData[2])
            {
                if ((RecData[1] & 0x8) == 0)
                {
                    return(COMMUNICATERESULT.UnknownFunCode);
                }
                else
                {
                    switch (RecData[2])
                    {
                    case 1:
                        return(COMMUNICATERESULT.UnknownFunCode);

                    case 2:
                        return(COMMUNICATERESULT.DataAddrInvalid);

                    case 3:
                        return(COMMUNICATERESULT.DataValueInvalid);

                    case 4:
                        return(COMMUNICATERESULT.SeverErr);

                    case 5:
                        return(COMMUNICATERESULT.ServerDelayOK);

                    case 6:
                        return(COMMUNICATERESULT.ServerBusy);

                    case 10:
                        return(COMMUNICATERESULT.GateWayFault_RoutingErr);

                    case 11:
                        return(COMMUNICATERESULT.GateWayFault_Noresponse);

                    default:
                        break;
                    }
                }
            }
            return(COMMUNICATERESULT.OK);
        }