📄 prerun.cpp
字号:
#include "system.h"
#include "softplc.h"
#include "stdio.h"
#include "graph.h"
#include "stdlib.h"
int Flag_Chgil=0;
int CPI_FLAG=1;
int Temp[8]={0,0,0,0,0,0,0,0};
bool CPI[8]={0,0,0,0,0,0,0,0};
bool CPO[8]={0,0,0,0,0,0,0,0};
int CPO2[8]={0,0,0,0,0,0,0,0};
extern char Segment[4096];
extern void read_il(void);
extern void DispChg(void);
extern bool In[8];
extern bool Out[8];
extern int Flag_SPLC;
extern int Flag_SPLC_NET;
extern int Flag_SPLC_NET_NO;
extern Fl_Light_Button *lb_ConnectBW;
extern char ConnectState;
extern void cb_DCpoweron(void);
extern void cb_DCpoweroff(void);
extern void cb_DCstart(void);
extern void cb_DCstop(void);
extern void cb_DCreset(void);
extern void cb_DCemcstop(void);
extern void cb_BWstart(void);
extern void cb_BWstop(void);
/**************
* 函数名:DI2Panel
* 功 能: 将DI数据导入到Panel,调用cb函数。
*************/
void DI2Panel(void)
{
int n;
int i;
// int k;
i=3;
while (i>0)
{
n=sysInByte(774);
i--;
}
/* for (i=7;i>-1;i--)
{
k=n%2;
n=n/2;
// In[i]=!k;
Temp[i]=!k;
// if (CPI[i]!=Temp[i]) In[i]=Temp[i]
}
*/
switch (n) {
case 0xFE:
cb_DCpoweron();break;
case 0xFD:
cb_DCpoweroff();break;
case 0xFB:
cb_DCstart();break;
case 0xF7:
cb_DCstop();break;
case 0xEF:
cb_DCreset();break;
case 0xDF:
cb_DCemcstop();break;
case 0xBF:
cb_BWstart();break;
case 0x7F:
cb_BWstop();break;
default: break;
}
}
/**************
* 函数名:Cpi_In
* 功 能: 将控制面板的数据CPI【8】导入到In【8】
*
*************/
void Cpi_In(void)
{ int i;
for(i=0;i<8;i++)
{
In[i]=(bool)CPI[i];
}
}
/**************
* 函数名:ImageOut
* 功 能: 将Out【8】数据导出到DO【8】
*
*************/
void ImageOut(void)
{ int n;
n=Out[0]*128+Out[1]*64+Out[2]*32+Out[3]*16+Out[4]*8+Out[5]*4+Out[6]*2+Out[7];
sysOutByte(772,n);
}
/**************
* 函数名:Cpi_Out
* 功 能: 将Out【8】数据导出到控制面板的数据CPO【8】
*
*************/
void Cpi_Out(void)
{ int i;
for(i=0;i<8;i++)
{
CPO[i]=Out[i];
CPO2[i]=(int)CPO[i];
}
}
/**************
* 函数名:NegativeLogic
* 功 能: 将Out【8】数据负(反)逻辑输出到DO
*
*************/
void NegativeLogic(void)
{ int n;
n=(!Out[0])*128+(!Out[1])*64+(!Out[2])*32+(!Out[3])*16+(!Out[4])*8+(!Out[5])*4+(!Out[6])*2+(!Out[7]);
sysOutByte(772,n);
}
/**************
* 函数名:PreRun
* 功 能: SoftPLC主函数
*
*************/
void PreRun(void)
{
int j;
while(1)
{
lb_ConnectBW->value(ConnectState);
DI2Panel(); //外部控制
//上位机控制
if (Flag_SPLC_NET == 1)
{
switch(Flag_SPLC_NET_NO)
{
case 0:
cb_DCpoweron(); break;
case 1:
cb_DCpoweroff(); break;
case 2:
cb_DCstart(); break;
case 3:
cb_DCstop(); break;
case 4:
cb_DCreset(); break;
case 5:
cb_DCemcstop(); break;
case 6:
cb_BWstart(); break;
case 7:
cb_BWstop(); break;
default:
break;
}
Flag_SPLC_NET_NO = -1;
do
Flag_SPLC_NET = 0;
while ( Flag_SPLC_NET != 0);
}
if (Flag_SPLC == 1)
{
taskLock();
j = 2; //软PLC执行两次
while (j > 0)
{
if (Flag_Chgil==1)
{
read_il();
Flag_Chgil=0;
}
{
Cpi_In();
RunIL(Segment, In, Out);
Cpi_Out();
DispChg();
NegativeLogic();
for(int i=0;i<8;i++) //CPI[8] clear
{
CPI[i]=0;
}
}
j--;
}
Flag_SPLC = 0;
taskUnlock();
}
OSTaskDelay(200); //300~350 比较合适
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -