You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

536 lines
26 KiB
C#

2 months ago
/**********************************************************************************
* Class for Communicate to PLC with Prodave
* Create by J0YANG
* Last Modify Date:2009-08-11
* ********************************************************************************/
/****************************<EFBFBD><EFBFBD>PLCͨѶӦ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>****************************************
Ϊ<EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪPLCɨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>PLC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
һ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ȡ.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PLC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PLCConnParam[] Conn=new PLCConnParam[2]; //MPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>PLC,<2C><>ַ<EFBFBD>ֱ<EFBFBD>Ϊ2,3
Conn[0] .Addres=2; Conn[0].Slot=2; Conn[0].Rack=0;
Conn[1] .Addres=3; Conn[1].Slot=2; Conn[1].Rack=0;
errCode= DCProdave.Open(1,Conn); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
errCode= DCProdave.ActiveConn(1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
errCode= DCProdave.GetDBByteData(2, 0, 6, buf, 0); //DB2.DBW0--DBW5 <20><>6<EFBFBD><36><EFBFBD>ֽڵı<DAB5><C4B1><EFBFBD>,<2C><>buf<75><66><30>
if(errCode!=0){//DCLog.Write(DCProdave.GetErrInfo(errCode),"log.txt");}//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>=0,<2C>򽫴<EFBFBD><F2BDABB4><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>־
* *********************************************************************************/
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices; //DllImport<72><74>Ҫ<EFBFBD>õ<EFBFBD><C3B5>Ŀ<EFBFBD>
namespace DCProdaveCS
{
#region <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>[<5B><><EFBFBD><EFBFBD>PLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
public struct PLCConnParam
{
public byte Addres; // <20><><EFBFBD><EFBFBD>CPU<50><55>MPI/DP<44><50>ַ
//public byte SegmentId; // <20><><EFBFBD><EFBFBD>Ϊ0
public byte Rack; // <20><><EFBFBD><EFBFBD>CPU<50>Ļ<EFBFBD><C4BB>ܺ<EFBFBD>
public byte Slot; // <20><><EFBFBD><EFBFBD>CPU<50>IJۺ<C4B2>
}
#endregion
#region <20><><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[PLC<4C>Ĵ洢<C4B4><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
public enum PLCBlockType
{
I = 1, //Input bytes
Q = 2, //Output bytes
M = 3, //Flag bytes
T = 4, //Timer words
Z = 5, //Counter words
D = 6, //Data from DB
}
#endregion
public class DCProdave
{
/// <summary><3E><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><ECBAAF>
/// <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κξ<CEBA>̬<EFBFBD><CCAC>Ա,<2C><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>þ<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
/// </summary>
static DCProdave(){ }
#region <20><><EFBFBD><EFBFBD>w95_s7.dll<6C>е<EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
/// <summary><3E><>PLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <20><>һ<EFBFBD><D2BB>MPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>CPUʱ<55><CAB1><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>Ա<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
/// e.g.һ<><D2BB>MPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU,<2C><><EFBFBD>ǵ<EFBFBD>MPI<50><49>ַ<EFBFBD>ֱ<EFBFBD>Ϊ2<CEAA><32>3<EFBFBD><33><EFBFBD>ۺž<DBBA>Ϊ2<CEAA><32><EFBFBD><EFBFBD><EFBFBD>ܺž<DCBA>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD><C9B0><EFBFBD><EFBFBD>·<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>:
/// byte[,] btr={{2,0,2,0},{3,0,2,0},{0,0,0,0}}; int err=load_tool(1, "s7online",btr);
/// </summary>
/// <param name="nr"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>DOS,WIN3.1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD>,<2C><>WIN95<39><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<31><36></param>
/// <param name="device"><3E><>PLCͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>,һ<><D2BB>ΪS7ONLINE</param>
/// <param name="adr_table"><3E><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>,4<><34>ֵ<EFBFBD>ֱ<EFBFBD>ΪMPI/DP<44><50>ַ,<2C><><EFBFBD><EFBFBD>ֵ=0,<2C>ۺ<EFBFBD>,<2C><><EFBFBD>ܺ<EFBFBD></param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int load_tool(byte nr, string device, byte[,] adr_table);
/// <summary><3E>Ͽ<EFBFBD><CFBF><EFBFBD>PLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>PLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>ռ<EFBFBD><D5BC><><D3B0><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int unload_tool();
/// <summary><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MPI<50><49><EFBFBD>е<EFBFBD><D0B5>ĸ<EFBFBD>CPUͨѶ,load_tool<6F><6C>Ĭ<EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>CPU<50><55><EFBFBD><EFBFBD>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>load_tool<6F>в<EFBFBD><D0B2><EFBFBD>adr_table<6C><65><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ӦƩ<D3A6><C6A9>byte[,] btr={{2,0,2,0},{3,0,2,0},{0,0,0,0}}
/// new_ss(1)<29>򼤻<EFBFBD><F2BCA4BB><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>MPI<50><49>ַΪ2<CEAA><32>PLCͨѶ,<2C><><EFBFBD>Ƶ<EFBFBD>new_ss(2)<29>򼤻<EFBFBD><F2BCA4BB><EFBFBD>MPI<50><49>ַΪ3<CEAA><33>PLCͨѶ,
/// </summary>
/// <param name="no"><3E><><EFBFBD>Ӻ<EFBFBD>,<2C><>Ӧ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>adr_table<6C><65><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>˳<EFBFBD><CBB3></param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MPI<50><49><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3>򷵻ش<F2B7B5BB><D8B4><EFBFBD><EFBFBD><EFBFBD>517</returns>
[DllImport("w95_s7.dll")]
private extern static int new_ss(byte no);
/// <summary><3E><>DB<44>ж<EFBFBD>ȡBYTE<54><45><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WORD<52><44><EFBFBD><EFBFBD>,<2C><>˫BYTE)
/// </summary>
/// <param name="dbno">DB<44><42><EFBFBD><EFBFBD></param>
/// <param name="dwno">DBW<42><57>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>,=0<><30>ʾDBW0,=1<><31>ʾDBW2,<2C><><EFBFBD><EFBFBD>ΪWORD</param>
/// <param name="anzahl"><3E><>ȡ<EFBFBD><C8A1>WORD<52><44><EFBFBD><EFBFBD>(1<><31>WORD==2<><32>BYTE)</param>
/// <param name="buffer"><3E><><EFBFBD><EFBFBD>ֵ,BYTE<54><45>buffer</param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int db_read(int dbno, int dwno, ref int anzahl, byte[] buffer);
/// <summary><3E><>DB<44>ж<EFBFBD>ȡINT<4E><54><EFBFBD><EFBFBD>(DBW:INT16 <20><><EFBFBD><EFBFBD> DBD:INT32),<2C><><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="dbno">DB<44><42><EFBFBD><EFBFBD></param>
/// <param name="dwno">DBW<42><57>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>,0<><30>ʾDBW0,1<><31>ʾDBW2,<2C><><EFBFBD><EFBFBD>ΪWORD</param>
/// <param name="anzahl"><3E><>ȡ<EFBFBD><C8A1>WORD<52><44><EFBFBD><EFBFBD>(1<><31>WORD==2<><32>BYTE) 2:DBW , 4:DBD</param>
/// <param name="buffer"><3E><><EFBFBD><EFBFBD>ֵ,int<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAAE><EFBFBD><EFBFBD>)</param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int db_read(int dbno, int dwno, ref int anzahl, ref int buffer);
/// <summary><3E><>DB<44>ж<EFBFBD>ȡBYTE<54><45><EFBFBD><EFBFBD>(<28>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD>)
/// </summary>
/// <param name="blockno">DB<44><42><EFBFBD><EFBFBD></param>
/// <param name="no">DBB<42><42>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>,0<><30>ʾDBB0,1<><31>ʾDBB1,<2C><><EFBFBD><EFBFBD>ΪBYTE</param>
/// <param name="amount"><3E><>ȡ<EFBFBD><C8A1>BYTE<54><45><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><E2B3A4>,<2C><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>)</param>
/// <param name="buffer"><3E><><EFBFBD><EFBFBD>ֵ,BYTE<54><45>buffer</param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int d_field_read(int blockno, int no, int amount, byte[] buffer);
/// <summary><3E><><EFBFBD><EFBFBD>DB<44><42><EFBFBD><EFBFBD>״̬ 0:<3A><><EFBFBD><EFBFBD> !0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="buffer">buffer[123]!=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DB123</param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int db_buch(ushort[] buffer);
/// <summary><3E><>ȡPLC<4C>е<EFBFBD>M<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="no">ָ<><D6B8>M<EFBFBD>ֽںţ<DABA>Ʃ<EFBFBD><C6A9>Ҫ<EFBFBD><D2AA>ȡMB10<31><30>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>no<6E><6F><EFBFBD><EFBFBD>10</param>
/// <param name="anzahl">ָ<><D6B8><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>Ʃ<EFBFBD><C6A9><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡMB10<31><30>MB14֮<34><D6AE><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Ϊ5</param>
/// <param name="buffer"><3E><><EFBFBD>ػ<EFBFBD>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʮ<EFBFBD><CAAE><EFBFBD>Ƶ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡijһ<C4B3><D2BB><4D><CEBB>״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int m_field_read(int no, int anzahl, byte[] buffer);
/// <summary><3E><>ȡMB<4D><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ״ֵ̬
/// </summary>
/// <param name="mbno"> ָ<><D6B8>M<EFBFBD>ֽں<D6BD></param>
/// <param name="bitno"> ָ<><D6B8>λ<EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>ΧΪ0-7,<2C><><EFBFBD><EFBFBD>ֵ</param>
/// <param name="retwert"> <20><><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE>λΪ1<CEAA><31>=0<><30>ʾ<EFBFBD><CABE>λΪ0</param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int mb_bittest(int mbno, int bitno, ref byte retwert);
/// <summary><3E><>ȡOutputֵ
/// </summary>
/// <param name="no">QB<51><42></param>
/// <param name="anzahl"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>QB<51>ֽ<EFBFBD></param>
/// <param name="buffer"><3E><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>ֵ,ʮ<><CAAE><EFBFBD><EFBFBD></param>
/// <returns></returns>
[DllImport("w95_s7.dll")]
private extern static int a_field_read(int no, int anzahl, byte[] buffer);
/// <summary><3E><>ȡInput<75><74>ֵ
/// </summary>
/// <param name="no">IB<49><42></param>
/// <param name="anzahl"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>IB<49>ֽ<EFBFBD></param>
/// <param name="buffer"><3E><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>ֵ,ʮ<><CAAE><EFBFBD><EFBFBD></param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int e_field_read(int no, int anzahl, byte[] buffer);
/// <summary> <20><>ȡPLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
/// </summary>
/// <param name="buffer"><3E><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>1<EFBFBD><31> 0<><30>ʾRun;1<><31>ʾStop<6F><70><EFBFBD><EFBFBD>Restart</param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
[DllImport("w95_s7.dll")]
private extern static int ag_zustand(ref byte buffer);
#region <20><>PLCд<43><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
//<2F><>λMB<4D><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ״̬,ָ<><D6B8>M<EFBFBD>ֽں<D6BD><><D6B8>λ<EFBFBD>ŷ<EFBFBD>ΧΪ0-7
//[DllImport("w95_s7.dll")] private extern static int mb_resetbit(short mbno, short bitno);
//<2F><>λMB<4D><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ״̬,ָ<><D6B8>M<EFBFBD>ֽں<D6BD><><D6B8>λ<EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>ΧΪ0-7
//[DllImport("w95_s7.dll")] private extern static int mb_setbit(short mbno, short bitno);
// д<><D0B4>Outputֵ,noΪQB<51><42>,anzahlΪ<6C>ж<EFBFBD><D0B6>ٸ<EFBFBD>QB<51>ֽ<EFBFBD><D6BD><EFBFBD>Ҫд<D2AA><D0B4>,bufferΪָ<CEAA><D6B8>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֵ
//[DllImport("w95_s7.dll")] private extern static int a_field_write(int no, int anzahl, byte[] buffer);
/// <summary><3E><>DB<44><42>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="dbno">ָ<><D6B8>DB<44><42><EFBFBD><EFBFBD></param>
/// <param name="dwno">ָ<><D6B8>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>=0<><30>ʾDBW0,=1<><31>ʾDBW2</param>
/// <param name="anzahl">ָ<><D6B8>д<EFBFBD><D0B4><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ٸ<EFBFBD><D9B8><EFBFBD></param>
/// <param name="buffer">д<><D0B4>ֵ</param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
//[DllImport("w95_s7.dll")] private extern static int db_write(int dbno, int dwno, ref int anzahl, ref long buffer);
/// <summary><3E><>PLC<4C>е<EFBFBD>M<EFBFBD>ֽ<EFBFBD>д<EFBFBD><D0B4>ֵ
/// </summary>
/// <param name="no">ָ<><D6B8>M<EFBFBD>ֽںţ<DABA><C5A3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡMB10<31><30>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>no<6E><6F><EFBFBD><EFBFBD>10</param>
/// <param name="anzahl">ָ<><D6B8>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD></param>
/// <param name="buffer"><3E><>PLC<4C><43>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֵ,ʮ<><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
//[DllImport("w95_s7.dll")] private extern static int m_field_write(short no, short anzahl, ref long buffer);
#endregion
#endregion
#region <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>PLC<4C><43>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>,<2C><>w95_s7.dll<6C>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>Ͻ<EFBFBD><CFBD>з<EFBFBD>װ
/// <summary><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
/// </summary>
/// <param name="connNo"><3E><><EFBFBD>Ӻ<EFBFBD>connNoΪ1-4</param>
/// <param name="connParam"><3E><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>,PLCConnParam<61><6D><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><E1B9B9></param>
/// <returns><3E><><EFBFBD><EFBFBD>10<31><30><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>ţ<EFBFBD>0<EFBFBD><30>ʾû<CABE>д<EFBFBD><D0B4><EFBFBD></returns>
public static int Open(byte connNo, PLCConnParam[] connParam)
{
int PLCCPUCnt = connParam.Length;
if (PLCCPUCnt <= 0) //<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
{
return -1;
}
byte[,] btr = new byte[PLCCPUCnt + 1, 4]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>,<2C><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>0<EFBFBD><30>Ϊ<EFBFBD><CEAA><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD>
for (int i = 0; i < connParam.Length; i++)
{
btr[i, 0] = connParam[i].Addres;
btr[i, 1] = 0;
btr[i, 2] = connParam[i].Slot;
btr[i, 3] = connParam[i].Rack;
}
btr[connParam.Length, 0] = 0;
btr[connParam.Length, 1] = 0;
btr[connParam.Length, 2] = 0;
btr[connParam.Length, 3] = 0;
//<2F><><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int errCode = load_tool(connNo, "S7ONLINE", btr);
return errCode;
}
/// <summary><3E>Ͽ<EFBFBD><CFBF><EFBFBD>PLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>PLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱ<D2BB><D6B1>ռ<EFBFBD><D5BC><><D3B0><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
public static int Close()
{
return unload_tool();
}
/// <summary><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><EFBFBD><E8B6A8>MPI<50><49><EFBFBD>е<EFBFBD><D0B5><EFBFBD>һ<EFBFBD><D2BB>CPUͨѶ
/// </summary>
/// <param name="connNO"><3E><>load_tool<6F>еIJ<D0B5><C4B2><EFBFBD>adr_table<6C><65><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>Ӧ</param>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MPI<50><49><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3>򷵻ش<F2B7B5BB><D8B4><EFBFBD><EFBFBD><EFBFBD>517</returns>
public static int ActiveConn(int connNO)
{
return new_ss((byte)connNO);
}
/// <summary><3E><>DB<44><42><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// Ҫ<><D2AA>ȡDB2.DBW6,<2C><>DB<44><42><EFBFBD><EFBFBD>Ϊ2,DBB<42><42>Ϊ6,<2C>ֽڳ<D6BD><DAB3><EFBFBD>Ϊ2
/// Ҫ<><D2AA>ȡDB2.DBD6,<2C><>DB<44><42><EFBFBD><EFBFBD>Ϊ2,DBB<42><42>Ϊ6,<2C>ֽڳ<D6BD><DAB3><EFBFBD>Ϊ4
/// </summary>
/// <param name="DBBlockNO">DB<44><42><EFBFBD><EFBFBD>,<2C><>:DB2</param>
/// <param name="DBBNO">DBB<42><42><EFBFBD><EFBFBD>ʼ<EFBFBD>ֽں<D6BD>,<2C><>DBW2<57><32><EFBFBD><EFBFBD>2<EFBFBD><32>ʼ<EFBFBD><CABC>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WORD(2<><32>BYTE),DBB<42>ű<EFBFBD><C5B1><EFBFBD>Ϊż<CEAA><C5BC></param>
/// <param name="DBByteAmount">Ҫ<><D2AA>ȡ<EFBFBD><C8A1>BYTE<54><45>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC>(<28><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>2<EFBFBD><32>4,<2C><>PLC<4C><43>ֻ<EFBFBD><D6BB>DBW,DBD<42><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)</param>
/// <param name="buffer">INT32<33>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>,<2C><EFBFBD><E6B4A2>ȡ<EFBFBD><C8A1>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns><3E><><EFBFBD><EFBFBD>ֵ 0:<3A>ɹ<EFBFBD> <20><>0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
public static int GetDBInt32Data(int DBBlockNO, int DBBNO, int DBByteAmount, ref int buffer)
{
int DBWNO = DBBNO / 2;
int DBWordAmount = DBByteAmount / 2;
int errCode = db_read(DBBlockNO, DBWNO, ref DBWordAmount, ref buffer);
byte[] bbuf = new byte[4];
GetByteFromInt32(buffer, bbuf, true);
buffer = bbuf[0] * 0x1000000 + bbuf[1] * 0x10000 + bbuf[2] * 0x100 + bbuf[3];
return errCode;
}
/// <summary><3E><>ȡDB<44><42><EFBFBD><EFBFBD>WORD<52><44><EFBFBD><EFBFBD>
/// </summary>
/// <param name="DBBlockNO">DB<44><42><EFBFBD><EFBFBD>,<2C><>:DB2</param>
/// <param name="DBWNO">DBW<42><57><EFBFBD><EFBFBD>ʼ<EFBFBD>ֽں<D6BD>,<2C><>DBW2<57><32><EFBFBD><EFBFBD>2<EFBFBD><32>ʼ<EFBFBD><CABC>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WORD(2<><32>BYTE),DBW<42>ű<EFBFBD><C5B1><EFBFBD>Ϊż<CEAA><C5BC></param>
/// <param name="DBWordAmount">Ҫ<><D2AA>ȡ<EFBFBD><C8A1>WORD<52><44>,<2C><><EFBFBD><EFBFBD>DBW2--DBW5,<2C><>2<EFBFBD><32>WORD(4<><34>BYTE)</param>
/// <param name="buffer">BYTE<54>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>,<2C><EFBFBD><E6B4A2>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns><3E><><EFBFBD><EFBFBD>ֵ 0:<3A>ɹ<EFBFBD> <20><>0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
public static int GetDBWordData(int DBBlockNO , int DBWNO , int DBWordAmount , byte[] buffer)
{
return db_read(DBBlockNO, DBWNO, ref DBWordAmount, buffer);
}
/// <summary><3E><>ȡDB<44><42><EFBFBD><EFBFBD>BYTE<54><45><EFBFBD><EFBFBD>
/// </summary>
/// <param name="DBBlockNO">DB<44><42><EFBFBD><EFBFBD>,<2C><>:DB2</param>
/// <param name="DBBNO">DB<44><42><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ʼ<EFBFBD>ֽ<EFBFBD>,<2C><>DBB2<42><32><EFBFBD><EFBFBD>2<EFBFBD><32>ʼ<EFBFBD><CABC></param>
/// <param name="DBByteAmount">Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>,<2C><><EFBFBD><EFBFBD>DBB2--DBB5,<2C><>4<EFBFBD><34><EFBFBD>ֽ<EFBFBD></param>
/// <param name="buffer">BYTE<54>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>,<2C><EFBFBD><E6B4A2>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="StartIndex"><3E><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB></param>
/// <returns><3E><><EFBFBD><EFBFBD>ֵ 0:<3A>ɹ<EFBFBD> <20><>0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
public static int GetDBByteData(int DBBlockNO, int DBBNO, int DBByteAmount, byte[] buffer, int StartIndex)
{
byte[] bBufTemp = new byte[DBByteAmount];
int errCode=d_field_read(DBBlockNO, DBBNO, DBByteAmount, bBufTemp);
for(int i=0;i<DBByteAmount;i++)
{
buffer[i+StartIndex] = bBufTemp[i] ;
}
return errCode;
}
/// <summary><3E><>M<EFBFBD><4D><EFBFBD><EFBFBD>ȡλ״̬<D7B4><CCAC><EFBFBD><EFBFBD>
/// </summary>
/// <param name="MBlockNO">M<><4D><EFBFBD><EFBFBD>,<2C><>M10</param>
/// <param name="MBitNO">Ҫ<><D2AA>ȡ<EFBFBD><C8A1>λ<EFBFBD><CEBB>,<2C><>M10.2<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>Ϊ2</param>
/// <param name="MBitState">λ״̬, 0:false,1:true</param>
/// <returns>0<><30><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
public static int GetMBitData(int MBlockNO, int MBitNO,ref bool MBitState)
{
int errCode;
if (MBlockNO >= 0 && MBitNO >= 0 && MBitNO <=7 )
{
byte rtn = 0;
errCode = mb_bittest(MBlockNO, MBitNO, ref rtn);
MBitState = (rtn == 0) ? false : true;
return errCode;
}
else
{
return -1; //Խ<><D4BD>,<2C><><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD>ֽ<EFBFBD>
}
}
/// <summary><3E><>M,I,Q<><51><EFBFBD>ж<EFBFBD>ȡ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="blockType">Block<63><6B><EFBFBD><EFBFBD>,<2C><>ö<EFBFBD><C3B6>PLCBlockType<70>ж<EFBFBD><D0B6><EFBFBD>,<2C><>Ҫ<EFBFBD><D2AA>ȡM<C8A1><4D><EFBFBD><EFBFBD>ֵ,<2C><>blockType=PLCBlockType.M</param>
/// <param name="BlockNO"><3E><><EFBFBD><EFBFBD>,<2C><>IB10,MB10...</param>
/// <param name="ByteAmount">Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>,<2C><>IB10--IB14<31><34>5<EFBFBD><35><EFBFBD>ֽ<EFBFBD></param>
/// <param name="bbuf">byte[]<5D><><EFBFBD>͵<EFBFBD>buffer</param>
/// <param name="StartIndex">byte[]<5D><EFBFBD><E6B4A2><EFBFBD><EFBFBD>ʼλ<CABC><CEBB></param>
/// <returns>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
public static int GetMIQByteData(PLCBlockType blockType, int BlockNO, int ByteAmount, byte[] bbuf, int StartIndex)
{
int errCode = 0;
byte[] bBufTemp = new byte[ByteAmount]; //<2F>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ͷŵ<CDB7><C5B5><EFBFBD><EFBFBD><EFBFBD>. C++<2B><><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>"new"<22><><EFBFBD>ƺܽ<C6BA><DCBD><EFBFBD>.
switch (blockType) //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>.
{
case PLCBlockType.M: errCode = m_field_read(BlockNO, ByteAmount, bBufTemp); break;
case PLCBlockType.I : errCode = e_field_read(BlockNO, ByteAmount, bBufTemp); break;
case PLCBlockType.Q: errCode = a_field_read(BlockNO, ByteAmount, bBufTemp); break;
}
for (int i = 0; i < ByteAmount; i++) //<2F><><EFBFBD><EFBFBD>C#<23>ж<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ.
{
bbuf[i + StartIndex] = bBufTemp[i];
}
return errCode;
}
/// <summary><3E><>long<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡbyte<74>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="lbuf">Դ<><D4B4><EFBFBD><EFBFBD>(long<6E><67>)</param>
/// <param name="bbuf"><3E>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Byte<74><65><EFBFBD><EFBFBD></param>
/// <param name="startIndex"><3E><>ʼλ<CABC><CEBB></param>
/// <param name="ByteAmount"><3E><>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD></param>
/// <param name="isBigEndian">long<6E><67>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD>ȡ</param>
public static void GetByteFromInt32(int ibuf, byte[] bbuf , bool isBigEndian)
{
if (isBigEndian) //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ.
{
for (int i = 0; i <=3; i++) //Int32ֻ<32><D6BB>4<EFBFBD><34><EFBFBD>ֽ<EFBFBD>
{
bbuf[i] = (byte)(ibuf & 0x000000ff); //ȡ<><C8A1>λ<EFBFBD>ֽ<EFBFBD>
ibuf >>= 8; //<2F><><EFBFBD><EFBFBD>
}
}
else //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>,<2C><>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ȡ.
{
for (int i = 3; i >= 0; i--)
{
bbuf[i] = (byte)(ibuf & 0x000000ff);
ibuf >>= 8;
}
}
}
/// <summary><3E><>Byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bit<69><74>ֵ(1Byte=8Bit , false:0 , true:1)
/// </summary>
/// <param name="byteData">Դ<><D4B4><EFBFBD><EFBFBD>(Byte<74><65>),<2C><><EFBFBD>е<EFBFBD>8<EFBFBD><38>bitλ,<2C><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>0--7<><37><EFBFBD><EFBFBD></param>
/// <param name="bitArray">bit<69><74><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Byte<74>е<EFBFBD>8<EFBFBD><38>bit<69><74>ֵ,0:false, 1:true</param>
/// <param name="startIndex"><3E><>bit<69><74><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ŵ<EFBFBD><C5B5><EFBFBD>ʼλ<CABC><CEBB></param>
public static void GetBitFromByte(byte byteData, bool[] bitArray, int startIndex)
{
byte[] byteArray = new byte[1];
byteArray[0] = byteData;
System.Collections.BitArray BA = new System.Collections.BitArray(byteArray);
for (int i = 0; i <= 7; i++) //<2F><><EFBFBD><EFBFBD>ȡ8<C8A1><38>λ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
{
bitArray[startIndex + i] = BA.Get(i);
}
}
/// <summary><3E><>Byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ijһλbit<69><74>ֵ(false:0 , true:1)
/// </summary>
/// <param name="byteData">Դ<><D4B4><EFBFBD><EFBFBD>(Byte<74><65>),<2C><><EFBFBD>е<EFBFBD>8<EFBFBD><38>bitλ,<2C><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>0--7<><37><EFBFBD><EFBFBD></param>
/// <param name="bitNo">bitλ<74><CEBB><EFBFBD><EFBFBD>,<2C><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>0--7<><37><EFBFBD><EFBFBD></param>
/// <param name="bitData">bitֵ,<2C><>bool<6F>ͷ<EFBFBD><CDB7><EFBFBD>,false:0 , true:1</param>
public static void GetBitFromByte(byte byteData, int bitNo, ref bool bitData)
{
if (bitNo >= 0 && bitNo <= 7) //λ<>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>0~7֮<37><D6AE>
{
byte[] byteArray = new byte[1];
byteArray[0] = byteData;
System.Collections.BitArray BA = new System.Collections.BitArray(byteArray);
bitData = BA.Get(bitNo);
}
}
/// <summary><3E><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ϣ
/// <20><><EFBFBD><EFBFBD>int errCode=ActiveConn(1); sring errInfo = GetErrInfo(err);
/// </summary>
/// <param name="errCode"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ</returns>
public static string GetErrInfo(int errCode)
{
switch (errCode)
{
case -1: return "User-Defined Error!"; //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Ҫ<EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>!
case 0x0000: return "Success";
case 0x0001: return "Load dll failed";
case 0x00E1: return "User max";
case 0x00E2: return "SCP entry";
case 0x00E7: return "SCP board open";
case 0x00E9: return "No Windows server";
case 0x00EA: return "Protect";
case 0x00CA: return "SCP no resources";
case 0x00CB: return "SCP configuration";
case 0x00CD: return "SCP illegal";
case 0x00CE: return "SCP incorrect parameter";
case 0x00CF: return "SCP open device";
case 0x00D0: return "SCP board";
case 0x00D1: return "SCP software";
case 0x00D2: return "SCP memory";
case 0x00D7: return "SCP no meas";
case 0x00D8: return "SCP user mem";
case 0x00DB: return "SCP timeout";
case 0x00F0: return "SCP db file does not exist";
case 0x00F1: return "SCP no global dos memory";
case 0x00F2: return "SCP send not successful";
case 0x00F3: return "SCP receive not successful";
case 0x00F4: return "SCP no device available";
case 0x00F5: return "SCP illegal subsystem";
case 0x00F6: return "SCP illegal opcode";
case 0x00F7: return "SCP buffer too short";
case 0x00F8: return "SCP buffer1 too short";
case 0x00F9: return "SCP illegal protocol sequence";
case 0x00FA: return "SCP illegal PDU arrived";
case 0x00FB: return "SCP request error";
case 0x00FC: return "SCP no license";
case 0x0101: return "Connection is not established / parameterized";
case 0x010a: return "Negative Acknowledgment received / timeout errors";
case 0x010c: return "Data not available or locked";
case 0x012A: return "No system memory left";
case 0x012E: return "Incorrect parameter";
case 0x0132: return "No storage space in the DPRAM";
case 0x0200: return "xx";
case 0x0201: return "Falsche Schnittstelle angegeben";
case 0x0202: return "Incorrect interface indicated";
case 0x0203: return "Toolbox already installed";
case 0x0204: return "Toolbox with other compounds already installed";
case 0x0205: return "Toolbox is not installed";
case 0x0206: return "Handle can not be set";
case 0x0207: return "Data segment can not be blocked";
case 0x0209: return "Erroneous data field";
case 0x0300: return "Timer init error";
case 0x0301: return "Com init error";
case 0x0302: return "Module is too small, DW does not exist";
case 0x0303: return "Block boundary erschritten, number correct";
case 0x0310: return "Could not find any hardware";
case 0x0311: return "Hardware defective";
case 0x0312: return "Incorrect configuration parameters";
case 0x0313: return "Incorrect baud rate/interrupt vector";
case 0x0314: return "HSA incorrectly parameterized";
case 0x0315: return "Address already assigned";
case 0x0316: return "Device already assigned";
case 0x0317: return "Interrupt not available";
case 0x0318: return "Interrupt occupied";
case 0x0319: return "SAP not occupied";
case 0x031A: return "Could not find any remote station";
case 0x031B: return "syni error";
case 0x031C: return "System error";
case 0x031D: return "Error in buffer size";
case 0x0320: return "DLL/VxD not found";
case 0x0321: return "DLL function error";
case 0x0330: return "Version conflict";
case 0x0331: return "Com config error";
case 0x0332: return "smc timeout";
case 0x0333: return "Com not configured";
case 0x0334: return "Com not available";
case 0x0335: return "Serial drive in use";
case 0x0336: return "No connection";
case 0x0337: return "Job rejected";
case 0x0380: return "Internal error";
case 0x0381: return "Device not in Registry";
case 0x0382: return "L2 driver not in Registry";
case 0x0384: return "L4 driver not in Registry";
case 0x03FF: return "System error";
case 0x4001: return "Connection is not known";
case 0x4002: return "Connection is not established";
case 0x4003: return "Connection is being established";
case 0x4004: return "Connection is collapsed";
case 0x0800: return "Toolbox occupied";
case 0x8001: return "in this mode is not allowed";
case 0x8101: return "Hardware error";
case 0x8103: return "Object Access not allowed";
case 0x8104: return "Context is not supported";
case 0x8105: return "ungtige Address";
case 0x8106: return "Type (data) is not supported";
case 0x8107: return "Type (data) is not consistent";
case 0x810A: return "Object does not exist";
case 0x8301: return "Memory on CPU is not sufficient";
case 0x8404: return "grave error";
case 0x8500: return "Incorrect PDU Size";
case 0x8702: return "Invalid address";
case 0xA0CE: return "User occupied";
case 0xA0CF: return "User does not pick up";
case 0xA0D4: return "Connection not available because modem prevents immediate redial (waiting time before repeat dial not kept to) ";
case 0xA0D5: return "No dial tone";
case 0xD201: return "Syntax error module name";
case 0xD202: return "Syntax error function parameter";
case 0xD203: return "Syntax error Bausteshortyp";
case 0xD204: return "no memory module in eingeketteter";
case 0xD205: return "Object already exists";
case 0xD206: return "Object already exists";
case 0xD207: return "Module available in the EPROM";
case 0xD209: return "Module does not exist";
case 0xD20E: return "no module present";
case 0xD210: return "Block number is too big";
case 0xD241: return "Protection level of function is not sufficient";
case 0xD406: return "Information not available";
case 0xEF01: return "Wrong ID2";
case 0xFFFE: return "unknown error FFFE hex";
case 0xFFFF: return "Timeout error. Interface KVD";
default: return "Unkonw error";
}
}
#endregion
}
}