在VS2008下用MFC编程调用Galil1.dll,debug时提示异常 点击:1653 | 回复:11



shijig2003

    
  • 精华:0帖
  • 求助:2帖
  • 帖子:3帖 | 13回
  • 年度积分:0
  • 历史总积分:87
  • 注册:2008年7月01日
发表于:2012-06-19 22:31:01
楼主
求助帖5分-已结帖

使用DMC-B140M卡通过网络连接,在VS2008下用MFC编程调用Galil1.dll,dubeg时提示异常;信息如下“Microsoft C++ 异常: 内存位置 0x0012d8a0 处的 std::basic_string<char,std::char_traits<char>,std::allocator<char> >。”Release时没有异常。不管是debug还是release程序都可以运行,单是Debug时不太稳定,连接运动卡时有时连上有时连不上。就是不明白这个异常时怎么一个原因。请大家给个意见。还有通过PC网络透过Galil1.dll向运动卡发送指令,偶尔会出现返回错误,不知道为什么?是不是连续发送指令太快了。两个指令间没有时间延迟,处理不过来?还是什么的?望指教!



楼主最近还看过



竹子

  • 精华:0帖
  • 求助:14帖
  • 帖子:25帖 | 606回
  • 年度积分:0
  • 历史总积分:2157
  • 注册:2009年11月26日
发表于:2012-06-20 16:01:24
1楼

我想还是你的内部代码有问题吧?

竹子

  • 精华:0帖
  • 求助:14帖
  • 帖子:25帖 | 606回
  • 年度积分:0
  • 历史总积分:2157
  • 注册:2009年11月26日
发表于:2012-06-20 16:04:05
2楼
c++异常报警呀?估计是数据类型选错了.

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:20帖 | 8248回
  • 年度积分:0
  • 历史总积分:28866
  • 注册:2005年3月09日
发表于:2012-06-21 09:38:50
3楼

报歉,没有及时上网。

您用的是Galil哪个版本的API库?返回的是什么错误?

shijig2003

  • 精华:0帖
  • 求助:2帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:87
  • 注册:2008年7月01日
发表于:2012-06-25 17:33:11
4楼

API库Galil1.dll版本1.6.0.460

Debug提示异常Microsoft C++ 异常: 内存位置 0x0012d8a0 处的 std::basic_string<char,std::char_traits<char>,std::allocator<char> >。

我认为是std::string不支持Unicode 字符集,我改用多字符集也不行。

我用Galil自带的Hello.cpp也是同样的问题;我始终认为是std::string和VS2008兼容性有问题,但不知道有什么办法解决。

shijig2003

  • 精华:0帖
  • 求助:2帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:87
  • 注册:2008年7月01日
发表于:2012-06-25 18:18:59
5楼
我找到了问题点,只有在 Galil g("192.168.1.2")或Galil g("COM1 19200");这样的语句才会异常出现。而且是连接Galil卡失败才会有。也就是说Galil g("COM1 19200");时没有在COM1口接Galil卡就会出现异常提示。现在另一个问题是,在不同的线程中同时用g.command("**")发送指令,就有一个指令返回错误。有没有办法避免这种错误呢?

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:20帖 | 8248回
  • 年度积分:0
  • 历史总积分:28866
  • 注册:2005年3月09日
发表于:2012-06-26 10:13:50
6楼

现在另一个问题是,在不同的线程中同时用g.command("**")发送指令,就有一个指令返回错误。有没有办法避免这种错误呢?

您用的是GALILTOOLS么?能说明具体是什么错误么?

shijig2003

  • 精华:0帖
  • 求助:2帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:87
  • 注册:2008年7月01日
发表于:2012-06-27 09:13:07
7楼

我用的是MFC编程调用Galil1.dll;Galil1.dll是GalilTools-1.6.0.460-Win-x86.exe安装后产生的库文件;不同的线程中同时用g.command("**")有一个g.command("**")会返回“?”比如一个线程发送g.command("_DEA")指令返回A轴编码脉冲位置。同时另一个线程也发送g.command("_DEB")应该返回B轴编码脉冲位置,结果返回的却是“?”。

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:20帖 | 8248回
  • 年度积分:0
  • 历史总积分:28866
  • 注册:2005年3月09日
发表于:2012-06-27 16:35:51
8楼

如果您要反馈编码器位置,建议您用指令“TPA”和“TPB”试一下。

返回“?”应该是指令本身的问题。早期的GALIL的库函数(DMCWIN)如果要在多线程中使用,需要特别的设置,否则会出错,而GalilTools应该已经没有这样的问题了。

 

竹石

  • 精华:0帖
  • 求助:0帖
  • 帖子:59帖 | 306回
  • 年度积分:0
  • 历史总积分:1036
  • 注册:2003年9月13日
发表于:2012-06-27 18:10:46
9楼
引用 刘岩利 的回复内容: 如果您要反馈编码器位置,建议您用指令“TPA”和“TPB”试一下。返回“?”应该是指令本身的问题。早期的GALIL的库函数(DMCWIN)如果要在多线程中使用,需要特别的设置,否则会出错,而GalilTools应该已经没有这样的问题了。 


这个需要怎样的特别设置?

我一直是在2个不同的线程中,打开2个不同的端口,各自发各自的指令。

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:20帖 | 8248回
  • 年度积分:0
  • 历史总积分:28866
  • 注册:2005年3月09日
发表于:2012-06-29 06:01:12
10楼

如果是打开两个端口,那是没问题的

 

shijig2003

  • 精华:0帖
  • 求助:2帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:87
  • 注册:2008年7月01日
发表于:2012-07-05 22:48:46
11楼

算了,没有合适的答案。


热门招聘
相关主题

官方公众号

智造工程师