我编了一个脚本程序但是在进行字符串比较的时候出了问题,向大家请教一下!具体的程序如下:
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
// 1y??ì?êa×?·?
char *p2=NULL;
char D[50];
int i;
int j;
char C_00[15];
char C_01[15]="055" , C_02[15]="075" , C_03[15]="100" ;
char B_00[15];
char B_01[15]="M",B_02[15]="K";
char G_00[15];
char G_01[15]="1" ,G_02[15]="3" ,G_03[15]="6" ,G_04[15]="7" ,G_05[15]="8" ,G_06[15]="C" ,G_07[15]="D" ,G_08[15]="E" ,G_09[15]="G" ,G_10[15]="J" ,G_11[15]="L" ;
char W_00[15];
char W_01[15]="EBA",W_02[15]="EBB",W_03[15]="ECA",W_04[15]="EEA",W_05[15]="EED",W_06[15]="EEK",W_07[15]="EFA",W_08[15]="EFC",W_09[15]="EFE",W_10[15]="EFT",W_11[15]="EGG";
char W_12[15]="EHD",W_13[15]="JAA",W_14[15]="JAB",W_15[15]="JAD",W_16[15]="JAF",W_17[15]="JAG",W_18[15]="JAH",W_19[15]="JAL",W_20[15]="MAA",W_21[15]="MIX",W_22[15]="NNN";
char W_23[15]="EAJ",W_24[15]="CBD",W_25[15]="EAA",W_26[15]="EAF",W_27[15]="EAG",W_28[15]="EAH",W_29[15]="EEF",W_30[15]="EEH",W_31[15]="EFB",W_32[15]="EFJ",W_33[15]="EFM";
char W_34[15]="EFS",W_35[15]="EGH",W_36[15]="EGJ",W_37[15]="EGK",W_38[15]="EHK",W_39[15]="JAK",W_40[15]="JCA",W_41[15]="JCB",W_42[15]="LAB",W_43[15]="LAC",W_44[15]="CAA";
// ************** guo lv te shu zi fu
if ( GetTagBit("OP10_Query_Temp") ) //Return-Type: BOOL
{
p2=GetTagChar("OP10_MMC_Current_00"); //Return-Type: char*
for (i=0;i<45;p2++)
{
if ((*p2==0))
{
D[i]=*p2;
i=45;
}
else
{
if ( (*p2 >=48)&&(*p2<=57) (*p2 >=65)&&(*p2<=90) (*p2 >=97)&&(*p2<=122))
{
D[i]=*p2;
i++;
j=i;
}
}
}
SetTagChar("OP10_MMC_Current_01",D); //Return-Type: BOOL
// 代码提取
MMC_CodeDraw("OP10_C_Code","OP10_MMC_Current_01","MMC_C_StartBit","MMC_C_BitLeth"); //Return-Type: void // C Code Displacement
MMC_CodeDraw("OP10_H_Code","OP10_MMC_Current_01","MMC_H_StartBit","MMC_H_BitLeth"); //Return-Type: void // H Code Flush Valve
MMC_CodeDraw("OP10_L_Code","OP10_MMC_Current_01","MMC_L_StartBit","MMC_L_BitLeth"); //Return-Type: void // L Code MainShaft
MMC_CodeDraw("OP10_W_Code","OP10_MMC_Current_01","MMC_W_StartBit","MMC_W_BitLeth"); //Return-Type: void // W Code Speed Sensor PPU
MMC_CodeDraw("OP10_B_Code","OP10_MMC_Current_01","MMC_R_StartBit","MMC_R_BitLeth"); //Return-Type: void // B Code Motor Moudle
MMC_CodeDraw("OP10_G_Code","OP10_MMC_Current_01","MMC_G_StartBit","MMC_G_BitLeth"); // G Code End_Cap
//马达类型提取
strcpy(B_00,GetTagChar("OP10_B_Code"));
if (strcmp(B_00,B_01)==0)
{
SetTagWord("OP10_Motor_Module",0); //Return-Type: BOOL
}
else if (strcmp(B_00,B_02)==0)
{
SetTagWord("OP10_Motor_Module",1); //Return-Type: K Motor
}
else
{
SetTagWord("OP10_Motor_Module",2); // not match
}
// 排量提取
strcpy(C_00,GetTagChar("OP10_C_Code"));
if (strcmp(C_00,C_01)==0)
{
SetTagWord("OP10_Motor_Displacement",55); //Return-Type: BOOL
SetTagWord("OP11_Motor_Displacement",55); //Return-Type: BOOL
}
else if (strcmp(C_00,C_02)==0)
{
SetTagWord("OP10_Motor_Displacement",75); //Return-Type: BOOL
SetTagWord("OP11_Motor_Displacement",75); //Return-Type: BOOL
}
else if (strcmp(C_00,C_03)==0)
{
SetTagWord("OP10_Motor_Displacement",100); //Return-Type: BOOL
SetTagWord("OP11_Motor_Displacement",100); //Return-Type: BOOL
}
else
{
SetTagWord("OP10_Motor_Displacement",200); //Return-Type:not mtch
SetTagWord("OP11_Motor_Displacement",200); //Return-Type:not mtch
}
// ?D???÷?á
// Query IS ok
SetTagBit("OP10_Query_OK",1); //Return-Type: BOOL
SetTagBit("OP10_Query_Temp",0);
}
return 0;
}
我在进行排量的提取的时候,总是出错,结果等于200,但是结果只能等于55,75,或者100.有时候结果也正常。我使用同样的方法,在马达类型提取时,从未错过。换句话说,就是我的C_00的值有问题,但是我的OP10_C_Code 的值对的,那么给C_00的赋值语句strcpy(C_00,GetTagChar("OP10_C_Code"));有问题?如果这个有问题,那么为什么这个strcpy(B_00,GetTagChar("OP10_B_Code"));是没有问题的?还有就是白痴的问一句,在内部变量中,8位字符集的数据和16位字符集的区别是什么?多谢!