tags/yfai-pcn-ext-v1.0
王杰 11 months ago
parent fa13883d13
commit 4fe47f60a5

@ -172,6 +172,32 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "删除上下文产品加工规则信息集合") @ApiOperation(value = "删除上下文产品加工规则信息集合")
void deleteProdRuleDataContext(StationRequestBean reqBean); void deleteProdRuleDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文班次班组信息")
List<StationKvBean> getProdShiftDataContext(StationRequestBean reqBean, String workCenterCode);
@ApiOperation(value = "验证上下文班次班组信息是否存在")
Boolean checkProdShiftDataIsExistContext(StationRequestBean reqBean, String workCenterCode);
@ApiOperation(value = "保存上下文班次班组信息", notes = "[JSON]List<StationKvBean>")
Boolean saveProdShiftDataContext(StationRequestBean reqBean, String workCenterCode, List<StationKvBean> prodShiftDatList);
@ApiOperation(value = "删除上下文班次班组信息")
void deleteProdShiftDataContext(StationRequestBean reqBean, String workCenterCode);
@ApiOperation(value = "获取上下文工位加工数统计信息")
List<StationKvBean> getProductionStatisticsContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文工位加工数统计信息", notes = "[JSON]List<StationKvBean>")
Boolean saveProductionStatisticsContext(StationRequestBean reqBean, List<StationKvBean> prodShiftDatList);
@ApiOperation(value = "删除上下文工位加工数统计信息")
void deleteProductionStatisticsContext(StationRequestBean reqBean);

@ -0,0 +1,110 @@
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station;
//
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService;
//import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
//import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.util.StringUtils;
//
//import java.util.Map;
//
///**
// * @Description : 展示组件:非排序生产(按钮 临时)
// * @Author :wangjie
// **/
//@Slf4j
//@Service("mesProductionNoSortFunctionModuleService")
//class MesProductionNoSortFunctionModuleService extends BaseModuleService {
//
// @Autowired
// private IMesProductionProcessContextStepService productionProcessContextStepService;
//
// @Override
// public boolean doFunction(StationRequestBean reqBean) {
//
// StationResultBean resultBean = new StationResultBean();
//
// String functionCmd = (String) reqBean.getDataMap().get(MesPcnExtConstWords.FUNCTION_CMD);
// ButtonDynamicModel buttonDynamicModel = !StringUtils.isEmpty(functionCmd) ? JSONObject.parseObject(functionCmd, ButtonDynamicModel.class) : null;
//
// if (null != buttonDynamicModel)
//
//
//
// this.sendMessage(reqBean, resultBean, "后端未获取到业务功能指令!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
//
//
//
//
//
// switch (command) {
// case MesPcnExtConstWords.CMD_WORK_ORDER :
// if (StringUtils.isEmpty(value)) {
// this.sendMessage(reqBean, null, "请选择启动状态的生产工单!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
// return result;
// }
//
// String selectWorkOrderNo = (String) doHandleSelectWorkOrderNo(reqBean, 1, null);
// selectWorkOrderNo = (StringUtils.isEmpty(selectWorkOrderNo) || !selectWorkOrderNo.contains(MesPcnExtConstWords.COLON)) ? selectWorkOrderNo : selectWorkOrderNo.split(MesPcnExtConstWords.COLON)[1];
// if (!StringUtils.isEmpty(selectWorkOrderNo) && selectWorkOrderNo.equals(value)) return result;
// reqBean.setForceJumpProcess(true);
// if ((Boolean) doHandleSelectWorkOrderNo(reqBean, 2, value.toString())) result = true;
// else {
// this.sendMessage(reqBean, null, String.format("切换的生产工单[%s]缓存失败,请重试!", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
// return result;
// }
// break;
// case MesPcnExtConstWords.CMD_BUSI_FLAG :
// if (StringUtils.isEmpty(value)) {
// this.sendMessage(reqBean, null, "请点击业务按钮!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
// return result;
// }
//
// String curBusiFlag = (String) doHandleBusiFlag(reqBean, 1, null);
// if (!StringUtils.isEmpty(curBusiFlag) && curBusiFlag.equals(value)) return result;
// reqBean.setTriggerAutoFsm(true);
// if (StringUtils.isEmpty(curBusiFlag)) {
// if ((Boolean) doHandleBusiFlag(reqBean, 2, value.toString())) result = true;
// else {
// this.sendMessage(reqBean, null, String.format("业务按钮[%s]缓存失败,请重试!", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
// return result;
// }
// }
// break;
// case MesPcnExtConstWords.CMD_FORCE_CENTER_PASS :
// if (StringUtils.isEmpty(value)) {
// this.sendMessage(reqBean, null, "入参缺少产线强制放行的工步代码!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
// return result;
// }
// String pwd = (String) dataMap.get(MesPcnExtConstWords.PWD);
// if (!jxProduceSnExtService.checkPorceCenterPassPwd(reqBean, pwd)) {
// this.sendMessage(reqBean, null, String.format("产线强制放行验证密码[%s]不正确!", pwd), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
// return result;
// }
// reqBean.setForceSpecStepCode(value.toString());
// result = true;
// break;
// default:
// break;
// }
//
// if (!result) this.sendMessage(reqBean, null, "操作太频繁!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
// else {
// //跳过工序
// reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean));
// reqBean.setInterfaceType(MesPcnConstWords.SHIPPING);
// reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN);
// shippingDispatchService.doSendScanQueueNextExec(reqBean);
// }
// return result;
// }
//
//}

