📄 plc_dataoperating.c
字号:
/***********************************************
函数功能:位数据读
入口参数:BitStartAdd 开始地址 >=0x0000 <=0x0FFF
BitCount 读取个数1-32
出口参数:返回读取的数值
***********************************************/
uint32 PLC_BitDataRead(uint16 BitStartAdd,uint8 BitCount)
{uint32 r_data=0;
uint16 EndAdd=BitStartAdd+BitCount;
while (1)
{EndAdd--;
if(PLC_BIT_TEST(EndAdd))r_data|=0x01;
if(BitStartAdd==EndAdd)return r_data;
r_data<<=1;}
}
/***********************************************
函数功能:位数据写
入口参数:BitStartAdd 开始地址 >=0x0000 <=0x0FFF
BitCount 写入个数1-64
data 要写入的数据
出口参数:无
***********************************************/
void PLC_BitDataWrite(uint16 BitStartAdd,uint8 BitCount,uint32 data)
{uint16 EndAdd=BitStartAdd+BitCount;
for(;BitStartAdd<EndAdd;BitStartAdd++)
{if(data&0x01)PLC_BIT_ON(BitStartAdd);
else PLC_BIT_OFF(BitStartAdd);
data>>=1;}
}
/***********************************************
函数功能:字节数据64位写
1=常量;2=变量;3=变量K1(M);4=变量K2(M);5=变量K3(M);6=变量K4(M);
7=变量K5(M);8=变量K6(M);9=变量K7(M);A=变量K8(M);
***********************************************/
void PLC_ByteWrite64(uint32 pc,uint32 Data,uint32 Data2)
{uint32 cmd_add;
uint32 cmd;
cmd_add=PLC_DataTypeTest((PLC_RAM16(pc+2)*0X10000)+PLC_RAM16(pc));
cmd=cmd_add&0xff0000;
cmd_add&=0x0000ffff;
switch(cmd)
{case 0x00020000://变量
{PLC_RAM16(PLC_R_START_ADD+cmd_add)=Data;
PLC_RAM16(PLC_R_START_ADD+cmd_add+2)=(Data/0x10000);
PLC_RAM16(PLC_R_START_ADD+cmd_add+4)=Data2;
PLC_RAM16(PLC_R_START_ADD+cmd_add+6)=(Data2/0x10000);
}break; //END 变量
case 0x00030000:
{PLC_BitDataWrite(cmd_add,4,Data);
PLC_BitDataWrite(cmd_add+4,4,Data2);}break; //变量K1(M)
case 0x00040000:
{PLC_BitDataWrite(cmd_add,8,Data);
PLC_BitDataWrite(cmd_add+8,8,Data2);}break; //变量K2(M)
case 0x00050000:
{PLC_BitDataWrite(cmd_add,12,Data);
PLC_BitDataWrite(cmd_add+12,12,Data2);}break; //变量K3(M)
case 0x00060000:
{PLC_BitDataWrite(cmd_add,16,Data);
PLC_BitDataWrite(cmd_add+16,16,Data2);}break; //变量K4(M)
case 0x00070000:
{PLC_BitDataWrite(cmd_add,20,Data);
PLC_BitDataWrite(cmd_add+20,20,Data2);}break; //变量K5(M)
case 0x00080000:
{PLC_BitDataWrite(cmd_add,24,Data);
PLC_BitDataWrite(cmd_add+24,24,Data2);}break; //变量K6(M)
case 0x00090000:
{PLC_BitDataWrite(cmd_add,28,Data);
PLC_BitDataWrite(cmd_add+28,28,Data);}break; //变量K7(M)
case 0x000A0000:
{PLC_BitDataWrite(cmd_add,32,Data);
PLC_BitDataWrite(cmd_add+32,32,Data);}break; //变量K8(M)
default:{PLC_PROG_ERROR(0x12);}break; //不支持操作
}
}
/***********************************************
函数功能:字节数据32位写
1=常量;2=变量;3=变量K1(M);4=变量K2(M);5=变量K3(M);6=变量K4(M);
7=变量K5(M);8=变量K6(M);9=变量K7(M);A=变量K8(M);
***********************************************/
void PLC_ByteWrite32(uint32 pc,uint32 Data)
{uint32 cmd_add;
uint32 cmd;
cmd_add=PLC_DataTypeTest((PLC_RAM16(pc+2)*0X10000)+PLC_RAM16(pc));
cmd=cmd_add&0xff0000;
cmd_add&=0x0000ffff;
switch(cmd)
{case 0x00020000://变量
{PLC_RAM16(PLC_R_START_ADD+cmd_add)=Data;
PLC_RAM16(PLC_R_START_ADD+cmd_add+2)=Data/0x10000;
}break; //END 变量
case 0x00030000:{PLC_BitDataWrite(cmd_add,4,Data);}break; //变量K1(M)
case 0x00040000:{PLC_BitDataWrite(cmd_add,8,Data);}break; //变量K2(M)
case 0x00050000:{PLC_BitDataWrite(cmd_add,12,Data);}break; //变量K3(M)
case 0x00060000:{PLC_BitDataWrite(cmd_add,16,Data);}break; //变量K4(M)
case 0x00070000:{PLC_BitDataWrite(cmd_add,20,Data);}break; //变量K5(M)
case 0x00080000:{PLC_BitDataWrite(cmd_add,24,Data);}break; //变量K6(M)
case 0x00090000:{PLC_BitDataWrite(cmd_add,28,Data);}break; //变量K7(M)
case 0x000A0000:{PLC_BitDataWrite(cmd_add,32,Data);}break; //变量K8(M)
default:{PLC_PROG_ERROR(0x12);}break; //不支持操作
}
}
/***********************************************
函数功能:字节数据16位写
1=常量;2=变量;3=变量K1(M);4=变量K2(M);5=变量K3(M);6=变量K4(M);
***********************************************/
void PLC_ByteWrite16(uint32 pc,uint16 Data)
{uint32 cmd_add;
uint32 cmd;
cmd_add=PLC_DataTypeTest((PLC_RAM16(pc+2)*0X10000)+PLC_RAM16(pc));
cmd=cmd_add&0xff0000;
cmd_add&=0x0000ffff;
switch(cmd)
{case 0x00020000:{PLC_RAM16(PLC_R_START_ADD+cmd_add)=Data;}break; //变量
case 0x00030000:{PLC_BitDataWrite(cmd_add,4,Data);}break; //变量K1(M)
case 0x00040000:{PLC_BitDataWrite(cmd_add,8,Data);}break; //变量K2(M)
case 0x00050000:{PLC_BitDataWrite(cmd_add,12,Data);}break; //变量K3(M)
case 0x00060000:{PLC_BitDataWrite(cmd_add,16,Data);}break; //变量K4(M)
default:{PLC_PROG_ERROR(0x12);}break; //不支持操作
}
}
/***********************************************
函数功能:字节数据32位读
1=常量;2=变量;3=变量K1(M);4=变量K2(M);5=变量K3(M);6=变量K4(M);
7=变量K5(M);8=变量K6(M);9=变量K7(M);A=变量K8(M);
***********************************************/
uint32 PLC_ByteRead32(uint32 pc)
{uint32 cmd_add;
uint32 cmd;
cmd_add=PLC_DataTypeTest((PLC_RAM16(pc+2)*0X10000)+PLC_RAM16(pc));
cmd=cmd_add&0xff0000;
cmd_add&=0x0000ffff;
switch(cmd)
{case 0x00010000://常量
{cmd=((PLC_RAM8(pc+2)*0X100)+PLC_RAM8(pc)+
(PLC_RAM8(pc+6)*0X1000000)+(PLC_RAM8(pc+4)*0X10000));
}break; //END 常量
case 0x00020000://变量
{cmd=PLC_RAM16(PLC_R_START_ADD+cmd_add)+(PLC_RAM16(PLC_R_START_ADD+cmd_add+2)*0x10000);
}break; //END 变量
case 0x00030000:{cmd=PLC_BitDataRead(cmd_add,4);}break; //变量K1(M)
case 0x00040000:{cmd=PLC_BitDataRead(cmd_add,8);}break; //变量K2(M)
case 0x00050000:{cmd=PLC_BitDataRead(cmd_add,12);}break; //变量K3(M)
case 0x00060000:{cmd=PLC_BitDataRead(cmd_add,16);}break; //变量K4(M)
case 0x00070000:{cmd=PLC_BitDataRead(cmd_add,20);}break; //变量K5(M)
case 0x00080000:{cmd=PLC_BitDataRead(cmd_add,24);}break; //变量K6(M)
case 0x00090000:{cmd=PLC_BitDataRead(cmd_add,28);}break; //变量K7(M)
case 0x000A0000:{cmd=PLC_BitDataRead(cmd_add,32);}break; //变量K8(M)
default:{PLC_PROG_ERROR(0x12);}break; //不支持操作
}
return cmd;
}
/***********************************************
函数功能:字节数据16位读
1=常量;2=变量;3=变量K1(M);4=变量K2(M);5=变量K3(M);6=变量K4(M);
***********************************************/
uint16 PLC_ByteRead16(uint32 pc)
{uint32 cmd_add;
uint32 cmd;
cmd_add=PLC_DataTypeTest((PLC_RAM16(pc+2)*0X10000)+PLC_RAM16(pc));
cmd=cmd_add&0xff0000;
cmd_add&=0x0000ffff;
switch(cmd)
{case 0x00010000:{cmd=(PLC_RAM8(pc+2)*0X100)+PLC_RAM8(pc);}break;//END 常量
case 0x00020000://变量
{cmd=PLC_RAM16(PLC_R_START_ADD+cmd_add)+(PLC_RAM16(PLC_R_START_ADD+cmd_add+2)*0x10000);
}break; //END 变量
case 0x00030000:{cmd=PLC_BitDataRead(cmd_add,4);}break; //变量K1(M)
case 0x00040000:{cmd=PLC_BitDataRead(cmd_add,8);}break; //变量K2(M)
case 0x00050000:{cmd=PLC_BitDataRead(cmd_add,12);}break; //变量K3(M)
case 0x00060000:{cmd=PLC_BitDataRead(cmd_add,16);}break; //变量K4(M)
default:{PLC_PROG_ERROR(0x12);}break; //不支持操作
}
return cmd;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -