发布于 2006-04-07 19:51:19
0楼
非常幸运,找到了其中的一个例子,里面也有我当初调试的痕迹,两种方法都能看到。
这里先帖出一段代码,有心人就可以看明白了:
然后整个项目比较大,2.3M,谁真正有需要的话,发个MAIL给我,说明缘由,我通过邮件发给你!
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#define CHARBEGIN 6
#define CHARLENGTH 10 // STRING[10]
int i=0, k=0;
short int IntValue;
short float FloatValue;
char StringValue[255];
size_t StringLength;
BYTE *IntBuffer;
BYTE *FloatBuffer;
BYTE Buffer[18]; // Buffer to turn the Bytes
IntValue = GetTagWord("IntVar_write"); // Get the Integervalue
FloatValue =GetTagFloat("FloatVar_write"); // Get the Floatvalue
strcpy(StringValue,GetTagChar("CharVar_write")); // Get the String
IntBuffer = (BYTE*)&IntValue; // Pointer for transfer
FloatBuffer = (BYTE*)&FloatValue; // Pointer for transfer
// Integervalue, bytes turn from Motorola- to PC INTEL-Format and
// write the Integervalue into the rawdata buffer
Buffer[0] = IntBuffer[1];
Buffer[1] = IntBuffer[0];
// Floatvalue, bytes turn from Motorola- to PC INTEL-Format and
// write the Floatvalue into the rawdata buffer
Buffer[2] = FloatBuffer[3];
Buffer[3] = FloatBuffer[2];
Buffer[4] = FloatBuffer[1];
Buffer[5] = FloatBuffer[0];
// Headerinformation for S7-STRING
Buffer[6]=CHARLENGTH; // 1. additional Byte S7-STRING / needed by S7
StringLength = strlen (StringValue);
Buffer[7]=(BYTE)StringLength; // 2. additional Byte S7-STRING / needed by S7
// write Stringvalue in rawdata buffer / realized with for-loop
for(i=CHARBEGIN +2 ; i< CHARBEGIN + 2 + CHARLENGTH; Buffer[i++] = StringValue[k++] );
// write the RawDataVariable
SetTagRaw("RawVar",&Buffer[0],18);
}