S7200的MUDBUS通讯的CRC16校验

已锁定

泥巴123

  • 帖子

    112
  • 精华

    0
  • 被关注

    3

论坛等级:侠客

注册时间:2007-07-26

普通 普通 如何晋级?

S7200的MUDBUS通讯的CRC16校验

2718

6

2012-05-25 15:25:21

1\需要CRC16校验的数据
LD SM0.1
MOVB 16#1, VB200
MOVB 16#03, VB201
MOVB 16#0, VB202
MOVB 16#0, VB203
MOVB 16#0, VB204
MOVB 16#1, VB205
2\调用CRC16子程序 FIRST为第一个数据,NUM为需要校验的数据个数,CRC16为CRC16校验码,高低位未换
LD SM0.0
CALL SBR_0:SBR0, &VB200, 6, VW300

子程序:
LD0 FIRST IN DWORD
LW4 NUM IN INT
LW6 CRC16 OUT WORD
程序内容:
1\第一个数据的指针给AC1,CRC16寄存器初始化FFFFH
LD SM0.0
MOVD #FIRST:LD0, AC1
MOVW 16#FFFF, #CRC16:LW6
2\外循环,几个数据循环几次
LD SM0.0
FOR VW1000, 1, #NUM:LW4
3\LB7为CRC16的低字节,与第一个数据异或
LD SM0.0
XORB *AC1, LB7
4\内循环,右移8次
LD SM0.0
FOR VW1002, 1, 8
5\CRC16右移一位并且高位补0,这里用了一7FFFH的与来实现, 求别的好办法。
LD SM0.0
SRW #CRC16:LW6, 1
ANDW 16#7FFF, #CRC16:LW6
6\SM1。1为1时执行和A001H的异或,就是判断LSB的0或1。
LD SM1.1
XORW 16#A001, #CRC16:LW6
7\内循环结束
NEXT
8\AC1加1,处理下个数据
LD SM0.0
INCW AC1
9\外循环结束
NEXT

求助:CRC16校验中右移后高位补零,大家都是怎么做的?
CRC16校验的子程序在实际应用中调用此程序大家都是怎么做的?
大家是不是把得到校验码的程序写在SBR里,还是中断?
有用过200走modbus控制变频器的高手能否提供个简单点程序参考下,主要是看下调用方法.
暂时问题还没想到多少,后续补充.
S7200的MUDBUS通讯的CRC16校验 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33277条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。