@ -1,50 +0,0 @@
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station;
//
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService;
//import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
//import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus;
//import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//
///**
// * @Description : 展示组件:非排序生产
// * @Author :wangjie
// **/
//@Slf4j
//@Service("mesProductionNoSortModuleService")
//public class MesProductionNoSortModuleServiceBak extends BaseModuleService {
//
// @Autowired
// private IMesProductionProcessContextStepService productionProcessContextStepService;
//
// @Override
// public void init(StationRequestBean reqBean) {
// StationResultBean resultBean = new StationResultBean();
// resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue());
// resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue());
// resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT);
// resultBean.setSpecialDisplayData(getStepColIndent(reqBean));
// resultBean.setResultObj(StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean("shiftCode", "班次", "白班"), new StationKvBean("shiftGroup", "班组", "注塑")));
// resultBean.setResultList(productionProcessContextStepService.getModuleContentContext(reqBean));
//
// this.sendMessage(reqBean, resultBean);
// }
//
// @Override
// public boolean execStateModule(StationRequestBean reqBean, List<MesStateMachineStatus> states, Map<String, String> wcpcMap) {
// init(reqBean);
// return true;
// }
//
//}

@ -37,7 +37,9 @@ public class MesManyCellTriggerTabSwitchStepService extends BaseStepService {
BeanUtils.copyProperties(reqBean, stationRequestBean); BeanUtils.copyProperties(reqBean, stationRequestBean);
stationRequestBean.setScanInfo(clientInfo); stationRequestBean.setScanInfo(clientInfo);
return execDynamicsCompleteAndSendMsgReturn(stationRequestBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.TAB_SWITCH, MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM, String.format("多工位页面切换,从[%s]切换到[%s]!", reqBean.getClientInfo(), clientInfo)); return clientInfo.equals(reqBean.getClientInfo()) ?
execDynamicsCompleteAndSendMsgReturn(stationRequestBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.TAB_SWITCH, MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM, String.format("客户端[%s]监听自动切换页面成功!", reqBean.getClientInfo())) :
execDynamicsCompleteAndSendMsgReturn(stationRequestBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.TAB_SWITCH, MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM, String.format("多工位页面切换,从客户端[%s]切换到客户端[%s]!", reqBean.getClientInfo(), clientInfo));
} }

