请大家帮帮我.

我有一个西门子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-200plc输入端电压问题

    s7-200输入端有电压吗 最佳答案 空端子没电压。接线且有信号输入的情况下是有电压的。并且相应的输入位会有绿色指示灯亮。 提问者对于答案的评价:谢谢

    SIMATIC S7-200 2021年7月5日
  • 问硬件配置

    我欲设计一台设备有如下要求:1 三个座标轴X;Y,Z,用步进电机驱动,Y轴用减速箱变速(3:1)。座标不要求联动。2 要求通过面板能修改座标轴的进给速度,面板能…

    SIMATIC S7-200 2021年7月5日
  • TD400控制显示

    PLC能否象TD200一样通过PLC控制显示,请教高手,谢谢 最佳答案 可以,在报警界面里做 提问者对于答案的评价:可以做,找到键位标示和使能位标示即可。

    SIMATIC S7-200 2021年7月5日
  • 模拟量转换问题1

    我用的西门子224XP自带模拟量输入模块,接了0到5V的输入电压,用来检测电流,实际电流对应的电压值大概是0.3V左右,但是输入到plc中的数值是负值,所以经过换算之后得到的实际电…

    SIMATIC S7-200 2021年7月5日
  • S7-200PLC测量数据读入EXCEL表格

    S7-200PLC带一块EM231,测量4个仪表的数据。想把4只仪表的读数1分钟一次,周期性地存入笔记本电脑的一个EXCEL表格。请问有没有现成的方案可用?包括软件 最佳答案 西门…

    SIMATIC S7-200 2017年11月6日
  • S7-200脉冲信号

    我在用S7-200里面编一个程序的时候,遇到拉以下这种情况:我想获得一个周期为1S的脉冲信号,想用特殊继电器SM0.5获得,编译的时候没,没有出现错误,但是在下载的时候说是“编译错…

    SIMATIC S7-200 2021年7月5日
  • 我的电脑是win7 32位的,想安装s7-200v4.0sp9

    我的电脑是win7 32位的,我已安装了S7-200V4.0SP3,想升级到SP9 问题补充:卸载SP3后SP9安装不了,不知道问题出在哪、才求救 最佳答案 参考以下链接…

    SIMATIC S7-200 2021年7月5日
  • S7-200通过MPI口与上位机通讯

    考虑的成本的问题,在上位机与S7-200通讯时,不能够采用以太网模式,只能通过MPI口与上位机通讯,有两个问题需要请教大家:1)上位机与PLC之间的连接电缆,是不是我们自己做的RS…

    SIMATIC S7-200 2020年11月1日
  • S7200/300与PC通信

    PLC在与PC通信时S7 300 是用PC/MPI适配器S7 200是用PC/PPI。请教一下我说得对吗? 有没有一个适配器可以同时连接30…

    SIMATIC S7-200 2020年11月1日
  • 实现圆周运动

    编一段程序,设两个未知数X,Y,令X,Y在一个圆上运动 最佳答案 200有sin,cos三角函数指令的,这样就可以通过圆周公式得出x和y的例如做一个已a和b位圆心,半径为c,再就是…

    SIMATIC S7-200 2020年10月31日

发表回复

登录后才能评论