请问各位MODBUS协议RTU模式的检验码怎么算 很急 点击:1692 | 回复:10



thatis19

    
  • 精华:3帖
  • 求助:1帖
  • 帖子:78帖 | 213回
  • 年度积分:0
  • 历史总积分:1758
  • 注册:2008年11月02日
发表于:2010-03-13 13:41:03
楼主
我现在用FX2N PLC与施耐德TV31变频器通讯,变频器只支持MODBUS协议的RTU模式,请问用PLC写MODBUS协议程序时,检验码计算用CCD指令是否可以,否,检验码要怎样计算?



yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2010-03-13 13:51:15
1楼

CCD是求和指令,MODBUS协议的RTU模式必须用CRC校验(异或校验),FX2N没有专门的异或校验指令,需要自己编,相当麻烦。你可到网上搜一下,参考一下其他品牌的异或校验。

台达有CRC指令,使用相当方便。

byjx

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2009年12月05日
发表于:2010-03-14 14:28:35
2楼

写校验是有点麻烦,我没次总是先算出来,然后在直接写进去

 

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2010-03-14 18:55:43
3楼

要找现成的 CRC校验程序就看你运气了!  其实自己参照别人的也可以写的,不难的1

[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2010-03-14 19:33:44
4楼

你想一下子用梯形图计算RTU的校验码较难。按下列做:

1。从网上搜一个高级语言(如C)的RTU校验算法;

2。从C的算法改成PLC的算法;

 

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2010-03-14 19:46:37
5楼
楼上的一位,还真能开玩笑,如果楼主会用高级语言(如C)的RTU校验算法,还能提出这样的问题吗?

苏州朋远工控网

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 129回
  • 年度积分:0
  • 历史总积分:388
  • 注册:2006年10月29日
发表于:2010-03-14 22:25:09
6楼
呵呵,我有,不过这个程序在2n系列上面运行,扫描周期拉长不少,我当时自己写了和英威腾通信的,后来英威腾好像改了支持asc的和校验了

[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2010-03-15 07:55:09
7楼

void calcrc(BYTE frame[],int n,BYTE *cod)
{ // 求MODBUS校验码
unsigned short crc=0xffff;
for (int i=0;i<n;i++)
{
crc^=frame[i];
for (int j=0;j<8;j++)
{
unsigned short flag=crc&1;
crc>>=1;
if (flag)
crc^=0xa001;
}
}
*(unsigned short *)cod=crc;
}
C语言的计算CRC的最简单程序,也是搜来的,能成功用。

如果楼主自已不能改,那就谁也不能邦你了

[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2010-03-15 07:56:29
8楼
用了 异或与移位运算,改成PLC程序不是太难。

thatis19

  • 精华:3帖
  • 求助:1帖
  • 帖子:78帖 | 213回
  • 年度积分:0
  • 历史总积分:1758
  • 注册:2008年11月02日
发表于:2010-03-15 12:44:39
9楼
我现在是与多台变频器以通讯,写入的频率不同频率随时要变,这样检验码也是个变量。我不用2NPLC,要用什么PLC

zichen8716

  • 精华:1帖
  • 求助:11帖
  • 帖子:20帖 | 939回
  • 年度积分:0
  • 历史总积分:5186
  • 注册:2010年5月12日
发表于:2010-07-09 16:05:04
10楼

你把校验写成子程序就好了,用的时候直接调用,就行了白


热门招聘
相关主题

官方公众号

智造工程师