@ -59,8 +59,6 @@ public class MesProductResultReadStepService extends BaseStepService {
} }
//TODO 增加参数 发送切换分屏 TODD 增加参数 末道工步清除数据
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {

@ -43,10 +43,6 @@ public class MesProductSnCheckStepService extends BaseStepService {
@Autowired @Autowired
private IMesProduceSnExtService produceSnExtService; private IMesProduceSnExtService produceSnExtService;
//TODO 更新条码 未知 单独工步
//TODO 装配件工步 判断空腔条码
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
@ -138,6 +134,7 @@ public class MesProductSnCheckStepService extends BaseStepService {
} }
//封装 读/扫主条件信息到进料主条码数据信息中
private void createProductionPsInContext(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCell workCell, Map<String, MesProduceSn> produceSnMap, String productSn, List<MesProductionPsInContext> productionPsInContextList) { private void createProductionPsInContext(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCell workCell, Map<String, MesProduceSn> produceSnMap, String productSn, List<MesProductionPsInContext> productionPsInContextList) {
MesProductionPsInContext productionPsInContext = new MesProductionPsInContext(!CollectionUtils.isEmpty(produceSnMap) ? produceSnMap.get(productSn) : null, productSn); MesProductionPsInContext productionPsInContext = new MesProductionPsInContext(!CollectionUtils.isEmpty(produceSnMap) ? produceSnMap.get(productSn) : null, productSn);
if (!StringUtils.isEmpty(productionPsInContext.getId())) productionPsInContext.isCheckSeq(workCell.getIsCheckSeq()).isCheckCraft(workCell.getIsCheckCraft()); if (!StringUtils.isEmpty(productionPsInContext.getId())) productionPsInContext.isCheckSeq(workCell.getIsCheckSeq()).isCheckCraft(workCell.getIsCheckCraft());

@ -0,0 +1,58 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesProductSnMarkUnkonwStepService")
public class MesProductSnMarkUnkonwStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
//TODO 更新条码 未知 单独工步
//TODO 装配件工步 判断空腔条码
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
return stepResult;
}
}

@ -23,6 +23,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.StringJoiner;
/** /**
* @Description : BUSI * @Description : BUSI
@ -34,6 +35,8 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT); } private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT); }
private String getContextKey(StationRequestBean reqBean, String busiCode) { return new StringJoiner(":").add(reqBean.getOrganizeCode()).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(busiCode).toString(); }
//发送设备质量信息 //发送设备质量信息
@Override @Override
public void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext) { public void sendEquipQualityMessage(StationRequestBean reqBean, MesCellEquipContext cellEquipContext) {
@ -389,8 +392,52 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT); deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT);
} }
//获取上下文班次班组信息
@Override
public List<StationKvBean> getProdShiftDataContext(StationRequestBean reqBean, String workCenterCode) {
String prodShiftJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode);
return !StringUtils.isEmpty(prodShiftJson) ? JSONObject.parseArray(prodShiftJson, StationKvBean.class) : null;
}
//验证上下文班次班组信息是否存在
@Override
public Boolean checkProdShiftDataIsExistContext(StationRequestBean reqBean, String workCenterCode) {
String prodShiftJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode);
return !StringUtils.isEmpty(prodShiftJson) ? true : false;
}
//保存上下文班次班组信息 [JSON]List<StationKvBean>
@Override
public Boolean saveProdShiftDataContext(StationRequestBean reqBean, String workCenterCode, List<StationKvBean> prodShiftDataList) {
if (CollectionUtils.isEmpty(prodShiftDataList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode, JSONObject.toJSONString(prodShiftDataList));
}
//删除上下文班次班组信息
@Override
public void deleteProdShiftDataContext(StationRequestBean reqBean, String workCenterCode) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode);
}
//获取上下文工位加工数统计信息
@Override
public List<StationKvBean> getProductionStatisticsContext(StationRequestBean reqBean) {
String productionStatisticsJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT);
return !StringUtils.isEmpty(productionStatisticsJson) ? JSONObject.parseArray(productionStatisticsJson, StationKvBean.class) : null;
}
//保存上下文工位加工数统计信息 [JSON]List<StationKvBean>
@Override
public Boolean saveProductionStatisticsContext(StationRequestBean reqBean, List<StationKvBean> productionStatisticsList) {
if (CollectionUtils.isEmpty(productionStatisticsList)) return false;
return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT, JSONObject.toJSONString(productionStatisticsList));
}
//删除上下文工位加工数统计信息
@Override
public void deleteProductionStatisticsContext(StationRequestBean reqBean) {
deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT);
}

@ -141,6 +141,26 @@ public class MesPcnExtConstWords {
// 支持混腔扫描[工位参数] // 支持混腔扫描[工位参数]
public static final String CAVITY_NOSORT_CFG = "CAVITY_NOSORT_CFG"; public static final String CAVITY_NOSORT_CFG = "CAVITY_NOSORT_CFG";
// 工位/工步 参数按钮事件
public static final String FUNCTION_CMD = "FUNCTION_CMD";
// 工位/工步 参数按钮事件值
public static final String FUNCTION_VALUE = "FUNCTION_VALUE";
// 工位参数按钮事件: 跳过工序
public static final String FUNCTION_JUMP_PROCESS = "FUNCTION_JUMP_PROCESS";
// 工位参数按钮事件: 强过状态点(工步集)
public static final String FUNCTION_JUMP_STATE = "FUNCTION_JUMP_STATE";
// 工位参数按钮事件: 重置工位上下文
public static final String FUNCTION_RESET_CELL_CONTEXT = "FUNCTION_RESET_CELL_CONTEXT";
// 工位参数按钮事件: 选择工单
public static final String FUNCTION_CHOOSE_WORK_ORDER = "FUNCTION_CHOOSE_WORK_ORDER";
// 工位参数按钮事件: 切换工位
public static final String FUNCTION_SWITCH_CELL = "FUNCTION_SWITCH_CELL";
// 0 // 0
public static final Integer ZERO = 0; public static final Integer ZERO = 0;
// 1 // 1
@ -166,6 +186,8 @@ public class MesPcnExtConstWords {
// 生产过程控制上下文目录名 // 生产过程控制上下文目录名
public static final String PRODUCTION_PROCESS_CONTEXT = "PRODUCTION_PROCESS_CONTEXT"; public static final String PRODUCTION_PROCESS_CONTEXT = "PRODUCTION_PROCESS_CONTEXT";
// 上下文: 班次班组信息
public static final String PROD_SHIFT_DATA_CONTEXT = "PROD_SHIFT_DATA_CONTEXT";
// 上下文: 基础数据 // 上下文: 基础数据
public static final String BASE_DATA_CONTEXT = "BASE_DATA_CONTEXT"; public static final String BASE_DATA_CONTEXT = "BASE_DATA_CONTEXT";
// 上下文: 展示组件数据 // 上下文: 展示组件数据
@ -198,16 +220,16 @@ public class MesPcnExtConstWords {
public static final String PRODUCTION_PS_IN_CONTEXT = "PRODUCTION_PS_IN_CONTEXT"; public static final String PRODUCTION_PS_IN_CONTEXT = "PRODUCTION_PS_IN_CONTEXT";
// 上下文: 产出条码数据信息 // 上下文: 产出条码数据信息
public static final String PRODUCTION_PS_OUT_CONTEXT = "PRODUCTION_PS_OUT_CONTEXT"; public static final String PRODUCTION_PS_OUT_CONTEXT = "PRODUCTION_PS_OUT_CONTEXT";
// 上下文: 加工统计信息
public static final String PRODUCTION_STATISTICS_CONTEXT = "PRODUCTION_STATISTICS_CONTEXT";
/*** @Deprecated
* OPC
*/
public static final String OPC_LINK_URL="OPC_LINK_URL";
public static final String VALUE="value";
public static final String CLIENT_HANDLE="clientHandle";
public static final String CHANNEL="channel";
public static final String EQUIPMENT_ID="equipmentId";
public static final String OPC_WRITE_VARIABLE="/api/OPCService/WriteVariable"; public static final String OPC_WRITE_VARIABLE="/api/OPCService/WriteVariable";
@Deprecated
public static final String OPC_READ_VARIABLE="/api/OPCService/ReadVariable"; public static final String OPC_READ_VARIABLE="/api/OPCService/ReadVariable";

Loading…
Cancel
Save