中国人的z893要与德国人的CAN一较高低之八 98me所使用的[软猫]篇之2[黑猫] 点击:1234 | 回复:3



米d.

    
  • 精华:3帖
  • 求助:0帖
  • 帖子:8帖 | 61回
  • 年度积分:0
  • 历史总积分:99
  • 注册:2003年8月30日
发表于:2003-09-16 08:41:00
楼主
中国人的z893要与德国人的CAN一较高低之八 98me所使用的[软猫]篇之2[黑猫] z893与CAN 同属局部网, 如果它们要想与PC相联的话 z893的硬件开销要比CAN 小。 CAN 需要设计专用的板卡, 而z893仅需要一条通用的232通讯线, [市面上的大路货5元钱] 连在com1口,即可。 在软件上, z893与CAN 都需要PC的中断支持, 否则无法通讯。 与CAN 不一样的是: z893是目前现有的现场总线中, 实时响应要求最高的总线, 为了方便大家理解, 我们下面作个粗略地计算: (1)假定z893与CAN 都使用115.2Kbp/s, (2)假定串行通讯交换一个字节的协议为:[一个启始位,八个数据位,一个停止位]。 CAN 为定长帧, 最小的传输长度为10个字节, 当节点收完10个字节之后向PC发出中断请求, 只要PC在收到第2组数据之前作出响应, 就不会影响到整个系统的效率。 响应时间为:115.2K /100 =1.145K,约0.87毫秒! z893采用非定长帧, 串行流水线方式工作。 从服务器端而言, 它是在输出7个字节的引导周期之内, 要求工作站应答5个字节, 否则就被改换到下个设备号。 问题还不仅如此, 一个有效的工作站是在收到服务器呼叫之后, 并经判明是自已的工作周期时, 才作出这种响应的。 响应要求在接下来的时间之内, 工作站应向服务器输出5个字节的指令码, 否则就会[错失良机]。 而系统仅剩6个字节的时间, 也就是说它的响应时间应小于1个字节的串行输出时间。 115.2K /10 =11.45K,约0.087毫秒! 比较两者,存有很大的差别。 别看CAN是采用的硬猫, 勿论从效率上还是从速度上都较z893技差一筹。 一般来讲, 编制CAN 的通讯程序, 要考虑的问题十分多, 不仅要考虑响应时间的问题, 而且还要考虑: 占用的问题, 等待的问题, 冲突的问题, 优先的问题, 多线程的问题, 稍欠周全就会叫你哭笑不得! z893就完全不一样, 根本上就不存在上述问题。 z893不仅能做到在win下, 同一个[应用文件]下的不同线程 使用同一个com1口, 同一种猫, 共亨同一台服务器; 就是不同的[应用文件]下的不同线程, 使用同一个com1口, 同一种猫, 也可以共亨同一台服务器。 凡是编过大型软件的工程人员都知道, 线程间的通讯是个十分复杂的问题, 目前只能依赖于微软的API函数。 如果你对它没有[吃透], 或者是它对你保了密, 或者是来了点小动作, 就会叫你几个月也睡不着好觉。 [寻找虫子] z893的猫, 是直接对硬件口编程, 没有使用到任何API函数, 从win95直到98me,都能兼容。 倒不是我对API有什么意见, 而是z893在研发之初, 就只有DOS操作系统, API还在娘肚里没出世。 [开个玩笑] 现在想用,只是没有机会, 同时也[担心]它会不会变来变去, 搞得我的猫[死去活来]跟着[升级]。 有兴趣的猫迷可以将这些猫多研究一二, 说不定会大有益处。 现在了解DOS的人是一天比一天少, 我真不知道我的贴子对不对大家的胄口, 但愿不会叫大家失望。 前面谈到, z893需要实时响应极高的中断, 微软对中断又没有公布其最精华的底层协议, [API能不能响应得过来还得打问号!] 我又不想受制于API函数, 这种需求导致了[黑猫]的出世。 下面介绍98me所使用的[软猫]篇之2[黑猫], 专供PC[查询中断]服务使用, 详见各贴例程。 [用Delphi语言编写 [兼容Delphi2.0、3.0、4.0、5.0、7.0] [不兼容6.0] var d100a: Td100a; d1000:array[0..254] of byte; //数据库使用 z893_em d2006:dword; //数据库使用 动态显示[高速通道1-4] d2007:dword; //数据库使用 d=0 允许采样 1关闭 d2008:dword; //数据库使用 d=0 允许显示 1关闭 procedure b100; //数据库高速通道采样[黑猫] {$R *.DFM} ;******************** .软猫1. ******************** //子程序 procedure b100; //数据库高速通道采样 begin asm cli push eax push ebx push ecx push edx push ebp @@100: lea ebp,d1000 //高速通道 cmp d2007,0 //d=0 允许采样 jz @@101 mov d2006,123 jmp @@rm @@101: mov d2007,1 //d=1 禁止采样 mov d2008,1 //d=1 开报井 mov ecx,8ffffh //看门狗4ffff=2s/500MHz @@102: mov dx,3feh //DCD检测 in al,dx and al,80h jnz @@103 //DCD检测↓ loop @@102 //看门狗循环 jmp @@rm @@103: mov dx,3feh //DCD检测↑ in al,dx and al,80h jz @@110 //dcd ok! loop @@103 //看门狗循环 jmp @@rm @@110: mov dx,3fdh in al,dx and al,1 jnz @@111 loop @@110 //看门狗循环 jmp @@rm @@111: mov dx,3f8h in al,dx mov [ebp],al //设备号 @@120: mov dx,3fdh in al,dx and al,1 jnz @@121 loop @@120 //看门狗循环 jmp @@rm @@121: mov dx,3f8h in al,dx mov [ebp+1],al //IR指针 @@130: mov dx,3fdh in al,dx and al,1 jnz @@131 loop @@130 //看门狗循环 jmp @@rm @@131: mov dx,3f8h in al,dx mov [ebp+2],al //IR数据 @@140: mov dx,3fdh in al,dx and al,1 jnz @@141 loop @@140 //看门狗循环 jmp @@rm @@141: mov dx,3f8h in al,dx mov [ebp+3],al //高速通道1 @@150: mov dx,3fdh in al,dx and al,1 jnz @@151 loop @@150 //看门狗循环 jmp @@rm @@151: mov dx,3f8h in al,dx mov [ebp+4],al //高速通道



frank cheng

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2002年1月23日
发表于:2003-09-15 22:21:00
1楼
老兄,能否给些有关z893的资料,我目前正准备开发一个远程数据采集和控制系统,原定使用canbus,看你的文章后我想了解一下有关z893的应用问题,有可能的话就采用z893。

frank cheng

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2002年1月23日
发表于:2003-09-15 22:24:00
2楼
忘了告诉你,我的email:cheng_wp@sohu.com

米d.

  • 精华:3帖
  • 求助:0帖
  • 帖子:8帖 | 61回
  • 年度积分:0
  • 历史总积分:99
  • 注册:2003年8月30日
发表于:2003-09-16 08:41:00
3楼
不知是什么原因,我的[后续] 贴子发不出去了,请谅! 需要了解应用实例及例程源代码的同行请向我的信箱发个地址, 我将会给你满意答复,有信必复。 [不怕麻烦的]米d. 信箱 z893_em@163.net

热门招聘
相关主题

官方公众号

智造工程师