C# 做工控遇到问题,求解答

Hanyu_Li 2018-01-10 03:06:48
点击button之后,只循环一次,就结束了,设断点就能循环,直接执行就不行,我是不是哪里没设置好?原本的目的是走1000的距离,延时300ms,总共走九次,每次就走一次就停了,在点击button就再走一段,求求大神给解决一下!新人求指教!!!
private void button2_Click(object sender, EventArgs e)
{
timer1.Start();
//ushort AxisNum = 2; //插补轴数
//设置起始位置
//LTDMC.dmc_set_position(_CardID, AxisX, 0);
//LTDMC.dmc_set_position(_CardID, AxisY, 0);
for (int i = 0; i < 10; i++)
{
int j = i;
LTDMC.dmc_line_multicoor(_CardID, crd, 2, new ushort[] { AxisX, AxisY }, new Int32[] { xpos[i], xpos[j] }, 1);// 1 绝对位置
int x_pos = LTDMC.dmc_get_position(_CardID, 0);
int y_pos = LTDMC.dmc_get_position(_CardID, 1);
if ((x_pos == xpos[i]) && (y_pos == xpos[j]))
{
Thread.Sleep(300);
}
}


}
...全文
438 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianxj001 2018-01-12
  • 打赏
  • 举报
回复
估计毛病出在这里: if ((x_pos == xpos[i]) && (y_pos == xpos[j])) 你这个应该是位置反馈判断吧。而机械运动到位置实现,是需要时间的。 如果条件不符合,延时就不会进行,实际上,是瞬间完成,表现出来应该是没有延时内部瞬间循环9次。设置断点,循环可以实现也反过来证明这个推测。
_stephen_chow 2018-01-11
  • 打赏
  • 举报
回复
1.你的循环是执行10次。 2.循环里int j=i;没用,虽然没影响,但是看起来很爽。 3.问题所在:进 theadsleep的判断应该取反。 4.另外你还需要考虑如果单次移动耗时超过300毫秒怎么处理。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