| | |
| | | /// <param name="context"></param> |
| | | /// <returns></returns> |
| | | Task PublicAlarm(WcsAlarmInfoOutput context); |
| | | /// <summary> |
| | | /// 修改服务状态 |
| | | /// </summary> |
| | | /// <param name="context"></param> |
| | | Task UpdateService(PLCServiceModel context); |
| | | } |
| | | } |
| | |
| | | //{ |
| | | // await _plcHubContext.Clients.All.PublicStationStatus(context); |
| | | //} |
| | | |
| | | /// <summary> |
| | | /// 下发服务状态 |
| | | /// </summary> |
| | | public async Task UpdateService(PLCServiceModel context) |
| | | { |
| | | //运行状态 |
| | | if (context.BoRunningState.HasValue) |
| | | PLCTaskAction.boRunningState = context.BoRunningState.Value; |
| | | //脱机模式 |
| | | if (context.BoOffline.HasValue) |
| | | PLCTaskAction.boOffline = context.BoOffline.Value; |
| | | //自刷新 |
| | | if (context.BoRefresh.HasValue) |
| | | PLCTaskAction.boRefresh = context.BoRefresh.Value; |
| | | await _plcHubContext.Clients.All.UpdateService(context); |
| | | } |
| | | } |
| | | public class PLCServiceModel |
| | | { |
| | | public bool? BoRunningState { get; set; } |
| | | |
| | | |
| | | public bool? BoOffline { get; set; } |
| | | |
| | | |
| | | public bool? BoRefresh { get; set; } |
| | | } |
| | |
| | | |
| | | using Admin.NET.Core.Service; |
| | | |
| | | namespace WCS.Application; |
| | | |
| | | /// <summary> |
| | |
| | | public class WcsDeviceService : IDynamicApiController, ITransient |
| | | { |
| | | private readonly SqlSugarRepository<WcsDevice> _wcsDeviceRep; |
| | | public WcsDeviceService(SqlSugarRepository<WcsDevice> wcsDeviceRep) |
| | | private readonly SysCacheService _sysCacheService; |
| | | public WcsDeviceService(SqlSugarRepository<WcsDevice> wcsDeviceRep, SysCacheService sysCacheService) |
| | | { |
| | | _wcsDeviceRep = wcsDeviceRep; |
| | | _sysCacheService = sysCacheService; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | .Select<WcsDeviceOutput>((a, b) => new WcsDeviceOutput() { Type = b.Type }, true) |
| | | .ToListAsync(); |
| | | //获取跺机的状态 |
| | | var listConn = PLCTaskAction.listPlcConn; |
| | | foreach (var modDevice in list) |
| | | { |
| | | var modUtil = listConn.FirstOrDefault(s => s != null && s.PlcId == modDevice.PlcId); |
| | | modDevice.Status = modUtil == null ? false : modUtil.Connected; |
| | | if (_sysCacheService.ExistKey("PlcConn" + modDevice.PlcId)) |
| | | { |
| | | var cachePlc = _sysCacheService.Get<WcsPlc>("PlcConn" + modDevice.PlcId); |
| | | modDevice.Status = cachePlc.IsConn; |
| | | } |
| | | else |
| | | { |
| | | modDevice.Status = false; |
| | | } |
| | | } |
| | | |
| | | |
| | | return list; |
| | | } |
| | |
| | | <el-collapse v-model="activeName"> |
| | | <el-collapse-item title="设备控制" name="1"> |
| | | <el-card class="box-card" shadow="hover"> |
| | | <el-switch v-model="state.boRunningState" active-text="" inactive-text="程序服务"></el-switch> |
| | | <el-switch v-model="state.boRunningState" active-text="" inactive-text="程序服务" |
| | | @change="handleSwitchChange('boRunningState', $event)"></el-switch> |
| | | </el-card> |
| | | <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> |
| | | <el-switch v-model="state.boOffline" active-text="" inactive-text="脱机模式"></el-switch> |
| | | <el-switch v-model="state.boOffline" active-text="" inactive-text="脱机模式" |
| | | @change="handleSwitchChange('boOffline', $event)"></el-switch> |
| | | </el-card> |
| | | <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> |
| | | <el-switch v-model="state.boRefresh" active-text="" inactive-text="自刷新"></el-switch> |
| | | <el-switch v-model="state.boRefresh" active-text="" inactive-text="自刷新" |
| | | @change="handleSwitchChange('boRefresh', $event)"></el-switch> |
| | | </el-card> |
| | | </el-collapse-item> |
| | | |
| | | <el-collapse-item title="堆垛机" name="2"> |
| | | <div style="overflow-x: auto;white-space: nowrap;"> |
| | | <el-card v-for="(stacker, index) in stackers" :key="index" class="box-card" shadow="hover"> |
| | | <el-switch v-model="stacker.isConn" :inactive-text="`${stacker.text}`" disabled ></el-switch> |
| | | <el-switch v-model="stacker.isConn" :inactive-text="`${stacker.text}`" |
| | | disabled></el-switch> |
| | | </el-card> |
| | | </div> |
| | | </el-collapse-item> |
| | | |
| | | <el-collapse-item title="输送线" name="3"> |
| | | <el-card v-for="(conveyor, index) in conveyors" :key="index" class="box-card" shadow="hover"> |
| | | <el-switch v-model="conveyor.isConn" :inactive-text="`${conveyor.text}`" disabled ></el-switch> |
| | | <el-switch v-model="conveyor.isConn" :inactive-text="`${conveyor.text}`" |
| | | disabled></el-switch> |
| | | </el-card> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { ref, reactive,onMounted } from 'vue'; |
| | | import { ref, reactive, onMounted } from 'vue'; |
| | | import { listStatus } from '/@/api/wcs/wcsPlc'; |
| | | import { signalR } from './signalR'; |
| | | |
| | |
| | | } |
| | | console.log(stackers.value[0].isConn) |
| | | }); |
| | | signalR.off('UpdateService'); |
| | | signalR.on('UpdateService', (data: any) => { |
| | | state.value = data; |
| | | }); |
| | | }); |
| | | const handleSwitchChange = (field: string, value: boolean) => { |
| | | signalR.invoke('UpdateService',state.value); |
| | | }; |
| | | |
| | | |
| | | const activeName = ['1', '2', '3']; |
| | | const value1 = ref(false); |
| | |
| | | { Id: 202, Code: '', IsShow: 0, IsUse: 2 }, |
| | | { Id: 203, Code: '', IsShow: 1, IsUse: 0 }, |
| | | { Id: 204, Code: '', IsShow: 0, IsUse: 2 }, |
| | | { Id:205 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:206 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:207 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:208 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:209 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:210 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:211 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:212 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:213 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:214 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:215 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:216 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:217 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:218 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:219 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:220 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:221 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:222 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:223 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:224 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:225 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:226 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:227 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:228 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:229 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:230 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:231 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:232 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:233 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:234 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:235 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:236 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:237 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:238 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:239 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:240 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:241 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:242 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:243 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:244 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:245 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:246 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:247 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:248 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:249 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:250 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:251 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:252 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:253 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id:254 , Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 205, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 206, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 207, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 208, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 209, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 210, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 211, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 212, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 213, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 214, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 215, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 216, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 217, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 218, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 219, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 220, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 221, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 222, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 223, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 224, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 225, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 226, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 227, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 228, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 229, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 230, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 231, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 232, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 233, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 234, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 235, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 236, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 237, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 238, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 239, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 240, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 241, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 242, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 243, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 244, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 245, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 246, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 247, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 248, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 249, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 250, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 251, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 252, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 253, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 254, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 255, Code: '', IsShow: 0, IsUse: 3 }, |
| | | { Id: 256, Code: '', IsShow: 1, IsUse: 0 }, |
| | | { Id: 257, Code: '', IsShow: 1, IsUse: 0 }, |
| | |
| | | |
| | | .grid-container-line { |
| | | display: grid; |
| | | grid-template-columns: repeat(51, 1fr); /* 自适应列宽 */ |
| | | grid-template-rows: 1fr; /* 自适应行高 */ |
| | | grid-template-columns: repeat(51, 1fr); |
| | | /* 自适应列宽 */ |
| | | grid-template-rows: 1fr; |
| | | /* 自适应行高 */ |
| | | gap: 0; |
| | | margin-top: 25px; |
| | | width: 100%; /* 宽度自适应 */ |
| | | height: 1fr; /* 高度自适应 */ |
| | | width: 100%; |
| | | /* 宽度自适应 */ |
| | | height: 1fr; |
| | | /* 高度自适应 */ |
| | | } |
| | | |
| | | .grid-item-line { |
| | |
| | | background-color: #9c9c9c; |
| | | border: 1px solid #797777; |
| | | text-align: center; |
| | | line-height: 1.4vw; /* 行高 */ |
| | | width: 100%; /* 自适应宽度 */ |
| | | height: 100%; /* 自适应高度 */ |
| | | line-height: 1.4vw; |
| | | /* 行高 */ |
| | | width: 100%; |
| | | /* 自适应宽度 */ |
| | | height: 100%; |
| | | /* 自适应高度 */ |
| | | color: #fff; |
| | | font-size: 0.7vw; |
| | | } |
| | |
| | | .active2>div { |
| | | display: none; |
| | | } |
| | | |
| | | .active3 { |
| | | background-color: #fff; |
| | | border:1px solid red; |
| | | border: 1px solid red; |
| | | } |
| | | |
| | | .active3>div { |
| | | display: none; |
| | | } |