实在不好意思

已锁定

JZS2359

  • 帖子

    1140
  • 精华

    1
  • 被关注

    8

论坛等级:侠士

注册时间:2007-06-18

普通 普通 如何晋级?

实在不好意思

790

9

2010-03-17 20:48:12

我是第一次用西门子的300的开发环境,现在又个项目是CP340实现MODBUS通信,我知道难度比较大,主要是300的我第一次用,通讯之前都是用小型PLC做的,我知道 CP340要自己写CRC校验,通讯帧格式也要自己写,所以我要提前准备,不然现场我真的要冒汗了。我想问,下面的这段程序,我怎么弄到开发环境里呀,那位大侠能帮我写到300系统里,给成附件的形式让我看看吗?我都搞不到程序里去 见笑了,西门子的FB FC 这些比较陌生,之前只是看过些书,希望哪位好心人帮我转下,给个附件形式




FUNCTION_BLOCK "WCRC_FB"



TITLE =



VERSION : 0.1

VAR_INPUT



db_no : INT ;



dbb_no : INT ;



byte_len : INT ;



END_VAR



VAR_OUTPUT



wcrc : WORD ;



END_VAR



VAR



old_wcrc : WORD ;



c : BYTE ;



j : INT ;



END_VAR



VAR_TEMP

db_no1 : INT ;

END_VAR



BEGIN



NETWORK



TITLE =

L #db_no

T #db_no1

OPN DB [#db_no1]

// 发送指令的起始字节放在指针AR1中

L #dbb_no

LAR1

//初始化old_wcrc=0xffff;

L W#16#FFFF

T #old_wcrc

// 进入大循环,byte_len:需要计算CRC的字节个数

loop: L #byte_len

L 0

<=I

JC end

//c:字节

L DBB [AR1,P#0.0]

T #c

//字节与crc寄存器异或

L #old_wcrc

L #c

XOW

T #old_wcrc

//j:位个数

L 0

T #j

//判断一个字节是否计算完,j是否为8

a: L #j

L 8

>=I

JC b

//得到lsb位

L #old_wcrc

L W#16#1

AW

//判断lsb,为1:右移一位;为0:右移一位与1021异或。位指针加1

JZ c

L #old_wcrc

SRW 1

L W#16#1021

XOW

T #old_wcrc

c: L #old_wcrc

SRW 1

T #old_wcrc



L 1

L #j

+I

T #j

JU a

b: L -1

L #byte_len

+I

T #byte_len

//指向下一个字节

+AR1 P#1.0

//输出最终的CRC值

JU loop

end: L #old_wcrc

T #wcrc

BE

END_FUNCTION_BLOCK
实在不好意思 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54619条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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