程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 關於C#如何使用Prodave(實戰DllImport)(4)

關於C#如何使用Prodave(實戰DllImport)(4)

編輯:關於C語言

(5)以下是測試的代碼:

            //以下測試LoadConnection_ex6
            short ConNr= 63; // First connection;(0 ... 63);(max. 64 connections).
            string AccessPoint = "S7ONLINE"; // Default Access point——S7ONLINE
            Prodave6_CS.Prodave6.CON_TABLE_TYPE ConTable ;// Connection tablE
            int ConTableLen = System.Runtime.InteropServices.Marshal.SizeOf(typeof (Prodave6_CS.Prodave6.CON_TABLE_TYPE)) ;// Length of the connection tablE
            int RetValue;
             ConTable.Adr=new byte[]{192,168,1,200,0,0};
            ConTable.AdrType = 2; // Type of address: MPI/PB (1), IP (2), Mac (3)
            ConTable.SlotNr = 2; // 插槽號
            ConTable.RackNr = 0; // 機架號
            RetValue = Prodave6.LoadConnection_ex6(ConNr, AccessPoint, ConTableLen,ref ConTable);

            //以下測試SetActiveConnection_ex6
            UInt16 UConNr = (UInt16)ConNr;
            RetValue = Prodave6.SetActiveConnection_ex6(UConNr);

             //以下測試db_write_ex6
            UInt16 BlkNr = 4;//data block號
             Prodave6.DatType DType = Prodave6.DatType.BYTE;//要讀取的數據類型
            UInt16 StartNr = 0;//起 始地址號
            UInt32 pAmount = 20;//需要讀取類型的數量
            UInt32 BufLen = 20;//緩沖區長度(字節為單位)
            //參數:data block號、要寫入的數據類型、起始地址號、需要寫入類型的 數量、緩沖區長度(字節為單位)、緩沖區
            byte[] pWriteBuffer = new byte[20];
             for (int i = 0; i < pWriteBuffer.Length; i++)
                pWriteBuffer[i] = (byte)(i+1);
                RetValue = Prodave6.db_write_ex6(BlkNr, DType, StartNr, ref pAmount, BufLen, pWriteBuffer);
            //以下測試db_read_ex6
            //參數:data block號、要讀取的數 據類型、起始地址號、需要讀取類型的數量、緩沖區長度(字節為單位)、
            //緩沖區、緩沖區數據交互的長度
            byte[] pReadBuffer = new byte[20];
            UInt32 pDatLen = 0;
             RetValue = Prodave6.db_read_ex6(BlkNr, DType, StartNr, ref pAmount, BufLen, pReadBuffer, ref  pDatLen);

            //以下測試fIEld_read_ex6(測試DB區)
            //參數:data block號、要讀取 的數據類型、起始地址號、需要讀取類型的數量、緩沖區長度(字節為單位)、
            //緩沖區、緩沖區數據交互的 長度
            Prodave6.FieldType FType = Prodave6.FIEldType.D;
            for (int i = 0; i < pWriteBuffer.Length; i++)
                pWriteBuffer[i] = (byte)(i);
            RetValue = Prodave6.fIEld_write_ex6(FType, BlkNr, StartNr, pAmount, BufLen, pWriteBuffer);

            //以下測試fIEld_read_ex6(測試DB區)
            //參數:data block號、要讀取的數據類型、起始地址號、需要讀取 類型的數量、緩沖區長度(字節為單位)、
            //緩沖區、緩沖區數據交互的長度
            byte[] pReadBuffer2 = new byte[20];
            RetValue = Prodave6.fIEld_read_ex6(FType, BlkNr, StartNr, pAmount, BufLen,pReadBuffer2, ref pDatLen);


            //以下測試fIEld_read_ex6(測試M區)
            //參數:data block號、要讀取的數據類型、起始地址號、需要讀取類型的數量、緩沖區長度(字節為單位)、
            //緩沖區、緩沖區數據交互的長度
            Prodave6.FieldType FTypeM = Prodave6.FIEldType.M;
            byte []pWriteBufferM = {2};
            RetValue = Prodave6.fIEld_write_ex6(FTypeM, 0, 100, 1, 1, pWriteBufferM);

            //以下測試fIEld_read_ex6(測 試M區)
            //參數:data block號、要讀取的數據類型、起始地址號、需要讀取類型的數量、緩沖區長度(字節 為單位)、
            //緩沖區、緩沖區數據交互的長度
            byte[] pReadBufferM2 = new byte[1];
            RetValue = Prodave6.fIEld_read_ex6(FTypeM, 0, 100, 1, 1, pReadBufferM2, ref pDatLen);

            //以下測試mb_setbit_ex6
            UInt16 MbNr = 100;//mb block號
             UInt16 BitNr = 0;//位號
            byte Value = 1;//0、1
            RetValue = Prodave6.mb_setbit_ex6(MbNr,BitNr, Value);

            //以下測試mb_bittset_ex6(測試DB區)
            int pValue = 0;
            RetValue = Prodave6.mb_bittest_ex6(MbNr, BitNr, ref pValue);


            //以下測試GetLoadedConnections_ex6
            BufLen = 64;
            int[] pBufferI = new int[64];
            Prodave6.GetLoadedConnections_ex6 (BufLen, pBufferI);

            //以下測試UnloadConnection_ex6
            RetValue = Prodave6.UnloadConnection_ex6(UConNr);

            //以下測試GetErrorMessage_ex6
             int ErrorNr = 0x7040; // Block boundary exceeded, correct the number
            StringBuilder Buffer = new StringBuilder(300); // Transfer buffer for error text
            BufLen = (UInt32)Buffer.Capacity; // Buffer length    
            RetValue = Prodave6.GetErrorMessage_ex6(ErrorNr, BufLen, Buffer);

            //以下測試float_2_gp_ex6
            float IEee = 1.2F;
            UInt32 gp=0;
            float pIEee=0;
            RetValue = Prodave6.float_2_gp_ex6(IEee, ref gp);
            RetValue = Prodave6.gp_2_float_ex6(gp,ref pIEee);

            //以 下測試gp_2_float_ex6
            RetValue = Prodave6.testbit_ex6(7, 0);
            RetValue = Prodave6.testbit_ex6(7, 1);
            RetValue = Prodave6.testbit_ex6(7, 2);
            RetValue = Prodave6.testbit_ex6(7, 3);
            RetValue = Prodave6.testbit_ex6(7, 4);
             RetValue = Prodave6.testbit_ex6(7, 5);
            RetValue = Prodave6.testbit_ex6(7, 6);
             RetValue = Prodave6.testbit_ex6(7, 7);

            //以下測試byte_2_bool_ex6
             int [] boolValue=new int[8];
            Prodave6.byte_2_bool_ex6(255, boolValue);

            //以下測試bool_2_byte_ex6
            byte  byteValue;
             byteValue=Prodave6.bool_2_byte_ex6(boolValue);

            //以下測試kf_2_integer_ex6和 kf_2_long_ex6
            UInt16 u16=25600;UInt16 u16_;
            u16_=Prodave6.kf_2_integer_ex6(u16);
            UInt32 u32 = 1677721600; UInt32 u32_;
             u32_=Prodave6.kf_2_long_ex6(u32);

            //以下測試swab_buffer_ex6(byte[] pBuffer, UInt32 Amount)
            byte[] pBuffer=new byte[11];
            UInt32 Amount=(UInt32) pBuffer.Length;
            for (int i = 0; i < Amount; i++)
                pBuffer [i] = (byte)(i+1);
            Prodave6.swab_buffer_ex6(pBuffer, 6);

            //以下 測試copy_buffer_ex6
            byte[] pSourceBuffer={1,2,3,4,5,6,7,8,9,10};
            byte[] pTargetBuffer=new byte[10];
            Prodave6.copy_buffer_ex6( pTargetBuffer,  pSourceBuffer,8);

            //以下測試ushort_2_bcd_ex6
            UInt16[] pwValues = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
            Prodave6.ushort_2_bcd_ex6(pwValues, 10, 0, 0);

            //以下測試bcd_2_ushort_ex6
            Prodave6.bcd_2_ushort_ex6(pwValues, 10, 0, 0);

            UInt32[] pdwValues = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
             //以下測試ulong_2_bcd_ex6
            Prodave6.ulong_2_bcd_ex6(pdwValues,8, 0, 0);

             //以下測試bcd_2_ulong_ex6
            Prodave6.bcd_2_ulong_ex6(pdwValues, 8, 0, 0);

(6)最後,要說的是我沒有轉換全部的函數,只是挑了我認為比較常用的,或者我可能用的到的進行了轉換。

詳細 的程序包,如果能要的話,可以去這裡下載,同時還附帶了英文版的prodave的pdf說明書哦:

http://download.csdn.Net/source/1408924

如果只是要單獨下載電子書的話,請看這裡:

http://download.csdn.Net/source/1408940

注意:開發環境為VS2008SP1,而其是控制台程序,沒有輸出,想看時如何測試各 個函數的,請自行斷點跟蹤,程序是我測試過的,不存在錯誤,除非您該我代碼。當然,您得在PLC的地址中開放必要的地址以供測試。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved