说明:
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循环的累加过程 数学表示如下 :
(先写到这,如过有疑问,欢迎留言,再解答)