zoukankan      html  css  js  c++  java
  • 关于三菱PLC与变频器ASCII通讯的讲解

    说明:

    1、本文档注释说明了三菱 PLC 用 RS 进行ASCII 通讯的一个案例 

    2、本实例使用PLC为为三菱 Fx-3G系列,变频器为三菱通用变频器 FR-D700 系列

    3、本实例内容原创,转载注明出处后,可随意分享使用

    先展示一下代码,然后分析代码,依次详细讲解

     

     

     

     

    RS指令解释

    RS D10 D50 D100 K20

    D10 为发送数据的起始地址,D10后续的连续地址依次为 D11、D12........

    D50 表示发送的数据个数,D50的值为12,因此一共发送12个字的数据,即发送 D10~D21中存储的数据个数

    D100 表示通讯接收变频器的数据起始地址

    K20 表示 接收数据的地址数位20个字,即接收数据存储于 D100~D119 中

    ASCI指令解释

    ASCI D141 D16 K4

    将D141参数转换成4个字的ASCII码存入到 D16,D17,D18,D19 中

    例如 D141 的值为 1234,则 D16~D19的值如下表所示

    通讯发送了哪些数据? 

    PLC与变频器的通讯就像人与人之间对话一样,是一个信息交互的过程,就像发电报一样,

    报头,即一条信息,一条报文的标题,意思告诉对方信息开始发送了,接下来是报文信息

    报文,是要表达的实际数据内容

    报尾,一般用来校验发送的报文数据是否正确,用来告诉对方,我发送的数据已经完成了。

    例如程序中 M140 = ON ,D141=1234时,PLC 发送了 D10~D21中存储的数据,一共12个字

    P0子程序中D20与D21的解释

    D50=12时候,则D51=9,即发送的数据个数去掉1个字的报文、再去掉2个字的报尾巴,剩下就是报文的字个数为9位

    通过执行 for 指令循环 依次对 D11Z0 地址进行累加,值存储于 D52中

    Z0 是个变量,可以视为当前循环次数的指针,从1依次递增到9,所以 D11Z0 最终指向D11-D19的数据地址

    下面进行for循环的演示:

    比如 D52初始值为 0 

    第1次循环开始,Z0=0,则 D11Z0 代表的地址值即 D11的值,D52 = D11,循环结束Z0自增1,Z0的值为2

    第2次循环开始,Z0=1,则 D11Z0 表示D12中的值,D52 =  D11+D12,Z0=3

    。。。

    第9次循环开始,Z0=8,则 D11Z0 表示 D19中的值,D52 = D11+D12+。。。+D19,Z0=9

    由上可以看出,D52最终的值在for循环结束后即D11-D19的值之和,我们称之为和校验,

    校验用来告诉信息接收方进行报文的数据验证信息,如果报文在通讯过程中受干扰或丢失,则校验和便会出错

    循环结束后,Z0的值为9,此时 D11Z0 表示 D20 中的值

    因此 ASCII D52 D11Z0 K2 此时可以理解为  ASCII D52 D20 K2,

     这个for循环的累加过程 数学表示如下 :

    (先写到这,如过有疑问,欢迎留言,再解答)

  • 相关阅读:
    分清抽象类和接口的区别
    【Android界面实现】FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
    Android多线程----异步消息处理机制之Handler详解
    Android中关于Handler的若干思考
    Axure Base 09 带遮罩层的弹出框
    Axure Base 08 动态面板的用途
    Axure Base 07 元件使用思路的补充
    Axure Base 03
    Axure Base 02
    Axure Base 01
  • 原文地址:https://www.cnblogs.com/aiyauto/p/12105224.html
Copyright © 2011-2022 走看看