编程块池
❶ PLC编程中程序块的用法
先编写程序块,定义好输入和输出,在需要的地方调用就可以,不同品牌的PLC调用方法有些不同,不过基本都是这思路。
❷ 用C语言编程
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void FunctionTest( double **a , int row)
{
int i=0, k=0, j=0;
double dMinDistance=0, dt=0, t=0;
for ( i=2; i < row-1; i++ )
{
k=i;
for ( j=i+1; j < row; j++ )
{
if ( sqrt(pow(a[k][0], 2) + pow(a[k][1], 2)) > sqrt( pow(a[j][0], 2) + pow(a[j][1], 2) ) )
{
k=j;
}
}
if ( k!= i)
{
t=a[i][0];a[i][0]=a[k][0];a[k][0]=t;
t=a[i][1];a[i][1]=a[k][1];a[k][1]=t;
}
}
dMinDistance = sqrt( pow( a[0][0]-a[2][0], 2) + pow(a[0][1]-a[2][1],2) );
for ( i=2; i<row-1; i++ )
{
dt= sqrt( pow( a[i][0]-a[i+1][0],2) + pow( a[i][1]-a[i+1][1], 2 ) );
if ( dMinDistance < dt )
{
dMinDistance = dt;
}
}
dt = sqrt( pow( a[1][0]-a[row-1][0], 2) + pow(a[1][1]-a[row-1][1],2) );
dMinDistance = ( dMinDistance < dt ) ? dt : dMinDistance;
printf( "\n小羊最小的跨越距离为: %lf\n", dMinDistance );
}
int main()
{
int n=0, i=0;
double **a;
printf( "请输入整数n:");
scanf( "%d", &n );
if ( n >0 )
{
a = (double **) malloc( sizeof(double*) * n );
}
for ( i=0; i < n; i++ )
{
a[i] = (double*)malloc( sizeof(double) * 2);
switch ( i )
{
case 0:
printf( "\n请输入小羊的坐标X Y(空格分隔):");
break;
case 1:
printf( "\n请输入娃娃坐标X Y(空格分隔):");
break;
default:
printf( "\n请输入石头坐标X Y(空格分隔):");
break;
}
scanf( "%lf%lf", &a[i][0], &a[i][1]);
printf( "\n");
}
FunctionTest(a, n );
for ( i=0; i <n; i++ )
{
free(a[i]);
}
free(a);
return 0 ;
}
❸ C语言如何实现内存池
原理就是先申请一大块内存,按照不同尺寸分成很多固定块. 比如16字节100块儿,32字节100块儿.64字节50块儿,具体多少块儿要看你的项目需求,我这里只是举例,反正应用时保证够就行.
然后程序运行时,不再用malloc和new来申请内存. 而是从这些块儿里申请.如果一个结构体A它的尺寸是30字节. 那么就从内存池里申请一块儿32字节的给他.
当然释放时,也要归还给内存池.
内存池负责管理一个Free-Block链表.
❹ 如何分块进行C语言编程(详细)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char filename[]="查询结果.txt";
FILE *fp;
struct ticket
{
char banci[20]; //班次
char shifadi[20]; //始发地
char zhongdian[20];//终点站
int date; //日期
int rest; //剩余票数
struct ticket *next;
}Node;
//1、创建链表
struct ticket *creat(int n)
{
struct ticket *head,*tail,*newnode;
int i;
head=(struct ticket *)malloc(sizeof(Node));
head->next=NULL;
tail=head;
printf("车辆班次、始发地、终点站、日期(月 日 如九月六日0906)、剩余票数\n");
for(i=0;i<n;i++)
{
newnode=(struct ticket *)malloc(sizeof(Node));
printf("请输入第%d次的数据:\n",i+1);
scanf("%s",newnode->banci);
scanf("%s",newnode->shifadi);
scanf("%s",newnode->zhongdian);
scanf("%d",&newnode->date);
scanf("%d",&newnode->rest);
tail->next=newnode;
tail=newnode;
}
tail->next=NULL;
return(head);
}
//4、浏览
void print(struct ticket *head)
{
struct ticket *p;
p=head->next;
fp=fopen(filename,"ab+");
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
fprintf(fp,"班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
fprintf(fp,"%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
p=p->next;
}
fclose(fp);
}
//2、增加班次
struct ticket *insert (struct ticket *head)
{
struct ticket *newnode,*p, *q;
printf("输入增加的车辆班次、始发地、终点站、日期(月 日 如九月六日09 06)、剩余票数\n");
scanf("%s",Node.banci);
scanf("%s",Node.shifadi);
scanf("%s",Node.zhongdian);
scanf("%d",&Node.date);
scanf("%d",&Node.rest);
newnode=(struct ticket *)malloc(sizeof(Node));
strcpy(newnode->banci,Node.banci);
newnode->date=Node.date;
newnode->rest=Node.rest;
strcpy(newnode->shifadi,Node.shifadi);
strcpy(newnode->zhongdian,Node.zhongdian);
p=head->next;
if (p==NULL)
{
head->next=newnode;
newnode->next=NULL;
}else{
while(p!=NULL)
{
q=p;
p=p->next;
}
q->next=newnode;
newnode->next=NULL;
}
return (head);
}
//6、订票
struct ticket *book(struct ticket *head,char b[],int n)
{
struct ticket *p;
p=head->next;
if(n==1)
{
while(p!=NULL&&strcmp(b,p->banci)!=0){
p=p->next;
}
if(p==NULL)
printf("你所预定的班次不存在");
if(strcmp(b,p->banci)==0)
{
if(p->rest>0)
{
p->rest=p->rest-1;
printf("订票成功");
}
else{
printf("票已售完");
}
}
}
if(n==2)
{
while(p!=NULL&&strcmp(b,p->banci)!=0){
p=p->next;
}
if(p==NULL){
printf("你所退定的班次不存在");
}
if(strcmp(b,p->banci)==0)
{
if(p->rest>0)
{
p->rest=p->rest+1;
printf("退票成功");
}
}
}
return (head);
}
//3、删除班次
struct ticket *del(struct ticket *head,char b[])
{
struct ticket *p,*q;
p=head->next;
while(p!=NULL&&strcmp(b,p->banci))
{
q=p;
p=p->next;
}
if (p==NULL)
{
printf("未找到你要删除的班次!~、\n");
}else{
if((p==head->next)&&(strcmp(b,p->banci)==0))
{
if (p->next==NULL)
{
free(p);
head->next=NULL;
}else{
head->next=p->next;
free(p);
}
printf("删除成功!~、\n");
}else if((p!=head->next)&&(strcmp(b,p->banci)==0))
{
if (p->next==NULL)
{
free(p);
q->next=NULL;
}else{
q->next=p->next;
free(p);
}
printf("删除成功!~、\n");
}
}
return (head);
}
//5、查询
struct ticket *chaxun1(struct ticket *head,char a[])
{
struct ticket *p;
p=head->next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(strcmp(p->banci,a)==0)
{
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
break;
}
else
p=p->next;
}
if(p==NULL){
printf("查询班次不存在\n");
}
return(head);
}
struct ticket *chaxun2(struct ticket *head,char a[])
{
struct ticket *p;
p=head->next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(strcmp(p->shifadi,a)==0)
{
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
break;
}
else
p=p->next;
}
return(head);
}
struct ticket *chaxun3(struct ticket *head,int m)
{
struct ticket *p;
p=head->next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(p->date==m)
{
printf("%s\t%s\t%s\t%d\t%d \n",p->banci,p->shifadi,p->zhongdian,p->date,p->rest);
break;
}
else
p=p->next;
}
return(head);
}
void main()
{
printf("=============================车票查询订购系统===============================\n");
printf("1、读入车辆班次初始化信息\n");
printf("2、增加班次信息\n");
printf("3、删除班次信息\n");
printf("4、浏览所有班次\n");
printf("5、查询\n");
printf("6、订票退票\n");
printf("7、退出\n");
while(1)
{
int i,n,m,x;
char a[20],d[20],e[20];
struct ticket *head;
printf("请输入要使用的业务前相应的数字:\t");
scanf("%d",&i);
if(i==7)
break;
else
switch(i)
{
case 1: printf("输入录入的个数:\t");
scanf("%d",&n);;
head=creat(n);
break;
case 2:
insert(head);
break;
case 3:
printf("输入要删除的班次:\t");
scanf("%s",e);
del(head,e);
break;
case 4:
print(head);
break;
case 5:printf("1、按班次查询:\t");
printf("2、按始发站查询:\t");
printf("3、按日期查询:\t");
scanf("%d",&x);;
switch(x)
{
case 1:printf("输入要查询班次:\t");
scanf("%s",d);
chaxun1(head,d);break;
case 2:printf("输入要查询的始发站(请查询后输入有效的始发站):\t");
scanf("%s",d);
chaxun2(head,d);break;
case 3:printf("输入要查询的日期(格式0101):\t");
scanf("%d",&m);;
chaxun3(head,m);break;
}
break;
case 6:
printf("订票输入1,退票输入2:\t");
scanf("%d",&m);;
printf("输入你要订或退的班次:\t");
scanf("%s",a);
book(head,a,m);
break;
}
}
}
看了这个C语言版的车票订购查询系统吧,想必楼主会非常明白什么叫分块了,一个三百多行的程序 ,而主函数就占了50行左右,函数功能分工明确,各负其职,连在一起就可以组成一个有着增、删、改、查等功能的一个简单系统。分工其实就是把某一功能的代码放一起,避免重复使用,也使主函数简单明了。楼主觉得呢?
❺ 什么是plc的功能块图编程
一般来讲,功能块,就是将一个plc程序中频繁使用到代码,封装起来,以便每次的调用。你这里所说的调用功能块,就是将其实例化了啊。通常编写好功能块以后,到你要使用功能块的程序中,插入功能块,就行了,各家plc开发平台的调用方法都相近。调用之后,你只需要给调用的功能块配置好输入参数和输出参数,就可以了。比如,你做了一个加法的功能块,把两个数相加,然后结果得到一个数,调用的时候,就是给输入两个地址区比如说欧姆龙的d0,d1,然后输出给一个地址区比如d3,这样,程序运行的时候,你给d0和d1送数,就能得到结果,放在d3中了。
❻ 造浪池的原理是什么最好写得简明易懂,快!!!!!
海底地壳板块运动,说白了就是地震。人工是依照此原理,在泳池地板安装可摆动的砌块,通过控制砌块的摆动达到控制不同形式波浪的目的。
❼ dcs系统中编程常用的功能块有哪些
虽然不同公司的DCS中的功能块的表现形式和名称都可能出现不同,但我们可大体确定有那么几类模块是常用的:
1.
输入输出模块:AI,AODI,DO
2.
数学计算模块:加、减、乘、除
3.
逻辑计算模块:与、或、非
4.
转换模块:量程转换、数据类型
5.
功能模块:报警、趋势、面板、PID
特殊行业还有一些DCS公司开发的或自己编写的特殊功能的模块。
❽ C语言编程
1.可以定义一个比实际需要多一的数组,这样下标就可以从1开始了
2.可以用malloc()分配一个实际需要大小的数组,然后使指针值减1,然后下标就可以从1开始了,即:
int *a=malloc(sizeof(int)*10);/*创建一个有10个元素的数组*/
--a;
之后,可以用a[1]~a[10]操作这个有10个元素的数组。
释放空间要用free(a+1);
❾ s7-300为什么要用块来编程,块之间的调用有什么好处
给点力哈,做成模块就主为了使程序容易移植,清楚明了。比如,一个变送器采集程序,如果有很多路,你就可以做一个模块,在外面封装,一个输入通道,量程上限,下限,输出实际值,每次调用这个模块,在封装的通道填上输入如PIW288,量程上限1000,下限0, 则输出实际值那里填一个DB.D100储存的就可以了,不用每次写的。再如,一个电机计时,封装成一个块很方面的。再如把现场模块转化都放在一个块里,报警放在一个块里,逻辑运算放在一个块里,在主程序里分别调用,是不是很清楚明了。
❿ 什么是编程如何编写一个程序
设计环境 程序也就是指令的集合,它告诉计算机如何执行特殊的任务。
编写设计环境 程序是一项系统而繁琐的工作,它不仅需要程序设计人员具有一定的功底,更需要有良好的编程习惯和风格。良好的编程习惯和风格不仅可以使程序代码更易于读懂和修改,更重要的是,它可以使程序的结构更加合理,有助于提高程序的执行效率。
对我们要使用程序设计手段去解决的问题进行系统地分析,了解程序是做什么的,要达到一种什么样的效果等。 结构设计:也就是对程序的整体框架进行设计,设计出我们需要使用的模块等等,并画出流程图。
用户界面设计:在此,我们要设计出用于与用户交互的输入输出界面。
代码设计:在这个步骤中,我们要进行代码的编写。
调试:对程序中正在发生或可能发生的各种错误进行处理。
维护:通俗地说,维护就是对程序进行升级,对原有错误进行修改。