using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace CCDCount.DLL.Inovance { public static class IncvanceEip { public enum ERROR_NO : int { ERR_EIP_STOPED = -2,//协议栈未开启 OTHER_ERROR = -1, SUCCESS = 0, ERRI_INVALID_CONNECTION_INSTANCE_SPECIFIED = 1,//连接的实例ID与已有的ID重复或超过最大值 ERRI_CONN_CONFIG_FAILED_INVALID_NETWORK_PATH,//连接的网络路径格式错误,无法检测出来目标IP离线等错误 ERRI_CONNECTION_COUNT_LIMIT_REACHED,//达到最大连接数量 ERRI_OUT_OF_MEMORY,//内存溢出,缓冲区已满 ERRR_CONN_CONFIG_FAILED_INVALID_NETWORK_PATH, //连接的网络地址无效 ERRR_CONN_CONFIG_FAILED_NO_RESPONSE, //连接无响应 ERRR_CONN_CONFIG_FAILED_ERROR_RESPONSE,//连接响应错误 ERRR_INVALID_DESTINATION, //目标标签不存在 ERRR_TAGNAME_TOO_LONG, //标签名超过255字节 ERRR_REQUEST_DATA_TOO_LARGE, //请求数据超限 ERRR_CONN_CONNECTION_TIMED_OUT, //活动连接响应超时,请检查目标IP是否离线 ERRR_TAGNAME_CONVERT_FAILED, //标签名解析错误 ERRR_WRITE_DATASIZE_UNCONSISTENT, //数据长度与标签实际长度不一致 ERRR_SCAN_ERROR, //扫描标签信息失败 }; public enum TAG_TYPE : int { TAG_TYPE_UNDEFINE = -1, TAG_TYPE_BOOL = 0xC1, //新增 TAG_TYPE_SINT = 0xC2, TAG_TYPE_INT = 0xC3, TAG_TYPE_DINT = 0xC4, TAG_TYPE_LINT = 0xC5, TAG_TYPE_USINT = 0xC6, TAG_TYPE_UINT = 0xC7, TAG_TYPE_UDINT = 0xC8, TAG_TYPE_ULINT = 0xC9, TAG_TYPE_REAL = 0xCA, TAG_TYPE_LREAL = 0xCB, TAG_TYPE_STRING = 0xD0, //新增 TAG_TYPE_BYTE = 0xD1, TAG_TYPE_WORD = 0xD2, TAG_TYPE_DWORD = 0xD3, TAG_TYPE_LWORD = 0xD4, TAG_TYPE_STRUCT = 0xA2, //新增 TAG_TYPE_ARRAY = 0xA3 }; public enum EtIPConnectionState : int { ConnectionNonExistent = 0x0, //该实例未有连接 ConnectionConfiguring = 0x1, //连接正在打开过程中 ConnectionEstablished = 0x3, //连接已成功建立并在活动中 ConnectionTimedOut = 0x4, //连接超时 ConnectionClosing = 0x6 //连接正在关闭中 }; public const uint INVALID_MEMBER = 0xffffffff; //Member is not valid flag should be used when no member should be specified in the UCMM public struct tagTagReadData { public string pName; public int nElementCount; public int nArrayPos; }; public struct tagTagReadDataBase { public string pName; public int nElementCount; }; public struct tagTagRetValue { public IntPtr pData; public TAG_TYPE pType; public int nDataLength; }; [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] public struct tagTagWriteData { public string pName; public IntPtr pData; public TAG_TYPE pType; public int nArrayPos; public int nDataLength; public int nElementCount; }; public struct tagTagWriteDataBase { public string pName; public IntPtr pData; public TAG_TYPE pType; public int nDataLength; public int nElementCount; }; [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern void EipStart(); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern void EipStop(); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipOpenConnection(string ipAddress, IntPtr instanceID); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipCloseConnection(int nID); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipReadTag(int instanceID, string tagName, IntPtr type, byte[] dest, int dataLength, ushort elementCount = 1, uint nPos = INVALID_MEMBER); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipWriteTag(int instanceID, string tagName, int type, byte[] source, int dataLength, ushort elementCount = 1, uint nPos = INVALID_MEMBER/*, uint strLen = 0*/); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipGetConnectionState(int nID); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern bool EipStartExt(string ipAddress, uint nPort = 0); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipReadTagList(int instanceID, int nNumOfTags, tagTagReadData[] pTagList, ref tagTagRetValue pdest); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern ERROR_NO EipWriteTagList(int instanceID, int nNumOfTags, tagTagWriteData[] pTagWritenData); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern bool DeleteTagListStru(ref tagTagRetValue pRetValue, int nNumOfTags); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipReadTagExt(int instanceID, string tagName, IntPtr type, byte[] dest, int dataLength, ushort elementCount = 1); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipWriteTagExt(int instanceID, string tagName, int type, byte[] source, int dataLength, ushort elementCount = 1); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipReadTagListExt(int instanceID, int nNumOfTags, tagTagReadDataBase[] pTagList, ref tagTagRetValue pdest, bool bScan = false); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern ERROR_NO EipWriteTagListExt(int instanceID, int nNumOfTags, tagTagWriteDataBase[] pTagWritenData, bool bScan = false); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern ERROR_NO EipReadTagExt2(int iInstanceID, tagTagReadDataBase[] pTagList, ref tagTagRetValue pDest); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern ERROR_NO EipWriteTagExt2(int iInstanceID, tagTagWriteDataBase[] pTagWritenData); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern void ResetTagInfo(); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern ERROR_NO EipReadTagRaw(int iInstanceID, tagTagReadDataBase[] pTagList, ref tagTagRetValue pDest); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern ERROR_NO EipWriteTagRaw(int iInstanceID, tagTagWriteDataBase[] pTagWritenData); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int EipReadTagListRaw(int instanceID, int nNumOfTags, tagTagReadDataBase[] pTagList, ref tagTagRetValue pdest); [DllImport("EipTagSimple.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern ERROR_NO EipWriteTagListRaw(int instanceID, int nNumOfTags, tagTagWriteDataBase[] pTagWritenData); } }