Exemplo n.º 1
0
        private void OnAmsReceive(TcAmsCommand amsCmd)
        {
            byte[] data            = amsCmd.Data;
            uint   indexGroup      = 0;
            uint   cbLength        = 0;
            uint   cbWriteLength   = 0;
            uint   numStampHeaders = 0;

            if (amsCmd.AmsHeader.StateFlags != 4)
            {
                if (amsCmd.AmsHeader.StateFlags == 5)
                {
                    AdsErrorCode code;
                    switch (amsCmd.AmsHeader.CommandId)
                    {
                    case 1:
                    {
                        AdsVersion version = new AdsVersion();
                        if (amsCmd.AmsHeader.ErrCode != 0)
                        {
                            this.AdsReadDeviceInfoCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, (AdsErrorCode)amsCmd.AmsHeader.ErrCode, null, version);
                            return;
                        }
                        code             = (AdsErrorCode)TcAdsParser.ReadUInt(data, 0);
                        version.Version  = data[4];
                        version.Revision = data[5];
                        version.Build    = TcAdsParser.ReadUShort(data, 6);
                        this.AdsReadDeviceInfoCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, code, TcAdsParser.ReadString(data, 8, 0x10), version);
                        return;
                    }

                    case 2:
                        if (amsCmd.AmsHeader.ErrCode != 0)
                        {
                            this.AdsReadCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, (AdsErrorCode)amsCmd.AmsHeader.ErrCode, 0, null);
                            return;
                        }
                        code     = (AdsErrorCode)TcAdsParser.ReadUInt(data, 0);
                        cbLength = TcAdsParser.ReadUInt(data, 4);
                        this.AdsReadCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, code, cbLength, TcAdsParser.AdsData(data, 8, cbLength));
                        return;

                    case 3:
                        if (amsCmd.AmsHeader.ErrCode != 0)
                        {
                            this.AdsWriteCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, (AdsErrorCode)amsCmd.AmsHeader.ErrCode);
                            return;
                        }
                        code = (AdsErrorCode)TcAdsParser.ReadUInt(data, 0);
                        this.AdsWriteCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, code);
                        return;

                    case 4:
                        if (amsCmd.AmsHeader.ErrCode != 0)
                        {
                            this.AdsReadStateCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, (AdsErrorCode)amsCmd.AmsHeader.ErrCode, AdsState.Invalid, 0);
                            return;
                        }
                        code = (AdsErrorCode)TcAdsParser.ReadUInt(data, 0);
                        this.AdsReadStateCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, code, (AdsState)((short)TcAdsParser.ReadUShort(data, 4)), TcAdsParser.ReadUShort(data, 6));
                        return;

                    case 5:
                        if (amsCmd.AmsHeader.ErrCode != 0)
                        {
                            this.AdsWriteControlCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, (AdsErrorCode)amsCmd.AmsHeader.ErrCode);
                            return;
                        }
                        code = (AdsErrorCode)TcAdsParser.ReadUInt(data, 0);
                        this.AdsWriteControlCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, code);
                        return;

                    case 6:
                        if (amsCmd.AmsHeader.ErrCode != 0)
                        {
                            this.AdsAddDeviceNotificationCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, (AdsErrorCode)amsCmd.AmsHeader.ErrCode, 0);
                            return;
                        }
                        code = (AdsErrorCode)TcAdsParser.ReadUInt(data, 0);
                        this.AdsAddDeviceNotificationCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, code, TcAdsParser.ReadUInt(data, 4));
                        return;

                    case 7:
                        if (amsCmd.AmsHeader.ErrCode != 0)
                        {
                            this.AdsDelDeviceNotificationCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, (AdsErrorCode)amsCmd.AmsHeader.ErrCode);
                            return;
                        }
                        code = (AdsErrorCode)TcAdsParser.ReadUInt(data, 0);
                        this.AdsDelDeviceNotificationCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, code);
                        return;

                    case 8:
                        break;

                    case 9:
                        if (amsCmd.AmsHeader.ErrCode != 0)
                        {
                            this.AdsReadWriteCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, (AdsErrorCode)amsCmd.AmsHeader.ErrCode, 0, null);
                            break;
                        }
                        code     = (AdsErrorCode)TcAdsParser.ReadUInt(data, 0);
                        cbLength = TcAdsParser.ReadUInt(data, 4);
                        this.AdsReadWriteCon(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, code, cbLength, TcAdsParser.AdsData(data, 8, cbLength));
                        return;

                    default:
                        return;
                    }
                }
            }
            else
            {
                switch (amsCmd.AmsHeader.CommandId)
                {
                case 1:
                    this.AdsReadDeviceInfoInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser);
                    return;

                case 2:
                    indexGroup = TcAdsParser.ReadUInt(data, 0);
                    this.AdsReadInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, indexGroup, TcAdsParser.ReadUInt(data, 4), TcAdsParser.DataLength(data, 8));
                    return;

                case 3:
                    indexGroup = TcAdsParser.ReadUInt(data, 0);
                    cbLength   = TcAdsParser.DataLength(data, 8);
                    this.AdsWriteInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, indexGroup, TcAdsParser.ReadUInt(data, 4), cbLength, TcAdsParser.AdsData(data, 12, cbLength));
                    return;

                case 4:
                    this.AdsReadStateInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser);
                    return;

                case 5:
                {
                    AdsState adsState = TcAdsParser.AdsState(data);
                    cbLength = TcAdsParser.DataLength(data, 4);
                    this.AdsWriteControlInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, adsState, TcAdsParser.ReadUShort(data, 2), cbLength, TcAdsParser.AdsData(data, 8, cbLength));
                    return;
                }

                case 6:
                    indexGroup = TcAdsParser.ReadUInt(data, 0);
                    this.AdsAddDeviceNotificationInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, indexGroup, TcAdsParser.ReadUInt(data, 4), TcAdsParser.DataLength(data, 8), (AdsTransMode)TcAdsParser.ReadUInt(data, 12), TcAdsParser.ReadUInt(data, 0x10), TcAdsParser.ReadUInt(data, 20));
                    return;

                case 7:
                {
                    uint hNotification = TcAdsParser.ReadUInt(data, 0);
                    this.AdsDelDeviceNotificationInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, hNotification);
                    return;
                }

                case 8:
                    if (!this._useSingleNotificationEventHandler)
                    {
                        goto TR_0008;
                    }
                    else
                    {
                        using (AdsBinaryReader reader = new AdsBinaryReader(new AdsStream(data)))
                        {
                            cbLength        = reader.ReadUInt32();
                            numStampHeaders = reader.ReadUInt32();
                            this.AdsDeviceNotificationInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, numStampHeaders, reader);
                            break;
                        }
                        goto TR_0008;
                    }
                    break;

                case 9:
                    indexGroup    = TcAdsParser.ReadUInt(data, 0);
                    cbWriteLength = TcAdsParser.ReadUInt(data, 12);
                    this.AdsReadWriteInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, indexGroup, TcAdsParser.ReadUInt(data, 4), TcAdsParser.ReadUInt(data, 8), cbWriteLength, TcAdsParser.AdsData(data, 0x10, cbWriteLength));
                    return;

                default:
                    return;
                }
            }
            return;

