三菱PLC中LRC校验码程序编写方法 图解
三菱中的LRC校验码程序的编写,在PLC与设备进行通讯时采用MODBUS协议时,一般会有两种数据模式,1是RTU模式,2是ASCII码模式。RTU的数据传输采用CRC校验,而ASCII码则采用LRC校验值。LRC值校验涵盖从从机地址到数据的信息部分,校验和等于所有参与校验数据的字符和的补码。
我们先说下具体的校验码怎么计算,然后说三菱plc的LRC校验码程序的编写。
例子1
采用ASCII码模式控制变频器指令:01 03 21 00 00 01,这条指令中01一般是站号,03是读取命令,2100是参数地址(例如运行频率),00 01代表数据的个数。那么它的LRC校验码怎么计算:指令的数据是16进制的,和为:0x01+0x03+0x21+0x01=0x26,对0x25取2的补码就是DA,具体计算就是取反加1,如:0x26=B0010,0110,取反后得到B1101,1001,加1得到B11011010=0xDA,那么LRC校验码就是DA。
例子2
同样的控制变频器指令:03 06 00 03 27 10, 和为0x43,取反加1为0xBD,LRC校验值就是BD。明白了它的计算过程接下来我们在PLC编写它的算法,我们知道在PLC的运算中都是十进制的,为了方便转换和计算,可采取另外一种方法(原理一样),我们知道ASCII码是2位的16进制数,取反过程可看做0xFF减去检验总和如上述的0x26、0x43,加1就变成0x100减去检验总和,转换成10进制的就是256(D)-和(D),再经过ASCI指令转换成ACIIS码就可以了。以下面梯形图进行说明:
三菱PLC中LRC校验码程序编写方法
使用RS指令向变频器发送命令,01 03 33 03 00 01,转换成16进制01 03 21 03 00 01这是一个读取频率的指令,LRC校验码的运算梯形图:
三菱PLC中LRC校验码程序编写方法
使用一个变址寄存器Z0对数据D201到D206进行累加求和D40,最后用K256减去41就是LRC校验码215,通过ASCI指令转换成ASCII码,通过查看扩展ASCII码表:
三菱PLC中LRC校验码程序编写方法
215的16进制为D7,与01+03 +21+ 03+ 00 +01=0x29=B00101001,取反加1得到11010111=0x(D7),结果一致。
上述就是关于三菱PLC中LRC校验码程序编写方法图解的全部内容了,更多三菱PLC程序编写请到海蓝机电网站阅读。海蓝机电三菱特级分销商,提供三菱PLC、三菱变频器、三菱触摸屏、三菱伺服电机等自动化产品的销售,并为产品提供技术服务支持、机器人视觉、上位机软件、自动化开发、机电设备维修等服务。
更多三菱PLC资料、三菱伺服电机文章,请点击下方“了解更多”阅读,或者关注小编,回复“进群”,加入三菱PLC技术微信交流群。
PLC, ASCII码和计算机的关系,自由口通讯实例讲解
原创不易,请勿抄袭。
前段时间,我写了一篇S7-200smart通过RS485端口使用自由口通讯方式向计算机发送数据的实例。
实例过程;将需要的数据转换成ASCII码的方式并发给计算机。
写完之后很多人私信我,问我关于ASCII码的问题,今天我根据那个应用实例来讲解一下ASCII码;也希望朋友们可以多给我留言,有什么问题或者对于我文章的想法都可以告诉我。
首先我们看一下ASCII码;ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
也就是说ASCII码是根据计算机的工作原理应运而生的一种语言。标准码表如下图;
这个表是什么意思?
其实很简单,大家可以把它理解成一种协议,就是双方都规定好了;我发16#31就是1的意思,你收到16#31也是代表1而不是49。大家可以看到上面的码表,通过这个码表我们可以看到这种方式可以发送的内容很多。所以这种方式适用性较强,可应对各种情况。
那么在PLC和电脑进行通讯时不用ASCII码可以吗?当然可以,比如说可以使用MODIBUS,或者你和软件工程师商定自己写一个协议都可以。
我们再看一下S7-200smart的转换指令是如何工作的!
以这个指令举例,我们将双字VD600的数值以FMT=16#C9的方式转换成ASCII码,该码存在以VB805为起始地址的区域里。
RTA是将实数值IN转换成ASCII码。格式参数FMT会将指定小数点右侧的转换精度,小数点显示为逗号还是句号以及输出缓存区大小。得出结果会存入以OUT开头的输出缓存区。
FMT=16#C9的意思是输出缓存区大小为12个字节,小数点显示为逗号,保留一位小数点。比如说VD600=12134.64,转换后,
VB805=16#20(空格);VB806=16#20(空格);VB807=16#20(空格);
VB808=16#20(空格);VB809=16#20(空格);VB810=16#31(对应1);
VB811=16#32(对应2);VB812=16#31(对应1);VB813=16#33(对应3);
VB814=16#34(对应4);VB815=16#2C(对应逗号);VB816=16#36(对应6)
这回看懂了吧!
工程测试图
其他的指令的运行方式和RTA类似,大家举一反三吧!
计算机接收到信号后,按照ASCII码反编译!就可以得到相关的数据,但需要注意的是;数据要有开始或者结束标志(比如我程序里的0D0A),而且两个数据之间需要做分割,比如我程序中的16#3A是冒号的意思,就是分隔符。否则计算机端的软件工程师会找你拼命的!想要看我以前程序的请找我以前的文章吧!
好吧,且行且珍惜!看懂的朋友点个赞吧!
相关问答
三菱PLCFX2N中怎样把ASCLL转换成10进制?
键码,来判断按下的是哪个按键。比如以写游戏...你可以通过获取这个虚拟键码,来判断按下的是哪个按键。比如以写游戏为例,判断获取的是哪个虚拟键码,借此可以...
三菱系统哪个参数可以把整个速度锁住?
三菱数控系统参数,用PLC里的R1896锁住。操作方法如下:R1896是M60S系列里面的PLC接口,参数锁了用这个在60系里是可以,PLC不被备份可以用GX加密,参数也可以...