⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plc51x_fnc.c

📁 PLC源代码
💻 C
📖 第 1 页 / 共 5 页
字号:

volatile          bit        CODE_ERROR;
volatile unsigned int  data  PS_BIT;                         //  P 指令16级暂存
volatile unsigned int  data  PS1_BIT;                        //  P 指令16级暂存备份
volatile unsigned int  data  Pi;                             //  P 指令16级暂存位置指针

/********************************************  程序开始  **********************************************/ 

//-----------------------------------------------------------------------------------------//
//    数组名称:   BYTE_BIT                                                                 //
//    数组类型:   unsigned char code BYTE_BIT[8]                                           //
//								                                                           //
//    功能描述:  BYTE 字节型 BIT 位表                                                     //
//								                                                           //
//    入口参数:  BIT 位编号                                                               //
//								                                                           //
//    出口参数:  返回 BYTE 字节中 BIT 屏蔽位                                              //
//								                                                           //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年10月2日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

unsigned char code BYTE_BIT_s[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char code BYTE_BIT_w[8]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
unsigned char code BYTE_BIT_e[8]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};

//-----------------------------------------------------------------------------------------//
//    数组名称:   FNC_CMD_LNE                                                              //
//    数组类型:   unsigned char code FNC_CMD_LNE[256]                                      //
//								                                                           //
//    功能描述:  返回单条 FNC指令后面跟随的命令/数据字长度                                //
//								                                                           //
//    入口参数:  FNC指令代码编号                                                          //
//								                                                           //
//    出口参数:  返回本条 FNC指令后面跟随的命令/数据字长度                                //
//								                                                           //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

unsigned char code FNC_CMD_LNE[256]={
          1,1,0,0,0,0,0,0,1,0,
          3,4,2,5,2,3,3,2,2,2,
          3,3,3,3,1,1,3,3,3,1,
          2,2,2,2,4,4,4,4,3,3,
          2,3,3,2,3,3,3,0,2,2,
          2,1,4,3,3,4,3,3,3,4,
          3,4,4,4,2,3,1,4,4,5,
          3,4,4,2,3,4,2,2,4,4,
          4,2,3,3,3,2,2,0,4,0,
          0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0,0,
          3,4,0,0,0,0,0,0,2,2,
          3,3,3,3,0,0,0,2,0,2,
          2,2,2,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,1,0,0,
          0,0,0,0,0,3,4,3,4,4,
          5,4,3,3,0,0,1,1,0,3,
          2,2,0,0,0,0,3,3,0,0,
          0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0,0,
          0,0,0,0,2,2,2,0,2,2,
          2,0,2,2,2,0,2,2,2,0,
          2,2,2,0,2,2,2,0,0,0,
          0,0,0,0,0,0       };


//-----------------------------------------------------------------------------------------//
//    函数名称:   ADDR_int_ppp                                                             //
//    函数类型:   char* ADDR_int_ppp(unsigned int a)                                       //
//								                                                           //
//    功能描述:  读入并列的n位软元件点的起始地址,返回地址绝对指针                        //
//								                                                           //
//    入口参数:  unsigned int  a ...... 读入软元件点的起始地址                            //
//								                                                           //
//    出口参数:  返回地址绝对指针                                                         //
//								                                                           //
//    全局变量:   无            			                                               //
//								                                                           //
//    调用模块:   无                                                                       //
//    模块描述:                                                                           //
//                                                                                         //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

char* ADDR_int_ppp(unsigned int a)    // (读入int点内容,返回地址绝对指针)
{ unsigned char *p;
  a &= 0xfff; 
  if (a<0x400)
	{ if (a < _S_num) 
	    { p  = (unsigned char*)rS + (a / 8);
		}
	}
  else if  (a<0x500)
	{ a -= 0x400;
	  if (a < _X_num)
	    { p = (unsigned char*)rX + (a / 8);
		}
	}
  else if  (a<0x600)
	{ a -= 0x500;
	  if (a < _Y_num)
	    { p = (unsigned char*)rY + (a / 8);
		}
	}
  else if  (a<0x800)
	{ a -= 0x600;
	  if (a < _T_num)
	    { p = (unsigned char*)rT + (a / 8);
		}
	}
  else if  (a<0xe00)
	{ a -= 0x800;
	  if (a < _M_num)
	    { p = (unsigned char*)rM + (a / 8);
		}
	}
  else if  (a<0xf00)
	{ a -= 0xe00;
	  if (a < _C_num)
	    { p = (unsigned char*)rC + (a / 8);
		}
	}
  else 
	{ a -= 0xf00;
	  if (a < _M8xxx_num)
	    { p = (unsigned char*)rM8xxx + (a / 8);
		}
	}
  return(p);
}


//-----------------------------------------------------------------------------------------//
//    函数名称:   ADDR_int_ppp_old                                                         //
//    函数类型:   char* ADDR_int_ppp_old(unsigned int a)                                   //
//								                                                           //
//    功能描述:  从 old 备份存储器内读入并列的n位软元件点的起始地址,返回地址绝对指针     //
//								                                                           //
//    入口参数:  unsigned int  a ...... 读入软元件点的起始地址                            //
//								                                                           //
//    出口参数:  返回地址绝对指针                                                         //
//								                                                           //
//    全局变量:   无            			                                               //
//								                                                           //
//    调用模块:   无                                                                       //
//    模块描述:                                                                           //
//                                                                                         //
//								                                                           //
//    作   者:   许意义		   			                                               //
//    日   期:   2009年9月26日 			                                               //
//    备    注:  								                                           //
//-----------------------------------------------------------------------------------------//
//    修 改 人:					 			                                               //
//    日   期:								                                               //
//    备    注: 								                                           //
//-----------------------------------------------------------------------------------------//

char* ADDR_int_ppp_old(unsigned int a)    // (从 old 备份存储器内读入int点内容,返回地址绝对指针)
{ unsigned char *p;
  a &= 0xfff; 
  if (a<0x400)
	{ if (a < _S_num) 
	    { p  = (unsigned char*)rS1 + (a / 8);
		}
	}
  else if  (a<0x500)
	{ a -= 0x400;
	  if (a < _X_num)
	    { p = (unsigned char*)rX1 + (a / 8);
		}
	}
  else if  (a<0x600)
	{ a -= 0x500;
	  if (a < _Y_num)
	    { p = (unsigned char*)rY1 + (a / 8);
		}
	}
  else if  (a<0x800)
	{ a -= 0x600;
	  if (a < _T_num)
	    { p = (unsigned char*)rT1 + (a / 8);
		}
	}
  else if  (a<0xe00)
	{ a -= 0x800;
	  if (a < _M_num)
	    { p = (unsigned char*)rM1 + (a / 8);
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -