CNC_RDAXISDATA from within the Focas library | POSITION I want to pull this function using the ready-made function below, but I am getting an error in the byte part, can you help?
Absolute position, machine position, relative position, distance to go,
of all axes are got and displayed.
class example
{
public void sample()
{
Focas1.ODBAXDT_data pos = new Focas1.ODBAXDT_data();
short[] types = { 0, 1, 2, 3 };
short len = Focas1.MAX_AXIS;
byte[] bytes = new byte[Marshal.SizeOf(pos) * 4 * Focas1.MAX_AXIS];
IntPtr ptrWork = Marshal.AllocCoTaskMem(Marshal.SizeOf(pos));
short ret = Focas1.cnc_rdaxisdata(h, 1, types, 4, ref len, bytes);
if (ret == Focas1.EW_OK)
{
int i;
Console.WriteLine(“ABSOLUTE:”);
for (i = 0 * Focas1.MAX_AXIS; i < 0 * Focas1.MAX_AXIS + len; i++)
{
Marshal.Copy(bytes, i * Marshal.SizeOf(pos), ptrWork, Marshal.SizeOf(pos));
Marshal.PtrToStructure(ptrWork, pos);
Console.WriteLine("{0} = {1}", pos.name, pos.data);
}
Console.WriteLine("MACHINE:");
for (i = 1 * Focas1.MAX_AXIS; i < 1 * Focas1.MAX_AXIS + len; i++)
{
Marshal.Copy(bytes, i * Marshal.SizeOf(pos), ptrWork, Marshal.SizeOf(pos));
Marshal.PtrToStructure(ptrWork, pos);
Console.WriteLine("{0} = {1}", pos.name, pos.data);
}
Console.WriteLine("RELATIVE:");
for (i = 2 * Focas1.MAX_AXIS; i < 2 * Focas1.MAX_AXIS + len; i++)
{
Marshal.Copy(bytes, i * Marshal.SizeOf(pos), ptrWork, Marshal.SizeOf(pos));
Marshal.PtrToStructure(ptrWork, pos);
Console.WriteLine("{0} = {1}", pos.name, pos.data);
}
Console.WriteLine("DISTANCE TO GO:");
for (i = 3 * Focas1.MAX_AXIS; i < 3 * Focas1.MAX_AXIS + len; i++)
{
Marshal.Copy(bytes, i * Marshal.SizeOf(pos), ptrWork, Marshal.SizeOf(pos));
Marshal.PtrToStructure(ptrWork, pos);
Console.WriteLine("{0} = {1}", pos.name, pos.data);
}
}
Marshal.FreeCoTaskMem(ptrWork);
}
}