TR_0008:
            cbLength        = TcAdsParser.ReadUInt(data, 0);
            numStampHeaders = TcAdsParser.ReadUInt(data, 4);
            this.AdsDeviceNotificationInd(amsCmd.AmsHeader.Sender, amsCmd.AmsHeader.HUser, numStampHeaders, TcAdsParser.ReadNotificationStampHeaders(data, numStampHeaders));
        }
Exemplo n.º 2
0
        public virtual void AdsReadDeviceInfoInd(AmsAddress rAddr, uint invokeId)
        {
            AdsVersion version = new AdsVersion();

            this.AdsReadDeviceInfoRes(rAddr, invokeId, AdsErrorCode.DeviceServiceNotSupported, "", version);
        }
Exemplo n.º 3
0
        public AdsErrorCode AdsReadDeviceInfoRes(AmsAddress rAddr, uint invokeId, AdsErrorCode result, string name, AdsVersion version)
        {
            TcAdsReadDeviceInfoResHeader adsHeader = new TcAdsReadDeviceInfoResHeader {
                _result       = result,
                _majorVersion = version.Version,
                _minorVersion = version.Revision,
                _versionBuild = (ushort)version.Build,
                _deviceName   = Encoding.ASCII.GetBytes(name.ToCharArray(), 0, (name.Length < 0x10) ? name.Length : 0x10)
            };

            return(this.AdsResponse(rAddr, invokeId, 1, 0, adsHeader, null));
        }
Exemplo n.º 4
0
 public virtual void AdsReadDeviceInfoCon(AmsAddress rAddr, uint invokeId, AdsErrorCode result, string name, AdsVersion version)
 {
 }