FX2N不能使用CRC校验码指令,我们如何让FX2N计算校验码呢?
上一章节我们用MOV指令传送代码:01 06 20 00 00 12,这6个代码分别传送到D50-D55存储器中,从指令MOV K6 D0到MOV D111 D57,这4条指令是计算校验码的程序。
画框的是计算校验码程序
MOV K6 D0是一条普通的传送指令,将十进制数6传送入D0,作用是设置计算校验码的字节个数,从代码:01 06 20 00 00 12可知计算校验码的字节个数是6个,因此先将6这个数传送给D0。
CALL P1是调用子程序指令,P1是子程序编号,指令执行后CALL P1下面的程序被暂停转而去执行P1的程序。
P1子程序
我们不必完全理解这个P1子程序的指令,只要3步就能运用它:
第一步:MOV K6 D0这条指令我们在上面已执行,对应的是P1中的第3条指令FOR D0,6这个数字就是传送到FOR D0中,用来指定计算校验码的字节个数 D100。
第二步:P1中的第4条指令,WAND H0FF D50V0 D101,WAND是“与”运算,不了解没关系,我们只关注D50V0中的D50,它与前面应用的无协议指令RS D50 K8 D70 K0,这个D50就是发送数据存储器中的第一个,我们就是要指定这第一个存储器,假设你的无协议指令是RS D10 K8 D70 K0,那么就将D50V0中的D50改成D10。
关注D50V0
第三步:找到倒数第5条指令WAND H0FF D100 D110,存储器D110中的数据是计算校验码结果的低8位,WAND H0FF00 D100 D111,D111中的数据是计算校验码结果的高8位。回到第一幅图的方框,使用指令MOV D110 D56,就是将校验码的低8位传送到D56,另使用MOV D111 D57,就是将校验码的高8位传送到D57,这两条传送指令等于是写入校验码。
计算出校验码存D110 D111
那就完成了变频器正转运行的代码:01 06 20 00 00 12 XX XX,XX代表P1自动计算出来的校验码,然后写入SET M8122发送通讯请求指令,当X001按下时变频器就会收到这一组代码,它就会得到正转运行的指示,但它还需要知道频率是多少才能运转起来。
注意:P1子程序中占用的存储器V0,D100 ,D101, D111,在子程序的外面不能再向这些存储器写入数据,否则校验码计算会出错。