int MacroEntry()
{
unsigned short PLCAddr, channelNumber;
ReadLocal("RW", 7, 1, (void*)(&PLCAddr), 0);
// get the channel number from RW
ReadLocal("RW", 73, 1, (void*)(&channelNumber), 0);
unsigned short inChan, outChan, sampChan, index;
ReadLocal("LW", 1000, 1, (void*)&inChan, 0);
ReadLocal("LW", 1001, 1, (void*)&outChan, 0);
ReadLocal("LW", 1002, 1, (void*)&sampChan, 0);
ReadLocal("LW", 358, 1, (void*)&index, 0);
// calculate the cmd_addr
// // globalController.maxAdcSampNum =(inChan-1)*(chanNumber-inChan) + (outChan-2) -- wrong formula
int cmd_addr = (index << 8) + sampChan + 1; // the HMI will automatically decrease 1 when send addr to PLC
int len = 4;
unsigned short i, data[lbk]16[rbk] = {0};
// error code: 0: fail; 1: success
int readResult = ReadData(sampledData, 240, cmd_addr, len, (void*)data); //read data from MCU periodically as shakehand - 4 words = 8 bytes data
WriteLocal("LW", 356, 2, (void*)(&readResult), 0); // save the ReadData error code
if (1 != readResult) // failed
{
// error process: ReadData failed.
return 0;
}
unsigned short flag = data[lbk]1[rbk] & 0x00FF ;
int resultData = ((data[lbk]2[rbk] << 16) & 0xFFFF0000) + data[lbk]3[rbk] ;
if ( 2 != flag )
{
// error process: wrong data
return 0;
}
// right data
float floatData = resultData; //unit 0.01mV/mA
floatData = floatData / 100; //unit 1mV/mA
unsigned short dataAddr = 1004 + sampChan * 2;
WriteLocal("LW", dataAddr, 2, (void*)&floatData, 0); // for UI display
//==============================================
// Fill in the content of the data permanent storage area
// only data1~data120 -- HERE
unsigned short maxRangeNumber, currRangeNumber;
ReadLocal("RW", 0, 1, (void*)&maxRangeNumber, 0);
ReadLocal("RW", 1, 1, (void*)&currRangeNumber, 0);
if (currRangeNumber > maxRangeNumber)
{
currRangeNumber = 1;
WriteLocal
{
unsigned short PLCAddr, channelNumber;
ReadLocal("RW", 7, 1, (void*)(&PLCAddr), 0);
// get the channel number from RW
ReadLocal("RW", 73, 1, (void*)(&channelNumber), 0);
unsigned short inChan, outChan, sampChan, index;
ReadLocal("LW", 1000, 1, (void*)&inChan, 0);
ReadLocal("LW", 1001, 1, (void*)&outChan, 0);
ReadLocal("LW", 1002, 1, (void*)&sampChan, 0);
ReadLocal("LW", 358, 1, (void*)&index, 0);
// calculate the cmd_addr
// // globalController.maxAdcSampNum =(inChan-1)*(chanNumber-inChan) + (outChan-2) -- wrong formula
int cmd_addr = (index << 8) + sampChan + 1; // the HMI will automatically decrease 1 when send addr to PLC
int len = 4;
unsigned short i, data[lbk]16[rbk] = {0};
// error code: 0: fail; 1: success
int readResult = ReadData(sampledData, 240, cmd_addr, len, (void*)data); //read data from MCU periodically as shakehand - 4 words = 8 bytes data
WriteLocal("LW", 356, 2, (void*)(&readResult), 0); // save the ReadData error code
if (1 != readResult) // failed
{
// error process: ReadData failed.
return 0;
}
unsigned short flag = data[lbk]1[rbk] & 0x00FF ;
int resultData = ((data[lbk]2[rbk] << 16) & 0xFFFF0000) + data[lbk]3[rbk] ;
if ( 2 != flag )
{
// error process: wrong data
return 0;
}
// right data
float floatData = resultData; //unit 0.01mV/mA
floatData = floatData / 100; //unit 1mV/mA
unsigned short dataAddr = 1004 + sampChan * 2;
WriteLocal("LW", dataAddr, 2, (void*)&floatData, 0); // for UI display
//==============================================
// Fill in the content of the data permanent storage area
// only data1~data120 -- HERE
unsigned short maxRangeNumber, currRangeNumber;
ReadLocal("RW", 0, 1, (void*)&maxRangeNumber, 0);
ReadLocal("RW", 1, 1, (void*)&currRangeNumber, 0);
if (currRangeNumber > maxRangeNumber)
{
currRangeNumber = 1;
WriteLocal