zoukankan      html  css  js  c++  java
  • 电脑与欧姆龙plc通过网络通信

    电脑与plc通过网络通信

    根据 欧姆龙OMRONPLC之CP1H以太网FINS/TCP通讯实例,进行了实践,将实践过程及遇到的问题进行记录。

    所用材料:

    1. 欧姆龙CP1H-X40DT-D
    2. CP1W-CIF41模块
    3. 网线
    4. 交换机
    5. 笔记本
    6. fins通讯手册,这东西虽然是英文的,但是用来查查重点还是不错的
    7. ethernet units和communication commands 这两份手册,这两份手册可能有用,网上找的,我自己没有看

    实验步骤

    详细步骤不做赘述,参照上面那篇文章,记录几个比较重要的信息。

    1. 握手协议(命令码为00000000)
      格式:头(FINS) + 长度(Hex0C) + 命令(00000000)+ 错误码(00000000) + 客户机节点地址
      举例:发送:46494E53 0000000C 00000000 00000000 00000002
      返回:46494E53 00000010 00000001 00000000 00000002 00000001
      这里的46494E53是FINS的ASCII码,
      0000000C是指这串代码之后的长度,注意是用十六进制发送的,每两个数字长度加1,不要搞错了
      00000002是客户端ip,我电脑设置的ip为102.168.250.2,实际上这里不一定要传ip最后两位进去,只要不是00000001,01是plc的地址
      返回中的最后一串00000001就是plc的地址码,错误码全为0就表示没有出错,我也没有遇到过出错的情况,所以也不清楚会发生什么问题,真的遇到问题,可以参考最上面列的那篇博客。

    2. 读指定地址的值(命令码为00000002,fins中的命令为0101)
      参考文章中以读DM存储区举例,因为我实际用到的是CIO存储区,所以我以CIO存储区举例
      2.1 按照字(word)读
      查同一个作者的另一篇文章,欧姆龙OMRONPLC之HostLink通讯协议-FINS命令W字/位操作篇,CIO存储区按照字的代码为B0,读取CIO区地址0000中的值,读一个长度的字
      发送:46494E53 0000001A 00000002 00000000 08000020 01000002 00FF0101 B0000000 0001
      返回:46494E53 00000018 00000002 00000000 C0000200 02000001 00FF0101 000000C1
      没有找到对08000020的解释
      01000002的头和尾分别为接收方和发送方
      0101是命令
      B0000000前两位是CIO的地址码,接下去的四位是字对应的地址,我读的是0000,最后两位是位的地址,因为是按字读,所以这边就是00不用管
      0001表示读一个字
      返回码中的最后4个十六进制数中,两位(0000)表示成功,00C1就是读到的值
      需要注意的是,一个字读出来值占两个十六进制,因为一个字的位有0-15,最大就是11111111 11111111(这是我的理解,不确定是不是有错误),所以一个字占两个十六进制。

      2.2 按照位(bit)读
      CIO存储区按位的代码为30,读取CIO区地址000104的值,读一个位(地址000104就是输入变量I01.04的地址)
      发送:46494E53 0000001A 00000002 00000000 80000200 01000002 00FF0101 30000104 0001
      接收:46494E53 00000017 00000002 00000000 C0000200 02000001 00FF0101 000001
      这里接收到的和上面按字读同样是读一个长度,但是字一个长度由两个十六进制组成,而位由一个十六进制组成,注意区别,在写入的时候也要注意

      读的时候还遇到过一个问题,命名CIO0100地址中是有值的,但是读出来全是0,那是因为犯了个错误,这里的CIO0100用的是十进制,发送的是十六进制,所以应该是0064地址,其实只是个小问题,仔细一点。

    3. 往指定区域写入值(fins命令0102)
      此处不特别举例,参考那篇文章的例2-7,这里要注意的就是按位和按字的长度不要弄错。
      因为我自己遇到了一次出错,错误码为1003,查找了fins通讯手册之后,发现是长度问题,错误码在通讯手册的5-1-3章节中

  • 相关阅读:
    Springboot打jar 包
    mysql 函数
    SFTP的使用
    Java Swing
    消息中间件之ActiveMQ
    对象的四种引用关系
    vs的url传参
    后台管理两级类别
    $.dialog弹层---lhgDialog
    正则小数验证和去除中间空格
  • 原文地址:https://www.cnblogs.com/yutou2016/p/12974547.html
Copyright © 2011-2022 走看看