// 如果当前状态是运行状态,那么执行以下操作:
if (STATE_RUNNING == pHandler->GetState()) {
	// 如果循环列表不为空,则继续执行以下操作。
	if (cycList != NULL) {
		// 如果进入循环变量访问成功,则执行以下操作。
		if (pHandler->CycEnterVarAccess(cycList)) {
			// 读取循环列表中的变量值,将结果存储在ppValues和ulNumOfValues中。
			result = pHandler->CycReadVars(cycList, &ppValues, &ulNumOfValues);
			// 如果读取成功并且ppValues不为空且ulNumOfValues等于符号列表的大小,则执行以下操作。
			if (RESULT_OK == result && ppValues != NULL && ulNumOfValues == symbolList->size()) {
				// 遍历符号列表中的每个符号,将变量值存储在相应的缓冲区中。
				for (unsigned long n = 0; n < symbolList->size(); n++) {
					symbol* s = symbolList->at(n);
					if (s->typeId == DATATYPE_BIT) {
						memcpy(s->pbuf, ppValues[n]->byData, 1);
					} else {
						memcpy(s->pbuf, ppValues[n]->byData, s->size);
					}
				}
				// 获取循环的操作速率并发出符号值更新的信号。
				opRate = pHandler->CycGetOperatingRate(cycList);
				emit plcManager->symbolValueUpdated(opRate, time);
			}
			// 离开循环变量访问。
			pHandler->CycLeaveVarAccess(cycList);
		}
	}
}
C++代码解析:循环列表变量读取与更新

原文地址: https://www.cveoy.top/t/topic/mRzU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录