封锁C-Struct与双打到C# – 正值错误
发布时间:2020-12-16 06:53:45 所属栏目:百科 来源:网络整理
导读:第一:我很喜欢编程,所以如果这个问题太愚蠢,我很抱歉.但我已经搜索了5天的解决方案,现在我迷失了,没有希望:/ 我需要通过C#程序控制CNC机床. CNC机器的API是用C编写的* .dll,所以我需要编组所有不同的数据类型.几乎一切都运作良好,但有一个奇怪的问题. 只有
第一:我很喜欢编程,所以如果这个问题太愚蠢,我很抱歉.但我已经搜索了5天的解决方案,现在我迷失了,没有希望:/
我需要通过C#程序控制CNC机床. CNC机器的API是用C编写的* .dll,所以我需要编组所有不同的数据类型.几乎一切都运作良好,但有一个奇怪的问题. 不同轴的坐标定义为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-Import: [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也没有改变. 有人可以帮我弄这个吗? 谢谢, 解决方法
现在一切正常…… Y轴的原点位置在控制单元中没有保存为“0”,就像我想的那样.这是“Y0 = -500”.
所以: _koords.y = (y-Value) - 500; 对不起,这个问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |