三菱RS指令无协议通信功能概述

参考文献
《 三菱PLC通信与控制应用编程实例》李江全 中国电力出版社
《FX系列微型可编程控制器用户手册》 三菱电机

简介

FX系列是三菱公司推出的小型PLC。
在这里插入图片描述

FX2N(已于2013年停产)是FX系列中功能最强、速度最快的小型PLC,在兼容了上一代PLC全部功能的基础上还增加了其他功能。其基本单元有16/32/48/64/80/128共6种基本规格。
在这里插入图片描述
FX2N-64MR-001为32点输入/32继电器输出、交流电原型PLC基本单元。

三菱 无协议通信

相当于西门子PLC的自由口通信。

无协议通信方式是只需要对数据格式、传输速率、起始/停止码等进行简单设定,就能实现PLC与各种有RS-232C接口的设备之间的通信的通信方式。可以使用用户自定义的通信规约。
FX系列的RS指令就是一种串行口无协议通信指令。无协议通信采用RS-232C接口时不需要加装额外模块。

无协议并非指通信双方无需协议,而是协议比较简单,只需一些简单设定即可实现数据交换。

无协议通信的基本格式如下:
在这里插入图片描述

发送数据的写入:以脉冲方式将发送请求指令置ON,将要发送的数据写入到D200开始的软元件(指定的点数区域),并将发送请求(M8122)置ON,执行数据的发送。
接收数据的移动:从连接的设备接收到数据后,接收结束标志位(M8123)置ON,请将D500中保存的接收数据移动到其他的保存区域中。

与RS指令有关的特殊辅助继电器

无协议通信时用到的特殊辅助击电器和特殊数据寄存器见下表:
在这里插入图片描述

M8122(发送等待):无控制线场合,由于是全双工双向通信, 所以等待发送标志位M8121不置ON。
M8122(发送请求):在等待接收状态下或接收完成状态下,M8122被脉冲指令置位时,发送数据;发送结束后,M8122自动复位。
M8123(接收完成标志):当接受完成标志M8123为ON时,将接收到的数据从数据接受缓存区传送到其他储存区,然后用户程序将M8123复位,PLC再次处于等待状态,等待接受后面的数据。

发送启动只需一次, 即置位一次M8122, 通信指令RS需长期驱动, 直至发送和接收都完成。发送完成后, M8122会自动复位,
M8123则需在接收数据完成后手工复位。

M8161(数据位长):无协议通信方式有两种数据处理格式,当M8161设置为OFF时,为16位数据处理模式;反之则为8位数据处理模式。
16位数据模式下,16位数据分成低 8位、高8位后被发送接收 。
8位数据模式下,忽略高8位,仅将低8位视为有效的数据。

其他:
M8000-运行监控常开触点,PLC运行时一直ON。
M8001-运行监控常闭触点,PLC运行时一直OFF。
M8002-初始化脉冲常开触点,PLC运行时ON一个扫描周期。
M8003-初始化脉冲常闭触点,PLC运行时OFF一个扫描周期。
——
D8120(通信格式):设定数据位数、校验位、停止位、传输速率等。
在这里插入图片描述
修改D8120设置后, 需通断PLC电源一次。
使用例:
b15…b0

数据长度:8=1
校验码:无校验=00
停止位:1=0
波特率:9600=1000
10000001=H81
D8120写入H0C81就行了。//注意是H0C,不是HOC

D8124(起始符):在通信格式设定中, 设定有起始符(报头)时, 则发送数据时, 在指定的发送数据的开头处附加上D8124的低位1个字节的数值后发送;接收数据时, 也是在接收到D8124的低位1个字节的数值时开始接收。
D8125(终止符):在通信格式设定中, 设定为有终止符(报尾) 时, 则发送数据时, 在指定的发送数据的结尾处添加上D8125的低字节的数据后发送;接收数据时, 也是在接收到D8125的低字节的数据后才表示接收结束。
在这里插入图片描述

RS串行通信指令

该指令是RS232串口发送和接收串行数据的指令,格式如下:
在这里插入图片描述

[S]+m-1为数据缓冲发送区;[D]+n-1为数据缓冲发送区。

RS指令的驱动输入X1为ON时,PLC处于发送接收的等待状态

一次完整的通信过程中, RS指令必须一直保持有效直到接收数据完成。
RS指令在程序中可以无数次地使用, 但是正在驱动中的指令请保持一个。

用RS指令发送和接收数据的过程如下:

  1. 通过向特殊数据寄存器D8120写数据来设置数据的传输格式。一般用初始化脉冲,M8002驱动的MOV指令将数据的传输格式(数据位数、校验位、停止位、传输速率等)写入D8120中。
  2. 驱动RS指令。当RS指令被驱动时,PLC被置为发送接收的等待状态。RS指令应总是处于被驱动的状态。
  3. 数据发送。向指定的发送数据区写入指定数据,并置位发送请求标志M8122,开始执行中断发送(与运算周期无关);发送完成后,M8122被自动复位。
  4. 数据接收。执行了RS指令后,变为等待接收中。从连接设备中断接收数据(与运算周期无关),接收完成后,接收完成标志M8123被置位。用户程序利用M8123,将接收到的数据存入指定的储存区,若还需要接收数据,需要用户程序将M8123复位。
    接收结束成立条件:
    ●接收到了RS指令中设定的接收点数部分的数据时;
    ●接收到报尾(报尾的指定设定为有效);
    ●数据接收超时(超时时间由D8129设定);

在这里插入图片描述
更新记录
2022.1.3 例行更新。

  • 11
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我会尽力为您解答。首先,让我们来了解一下凑硬币问题。 在凑硬币问题中,我们需要找到最少的硬币数来凑成给定的金额。例如,如果我们需要凑成 11 元,而有 1 元、2 元、5 元三种不同面值的硬币可供使用,那么最少需要使用 3 枚硬币,即 5 元、5 元和 1 元。 下面是一种使用动态规划解决凑硬币问题的方法: 1. 创建一个长度为 amount+1 的数组 dp,其中 dp[i] 表示凑成面值为 i 元所需的最少硬币数。 2. 初始化 dp[0] 为 0,其余元素初始化为一个较大的数(例如 amount+1),表示当前面值无法被凑成。 3. 遍历硬币数组 coins,对于每个硬币,遍历 dp 数组,更新 dp[j] 的值为 dp[j-coins[i]]+1,其中 j>=coins[i],表示当前面值可以被凑成。 4. 最终 dp[amount] 就是凑成 amount 元所需的最少硬币数,如果 dp[amount]>amount,则表示无法凑成给定金额。 下面是使用 JavaScript 实现该算法的代码: ```javascript function coinChange(coins, amount) { const dp = new Array(amount + 1).fill(amount + 1); dp[0] = 0; for (let i = 0; i < coins.length; i++) { for (let j = coins[i]; j <= amount; j++) { dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1); } } return dp[amount] > amount ? -1 : dp[amount]; } ``` 这个函数接受两个参数,一个是硬币数组 coins,另一个是需要凑成的金额 amount。最终返回凑成 amount 元所需的最少硬币数,如果无法凑成则返回 -1。 例如,若 coins = [1, 2, 5],amount = 11,则 coinChange(coins, amount) 的返回值为 3,表示凑成 11 元最少需要 3 枚硬币。 希望这个简单的解释和代码能够帮到您,如果您还有其他问题,请随时问我。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值