请大家帮帮我.

我有一个西门子s7-200的PLC,还有两台,台达的变频器,我要用modbus通信,但是不知道怎么编写程序.请大家帮帮我,
          谢谢!

最佳答案

1.要了解一下PLC自由口通信知识
 2.了解modbus协议.
 那就可以自己编了,要有个CRC校验程序.我提供一下吧.当然如果用modbus的库那就简单了.西门子的人已经给你编好了.

 SUBROUTINE_BLOCK CRC:SBR99
 TITLE=CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
 // CRC是先调入一值是全"1"的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
 // CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。CRC添加到消息中时,低字节先加入,然后高字节。
 // 注意:
 //  CRC添加到消息中时,低字节先加入,然后高字节。如:
 //  MOVB CRC_Hi, VB8
 //  MOVB CRC_Lo, VB7
 // 
 // 
 // 调用实例:
 // NETWORK 1
 // LD     SM0.1                       //读W458
 // MOVB   8, VB0                      //发送8个字符
 // MOVB   16#01, VB1                  //从站地址:01, 
 // MOVB   16#03, VB2                  //命令代码:10 (写变量)
 // MOVW   +458, VW3                   //起始地址:16#01CA(W458)  DRIVECOM状态字
 // MOVW   +1, VW5                     //读写长度
 // MOVD   &VB1, VD60                  //建立指针
 // CALL   CRC, VD60, +6, MB7, MB8     //计算CRC码
 // 
 VAR_INPUT
 TabPT:DWORD; // 表头
 TabLen:INT; // 字节数
 END_VAR
 VAR_OUTPUT
 CRC_Hi:BYTE; // CRC高字节
 CRC_Lo:BYTE; // CRC低字节
 END_VAR
 VAR
 temp_Hi:BYTE;
 temp_Lo:BYTE;
 temp_Index1:INT;
 temp_Index2:INT;
 temp_CRC_LSB:BOOL;
 END_VAR
 BEGIN
 Network 1 
 // CRC初始化为FFFF
 LD     SM0.0
 MOVW   16#FFFF, LW6

 Network 2 // 第一个循环为每一个字节进行CRC
 // //外循环开始,外循环用与没个信息字节的CRC计算。
 LD     SM0.0
 FOR    LW10, +1, LW4

 Network 3 
 LD     SM0.0
 MOVB   16#00, LB8                  //高字节清零
 MOVB   *LD0, LB9                   //信息装入低字节
 XORW   LW8, LW6                    //与CRC进行异或和

 Network 4 // //CALL   SBR_1, LW6                  //CRC
 // //内循环开始,内循环用于每个字节各个位的CRC计算
 LD     SM0.0
 FOR    LW12, +1, +8                //每个字节共8位

 Network 5 
 // LSB暂存保护起来
 LD     L7.0                        //
 =      L14.0                       //

 Network 6 
 // 字右移一位
 LD     SM0.0
 SRW    LW6, 1

 Network 7 
 // 如果CRC右移前最低位是1则与多项式进行异或和
 LD     L14.0
 XORW   16#A001, LW6                //这里使用多项式16

 Network 8 
 // //内循环结束
 NEXT
 Network 9 
 // //指针加1,对下一个信息字节进行CRC计算。
 LD     SM0.0
 INCD   LD0                         //指针加1
 Network 10 
 // //外循环结束
 NEXT                               //外循环结束
 Network 11 
 // CRC添加到消息中时,低字节先加入,然后高字节.(16为的CRC加在消息的末尾占两个字节)
 LD     SM0.0
 MOVB   LB7, *LD0                   //低字节先加入
 INCD   LD0                         //
 MOVB   LB6, *LD0                   //然后高字节

 END_SUBROUTINE_BLOCK
 

提问者对于答案的评价:
ok
 

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc357767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午10:05
下一篇 2021年7月5日 上午10:05

相关推荐

  • S7-200的波特率

    我现在用触摸屏(触摸屏的与PLC通讯方式是S7-200PPI)跟PLC还有一块热表在一条485总线上同时通讯,热表的波特率是固定的2400,有的是4800,而200PLC系统端口最…

    SIMATIC S7-200 2018年12月14日
  • 系统生手册和样本手册为何没有6ES7 214-1AD22-0XB0的CPU224

    系统生手册和样本手册上为何没有6ES7 214-1AD22-0XB0的CPU224 最佳答案 22的国内已无,现均为23的,即为6ES7214-1AD23-0XA0或者为…

    SIMATIC S7-200 2021年7月4日
  • 对于S7-200,CPU224XPsi是漏型数字量输出,其他CPU都为源型数字量输出

    对于S7-200,CPU224XPsi是漏型数字量输出,其他CPU都为源型数字量输出? 最佳答案 对的,S7-200系列,只有CPU224XPsi是漏型数字量输出,其他的都是数字量…

    2021年7月5日
  • 多个S7200之间读取数据

    有多台S7200通过CP243-1连接,其中一台想读取另一台中的数据怎么读取? 请详细的解答一下,谢谢了。 最佳答案 具备相应的硬件后按MICRO/WIN V4…

    SIMATIC S7-200 2021年7月5日
  • s7200系统扩展通讯

    S7-200CN可变程序控制器产品样本(05.2009)中对于以太网模块(CP243-1)有这样描述:“•通讯是基于 TCP/IP 协议的,可以作为…

    SIMATIC S7-200 2021年7月4日
  • 西门子200CN的编程器

    西门子6ES7212-1AB23-0XB8与这个CPU配套的编程器有订货号吗?     编程器是简易的手持式连接CPU的编程器(手…

    SIMATIC S7-200 2020年10月31日
  • EM253速度改变

    EM253速度改变项目中用到了EM253定位模块,需要改变伺服电机的速度,在POS0_GOTO上改变Speed的数值,发现伺服电机的速度没有改变,是什么原因呢?是不是要在工具—…

    SIMATIC S7-200 2020年10月31日
  • 关于自由口网络的问题

    曾经有人给过我"判断"的建议,但由于考虑到一台仪表如果被关闭,意味着什么也受不道到,我以什么作为判断的依据和方法呢?以时间,?起始符?结束符….?&nbsp…

    SIMATIC S7-200 2021年7月5日
  • PID控制一般用在什么地方?

    我学PLC一直接触PID控制,请问PID控制一般用在什么地方? 最佳答案 目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。同时,控制理论的发展也经历了古典控制理论、现…

    SIMATIC S7-200 2021年7月5日
  • USS控制变频器

    1、是不是只需要调用USS_INIT和USS_CTRL这2个块就可以?我看到书上只调用了这2个。2、如图1,激活站号是不是每次调用只能激活一个?如果有多台变频器,就多次调用这2个块…

    2020年10月31日

发表回复

登录后才能评论