Admin.NET/WCS.Application/Hub/PlcHub.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/PLC/PLCUtil.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsPlc/WcsPlcService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/api/wcs/wcsPlc.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/views/device/alarmManage/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/views/device/deviceInfo/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/views/device/deviceMonitor/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Admin.NET/WCS.Application/Hub/PlcHub.cs
@@ -55,7 +55,7 @@ //自刷新 if (context.BoRefresh.HasValue) PLCTaskAction.boRefresh = context.BoRefresh.Value; await _plcHubContext.Clients.All.UpdateService(context); await _plcHubContext.Clients.All.UpdateService(new PLCServiceModel() { BoRunningState = PLCTaskAction.boRunningState, BoRefresh = PLCTaskAction.boRefresh, BoOffline = PLCTaskAction.boOffline }); } } public class PLCServiceModel Admin.NET/WCS.Application/PLC/PLCUtil.cs
@@ -42,8 +42,9 @@ /// <param name="DbNumber">DB区指定值</param> /// <param name="PosType">字符类型</param> /// <param name="Pos">偏移量/地址</param> /// <param name="Length">长度(字符串)</param> /// <returns></returns> public (IoTClient.Result, dynamic value) GetPlcDBValue(PLCDataTypeEnum PosType, string DbNumber, string Pos) public (IoTClient.Result, dynamic value) GetPlcDBValue(PLCDataTypeEnum PosType, string DbNumber, string Pos, int? Length = 0) { lock (OLock) { @@ -86,7 +87,7 @@ result = _client.ReadDouble(address); break; case PLCDataTypeEnum.String: result = _client.ReadString(address); result = _client.ReadString(address, Convert.ToUInt16(Length)); break; default: result = new IoTClient.Result<object>(); Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
@@ -219,7 +219,9 @@ //读取plc的值 var modConn = PLCTaskAction.listPlcConn.FirstOrDefault(s => s != null && s.PlcId == modDevice.PlcId); if (modConn == null) break; { continue; } try { var listPosition = await _wcsDeviceRep.Context.Queryable<WcsPosition>().Where(s => s.DeviceId == modDevice.Id).ToListAsync(); @@ -229,7 +231,7 @@ modDevice.Wcs = Convert.ToString(wcs); //任务号 var modPositionTask = listPosition.FirstOrDefault(s => s.Text == "任务号"); (result, var taskNo) = modConn.GetPlcDBValue(modPositionTask.PosType, modDevice.DbNumber, modPositionTask.PlcPos); (result, var taskNo) = modConn.GetPlcDBValue(modPositionTask.PosType, modDevice.DbNumber, modPositionTask.PlcPos, modPositionTask.StringLength); modDevice.TaskNo = Convert.ToString(taskNo); //任务类型 var modPositionTaskType = listPosition.FirstOrDefault(s => s.Text == "任务类型"); @@ -245,7 +247,7 @@ modDevice.EndLocatNo = Convert.ToString(endLocatNo); //托盘码 var modPositionPalletNo = listPosition.FirstOrDefault(s => s.Text == "托盘码"); (result, var palletNo) = modConn.GetPlcDBValue(modPositionPalletNo.PosType, modDevice.DbNumber, modPositionPalletNo.PlcPos); (result, var palletNo) = modConn.GetPlcDBValue(modPositionPalletNo.PosType, modDevice.DbNumber, modPositionPalletNo.PlcPos, modPositionPalletNo.StringLength); modDevice.PalletNo = Convert.ToString(palletNo); } catch (Exception) @@ -288,7 +290,7 @@ .Select(u => new { id = u.Id, name = u.Text name = u.Text } ).ToListAsync(); } Admin.NET/WCS.Application/Service/WcsPlc/WcsPlcService.cs
@@ -106,7 +106,7 @@ [DisplayName("获取PLC列表")] public async Task<List<WcsPlcOutput>> List([FromQuery] PageWcsPlcInput input) { return await _wcsPlcRep.AsQueryable().Select<WcsPlcOutput>().ToListAsync(); return await _wcsPlcRep.AsQueryable().WhereIF(input.Type != null, s => s.Type == input.Type).Select<WcsPlcOutput>().ToListAsync(); } /// <summary> @@ -147,15 +147,6 @@ [DisplayName("获取位置信息")] public List<PlcPositionInfo> ListPosition() { //测试用 //return new List<PlcPositionInfo>() //{ // new PlcPositionInfo(){ Type=PLCTypeEnum.ConveyorLine, StationNum="147", BoHaveItem=true }, // new PlcPositionInfo(){ Type=PLCTypeEnum.ConveyorLine, StationNum="143", BoHaveItem=true }, // new PlcPositionInfo(){ Type=PLCTypeEnum.StackingMachine, StationNum="002", BoxHeight=30 }, //}; var list = PLCTaskAction.listPositionInfo.ToList(); return list; } Web/src/api/wcs/wcsPlc.ts
@@ -5,6 +5,7 @@ UpdateWcsPlc = '/api/wcsPlc/update', PageWcsPlc = '/api/wcsPlc/page', DetailWcsPlc = '/api/wcsPlc/detail', ListWcsPlc = '/api/wcsPlc/list', ListStatus = '/api/wcsPlc/ListStatus', ListPosition = 'api/wcsPlc/ListPosition' } @@ -48,7 +49,13 @@ method: 'get', data: { id }, }); // 分页查询PLC export const listWcsPlc = (params?: any) => request({ url: Api.ListWcsPlc, method: 'get', data: params, }); // 获取PLC连接状态和服务状态 export const listStatus = () => Web/src/views/device/alarmManage/index.vue
@@ -1961,19 +1961,19 @@ //切换层平面 function floorTogglePlain(buttonNumber) { if (buttonNumber === 1) { isPlain1.value = !isPlain1.value; isPlain1.value = false; isPlain2.value = true; isPlain3.value = true; //切换输送线数据 cellsData.value = cellsDataOne.value; } else if (buttonNumber === 2) { isPlain2.value = !isPlain2.value; isPlain2.value = false; isPlain1.value = true; isPlain3.value = true; //切换输送线数据 cellsData.value = cellsDataTwo.value; } else if (buttonNumber === 3) { isPlain3.value = !isPlain3.value; isPlain3.value = false; isPlain1.value = true; isPlain2.value = true; //切换输送线数据 Web/src/views/device/deviceInfo/index.vue
@@ -37,9 +37,12 @@ </el-col> <el-col :span="21"> <div class="card-page"> <el-button type="primary" :plain="floorStates.isPlain1" @click="floorTogglePlain(1)">一层平面</el-button> <el-button type="primary" :plain="floorStates.isPlain2" @click="floorTogglePlain(2)">二层平面</el-button> <el-button type="primary" :plain="floorStates.isPlain3" @click="floorTogglePlain(3)">三层平面</el-button> <el-button type="primary" :plain="floorStates.isPlain1" @click="floorTogglePlain(1)">一层平面</el-button> <el-button type="primary" :plain="floorStates.isPlain2" @click="floorTogglePlain(2)">二层平面</el-button> <el-button type="primary" :plain="floorStates.isPlain3" @click="floorTogglePlain(3)">三层平面</el-button> </div> <div style="margin: 40px; height: 50%;"> <div class="grid-container-line"> @@ -148,7 +151,9 @@ }); }); const handleSwitchChange = (field: string, value: boolean) => { signalR.invoke('UpdateService', state.value); const param = { [field]: value }; debugger; signalR.invoke('UpdateService', param); }; // 更新输送线数据的通用函数 Web/src/views/device/deviceMonitor/index.vue
@@ -4,14 +4,12 @@ <el-card class="box-card"> <div slot="header" class="linefix"> <span>输送线</span> <div :class="['lineStatus', { 'device-status-0': stationValue.status === true }, { 'device-status-1': stationValue.status === false }]"> </div> <div :class="['lineStatus', stationValue.status ? 'device-status-0' : 'device-status-1']"></div> </div> <div class="choosefix"> <el-select v-model="lineValue" placeholder="请选择" @change="handleLineChange('item', $event)"> <el-option v-for="item in lineOptions" :key="item.value" :label="item.label" :value="item.value"></el-option> <el-option v-for="item in lineOptions" :key="item.id" :label="item.text" :value="item.id"></el-option> </el-select> <el-select v-model="stationValue" placeholder="请选择" style="margin-top: 10px;" value-key="stationNum"> @@ -27,8 +25,9 @@ </el-form-item> <el-form-item label="任务类型"> <el-select clearable v-model="stationValue.taskType" placeholder="请选择任务类型"> <el-option v-for="(item,index) in dl('TaskTypeEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} [${item.value}]`"></el-option> </el-select> <el-option v-for="(item, index) in dl('TaskTypeEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} [${item.value}]`"></el-option> </el-select> </el-form-item> <el-form-item label="起始工位"> <el-input v-model="stationValue.startLocatNo"></el-input> @@ -77,8 +76,7 @@ <el-form-item label="任务类型"> <el-select clearable="" v-model="deviceInfo.taskType" placeholder="请选择状态"> <el-option v-for="(item, index) in dl('TaskTypeEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} [${item.value}] `" /> :value="Number(item.value)" :label="`${item.name} [${item.value}] `" /> </el-select> </el-form-item> <el-form-item label="起始工位"> @@ -116,17 +114,17 @@ import { ref, reactive } from 'vue'; import { listWcsDevice } from '/@/api/wcs/wcsDevice'; import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils'; import { getDictLabelByVal as dv } from '/@/utils/dict-utils'; import { listWcsPlc } from '/@/api/wcs/wcsPlc'; const stations = ref<any>([]); const listStationsData = ref<any>([]); const listStackingMachineData = ref<any>([]); const lineOptions = ref<any>([]); const lineValue = ref(1); const stationValue = ref<any>({ taskNo: '', taskType: '', startLocatNo:'', startLocatNo: '', endLocatNo: '', plc: '', wcs: '', @@ -135,16 +133,17 @@ // 查询操作 const handleQuery = async () => { var listplc = await listWcsPlc({ type: 1 }); lineOptions.value = listplc.data.result; lineValue.value = listplc.data.result[0].id; var res = await listWcsDevice(); listStackingMachineData.value = res.data.result.filter(s => s.type == 0); const listConveyorLineData = res.data.result.filter(s => s.type == 1 || s.type == 4); stations.value = { 1: listConveyorLineData.filter(s => s.text == '1层托盘输送线'), 2: listConveyorLineData.filter(s => s.text == '2层托盘输送线'), 3: listConveyorLineData.filter(s => s.text == '3层托盘输送线') } if (stations.value[1].length > 0) { listStationsData.value = stations.value[1]; const listConveyorLineData = res.data.result.filter(s => s.type == 1); listplc.data.result.forEach(s => { stations.value[s.id] = listConveyorLineData.filter(c => c.plcId === s.id) }); if (stations.value[lineValue.value].length > 0) { listStationsData.value = stations.value[lineValue.value]; stationValue.value = listStationsData.value[0]; } }; @@ -152,15 +151,9 @@ const handleLineChange = (field: string, value: number) => { listStationsData.value = stations.value[value]; stationValue.value = {}; if (listStationsData.value.length > 0) stationValue.value = listStationsData.value[0]; }; const lineOptions = [ { value: 1, label: '一楼输送线' }, { value: 2, label: '二楼输送线' }, { value: 3, label: '三楼输送线' } ]; </script>