中国人的z893要与德国人的CAN一较高低之三 点击:1818 | 回复:1



米d.

    
  • 精华:3帖
  • 求助:0帖
  • 帖子:8帖 | 61回
  • 年度积分:0
  • 历史总积分:99
  • 注册:2003年8月30日
发表于:2003-09-11 15:09:00
楼主
CAN总线的推出实在是太心急了, 就象一个早产儿存在着许多先天性不足。[我可能说过头了,对不起!] (1)按照CAN1.0标准初意,定义了11位标志符, 允许2032个标识,照说应该是很多了, 没想到在实际运用中[特别是稍为复杂的应用]不够用, 问题又出在它是定长帧,没有空间让它扩展。 CAN2.0将11位标志符扩展到29位, 这就注定了凡是采用1.0的产品将不可能升级或者是很难升级, 要警惕这种产品,小心没有备件啊。 CAN总线采用29位之后, 固然解决了标志符问题, 但是它是以降低有效的数据传输速度换来的, 是好是坏只有等待市场来回答。 (2)按照CAN标准,其有效的数据为8字节, 如果仅用于传感器类采集数据,问题不大,甚至可以说非常好! 如果用于信息交换,则会效率太差, 再加上它的工作方式属单工或半双工,可以夸大点说是个低能儿。 千万不要应用错方向,否则即既浪废财力又浪废精力。 (3)采用专用芯片组网, 固然保证了厂方的利益, 但消费者要冒不能升级或者是很难升级的风险, 特别是耐消费品必须要小心。 如果CAN总线迟推一点走向市场, 这些问题应该是可以找到一个解决办法的,怪就怪它实在是太心急了! emdos服务器是目前世界上结构最简单的服务器, 也是体积最小的服务器, 并终有一天会集成相当于一个14脚TTL芯片大小, (51.CPU+8KRAM)按现有的技术已经能办得到, 只是一个价格问题和市场问题. 与CAN不一样的是,虽然z893_emdos指令容量为256个, 但它仅设计了9条通用指令,这就为以后的扩展备足了余地。 3条[块指令], 3条[字节指令], 3条[位指令]。 [01][H][L][块长度] [RD 读] [HL读] [块指令] [02][H][L][块长度] [WR 写] [写HL] [块指令] [03][H][L][块长度] [XCH 交换] [IN交换HL] [块指令] [04][H][L][块长度] [ADD 加] [HL加D] [字节指令] [05][H][L][块长度] [SUB 减] [HL减D] [字节指令] [06][H][L][块长度] [CLR 清除] [HL置0] [字节指令] [07][H][L][D] [OFF 关] [HL按D置0] [位指令] [08][H][L][D] [ON 开] [HL按D置1] [位指令] [09][H][L][D] [CPL求反] [HL按D置/] [位指令] 为了加深对它的理解,我们下面结合一个实例看看, 假定某[老总]根据工程要求,派有这样一个设计: 需要通过PC显示屏上的一个按扭, 去控制100米以外的一台电机。 *********************************************** 软件工程师接到这个任务之后,他将按下列流程编程: (1)约定电机的i/o口地址=100h单元的d0, (2)约定d0=0为关,d0=1为开, (3)当按扭打开后执行下面程序之一即可:[注]win98me 用Delphi5.0_汇编语言编写的这段程序。 asm lea ebp, d1300 mov al,08h mov [ebp+1],al //操作码=08h开 mov al,01h mov [ebp+2],al //地址H=01h mov al,00h mov [ebp+3],al //地址L=00h mov al,01h mov [ebp+4],al //D=0000 0001 位操作码 mov al,00h mov [ebp+5],al //in:长度 mov al,00h mov [ebp+6],al //out:长度 call a100 //[注]软猫子程序:启动交换,置电机开. end; 用高级语言编写的这段程序。 d1300[1]:=08h; //操作码=08h开 d1300[2]:=01h; //地址H=01h d1300[3]:=00h; //地址L=00h d1300[4]:=01h; //D=0000 0001 位操作码 d1300[5]:=00h; //in:长度 d1300[6]:=00h; //out:长度 a100; //[注]软猫子程序:启动交换,置电机开. *********************************************** 硬件工程师接到这个任务之后,他将按下列流程编程: (1)约定电机执行的cpu模块为51系列的ADUC812单片机, (2)约定P1口的D3为电机控制端, (3)约定D3=1为关,D3=0为开, [我有意设定与软件工程师不一样] 下面用ICExplorer.51汇编语言编写这段程序: [注]A/DUC812在win98me下编程,COM1口远程直接下载,不要编程器。 MOV 71H, #01H ;[地址H]=01H MOV 72H, #00H ;[地址L]=00H MOV 73H, #01H ;[长度D]=1 MOV 74H, #01H ;[IN 长度]=1 MOV 75H, #00H ;[OUT长度] MOV 76H, #38H ;[IN 指针]=38H MOV 77H, #00H ;[OUT指针] MOV 70H, #02H ;[操作码]=02读 [注]当软猫检测到70H<>0 时,自动启动交换. em001: MOV A, 70H JNZ em001 ;[等待70H=0] [注]执行取0100H地址的数据. 当指令运行到此地时,寄存器38H里已经存有PC发出的指令[xxxx xxx1]or[xxxx xxx0]。 MOV A, 38H ANL A, #01H JZ em002 ;解读软件工程师的信号=0 JNZ em003 ;解读软件工程师的信号=1 执行真正的开关: em002: ORL P1, #008H ;[P1.D3]置1关电机. RET em003: ANL P1, #0F7H ;[P1.D3]置0开电机. RET *********************************************** 比较以上例程不难发现,勿论采用何种语言, emdos编程仅仅是个[贴字软件], 不仅非常简单, 而且在整个项目开发中: (1)软件工程师是采用何种算法置电机开或者是关, 他不需要对硬件工程师加以说明; (2)硬件工程师采用单片机还是采用PLC执行真正的开或者是关, 他也不需要向软件工程师频频通报。 双方都具有相对的兼容性和灵活性。 如果用CAN,或者其它的方式来实现,恐怕就要复杂多了。 在一个实际的工程中, 修改总是经常的, 软硬分家会极大地降低工程费用。 [后续] 米d. QQ158326068



夏武

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 1回
  • 年度积分:0
  • 历史总积分:9
  • 注册:2003年9月11日
发表于:2003-09-11 15:09:00
1楼
不错

热门招聘
相关主题

官方公众号

智造工程师