private void button6_Click(object sender, EventArgs e) { double v_ = 200; // mm/s double a_ = 2000; // mm/s^2 double trigInterval = 3.0; double xc = 125, yc = 160; //扫描圆心 double r = 100; //扫描区域半径 Axis AX = Motion.Axis(X); Axis AY = Motion.Axis(Y); Point2i axes = new Point2i(X, Y); double offset = -0.2; //两通道触发间隔 Point2d pos2d_start = new Point2d(); Point2d pos2d_end = new Point2d(); int err_ = 0; int direction_ = 0; bool use_tirgger_data = false; for (int i = 0; i < 2 * r / trigInterval - 1; i++) { //step0: 计算点位 direction_ = (i % 2 == 0) ? 1 : -1; pos2d_start.y = yc - r + trigInterval * (i + 1); pos2d_start.x = xc - direction_ * Math.Sqrt(r * r - (pos2d_start.y - yc) * (pos2d_start.y - yc)); pos2d_end.x = 2 * xc - pos2d_start.x; pos2d_end.y = pos2d_start.y - 0.3 * direction_; //Y适当错位,模拟斜着运动扫描(这里模拟走一个圆) Console.WriteLine("{0}: ({1}, {2}) -> ({3}, {4})", i, pos2d_start.x, pos2d_start.y, pos2d_end.x, pos2d_end.y); //step1: 运动到起点 //XY移动到起点 AbsMoveOver = AbsMove + MotionDone //这里也可以用 Motion.Axis(X).AbsMove(); if ((err_ = Motion.AbsMoveOver(axes, pos2d_start)) != 0) { MessageBox.Show("Error: " + err_); return; } //step2: 设置触发位置 double triggerPos_ = pos2d_start.x + 0.5 * direction_; //第一个位置和当前位置相距一毫米 //位置列表,绝对位置,单位mm if (use_tirgger_data) { var trigPos0_ = new List <double>(); while ((pos2d_end.x - triggerPos_) * direction_ > 0) { trigPos0_.Add(triggerPos_); //通道0触发光源 triggerPos_ += direction_ * trigInterval; } if ((err_ = AX.TriggerData(trigPos0_, direction_ * offset)) != 0) { MessageBox.Show("Error: " + err_); return; } } else //等间隔触发,绝对位置,单位mm { int triggerCnt_ = (int)((Math.Abs(pos2d_end.x - pos2d_start.x) - 1.0) / trigInterval); //保证最后一个点至少与起点相距0.5mm if ((err_ = AX.TriggerLinear(triggerPos_, direction_ * trigInterval, triggerCnt_, direction_ * offset)) != 0) //触发相机和光源 { MessageBox.Show("Error: " + err_); return; } } //step3: 插补运动 //LineOver = Line+LineDone if ((err_ = Motion.LineOver(axes, pos2d_end, v_, a_)) != 0) { MessageBox.Show("Error: " + err_); return; } //step4: 停止触发并process images if ((err_ = AX.TriggerStop()) != 0) { MessageBox.Show("Error: " + err_); return; } } }