| 作者 | 主题 |
|---|---|
|
时尚农民 新手 经验值:37 发帖数:14 精华帖:1 |
楼主
主题:WINCC通过全局动作,使用普通网卡接收并发送数据
在WINCC全局动作中写C程序,实现WINCC的变量通过上位机普通网卡接受并发送数据,使用通讯协议为UDP 已写了一UDP的通讯协议的DLL放入SYSTEM32中,现已经能和第三方建立连接 但不知道如果把wincc变量的数据加入程序中 全局动作C程序如下:
#include "apdefap.h" int gscAction( void ) { char buf[128]; #pragma code ("UDPClient.dll"); long Init(char *addr,unsigned short port); long RecvData(char *buf,long len); long SendData(char *buf,long len); void ShutDown(); void SleepTime(unsigned long time); float Data1; float Data2; Data1=GetTagFloat("So2_Value"); Data2=GetTagFloat("So2_total"); #pragma code() Init("192.168.0.11",8866); while(1) { if (RecvData(buf,128)=="54 57 11 00 00 C5 21",7); { SendData("Data1 ",4); SendData("Data2 ",4); } SleepTime(200); } ShutDown(); return 0; } 通讯协议: 查询实时数据,如 54 57 11 00 00 C5 21 下位机返回 54 57 10 00 0C 01 80 00 0F 42 40 02 85 42 C4 99 9A 16 C6 说明:下位机返回的数据格式比较复杂, 其中00 0F 42 40 表示Data1的数值. 42 C4 99 9A 表示Data2的数值. 问题: 上面C程序中 SendData("Data1 ",4); SendData("Data2 ",4); 只能将data1,data2的数据发送,而不能按54 57 10 00 0C 01 80 00 0F 42 40 02 85 42 C4 99 9A 16 C6 返回数据.不知道如何把data1,data2 (data1的值) (data2的值) 的数据放入在这段数据之中,而发送出去. 简单的一句话就是如果用data1,data2中的数据无替代00 0F 42 40和42 C4 99 9A 具体数值. |