1.简介

欧姆龙CP1H PLC的CRC校验。CP1H没有CRC校验指令或者功能块,在串口自由协议通信中,如果涉及到CRC校验,需要手动计算CRC值,本程序是一个输入数据,自动计算CRC校验码的程序。

Mov #xx D100   #号表示16进制数据

Mov &xx D100   &号表示10进制数据

2.关键指令

2.1 MOVD_数据传送

以位(4 位)单位进行传送,具体用法请查询CP1H编程手册,此处不做具体描述,仅举例说明。

例: D200=#AABB(16进制)

D201=#0000

D202=#0000

MOVD D200 #0010 D201

MOVD D200 #0212 D202

执行后 D201=#00AA

D202=#BB00

2.2ASR_右移

数据右移一位,相当于原数据除以2. 具体用法请查询CP1H编程手册,此处不做具体描述,仅举例说明。

例:D200=#0003(二进制:0000 0000 0000 0011)

ASR D200

执行结果:D200=#0001(二进制:0000 0000 0000 0001)

2.3XORW_字异或运算

异或运算。字的异或运算。既位与位不同=1.

例:D200=#0001(二进制:0000 0000 0000 0001)

D201=#0003(二进制:0000 0000 0000 0011)

XORW D200 D201 D202

执行后D202=#0002(0000 0000 0000 0010)

2.4ANDW_字与运算

字内的位进行与运算,既两个位都为1则结过=1.

例:D200=#0001(二进制:0000 0000 0000 0001)

D201=#0003(二进制:0000 0000 0000 0011)

ANDW D200 D201 D202

执行后:D202=#0001(二进制:0000 0000 0000 0001)

2.5指针

此处严格来说,不应该叫指针,但是功能与指针类似,姑且称之为‘指针’。

此处指针仅针对D区域。

例如:MOV &1122 D100

MOV &100 D200

此时,D200中数值为100.

MOV @D200 D300

执行后,D300的值应为&1122而不是&100。因为@D200表示是将D200中的数据作为地址编号,把该地址里的内容传送给D300。相当于间接寻址。

这样的话有个优势,我仅对D200进行运算,就可对相应的数据区进行间接操作,在对地址是连续的数据处理非常方便。

2.6FOR…NEXT_循环指令

循环处理指令。具体用法不做阐述,仅以示例说明。

例:

MOV #0 D100

FOR 6

++ D100

NEXT

执行后D100=6.

需要注意的是,在循环指令未执行完前,一般FOR循环体外面的指令将不会执行(此处不严谨,仅仅是个人测试出来的)。

2.7 全局子程序

CRC校验程序放在全局子程序里,值得注意的是,全局子程序需要放在中断任务0里。如图2-1所示

图2-1 中断程序设置

3.程序简解

图3-1

GSBN 10:全局子程入口  编号10

W500.0:校验开始

D7000:开始指针。如数据从D200开始,则:MOV &200 D7000

D7002:结束指针。如数据在D205结束,则:MOV &205 D7002

D7005:CRC寄存器。

使用示例:

图3-2 字节校验示例

下面用调试软件验证下,校验是否正确

图3-3 调试软件校验

从调试软件看,似乎PLC程序计算出来的校验码5C86和调试软件计算出来的校验码865C不一致,没关系,如果需要CRC高低位互换,可以使用已经高低位互换过的值它保存在D7018中。

4.字校验

字校验和字节校验一样,只不过把高8位和低位拆分出来分别计算而已。具体不做详述,请参照示例程序。

示例程序链接:https://pan.baidu.com/s/1_k3Ar6SwFT4Lb78i6MxpIQ

能力有限,部分解释的不是很清楚,还有可能有一些错误之处,欢迎大家指出。

有什么疑惑的地方,可留言交流。

欧姆龙PLC_CP1H_CRC校验的更多相关文章

  1. 欧姆龙PLC HostLink协议整理

    欧姆龙PLC HostLink协议整理 1.常用的存储器功能区 CIO: 输入继电器  272 点(17 CH) 0.00-16.15 输出继电器  272 点(17 CH) 100.00-116.1 ...

  2. 欧姆龙plc通讯协议格式

    欧姆龙CPM1A型plc与上位计算机通信的顺序是上位机先发出命令信息给PLC,PLC返回响应信息给上位 机.每次通信发送/接受的一组数据称为一"帧".帧由少于131个字符的数据构成 ...

  3. StringMVC 中如何做数据校验

    步骤一:引入四个jar包 步骤二:注册类型转换器 <context:component-scan base-package="cn.happy.controller"> ...

  4. 登录(ajax提交数据和后台校验)

    1.前台ajax数据提交 <form id="login_form" action="" method="POST"> < ...

  5. Struts2数据校验

    Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...

  6. Spring MVC数据校验

    在web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对 数据进行验证.输入验证分为客户端验证与服务器端验证.客户端验证主要通过JavaScript脚本进行,而服务器端验证则主要通过Jav ...

  7. spring mvc 数据校验

    1.需要导入的jar包: slf4j-api-1.7.21.jar validation-api-1.0.0.GA.jar hibernate-validator-4.0.1.GA.jar 2.访问页 ...

  8. SpringMvc中的数据校验

    SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...

  9. .net使用正则表达式校验、匹配字符工具类

    开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...

随机推荐

  1. PHP Socket 编程之9个主要函数的使用之测试案例

    php的socket编程算是比较难以理解的东西吧,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了,在笔者看来,socket编程,其实就是建立一个网络 ...

  2. Uoj #35. 后缀排序(后缀数组)

    35. 后缀排序 统计 描述 提交 自定义测试 这是一道模板题. 读入一个长度为 nn 的由小写英文字母组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在 ...

  3. 洛谷 P2032 扫描 题解

    P2032 扫描 题目描述 有一个 1 ∗ n 的矩阵,有 n 个正整数. 现在给你一个可以盖住连续的 k 的数的木板. 一开始木板盖住了矩阵的第 1 ∼ k 个数,每次将木板向右移动一个单位,直到右 ...

  4. 时间模块-datetime精确到微妙级

    1.标准转换格式符号说明 %a 本地星期的短名称 如:Sun, Mon, ..., Sat (en_US); So, Mo, ..., Sa (de_DE) %A 本地星期全名称 如 :Sunday, ...

  5. Intellij IDEA中maven项目打包问题

    学习使用java写项目的时候,java的jar包对我来说是很神奇又很复杂不想去了解的东西,如今形势所迫开始写java项目,做了些了解,也有几个问题. 1.其中一个打包方式 在pom文件中输入如下插件( ...

  6. 【洛谷】P2261 [CQOI2007]余数求和

    题面?? 点我获得题面QAQ 我这个咕儿终于在csp初赛前夕开始学习数论了! 我是绝对不会承认之前不学数学是因为去年刚开始学OI的时候就跟yyq他们学莫比乌斯反演然后自闭的 分析 对于k mod i, ...

  7. 普通的checkbox的回显功能

     var ypxt=document.getElementsByName("map.LCSYLB");           var jgjg='${map.LCSYLB}';    ...

  8. etcd安装

    etcd有三种集群化启动的配置方案,分别为静态配置启动.etcd自身服务发现.通过DNS进行服务发现,重点讲一下静态配置启动.根据启动环境,可以选择不同的配置方式.这也是新版etcd区别于旧版的一大特 ...

  9. c# 模拟并发请求 ,只能并发2个连接。

    使用 HttpWebRequest 模拟并发请求的时候,发现不管怎么提高thread 的数量,都没用,服务器端用计数器看到的都是2个连接,见下图(关于计数器怎么开,百度) 然后搜了一下,发现需要在ap ...

  10. MySQL5.7授权用户远程访问

    做个记录,每次弄环境的时候,特别是弄mysql环境,时不时都要用到下面的命令 命令如下: grant all privileges on *.* to 'root'@'%' identified by ...