CPLD是complex programmable logic device,即复杂可编程逻辑器件。用户可以把编译好的CPLD程序通过专用的CPLD程序烧写器烧写到CPLD芯片中,从而实现程序设计的数字逻辑功能。所以CPLD可以通过编写特定逻辑的硬件程序,代替分立的数字逻辑芯片实现各种数字逻辑的功能。
#include <stdio.h>int main() {
int i,j,L,W,a,b,dr,dc,rs,cs
int pLd,pWd,vLd,vWd// 板材长、宽方向余料尺寸
int parea,varea // 余料面积
int amount // 小料数量
int direction // 小料方向,长与L平行为0,垂直为1
char select[5]
FILE *fp
char filename[] = "data.txt"
if((fp = fopen(filename,"at")) == NULL) {
printf("\t无法打开数据文件:%s\n",filename)
return 1
}
while(1) {
printf("\t*** 板材下料助手 ***\n\n")
printf("\t1、输入板材及小料尺寸\n")
printf("\t2、显示下料信息\n")
printf("\t3、数据存盘\n")
printf("\t0、退出助手\n\n")
printf("\t请选择:")
scanf("%s",select)
switch(select[0]) {
case '1' :
printf("\t请输入板材及小料规格:")
while(scanf("%d%d%d%d",&L,&W,&a,&b) != 4)
printf("\t***** 非法数据!请重新输入:")
break
case '2' :
if(!(L && W && a && b)) {
printf("\t***** 缺少板材或小料规格数据。\n")
break
}
pLd = L % a, pWd = W % b// 平行方向下料
parea = L * pWd + W * pLd - pLd * pWd
vLd = L % b, vWd = W % a// 垂直方向下料
varea = L * vWd + W * vLd - vLd * vWd
if(parea > varea) { // 垂直下料更合理
direction = 1
dr = a, dc = b
rs = W / a, cs = L / b
}
else { // 水平下料更合理
direction = 0
dr = b, dc = a
rs = W / b, cs = L / a
}
amount = rs * cs
printf("\t板材规格:%d × %d\n",L,W)
printf("\t小料规格:%d × %d\n",a,b)
printf("\t小料数量:%d\n",amount)
printf("\t下料方向:%s\n",direction ? "垂直" : "水平")
printf("\t余料面积:%d\n",direction ? varea : parea)
printf("\t使 用 率:%.0lf%%\n",100.0 * amount * a * b / L / W)
printf("\t小料位置数据:\n")
for(i = 0 i < rs * dr i += dr) {
for(j = 0 j < cs * dc j += dc)
printf("\t%d,%d\n",i,j)
}
printf("\n")
break
case '3' :
if(!(L && W && a && b)) {
printf("\t*****缺少板材及小料规格数据。\n")
break
}
fprintf(fp,"板材规格:%d × %d\n",L,W)
fprintf(fp,"小料规格:%d × %d\n",a,b)
fprintf(fp,"小料数量:%d\n",amount)
fprintf(fp,"下料方向:%s\n",direction ? "垂直" : "水平")
fprintf(fp,"余料面积:%d\n",direction ? varea : parea)
fprintf(fp,"使 用 率:%.0lf%%\n",100.0 * amount * a * b / L / W)
fprintf(fp,"小料位置数据:\n")
for(i = 0 i < rs * dr i += dr) {
for(j = 0 j < cs * dc j += dc)
fprintf(fp,"%d,%d\n",i,j)
}
fprintf(fp,"\n")
break
case '0' : fclose(fp) return 0
}
}
fclose(fp)
return 0
}
1、"PLD"-可编程逻辑器件:
它是做为一种通用集成电路生产的,逻辑功能按照用户对器件编程来设计。
目前使用的PLD产品主要有:
①现场可编程逻辑阵列FPLA。
②可编程阵列逻辑PAL。
③通用阵列逻辑GAL。
④可擦除的可编程逻辑器件EPLD。
⑤现场可编程门阵列FPGA.其中EPLD和FPGA的集成度比较高。有时又把这两种器件称为高密度PLD。
2、"PLC"-可编程逻辑控制器:
是一种专门为在工业环境下应用而设计的数字运算 *** 作的电子装置。
它采用可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算术运算等 *** 作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。
PLC及其有关的外围设备都应该按易于与工业控制系统形成一个整体,易于扩展其功能的原则而设计。
3、PLC 和PLD的关系:PLC可编程控制器也是计算机家族中的一员,它是为工业控制应用而设计制造的 。
扩展资料:
1、PLC 工作原理:
当可编程逻辑控制器投入运行后,其工作过程一般分为三个阶段,即输入采样、用户程序执行和输出刷新三个阶段。完成上述三个阶段称作一个扫描周期。在整个运行期间,可编程逻辑控制器的CPU以一定的扫描速度重复执行上述三个阶段。
①输入采样:
在输入采样阶段,可编程逻辑控制器以扫描方式依次地读入所有输入状态和数据,并将它们存入I/O映象区中的相应的单元内。输入采样结束后,转入用户程序执行和输出刷新阶段。在这两个阶段中,即使输入状态和数据发生变化,I/O映象区中的相应单元的状态和数据也不会改变。
因此,如果输入是脉冲信号,则该脉冲信号的宽度必须大于一个扫描周期,才能保证在任何情况下,该输入均能被读入。
②用户程序执行:
在用户程序执行阶段,可编程逻辑控制器总是按由上而下的顺序依次地扫描用户程序(梯形图)。
在扫描每一条梯形图时,又总是先扫描梯形图左边的由各触点构成的控制线路,并按先左后右、先上后下的顺序对由触点构成的控制线路进行逻辑运算,然后根据逻辑运算的结果,刷新该逻辑线圈在系统RAM存储区中对应位的状态。
或者刷新该输出线圈在I/O映象区中对应位的状态;或者确定是否要执行该梯形图所规定的特殊功能指令。
③输出刷新:
当扫描用户程序结束后,可编程逻辑控制器就进入输出刷新阶段。在此期间,CPU按照I/O映象区内对应的状态和数据刷新所有的输出锁存电路,再经输出电路驱动相应的外设。这时,才是可编程逻辑控制器的真正输出。
2、PLD分类:
①按集成度划分:
(1)低集成度芯片。早起出现的PROM、PAL、可重复编程的GAL都属于这类,可重构使用的逻辑门数大约在500门以下,称为简单PLD。
(2)高集成度芯片。如现在大量使用的CPLD、FPGA器件,称为复杂PLD。
②按结构划分:
(1)乘积项结构器件。其基本结构为“与-或”阵列的器件,大部分简单PLD和CPLD都属于这个范畴。
(2)查找表结构器件。由简单的查找表组成可编程门,再构成阵列形式。大多数FPGA是属于此类器件。
③按编程工艺划分:
(1)熔丝型器件。早期的PROM器件就是采用熔丝结构的,编程过程是根据设计的熔丝图文件来烧断对应的熔丝,达到编程和逻辑构建的目的。
(2)反熔丝型器件。是对熔丝技术的改进,在编程处通过击穿漏层使得两点之间获得导通,这与熔丝烧断获得开路正好相反。
(3)EPROM型。称为紫外线擦除电可编程逻辑器件,是用较高的编程电压进行编程,当需要再次编程时,用紫外线进行擦除。
(4)EEPROM型。即电可擦写编程软件,现有部分CPLD及GAL器件采用此类结构。它是对EPROM的工艺改进,不需要紫外线擦除,而是直接用电擦除。
(5)SRAM型。即SRAM查找表结构的器件,大部分FPGA器件都采用此种编程工艺,如Xilinx和Altera的FPGA器件。
这种方式在编程速度、编程要求上要优于前四种器件,不过SRAM型器件的编程信息存放在RAM中,在断电后就丢失了,再次上电需要再次编程(配置),因而需要专用的器件来完成这类配置 *** 作。
(6)Flash型。Actel公司为了解决上述反熔丝器件的不足之处,推出了采用Flash工艺的FPGA,可以实现多次可编写,同时做到掉电后不需要重新配置,现在Xilinx和Altera的多个系列CPLD也采用Flash型。
参考资料:百度百科-可编程逻辑控制器
百度百科-PLD
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)