
按照各类OB(OB1等级最低的系统组织快,其他如OB32,OB35等,号数越大,执行的优先级越高,但是他们与OB1比,它们是有特定功能的,而OB1就是普通的上下左右执行)块中的程序编写先后顺序从上往下,从左往右执行。在OB里被调用的FC或FB也和普通指令一样按先后顺序进行扫描,扫描完被调用的FC或FB后再执行OB中被调用块后面的程序。
另外,如果涉及到有中断块和程序跳转以及其他程序控制指令时,当扫描到这些指令可执行时,比如中断块,那么PLC将停止所有OB的程序执行,去执行中断,中断条件不够后才返回执行普通程序。而跳转等指令不会影响其他OB块的执行的,只是改变指令间,或者调整FC或FB块的调用执行顺序或时间而已。
// 1cpp : Defines the entry point for the console application
//
#include "stdafxh"
#include <stdioh>
#include <stdlibh>
#define MaxSize 100
#define InCreament 10
typedef int elemType;
struct SeqList
{
elemType elem; //线性表的基地址
int length; // 表的长度
int maxSize; //所占最大空间
};
void againMalloc(struct SeqList L)
{
/ 空间扩展,并由p指针所指向,原内容被自动拷贝到p所指向的存储空间 /
elemType p = (elemType )realloc(L->elem, (L->maxSize+InCreament) sizeof(elemType));
L->elem = p;
if(!p)
{
/ 分配失败则退出运行 /
printf("存储空间分配失败! ");
exit(1);
}
L->elem = p; / 使elem指向新线性表空间 /
L->maxSize = L->maxSize+InCreament; / 把线性表空间大小修改为新的长度 /
}
/ 1初始化线性表L,即进行动态存储空间分配并置L为一个空表 /
void InitSeqList(struct SeqList L)
{
if(MaxSize <= 0)
{
printf("MaxSize非法! ");
exit(1); / 执行此函数中止程序运行,此函数在stdlibh中有定义 /
}
L->elem = (elemType )malloc(MaxSizesizeof(elemType));
if(!L->elem)
{
printf("分配失败");
exit(1);
}
L->length = 0;
L->maxSize = MaxSize;
}
/ 2清除线性表L中的所有元素,释放存储空间,使之成为一个空表 /
void clearList(struct SeqList &L)
{
if(Lelem != NULL)
{
free(Lelem);
Lelem = NULL;
LmaxSize = 0;
Llength = 0;
}
return;
}
/ 3返回线性表L当前的长度,若L为空则返回0 /
int sizeList(struct SeqList L)
{
return L->length;
}
/ 4判断线性表L是否为空,若为空则返回1, 否则返回0 /
int emptyList(struct SeqList L)
{
if(L->length == 0)
{
return 1;
}
else
return 0;
}
/ 5返回线性表L中第pos个元素的值,若pos超出范围,则停止程序运行 /
elemType getElem(struct SeqList L, int pos)
{
if(pos < 0 || pos>L->length)
{
printf("元素序号越界! ");
exit(1);
}
else
return L->elem[pos-1];
}
/ 6顺序扫描(即遍历)输出线性表L中的每个元素 /
void traverseList(struct SeqList L)
{
int i;
for(i=0; i<L->length; i++)
{
printf("%d ",L->elem[i]);
}
return;
}
/ 7从线性表L中查找值与x相等的元素,若查找成功则返回其位置,否则返回-1 /
int findList(struct SeqList L, elemType x)
{
int i;
for(i=0; i<L->length; i++)
{
if(L->elem[i] == x)
{
return i;
}
}
return -1;
}
/ 8把线性表L中第pos个元素的值修改为x的值,若修改成功返回1,否则返回0 /
int updatePosList(struct SeqList L, int pos, elemType x)
{
if(pos < 0 || pos>L->length)
{
printf("元素序号越界! ");
return 0;
}
else
{
L->elem[pos-1] = x;
return 1;
}
}
/ 9向线性表L的表头插入元素x /
void inserFirstList(struct SeqList L, elemType x)
{
if(L->length == L->maxSize)
{
againMalloc(L);
}
int i;
for(i=L->length-1; i>=0; i--)
{
L->elem[i+1] = L->elem[i];
}
L->elem[0] = x;
L->length++;
return;
}
/ 10向线性表L的表尾插入元素x /
void insertLastList(struct SeqList &L, elemType x)
{
if(Llength == LmaxSize)
{
againMalloc(&L);
}
Lelem[Llength] = x;
Llength ++;
return;
}
/ 11向线性表L中第pos个元素位置插入元素x,若插入成功返回1,否则返回0 /
int insertPosList(struct SeqList L, int pos, elemType x)
{
if(pos<1 || pos>L->length+1)
{
printf("插入失败!");
return 0;
}
if(L->length == L->maxSize)
{
againMalloc(L);
}
int i;
for(i=L->length-1; i>=pos-1; i--)
{
L->elem[i+1] = L->elem[i];
}
L->elem[pos-1] = x;
L->length ++;
return 1;
}
/ 12向有序线性表L中插入元素x, 使得插入后仍然有序/
void insertOrderList(struct SeqList L, elemType x)
{
if(L->length == L->maxSize)
{
againMalloc(L);
}
int i,j;
for(i=0; i<L->length; i++)
{
if(L->elem[i] == x)
break;
}
for (j=L->length-1; j>=i; i--)
{
L->elem[i+1] = L->elem[i];
}
L->elem[i] = x;
L->length ++;
return;
}
/ 13从线性表L中删除表头元素并返回它,若删除失败则停止程序运行 /
elemType deleteFirstList(struct SeqList L)
{
if(L ->length == 0)
{
printf("线性表为空,不能进行删除 *** 作! ");
exit(1);
}
elemType temp;
temp = L->elem[0];
for(int i=1; i<L->length-1;i++)
{
L->elem[i-1] = L->elem[i];
}
L->length --;
return temp;
}
/ 14从线性表L中删除表尾元素并返回它,若删除失败则停止程序运行 /
elemType deleteLastList(struct SeqList L)
{
if(L->length == 0)
{
printf("线性表为空,不能进行删除 *** 作! ");
exit(1);
}
L->length--;
return L ->elem[L->length]; / 返回原来表尾元素的值 /
}
/ 15从线性表L中删除第pos个元素并返回它,若删除失败则停止程序运行 /
elemType deletePosList(struct SeqList L, int pos)
{
if(pos<1 || pos>L->length)
{
printf("pos值越界,不能进行删除 *** 作!");
exit(1);
}
elemType temp = L->elem[pos-1];
for(int i=pos; i<L->length; i++)
{
L->elem[i-1] = L->elem[i];
}
L->length --;
return temp;
}
/ 16从线性表L中删除值为x的第一个元素,若成功返回1,失败返回0 /
int deleteValueList(struct SeqList L, elemType x)
{
int i,j;
for(i=0; i<L->length; i++)
{
if(L->elem[i] == x)
break;
}
if(L->length == i)
{
return 0;
}
for(j=i+1;j<L->length;i++)
{
L->elem[j-1]=L->elem[j];
}
L->length--;
return 0;
}
void sortList(struct SeqList L)
{
int i,j;
int temp;
for(i=0; i<L->length; i++)
for(j=i+1;j<L->length;j++)
{
if(L->elem[j]>L->elem[i])
{
temp = L->elem[i];
L->elem[i] = L->elem[j];
L->elem[j] = temp;
}
}
}
int main(int argc, char argv[])
{
int x=0;
struct SeqList L;
InitSeqList(&L);
printf("输入整数(-1)结束");
while(x!=-1)
{
scanf("%d",&x);
if(x!=-1)
insertLastList(L,x);
}
printf("顺序表\n");
traverseList(&L);
printf("\n表长为%d\n",sizeList(&L));
int n;
printf("查找元素值\n");
scanf("%d",&n);
int pos = findList(&L,n);
printf("\n查找元素在第%d位\n",pos+1);
deletePosList(&L,pos+1);
printf("顺序表\n");
traverseList(&L);
int p,q;
printf("\n输入在第几位插入什么值\n");
scanf("%d%d",&p,&q);
insertPosList(&L,p,q);
printf("顺序表\n");
traverseList(&L);
sortList(&L);
printf("\n顺序表排序后\n");
traverseList(&L);
printf("\n");
return 0;
}
C语言通过输入十个整数然后分别顺序和逆序输出的编程思想和方法如下:
1首先需要定义一个整型数组用于存储输入的10个整数。这里定义一个数组a。
2然后利用for循环,接受从键盘输入的10个整数。这里使用i作为循环的游标变量。
3输入完毕后,再次利用for循环来顺序输出存储在数组的十个数。这里同样使用局部变量i作为循环的游标。
4接着,再次使用for循环来逆序输出存储在数组的十个整数。同样地,这里仍然需要一个局部变量作为循环游标。(方法与顺序输出大致相同)
5代码编写完成后,点击运行程序,在调试程序的窗口即可看到最终的运行结果。
这个没什么讲究,无非开头编写程序号啊,刀具号,主轴真转,切削液开关了,建立刀具补偿下面就可以按图纸编程了,结尾的话切削液的关,刀补取消程序结束就可以了,铣床很麻烦,开头需要取消极坐标,更改坐标系等等。
以上就是关于plc编程软件SIMTATIC Manager中的程序时如何运行的呢是不是按照程序段的先后顺序执行呢比如先执行全部的内容,包括:plc编程软件SIMTATIC Manager中的程序时如何运行的呢是不是按照程序段的先后顺序执行呢比如先执行、顺序表编程问题、C语言编程,输入10个整数,分别按顺序和逆序输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)