条件:欧姆龙plc变送器的输出信号为0-10v,对应温度为-100--200摄氏度;cp1h的模拟量输入量程设置为0-10v,分辨率选择6000目的:使用scl2指令将模拟量转换得到的数据0-6000(bin)对应缩放到-100--200(bcd)摄氏度显示输出。
程序如下:
scl2控制字解释:200:cp1h的模拟量输入通道1d100:偏移量(带符号bin)详见下图d101:δx(带符号bin)详见下图d102:δy(bcd)详见下图d200:转换结果通道
结果:程序执行后就可以实现0-6000(bin)转换到-100--200(bcd)摄氏度显示了。
注:因为bcd数是以十六进制来表示十进制数据的,因此对应的温度值应该用16进制方式去监视。例如:当200ch中的数据是&4000(即6.66v电压输入),那么用十六进制监控数据d200应该显示#100。&符号表示十进制数;#表示十六进制数。
scl指令应用案例
条件:欧姆龙plc变送器的输出信号为0-10v,对应压力为0-400mpa;cp1h的模拟量输入量程设置为0-10v,分辨率选择6000。
目的:使用scl指令将模拟量转换得到的数据0-6000(bin)对应缩放到0-400mpa(bcd)显示输出。程序如下:
结果:程序执行后就可以实现0-6000(bin)转换到0-400(bcd)的压力值了。注:因为bcd数是以十六进制来表示十进制数据的,因此对应的压力值应该用16进制方式去监视。例如:当200ch中的数据是&3000(即5v电压输入),那么用十六进制监控数据d200应该显示#200。&符号表示十进制数;#表示十六进制数。
使用cpm1a-ad041的模块采集模拟量4-20ma的信号,该模拟量信号取自一位移传感器信号,代表一个0-100mm的距离,要怎么才能把输入通道里的数据转换成所对应的这个距离值呢?
可以使用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指令
cpm1a-ad041的外部输入电流和电压信号要如何接线?
电压输入:把外部的输入正信号接v in,负信号接com端;
电流输入:把模块上v in和i in的端子短接后接输入正信号,负信号接com端。
cpm1a-mad02-ch的参数应该怎么设置?
在n+1通道(n为分配给cpu单元或前一个扩展单元的最后一个输出通道)的每个位对应的作用按照如下表分配,在量程对应的位是设定输入输出的量程范围,在启动位和平均值对应的位是设定该功能使用与否,例如4路输入1路输出全用4-20ma,平均值功能不用,就在n+1通道设置c3ff hex就可以了。
cp1h-x□40d□-□的型号是如何定义的?
欧姆龙plcmovd指令的解释
举例说明如下:
s:200ch为传送源地址,初始值为#abcd(十六进制)。d:300ch为传送目标地址,初始值为#0000(十六进制)。
例1:d300为#0211:从左往右解释:2表示传送到目标字以位2开始(即8-11位)。1表示传送位数2位。1表示传送源字以位1开始(即4-7位)。程序执行后,300ch中的值为#bc00。例2:d300为#0230:从左往右解释:2表示传送到目标字以位2开始(即8-11位)。3表示传送位数4位。0表示传送源字以位0开始(即0-3位)。程序执行后,300ch中的值为#cdab。
cpm2a-30cdr-a配cpm1a-ad041和cpm1a-20edr1地址是如何分配的?
cx-programmer下传程序的时提示um区被保护,如何处理?
① 新建plc程序时,在设备型号后的设定中选中了文件内存只读,只要把文件内存只读的钩去掉即可;
② 询问cpu型号:
a.cpm系列,dm 6602设为了×××1,可以在编程模式中将dm6602设为×××0后断电上电即可;
b.c200ha或cqm1系列,cpu盖板下的开关中的dip-1打在了on上,断电将dip-1打为off上电即可;
c.cp/cj/cs系列,如果cpu被加过写保护密码,需要先释放密码,cpu盖板下的开关中的dip-1打在了on上,断电将dip-1打为off上电即可。
在输入模拟量数据后,如果要把数据定标成带小数点的数据,可以怎么做?
两种办法,一是把定标的结果数据放大10的n次方来得出小数点,例如需要2位小数,例如把0-0fa0的输入定标成0-10.00v的bcd码,带两位小数,那就当成0-1000来定标。如果是cp1h或cqm1h那还有一种方法,就是如果把源数据转成浮点数来做浮点运算,也能做到,但因为cpm系列的plc不支持浮点数,所以不能用这个方法。
4-20ma模拟量输入的时候,输入信号为4ma,但输入通道的数据在0,65535两个值跳,这是正常的吗?实际使用中如果不能有这样的数据怎么办?
65535的16进制其实是ffff,因为plc是用二进制补码表示负数的,其实这个数据是代表-1,也就是模拟量输入在0到-1之间跳动,是属于正常的。如果处理跳变的现象,不要直接用输入通道的数据,可以把这个数据传送到另一个中间通道后再使用,之前用一条cps比较指令判断输入信号是否是负的,如果是负的,就不传送输入通道数据而传送0到这个中间通道,把信号作为0来处理
几根常用的rs-232c通讯电缆的接线?
①电缆xw2z-200s-v连接图:
plc(9孔)侧 pc(9针计算机)侧
2――――2
3――――3
9――――5
plc的4与5短接
pc侧的4与6短接, 7与8短接
②电缆xw2z-200s-cv连接图:
plc(9孔)侧 pc(9针计算机)侧
2――――2
3――――3
4――――8
5――――7
9――――5
③电缆xw2z-200p-v连接图:
plc(25孔)侧 pc(9针计算机)侧
2――――2
3――――3
7――――5
plc侧4,5短接,6,20短接。
计算机侧4,6短接,7,8短接。
④电缆xw2z-200t连接图:
plc(9孔)侧 触摸屏(9孔)侧
2――――3
3――――2
9――――9
plc和触摸屏两侧的4,5都要短接。
cpm1a的外设口用cpm1-cif11转成rs-422口后连计算机侧的rs-422电缆接线?
cif11 计算机
sda———rda
sdb———rdb
rda———sda
rdb———sdb
nc模块的参数设置注意事项
a)当m+2控制字设置为0000,即x轴使用保存在pcu的flash中的轴参数时,nc模块控制电机正常;
b)当m+2控制字设置为0001,即x轴使用分配给特殊i/o单元的数据存储器区域字设置的轴参数时,nc模块控制电机不正常。
具体表现如下:
在a)状态时,开机搜索原点(n.06),然后手动控制电机进位,然后执行原点返回命令(n.07),电机返回原点;
在b)状态时,开机搜索原点,然后手动控制电机进位,然后执行原点返回命令(n.07),电机停止不动,检查n+2.05位,发现为on,即表示定位结束。
根据现象,判断是nc模块没有完成正确的设置,以至于它没有能够正确判断相对和绝对移动。检查公共参数区域(m,m+1……),没有发现问题
。但是在检查到m+25~m+28参数区域时,这4个通道内值为0。
这4个通道分别是设置ccw/cw的软限位的。
在以前的试验中我们曾发现过当软限位未设置的情况下,nc模块不能执行正确的绝对和相对移动,现象是让电机按照绝对移动或者相对移动模式,运行结果是一样的,按照相对运行的模式运行。
所以估计是这个区域没有设置导致客户出现问题。将m+25~m+26设置为c0000001,m+27~m+28设置为3fffffff。断电上电,按照b)模式运行,故障消除。
cj1w-ad041的dm区设置?
对于dm字地址定义是m=20000+(单元号*100)d(m):输入使用设置d(m+1):输入信号范围设置d(m+2):输入1均值处理设置d(m+3):输入2均值处理设置d(m+4):输入3均值处理设置d(m+5):输入4均值处理设置d(m+6)~d(m+17):未使用忽略设置d(m+18):高8位是转换时间/分辨率设置,低8位是操作模式设置具体的参数设置请参照cj1/cs1模拟量i/o单元中文操作手册p86
例:
我用压力传感器输入4-20ma,对应工作压力为0-70p,用scl指令源通道我用200,参数字用d100(内存设置d100,d101,d102,d103怎么写),我要做4个报警,在用cmp指令做比较的时候,数据比较1写d100,数据比较2写4个报警的具体数值吗?
1:分辨率为6000的情况下,四个参数字如下:d100:#0 d101:#0 d102:#70 d103:#1770 ;2:分辨率为12000的情况下,四个参数字如下:d100:#0 d101:#0 d102:#70 d103:#2ee0 ;
比如scl指令的结果通道用的是d300,那么d300里面看到的就是0-70p之间的值,cmp指令和d300里面的当前工程量作比较,满足一定条件输出报警
例2:
两个压力传感器是电流型4-20ma输出、其量程为0-25mpa,我将其分别接入200ch、201ch,实际工作中的压力计算公式是:实际压力 x=20*25*d200/6000。(分辨率假定为6000);
我的程序是:--p_on-------mov #0 d100
|-mov #0 d101
|-mov #25 d102
|-mov #1770 d103
--p_on-------scl 200 d100 d200
|-cmp d200 d0(设定值)
|-p_on--1000
你的定标是正确的,不过d102设成#25太小,精度太低,建议设为#2500.比较程序的判别标记不能使用p_on