注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控博客苑 -- 运动控制系统 -- 多线程与控制卡编程

中国工控网搜索:

钟天玉先生

     学历:大学本科
     职称:工程师
     年龄:41岁
       新闻信息(7/2)
       工作图片(0)
       技术论文(2/7)
       交流论坛(19/20)
       留言信箱(4)
       浏览人次:16379
       给我发消息
 我的新闻推荐 更多..
发表人:zhong2010 发表时间:2010/5/9 21:04:00

 

发表新论题

 本栏论题: 多线程与控制卡编程  [10488]

    多线程与控制卡编程
   
    多线程编程一直是让鄙人不愿提起的伤心往事。
   
    需要太多的耐心,和足够的编程基本功及对操作系统的了解。在运动控制编程中,有许多骨灰级编程高手,常对此故作深沉,一般会这样回答:
    “呵呵,多线程编程,好哇,不错…”
    要是你再问他自己用不用多线程编程方法去作运动控制软件,他会这样说:
    “是啊,不过,好像用不着吧!”
   
    若有幸得到他的耐心指导,则省下许多为多线程付出的痛苦。我何尝不曾经历…
   
    当然,多线程又不是绝症,当然有解决方法。故在您真的想动手之前听听下面的经验之谈,或许有参考作用。
   
    每一个进程都含有一个主线程,若再开辟一个线程作某些事情,则至少为两个或两个以上的线程在作业。
    下面引用名家言-----Gevorg Ter-Saakov(呵呵,是老外,我不认识的)。
   
    在多线程环境中存在一个潜在问题:就是创建多线程应用程序时,有一个意外的优化问题,会导致你的程序有不可预期的行为。
    如果你定义了一些可以被两个或两个以上线程访问的变量,则必须使用关键字volatile。否则,如果一个线程更改了变量,第二个线程不能注意到该变化,因为变量被优化,编译器可能使用一个CPU寄存器。
    一般情况下,在调式模式下不会发生问题,在发行模式下,就可能导致行为不可预期。
   
    根据以上的思想,回过头来看看控制卡的编程。
    一般控制卡的操作都含有一套动态库,动态库内部定义的变量对于多线程的访问就存在上述问题,而绝大部分动态库在发布版中,都不会加上volatile关键字。以下面的形式为例:
   
    void GoToPoistion( long nPulse )//指定移动绝对位置
    {
    d3000_start_t_move( XCH, nPulse-d3000_get_command_pos(0), speed );
    }
   
    d3000_start_t_move为DMC3000控制卡的相对移动函数
    d3000_get_command_pos为DMC3000控制卡读取指令位置函数。
   
    当脉冲距离发出时,客户往往需要动态的以图形方式显示当前位置,或者直接用文字显示出来,若此实现在另一个多线程内是这样的:
    char string[0x100];
    sprintf( string, “Xposition=%ld”, d3000_get_command_pos(0)) ;
   
    GetDlgItem( IDC_STATIC_MSG )->SetWindowText( string );//显示到屏幕上
   
    由此可见,d3000_get_command_pos在两个线程当中都被调用,它内部则会访问同一变量。故,在一定速度频率下,或某一特定环境下,读取出来的脉冲计数不可预期,显示出来的图形或坐标位置也将出错。
   
    故,本人在《DMC3000控制卡的多任务编程》,对位置的读取采用较为谨慎的态度。
   
    多线程编程的同步问题也较为复杂,一时难以言尽,大凡以高手的见地,最好以简单的方式作稳定的事情,有兴趣的朋友不妨阅读一下DoEvents的实现还来得有效率一些。
   
   

 

以下是关于《多线程与控制卡编程》论题的回复(共4篇)

回复人:zhfxdm 

 回复时间:2010/6/1 21:10:00

    学习了

回复人:sun751223 

 回复时间:2011/3/8 11:11:00

    水电费

回复人:sun751223 

 回复时间:2011/3/8 11:32:00

    JKL

回复人:lq12qq 

 回复时间:2020/9/2 0:03:00

    很棒棒棒棒棒

如果要回复本栏论题,请首先登陆网站

·如果你已经是中国工控网www.chinakong.com成员,请直接登录 。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码
 
     相关博客新闻:
     相关技术论文:

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