2012-12-07 9 views
1

Proficy Historian 용 C# User API 래퍼를 사용하여 어떻게 모든 (또는 필터링 된 목록의) 태그 이름을 검색 할 수 있습니까?IHUAPI를 통해 Proficy Historian 태그 이름 검색

캐시를 채우는 메소드 ihuFetchTagCache가 태그 수를 반환하지만이 캐시에 액세스 할 수있는 방법을 찾을 수 없습니다. 지금까지

내 코드 :

string servername = "testServer"; 
int handle; 
ihuErrorCode result; 
result = IHUAPI.ihuConnect(servername, "", "", out handle); 
if (result != ihuErrorCode.OK) 
{//...} 

int count; 
result = IHUAPI.ihuFetchTagCache(handle, txtFilter.Text, out count); 
if (result != ihuErrorCode.OK) 
{//...} 

어떻게 태그 이름 캐시를 읽습니까?

답변

1

실제로 4.5 이상에서 제공되는 새로운 태그 캐시 방법을 사용하는 것이 좋습니다. 내가 사용하는 DLL 가져 오기 정의는 다음과 같습니다. 1

[DllImport("ihuapi.dll", EntryPoint = "[email protected]")] 
public static extern IntPtr CreateTagCacheContext(); 

[DllImport("ihuapi.dll", EntryPoint = "[email protected]")] 
public static extern ErrorCode CloseTagCacheEx2(IntPtr TagCacheContext); 

[DllImport("ihuapi.dll", EntryPoint = "[email protected]")] 
public static extern ErrorCode FetchTagCacheEx2(IntPtr TagCacheContext, int ServerHandle, string TagMask, ref int NumTagsFound); 

[DllImport("ihuapi.dll", EntryPoint = "[email protected]")] 
public static extern ErrorCode GetTagnameCacheIndexEx2(IntPtr TagCacheContext, string Tagname, ref int CacheIndex); 

[DllImport("ihuapi.dll", EntryPoint = "[email protected]")] 
public static extern ErrorCode GetNumericTagPropertyByIndexEx2(IntPtr TagCacheContext, int Index, TagProperty TagProperty, ref double Value); 

[DllImport("ihuapi.dll", EntryPoint = "[email protected]")] 
public static extern ErrorCode GetStringTagPropertyByIndexEx2(IntPtr TagCacheContext, int Index, TagProperty TagProperty, StringBuilder Value, int ValueLength); 

그런 다음 다음과 같은 코드를 사용할 수 있습니다.


1내 코드가 약간 다를 수 있지만 차이는 대부분 사소한해야한다, 그래서 나는 GE가 제공하는 제공하는 DLL 가져 오기 정의를 사용하지 마십시오

IntPtr context = IntPtr.Zero; 
try 
{ 
    context = IHUAPI.CreateTagCacheContext(); 
    if (context != IntPtr.Zero) 
    { 
     int number = 0; 
     ihuErrorCode result = IHUAPI.FetchTagCacheEx2(context, Connection.Handle, mask, ref number); 
     if (result == ihuErrorCode.OK) 
     { 
      for (int i = 0; i < number; i++) 
      { 
       StringBuilder text = new StringBuilder(); 
       IHUAPI.GetStringTagPropertyByIndexEx2(context, i, ihuTagProperties.Tagname, text, 128); 
       Console.WriteLine("Tagname=" + text.ToString()); 
      } 
     } 
    } 
} 
finally 
{ 
    if (context != IntPtr.Zero) 
    { 
     IHUAPI.CloseTagCacheEx2(context); 
    } 
} 
.