Beispiel #1
0
        private void buttonDeploy_Click(object sender, EventArgs e)
        {
            int p1 = Int32.Parse(textP1.Text);
            int p2 = Int32.Parse(textP2.Text);
            int p3 = Int32.Parse(textP3.Text);

            //deploy 後要等待 deployed|ok 訊息回傳後才能執行 pm_run(botnana, program);
            bot.ClearProgram();
            bot.AddProgramLine("pp 1 1 op-mode!");
            bot.AddProgramLine("until-no-requests");
            //program_line_dll(program, " begin -1 while");    // 如果要p1->p2->p3->p1...運動,就移除此行註解
            bot.AddProgramLine(p1.ToString() + " 1 1 target-p!");
            bot.AddProgramLine(" 1 1 go 1 1 until-target-reached");
            bot.AddProgramLine(p2.ToString() + " 1 1 target-p!");
            bot.AddProgramLine(" 1 1 go 1 1 until-target-reached");
            bot.AddProgramLine(p3.ToString() + " 1 1 target-p!");
            bot.AddProgramLine(" 1 1 go 1 1 until-target-reached");
            //program_line_dll(program, " repeat");           // 如果要p1->p2->p3->p1...運動,就移除此行註解
            bot.EvaluateScript("-work marker -work");          // 清除先前定義的program
            bot.DeployProgram();
            buttonPMAbort.Enabled = true;
            buttonRun.Enabled     = true;
        }
Beispiel #2
0
        // 送出 NC 程式到 Botnana Control
        private void btnSend_Click(object sender, EventArgs e)
        {
            if (motionState == 3)
            {
                new Thread(() => System.Windows.Forms.MessageBox.Show("Motion in Machining !!")).Start();
            }
            else if (ncSuspended == 1)
            {
                new Thread(() => System.Windows.Forms.MessageBox.Show("Machining Feed Hold!!")).Start();
            }
            else if (hasProgram)
            {
                new Thread(() => System.Windows.Forms.MessageBox.Show("Has program !!")).Start();
            }
            else
            {
                //deploy 後要等待 deployed|ok 訊息回傳後才能執行 pm_run(botnana, program);
                bot.ClearProgram();

                // 判斷 G92
                if (ncProgram[2, 0].Value == null || ncProgram[3, 0].Value == null || ncProgram[4, 0].Value == null)
                {
                    new Thread(() => System.Windows.Forms.MessageBox.Show("Invalid G92")).Start();
                }
                else
                {
                    double[] positions      = new double[3];
                    double[] next_positions = new double[3];
                    double   feedrate       = 0.015;
                    positions[0] = double.Parse(ncProgram[2, 0].Value.ToString());
                    positions[1] = double.Parse(ncProgram[3, 0].Value.ToString());
                    positions[2] = double.Parse(ncProgram[4, 0].Value.ToString());

                    // 清除先前定義的program
                    bot.EvaluateScript("-nc marker -nc");

                    // 切換到 Group 1,清除先前路徑
                    bot.AddProgramLine("1 group! 0path ");

                    // 設定 path id 與 mode
                    bot.AddProgramLine("1 path-id! 92 path-mode!");

                    // G92 對應的指令
                    bot.AddProgramLine(positions[0].ToString("F5") + "e mm " + positions[1].ToString("F5") + "e mm " + positions[2].ToString("F5") + "e mm move3d");

                    for (int i = 1; i < 10; i++)
                    {
                        // 從表格取得目標位置
                        for (int j = 0; j < 3; j++)
                        {
                            next_positions[j] = positions[j];

                            if (ncProgram[2 + j, i].Value != null)
                            {
                                next_positions[j] = double.Parse(ncProgram[2 + j, i].Value.ToString());
                            }
                        }

                        // 從表格取得 feedrate
                        if (ncProgram[5, i].Value != null)
                        {
                            feedrate = double.Parse(ncProgram[5, i].Value.ToString());
                            bot.AddProgramLine("1 group! " + feedrate.ToString("F2") + "e mm/min feedrate!");
                        }

                        // 如果是新的目標位置,就插入直線路徑
                        // 如果需要圓弧就要使用 `helix3d` 指令
                        if (next_positions[0] != positions[0] ||
                            next_positions[1] != positions[1] ||
                            next_positions[2] != positions[2])
                        {
                            // 取得路徑上的運動模式 (例如:加工或是非加工)
                            int mode = Int32.Parse(ncProgram[1, i].Value.ToString());
                            positions[0] = next_positions[0];
                            positions[1] = next_positions[1];
                            positions[2] = next_positions[2];

                            bot.AddProgramLine("1 group! ");
                            // 設定 path id and mode
                            bot.AddProgramLine(i.ToString() + @" path-id! " + mode.ToString() + @" path-mode!");
                            // 插入直線路徑
                            bot.AddProgramLine(positions[0].ToString("F5") + "e mm " + positions[1].ToString("F5") + "e mm " + positions[2].ToString("F5") + "e mm line3d");
                        }
                    }

                    // 等待 Group 1 走到路徑終點
                    bot.AddProgramLine("begin 1 group! gend? not while pause repeat");
                    // 通知 machining state NC 程式執行完畢
                    bot.AddProgramLine("true machining-finished !");

                    // 送到 NC Task 編譯
                    bot.DeployProgram();
                }
            }
        }