ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

西门子SmartPLC自由口通讯封装兼容Modbus_可自定义报文格式

2022-08-27 12:33:28  阅读:187  来源: 互联网

标签:自定义 SmartPLC 报文格式 COM0 程序 校验 CRC 数据 程序段


  最近一直在用西门子SmartPLC,由于项目需求自定义协议,为了数据的准确性用了CRC校验,模块兼容Modbus_RTU,自定义报文格式。

  此模块主要用的是SmartPLC,指针类型,通过寻址自动在发送数据末端端添加CRC校验,数据接端通过接收到的数据通过CRC校验数据的准确性。参考西门子官网自由口通讯程序并进行二次封装。官网链接:官网程序参考链接,程序适合做参考和根据自己的业务优化,有更好的思路可以评论区留言。

   1、程序框架四部分

    子程序名称

      Proc(SBR6) ---------------------------  COM0_Init        //端口初始化配置

      Proc(INT0) ---------------------------  COM0SendDataFinish    //发送数据完成进入中断程序

      Proc(SBR1) ---------------------------  CRC_16          //CRC数据校验

      Proc(SBR7) ---------------------------  COM0_sys        //发送和接收程序及数据校验

      Proc(SBR5)---------------------------- SensorSys        //调用测试

    符号表:定义的是必须的全局变量,因为在中断中不支持地址传入(试过好多方式都失败),不知道有没有大神知道

      VB7500------------------------------- StepCOM0Global     //通讯中用的执行步数标志

      VB7700------------------------------- ReciveBufCOM0Global   //接收数据的缓冲区,最大接收255个字节,到8000的地址尽量都别用

      VB7504------------------------------- TimeCOM0Global     //接收数据系统开始时间

      VB7508------------------------------- OverTimeCOM0Global       //保存等待接收数据的时长

    

 

   2、COM0_Init  程序块

    初始化程序直接截图就不过多的介绍了,官方手册上有说明。

      接收数据设定100个字节可以根据需求去修改。

    

   3、COM0SendDataFinish  程序块

    中断程序块,看官网示例里面有说明。

      定义的公用变量主要用在中断中。

    

   4、CRC_16 数据校验

     网上一大堆讲解需要的自行搜索理解。

     

   5、COM0_sys 发送接收主程序

    5.1 输入参数的基本介绍局部变量。

      L0.0------------------------------------ StartMasterBit       //主站Bit位,开始执行程序

      LD1------------------------------------ NumSendByte       //发送数据的字节数,发送多少位字节

      LD5------------------------------------ ErrRs485Byte       //通讯错误    0/1,判断标准是从站是否有返回数据。100ms无返回就判断异常置1

      LD9------------------------------------ ErrDataByte        //数据接收到后,CRC校验,如果错误置地址为1

      LD13---------------------------------- ReveiceDataBuf       //数据的接收地址,可以根据自己寄存器的定义去动态修改接收的地址

      LW17---------------------------------- CountCrc         //临时变量,发送数据需要校验的位数

      LW19 --------------------------------- CRCresult         //数据校验结果

      LW21 --------------------------------- ReveiceCRCresult     //接收数据校验和

    

     5.2  主调用程序段:SensorSys

       结合实际数据调用情况分析。

        发送的数据位8个字节:04 03 00 00 00 09 xx xx   

      下面(图①) 调用和定义

    

                           图①

    

    程序段1:COM0_sys  根据(图①)传入的参数进行分析

        要根据标记符号的颜色及标记符号的顺序理解计算地址和地址的值 ,即可看懂(写的时候没注意细节)

    

 

     

 

 

      

       程序段1数据发送完成,进入上图的中断程序,后进入程序段2,官网中有中断及例子的说明,自行看即可。

    程序段2:COM0_sys  结合官网例子说明结合查看

    

 

     程序段3: COM0_sys  手动关闭接收数据

    

     程序段4:COM0_sys  接收的数据进行CRC校验

     

     

     程序段5:COM0_sys  数据接收赋值,并清除缓存区数据,进行下次通讯

               

    实际应用测试 SensorSys

     下图是发送出来的数据:04 03 00 00 00 09  CRC校验

    

 

     接收到的数据:正常状态

    

 

     断线状态:

    

 

     数据异常状态:

    

 

     总结

       上面程序就是简单的用在项目的指针应用,我们可以传入很少的参数,做业务逻辑,同时可以节省有限的子程序变量,可以通过很少的程序块来完成项目。减少硬件内存的字节数。可以用内存小的PLC,做一些复杂的项目。提高自己的编程能力,深层次的了解PLC的运行原理。

       程序还有很多不足之处,希望大神在评论区指出。

       如有需要程序参考,请联系邮箱:httpcc@163.com

 

 

 

 

 

 

     

 

标签:自定义,SmartPLC,报文格式,COM0,程序,校验,CRC,数据,程序段
来源: https://www.cnblogs.com/httpcc/p/16582696.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有