snap7库下载:
https://sourceforge.net/projects/snap7/files/
将\snap7-full-1.4.2\release\Windows\Win64目录下的snap7.lib、snap7.dll,
与\snap7-full-1.4.2\examples\cpp\snap7.cpp、snap7.h拷贝至项目目录。
配置项目属性:
程序编写:
连接PLC:
const char* plc_address = "192.168.110.199";
const int rack = 0;
const int slot = 1;
TS7Client* MyClient;
MyClient = new TS7Client();
MyClient->ConnectTo(plc_address, rack, slot);
if (!MyClient->Connected() && MyClient->Connect()>0) {
return -1;
}
按位读写:
unsigned char value;
MyClient->DBRead(1, 66, 1, &value);
printf("%x",value&0x02);//V66.1
value = value&0xfd;//V66.1置0
value = value|0x02;//V66.1置1
MyClient->DBWrite(1, 66, 1, &value);
按word读写(两个字节):
//写VW
short newVal = 314;
static unsigned char value[2];
value[0]=( newVal>>8 ) & 0xff;
value[1]=newVal&0xff;
std::cout << "mydata:" << (int)value[0] <<","<<(int)value[1]<< std::endl;
MyClient->DBWrite(1, 66, 2, value);
//读VW
MyClient->DBRead(1, 66, 2, value);
int tmp = value[0]<<8 | value[1];
printf("mydata:%d",tmp);
读写Real(4个字节):
float fval;
unsigned char value[4];
fval = 89.9;
value[0]= ((unsigned char*)&fval)[3];
value[1]= ((unsigned char*)&fval)[2];
value[2]= ((unsigned char*)&fval)[1];
value[3]= ((unsigned char*)&fval)[0];
MyClient->DBWrite(1, 400, 4, value);
MyClient->DBRead(1, 400, 4, value);
for (int i = 0; i < 4; i++) {
((unsigned char*)&fval)[i] = value[3 - i];
}
printf("%f",fval);
结束:
delete MyClient;