示例#1
0
 public wCpuBlock(S7Client.S7BlockInfo info, byte[] data)
 {
     if (info.BlkType == (int)wSubBlockType.OB)
     {
         this.blockType = wBlockType.OB;
     }
     else if (info.BlkType == (int)wSubBlockType.FC)
     {
         this.blockType = wBlockType.FC;
     }
     else if (info.BlkType == (int)wSubBlockType.FB)
     {
         this.blockType = wBlockType.FB;
     }
     else if (info.BlkType == (int)wSubBlockType.DB)
     {
         this.blockType = wBlockType.DB;
     }
     else if (info.BlkType == (int)wSubBlockType.SFC)
     {
         this.blockType = wBlockType.SFC;
     }
     else if (info.BlkType == (int)wSubBlockType.SFB)
     {
         this.blockType = wBlockType.SFB;
     }
     else if (info.BlkType == (int)wSubBlockType.SDB)
     {
         this.blockType = wBlockType.SDB;
     }
     this.language      = (wLanguage)info.BlkLang;
     this.name          = wCpu.cleanString(info.Header);
     this.family        = wCpu.cleanString(info.Family);
     this.author        = wCpu.cleanString(info.Author);
     this.codeDate      = wCpu.cleanString(info.CodeDate);
     this.interfaceDate = wCpu.cleanString(info.IntfDate);
     this.loadSize      = info.LoadSize;
     this.MC7Size       = info.MC7Size;
     this.blockNumber   = info.BlkNumber;
     this.blockFlags    = info.BlkFlags;
     this.localData     = info.LocalData;
     this.SBBLength     = info.SBBLength;
     this.checksum      = info.CheckSum;
     this.data          = data;
 }
示例#2
0
        void GetBlockInfo()
        {
            S7Client.S7BlockInfo BI = new S7Client.S7BlockInfo();
            int[] BlockType         =
            {
                S7Client.Block_OB,
                S7Client.Block_DB,
                S7Client.Block_SDB,
                S7Client.Block_FC,
                S7Client.Block_SFC,
                S7Client.Block_FB,
                S7Client.Block_SFB
            };
            txtBI.Text = "";
            int Result = Client.GetAgBlockInfo(BlockType[CBBlock.SelectedIndex], System.Convert.ToInt32(txtBlockNum.Text), ref BI);

            ShowResult(Result);
            if (Result == 0)
            {
                // Here a more descriptive Block Type, Block lang and so on, are needed,
                // but I'm too lazy, do it yourself.
                txtBI.Text = txtBI.Text + "Block Type    : " + HexByte((byte)BI.BlkType) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Block Number  : " + Convert.ToString(BI.BlkNumber) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Block Lang    : " + HexByte((byte)BI.BlkLang) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Block Flags   : " + HexByte((byte)BI.BlkFlags) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "MC7 Size      : " + Convert.ToString(BI.MC7Size) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Load Size     : " + Convert.ToString(BI.LoadSize) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Local Data    : " + Convert.ToString(BI.LocalData) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "SBB Length    : " + Convert.ToString(BI.SBBLength) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Checksum      : " + HexWord((ushort)BI.CheckSum) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Version       : 0." + Convert.ToString(BI.Version) + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Code Date     : " + BI.CodeDate + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Intf.Date     : " + BI.IntfDate + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Author        : " + BI.Author + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Family        : " + BI.Family + (char)13 + (char)10;
                txtBI.Text = txtBI.Text + "Header        : " + BI.Header;
            }
        }
示例#3
0
 public void addCpuBlock(S7Client.S7BlockInfo block, byte[] data)
 {
     this.blocks.Add(new wCpuBlock(block, data));
 }
示例#4
0
        public void upload()
        {
            Console.WriteLine("Getting CPU information...");

            S7Client.S7OrderCode oc = new S7Client.S7OrderCode();
            int result = MyClient.GetOrderCode(ref oc);

            if (result == 0)
            {
                this.setOrderCode(oc);
            }
            else
            {
                string error = "Failed to get Order Code";
                throw new wPlcException(error, result);
            }

            S7Client.S7CpuInfo ci = new S7Client.S7CpuInfo();
            result = MyClient.GetCpuInfo(ref ci);

            if (result == 0)
            {
                this.setCpuInfo(ci);
            }
            else
            {
                string error = "Failed to get CPU info";
                throw new wPlcException(error, result);
            }

            Console.WriteLine("Uploading program blocks... ");

            Dictionary <wBlockType, ushort[]> blockList  = new Dictionary <wBlockType, ushort[]>();
            Dictionary <wBlockType, int>      blockCount = new Dictionary <wBlockType, int>();
            int totalBlockCount = 0;

            blockList = new Dictionary <wBlockType, ushort[]>();

            S7Client.S7BlocksList bl = new S7Client.S7BlocksList();

            result = MyClient.ListBlocks(ref bl);
            List <wBlockType> blockTypeList = new List <wBlockType>();

            if (result == 0)
            {
                if (bl.OBCount > 0)
                {
                    blockTypeList.Add(wBlockType.OB);
                }
                if (bl.FBCount > 0)
                {
                    blockTypeList.Add(wBlockType.FB);
                }
                if (bl.FCCount > 0)
                {
                    blockTypeList.Add(wBlockType.FC);
                }
                if (bl.DBCount > 0)
                {
                    blockTypeList.Add(wBlockType.DB);
                }
                if (bl.SFBCount > 0)
                {
                    blockTypeList.Add(wBlockType.SFB);
                }
                if (bl.SFCCount > 0)
                {
                    blockTypeList.Add(wBlockType.SFC);
                }
                if (bl.SDBCount > 0)
                {
                    blockTypeList.Add(wBlockType.SDB);
                }
            }
            else
            {
                string error = "Failed to list all blocks";
                throw new wPlcException(error, result);
            }

            foreach (wBlockType blockType in blockTypeList)
            {
                blockList.Add(blockType, new ushort[MAX_BLOCK]);
                int resultBlockCount = blockList[blockType].Length;
                result = MyClient.ListBlocksOfType((int)blockType, blockList[blockType], ref resultBlockCount);
                if (result == 0)
                {
                    blockCount.Add(blockType, resultBlockCount);
                    totalBlockCount += resultBlockCount;
                }
                else
                {
                    string error = "Failed to list blocks of type " + blockType;
                    throw new wPlcException(error, result);
                }
            }

            int uploadedBlockCount = 0;

            foreach (wBlockType blockType in blockTypeList)
            {
                for (int i = 0; i < blockCount[blockType]; i++)
                {
                    //p.setValue(((uploadedBlockCount + 1) / totalBlockCount) * 100);
                    S7Client.S7BlockInfo blockInfo = new S7Client.S7BlockInfo();
                    result = MyClient.GetAgBlockInfo((int)blockType, blockList[blockType][i], ref blockInfo);

                    if (result == 0)
                    {
                        byte[] buffer     = new byte[16384];
                        int    bufferSize = buffer.Length;

                        if (blockType != wBlockType.SFC && blockType != wBlockType.SFB)
                        {
                            result = MyClient.FullUpload((int)blockType, blockList[blockType][i], buffer, ref bufferSize);

                            if (result != 0)
                            {
                                string error = "Could not upload " + blockType + blockList[blockType][i];
                                throw new wPlcException(error, result);
                            }
                        }
                        else
                        {
                            bufferSize = 0;
                        }

                        byte[] data = new byte[bufferSize];
                        Array.Copy(buffer, data, data.Length);
                        this.addCpuBlock(blockInfo, data);
                        Console.WriteLine(this.blocks.Last().ToString() + " loaded. Size: " + this.blocks.Last().loadSize + " bytes.");
                    }
                    else
                    {
                        string error = "Could not get Block Info for " + blockType + blockList[blockType][i];
                        throw new wPlcException(error, result);
                    }

                    uploadedBlockCount++;
                }
            }
            Console.WriteLine("Done!");
        }