2017-06-29 39 views
4

第一:我對編程很感興趣,所以如果這個問題太愚蠢,我很抱歉。但我已經搜索了5天的解決方案,現在我失去了和絕望:/將C-Struct與C#綁定到C# - 正值錯誤

我需要通過C#程序控制CNC機器。 CNC機器的API是用C編寫的* .dll,所以我需要編組所有不同的數據類型。幾乎一切正常,但有一個奇怪的問題。 只有負面的雙打工作得很好。積極的人是錯的。如果我定義y = 1,則X軸移動到它的邊界併發生碰撞。邊界位於y> 500

不同軸的座標被定義爲dll中的結構。

頭:

typedef struct _CNC_CART_DOUBLE 
{ 
    double x,y,z,a,b,c; 
} CNC_CART_DOUBLE; 

C函數:

/* 
* Name : CncMoveTo 
* In  : pos[i] position to move to for axis i, 
*   move[i], if 1 axis i will move, if false no move. 
*   
* Out : - 
* Return : See CNC_RC values 
* Descr : Move joints/motors to given position 
*/ 
CNC_RC EXP2DF __stdcall CncMoveTo(CNC_CART_DOUBLE pos, CNC_CART_BOOL, double velocityFactor); 

所以我創建了一個結構在我的C#-Script爲marschaling:

[StructLayout(LayoutKind.Sequential, Pack = 1)] 
public struct CNC_CART_DOUBLE 
{ 
    public double x; 
    public double y; 
    public double z; 
    public double a; 
    public double b; 
    public double c; 
} 

的dll導入:

[DllImport("cncapi.dll", CallingConvention = CallingConvention.StdCall)]) 
public static extern void CncMoveTo(CNC_Vars.CNC_CART_DOUBLE pos, CNC_Vars.CNC_CART_BOOL achse, double velocityFactor); 

和測試:

private void btn_MoveTo100_Click(object sender, RoutedEventArgs e) 
    { 
     CNC_Vars.CNC_CART_BOOL _achsenAn = new CNC_Vars.CNC_CART_BOOL(); 
     _achsenAn.x = 1; 
     _achsenAn.y = 1; 
     _achsenAn.z = 1; 
     _achsenAn.a = 0; 
     _achsenAn.b = 0; 
     _achsenAn.c = 0; 

     CNC_Vars.CNC_CART_DOUBLE _koords = new CNC_Vars.CNC_CART_DOUBLE(); // Koordinatenachsen beachten--> X=negativ, Y=Positiv, Z=Negativ 
     _koords.x = -100.0; 
     _koords.y = 1.0; 
     _koords.z = -100.0; 
     _koords.a = 0; 
     _koords.b = 0; 
     _koords.c = 0; 

     double velocityfactor = 0.5; 

     CNC_Methods.CncMoveTo(_koords, _achsenAn, velocityfactor); 
    } 

從來就試圖定義雙打爲64位浮動數(通過的MarshalAs ...一些R8),但結果是一樣的。不同的CallingConventions也沒有改變。 調試在c#-struct中顯示正確的值,所以問題在編組過程中的某處。

有人可以幫助我嗎?

謝謝 Riggo

回答

0

現在一切工作正常... Y軸的家庭位置正好isn't在控制單元保存爲「0」,就像我想。這是「Y0 = -500」。

所以:

_koords.y = (y-Value) - 500; 

很抱歉的問題。