DevC++ 使用snap7库实现与西门子plc通讯的简单示例

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值