推广 热搜: 广场  Java  app  Word  营业  微信公众号  北京代理记账  商城  代理记账  商标交易 

怎样快速找出编程时的错误 plc梯形图编程中常见的编译错误有哪些,如何判断和检测出来?

   2023-04-26 企业服务招财猫60
核心提示:plc梯形图编程中常见的编译错误有哪些,如何判断和检测出来?有些是要运行了才会发现,有些是用系统软件可以检查出来的。举个例子,下面用了MC主控指令,但是没有MCR结尾,这些一对使用的指令很多人会漏掉。

plc梯形图编程中常见的编译错误有哪些,如何判断和检测出来?

有些是要运行了才会发现,有些是用系统软件可以检查出来的。

举个例子,下面用了MC主控指令,但是没有MCR结尾,这些一对使用的指令很多人会漏掉。

还有事常识性错误,小学生都知道,被除数不能为零,也是PLC运行到那一步才会报错的

下面这种跳转P1,但是程序没有写指针P1,可以用系统程序检查出来的

可以看到结果提示没有指针

和运行后比如回到停止没有指针的运行看下

可以看到已经提示有错误了。

此时可以点击PLC诊断

双击错误框,弹出错误说明

再点击错误JUMP,可以直接跳转到错误步,绿色显示方便你寻找问题。

系统的程序检查不是万能的,有些可以检查出来,有些不能。同样,这里的PLC诊断也不能100%帮你找对错误位置,很多问题还是靠经验规避。

谢谢观看!

在C语言程序中,怎样判断数据是否损坏,常用的方法是什么,有什么技巧吗?

谢邀。

在实际的C语言程序开发中,常常需要保存一些非常重要的数据,这些数据需要确保不能损坏。那么该怎么做呢?首先应该明白,在C语言中,复杂数据一般都是通过结构体组织的。所以C语言中的结构体非常有用。

C语言中的结构体非常有用例如,利用C语言描述人的身高、体重、年龄、性别、姓名时,使用结构体时非常方便的,相关C语言代码可以如下定义:

上面的C语言代码定义了person结构体,用于描述要求统计的每个人信息。一般来说,统计信息常常需要记录在磁盘里,如果这些信息比较重要,往往还需要记录不止一份。这样在数据损坏时,可以从备份将损坏数据修复。

如何判断数据是否损坏但是,C语言程序怎么能知道存在磁盘里的数据有没有损坏呢?这其实就需要借助于校验了,一个非常常用的校验方法是crc32校验。crc32校验可以根据一段长度(若干字节)的数据生成一个32bit的数,理想情况下,数据不同,生成的校验值也不同。

所以上面的person结构体最好加上一个成员crc32,相关C语言代码如下,请看:

person结构体假设int类型占4字节内存空间。

这样在记录数据的时候,先计算出这段数据的crc32校验值,然后将数据和crc32校验值一起存储。以后读取数据时,可以再计算一次crc32校验值,并与原先记录的旧crc32校验值比较,若相等,则可以认为数据没有损坏;若不相等,就说明数据损坏,可以启动数据修复逻辑了。

上面这种判断数据是否损坏的方法,其实是有可能误判(现实与理想总是有差距)的,但是几率比较小,因此crc32仍然是一个不错的数据校验方法。

怎样计算结构体的校验值计算crc32的方法不是本节的重点,而且网络上资源很多。这里直接假设获取一段数据的crc32校验值的函数的原型如下,请看C语言代码:

此时,计算person的校验值的C语言代码似乎可以这么写:

想想看,为什么不能直接这么计算crc32校验值呢:get_crc32(amps,sizeof(structtests))

显然,这么计算太麻烦了,若是结构体的成员非常多,估计要把C语言程序员累死。而且,要是以后为结构体添加新成员,或者删除旧成员,这段计算crc32校验值的C语言代码也需修改,可见,这样计算crc32校验值的代码维护起来也是非常的麻烦,还容易出错。

因此,计算结构体的校验值的代码一般都不像上面那样写,那该怎么写呢?如果能够直接获取crc32成员在结构体test中的偏移量offset,那计算校验值的C语言代码就很好写了:

那么,offset等于多少呢?很多C语言初学者会认为:

姑且不管这样计算crc32校验值一样会带来代码维护困难、容易出错又麻烦的问题。这样计算的offset都不等于crc32成员在结构体test中的偏移量,因此这样计算校验值是不合适的。

还记得结构体的“内存对齐”相关的陷阱吗?(可以参考我的专栏《C语言经典面试题详解》)

计算结构体某成员偏移量的小技巧我们都知道,C语言中结构体的各个成员在内存中其实也是先后存储的,结构体s的成员crc32肯定是排在s之后的,因此计算结构体中某个成员的偏移量,其实可以采用“地址相减法”:

知道原理了,我们完全可以自己定义一个宏,用于计算结构体某成员在结构体中的偏移量,相关C语言代码如下,请看:

既然结构体成员地址减去结构体地址就等于该成员的偏移量,那如果结构体地址为0,该成员的地址就恰好等于它在结构体中的偏移量了,现在我们编写测试用例,相关C语言代码如下,请看:

编译并执行这段C语言代码,得到如下结果:

一切与预期一致。现在利用offset宏计算结构体person的校验值就方便了,请看下面的C语言代码:

而且,无论以后如何调整person的成员,删除也好,新增也好,只要保证crc32是它的最后一个成员,计算校验值的代码就无需改动,这样的C语言代码维护起来也是非常的省心的。

小结在C语言程序开发中,若需记录在磁盘中的数据非常重要,则应该保存不止一份,这样才能在尽可能的确保数据不损坏。关于如何判断数据是否损坏,本节介绍了一种常用的crc32校验法,在此基础上,讨论了一种计算结构体成员偏移量的方法,并将其封装成宏,特别有利于之后C语言代码的维护。

欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
合作伙伴
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  冀ICP备2023006999号-8