(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的地址中開放必要的地址以供測試。