请教诸位前辈,在对B140做C#编程时,例如发送以下指令:
int pr = Convert.ToInt32(textBox1.Text) * 1000;
String commandStr = "ST;SHA;PRA=" + pr.ToString() + ";SPA=50000;ACA=50000;DCA=50000;BGA";
try
{
textBox5.Text = g.command(commandStr, "\r", ":", true);
}
catch (System.Runtime.InteropServices.COMException ex)
{
textBox5.Text = textBox5.Text + ex.Message.Trim() + "\r\n";
}
我要通过调用库中的哪个函数以及相应的二字节指令才能把运动执行完毕的信息传递到C#程序里面。
回复内容:
对: 刘岩利 建议用指令 MG_BGA 来反馈当前的状态(运动或停止... 内容的回复!
您好刘工,我还有三个问题想请教您。
1、我在程序中使用了以下函数:
/**********************************************************************
函数名:XaxisTest(String x)
描述: X轴电机测试使用,窗口输入值单位为毫米,
为该轴移动的距离,符号为移动方向
参数: String x(移动距离),允许正负量
返回值:返回值为一个double型变量或字符串变量
bg=1;测试完成后电机停止
bg=2;到达左限位后停止
bg=3;到达右限位后停止
bg=6;通过急停输入停止
"Error"表示程序执行过程中出错。
版本: 2013年3月31日
*********************************************************************/
public static String XaxisTest(String x)
{
int prX = Convert.ToInt32(x ) * 1000;
String commandStr = "ST;SHA;PRA=" + prX.ToString() + ";SPA=50000;ACA=50000;DCA=50000;BGA";
try
{
g.command(commandStr, "\r", ":", true);
double bg = 0;
while (true)
{
bg = g.commandValue("SCA");
if (bg == 1 || bg == 6 || bg == 2 || bg == 3)
break;
}
return bg.ToString();
}
catch
{
return "Error";
}
}
在里面使用了一个while循环来不停地使用g.commandValue("SCA");函数来判断电机是否正常停止,正常停止后程序会进行下一步动作。但是这样做的不好之处是在电机停止之前,程序会一直停留在这个循环中,会造成UI假死,停止的"ST"指令也发送不进去。请问刘工有没有更好的办法解决?
2、关于g.command(commandStr, "\r", ":", true);函数,它的返回值我能不能要冒号这样的话我发送一下指令:String commandStr = "SHA;PRA=" + prX.ToString() + ";SPA=50000;ACA=50000;DCA=50000;BGA;AMA;MG_BGA";就可以判断运动是否完成。还是我必须在C#程序里去做冒号和”MG_BGA“返回值得数据分离啊?
3、我在使用GalilTools软件控制电机运动的时候,到达限位开关能够自动停下来,但是用自己编的软件连接控制器之后,电机运动到达限位开关后没有任何反应,请问我是不是需要在自己的软件中做什么设置或者编写响应的程序啊?
麻烦刘工了