可以使用SCL指令做此类的定标转换,该指令的作用是把一个16进制数据线性转换成一个BCD码的数据,这条指令有3个操作数见图1,S为源字,P1是参数首字,R是结果字,从P1到P1+3要设置4个值,P1是AY,P1+1是AX,P1+2是BY,P1+3是BX(见图2),在此例中因为输入的数据范围是0-1770 HEX,所以P1+1和P1+3分别是0和1770,而定标结果是0-100,所以P1和P1+2分别是0和100.具体可以这么做,例如AD041的输入通道是002,把DM0作为参数首字,D10作为结果字存放0-100的距离值。
SCL 2 DM0 DM10
在执行SCL指令前先用MOV指令对DM0-DM3里分别赋值0,0,100,1770。之后SCL指令就能把输入的模拟量值定标成0-100的距离值了。
CPM1A-MAD02-CH使用了4路输入,但是它的输入数据是每两路放一个通道的,这样就无法进行监视或处理单独一路的输入数据了,有什么办法可以把两路数据分离开吗?
可以用MOVD指令,分别把两路数据传送到一个单独的通道。该指令有3个操作数,
操作数排列如图1,S是源字,也就是用模拟量输入的通道,DI是指定数位号,每个数字指定方式如上图2,也就是指定从源字中哪一个数字开始传送(一个通道是4个16进制数字,一路输入是半个通道,也就是2个16进制数字),传送几个数字,传送到目标通道的哪个数字,D就是指定目标通道。例如现在MAD02的第一第二路输入的通道是002通道,现在要把第一路数据传送到DM0,第二路数据传送到DM1,MOVD指令