恭喜,你发布的帖子
发布于 2021-07-09 23:10:08
8楼
对楼主遇到的问题也有兴趣,今晚花了点时间,试着写了点代码,在真实PLC里面测试了一下,基本能实现楼主的功能;对语句做了一些注释,也许楼主可以参考一下。
//=======================判断NC当前的工作是否完成==========================
CLR //复位RLO位;
A "NC_WORK_FINISHED" //读取NC当前的工作状态
JCN END //如果NC当前的工作完成,则往下执行;否则跳转到END标签
//=====================判断输入的数据组编号是否正确========================
CLR //复位RLO位;
L MD 100 //读取当前NC输入的数据组编号
L 1
<D
JC EROR //如果NC输入的数据组编号小于1,跳转到EROR标签;
L MD 100 //读取当前NC输入的数据组编号
L 50
>D
JC EROR //如果NC输入的数据组编号大于50,跳转到EROR标签;
//================根据输入的数组编号,获取对应的数组首地址=================
L MD 100 //读取当前NC输入的数据组编号 (n)
L 1 //公差
-D //差值暂存在累加器1中 (n-1)
L 40 //每个数组40个字节偏移
*D //当前数组的首地址(n-1)×40 暂存累加器1中
SLD 3 //累加器1中的内容左移三位,获得当前数组号的字节首地址(地址格式)
LAR1 //把当前的首地址载入到地址寄存器1,源地址的首地址
LAR2 P#0.0 //初始化地址寄存器2,目标地址的首地址
//===============将当前数组(10个浮点数)写到对应的目标地址中================
OPN DB 100 //打开DB100
L 10 //设定循环次数
NEXT: T LW 20 //暂存循环次数
L DBD [AR1,P#0.0] //读取当前数组中的数据★
T MD [AR2,P#20.0] //把当前数组中的数据写到目标地址中★ MD20 ~MD56
+AR1 P#4.0 //源地址递增四个字节
+AR2 P#4.0 //目标地址递增四个字节
L LW 20 //读取当前的循环次数
LOOP NEXT //跳转到NEXT标签,循环次数减1,至0时,离开循环
JU END //10个数据传送完成,跳转到END标签
//=========================================================================
EROR: L 1
T MD 100 //数据组编号输入错误时,默认传送第一组数组;
END: NOP 0
如果要让PLC自动产生数组编号,可以对"NC_WORK_FINISHED"进行循环计数,计数结果存入MD100。
请填写推广理由:
分享
只看
楼主