首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 呼叫 Prodave DLL 實戰(一):LoadConnection_ex6 共用體轉換與結構體對應

     編輯:關於C語言

嚴格說不屬 OPC 範疇。起因是另一專案 PLC 高手說 OPC 慢,用 Prodave。裝好 Prodave 看英文資料,雖英文不好但這裡很簡單。上網查資料,感謝幾位朋友幫忙,讓我對 C# 與 C++ 資料結構有更深認識,也學會用 DllImport。開頭說明:Prodave 是西門子通訊方式,即使我提供 Prodave6.dll,未註冊也無用,請用西門子安裝程式。別問哪裡下載 dll 或為何報錯未註冊。

(1)第一個函數:LoadConnection_ex6

說明書描述如下:

LoadConnection_ex6
int LoadConnection_ex6(int ConNr, char* pAccessPoint, int ConTableLen, CON_TABLE_TYPE* pConTable);
Parameters:
ConNr [in] 連線號碼 (max 64 connections)
pAccessPoint [in] 驅動程式存取點, e.g. "S7ONLINE"
ConTableLen [in] 使用者提供的連線表長度 (bytes)
pConTable [in] 連線使用者位址清單指標; 'Adr==0' 為結束標記

#pragma pack(1)
typedef union {
    unsigned char Mpi;        // MPI/PB station address (2)
    unsigned char Ip[4];      // IP address (192.168.0.1)
    unsigned char Mac[6];     // Mac address (08-00-06-01-AA-BB)
} CON_ADR_TYPE;
typedef struct {
    CON_ADR_TYPE Adr;         // connection address
    unsigned char AdrType;    // 1=MPI/PB, 2=IP, 3=Mac
    unsigned char SlotNr;     // Slot number
    unsigned char RackNr;     // Rack number
} CON_TABLE_TYPE;
#pragma pack(1)

其他轉換網上都有,難點在於 union 共用體,C# 沒有此概念。初參考網路資料,嘗試:

[StructLayout(LayoutKind.Explicit)]
struct S1 { [FieldOffset(0)] int a; [FieldOffset(0)] int b; }
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved