请教B140的C#编程问题 点击:358 | 回复:4



zlz123

    
  • 精华:0帖
  • 求助:6帖
  • 帖子:6帖 | 10回
  • 年度积分:0
  • 历史总积分:98
  • 注册:2012年10月31日
发表于:2013-03-29 22:25:01
楼主

请教诸位前辈,在对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#程序里面。




刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2013-04-01 10:37:50
1楼

建议用指令 MG_BGA 来反馈当前的状态(运动或停止)

 

另外,你用的这一串指令可能使用中会有问题。

ST是停止指令,如果A轴在运动,收到这个指令之后,会开始减速停止。但是您后面跟着的指令有的是要求电机已经停住之后才能执行的,否则可能产生错误。

 

如果您希望无论电机当前是否已经停下来,都立即响应新的位置指令,可以参考手册中的“位置跟踪”模式(PT指令)。不过,在这种模式下,默认电机永远在运动中,用指令 MG_BGA 来反馈当前的状态是没有意义的。

 

zlz123

  • 精华:0帖
  • 求助:6帖
  • 帖子:6帖 | 10回
  • 年度积分:0
  • 历史总积分:98
  • 注册:2012年10月31日
发表于:2013-04-01 11:52:36
2楼

回复内容:

对: 刘岩利 建议用指令 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软件控制电机运动的时候,到达限位开关能够自动停下来,但是用自己编的软件连接控制器之后,电机运动到达限位开关后没有任何反应,请问我是不是需要在自己的软件中做什么设置或者编写响应的程序啊?

麻烦刘工了

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:17帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2013-04-01 16:11:03
3楼

1、我对C#不熟,不能给您什么建议。如果是VB,可以使用DOEVENTS指令

 

2、不可以,这个省不掉。

 

3、让电机在有相应的限位信号时停下来,不需要任何设置。希望电机在有相应的限位信号时不停下来,到是需要特别设置。如果有限位信号电机不停,建议确认是不是与电机运动状态一致的限位,比如,A轴向前运动时,如果A轴反向限位有信号,或者B轴某个限位有信号,确实不会有什么反应。再有,检查控制器是否真的收到了限位信号。

zlz123

  • 精华:0帖
  • 求助:6帖
  • 帖子:6帖 | 10回
  • 年度积分:0
  • 历史总积分:98
  • 注册:2012年10月31日
发表于:2013-04-01 18:43:57
4楼

回复内容:

对: 刘岩利 1、我对C#不熟,不能给您什么建议。如果是VB,可以使... 内容的回复!


好的,我再试验一下,谢谢刘工了。


热门招聘
相关主题

官方公众号

智造工程师