封锁C-Struct与双打到C# – 正值错误

封锁C-Struct与双打到C# – 正值错误,第1张

概述第一:我很喜欢编程,所以如果这个问题太愚蠢,我很抱歉.但我已经搜索了5天的解决方案,现在我迷失了,没有希望:/ 我需要通过C#程序控制CNC机床. CNC机器的API是用C编写的* .dll,所以我需要编组所有不同的数据类型.几乎一切都运作良好,但有一个奇怪的问题. 只有负面双打效果很好.积极的是错的.如果我定义y = 1,则X轴移动到它的边界并发生碰撞.边界在y> 500 不同轴的坐标定义为dl 第一:我很喜欢编程,所以如果这个问题太愚蠢,我很抱歉.但我已经搜索了5天的解决方案,现在我迷失了,没有希望:/

我需要通过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-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也没有改变.
调试在c#-struct中显示正确的值,因此问题出现在编组过程中.

有人可以帮我弄这个吗?

谢谢,
Riggo

解决方法 现在一切正常…… Y轴的原点位置在控制单元中没有保存为“0”,就像我想的那样.这是“Y0 = -500”.

所以:

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

对不起,这个问题.

总结

以上是内存溢出为你收集整理的封锁C-Struct与双打到C# – 正值错误全部内容,希望文章能够帮你解决封锁C-Struct与双打到C# – 正值错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存