hwh
2024-09-05 d3e1346d52806f00d21eba23cabf9cfa4f61d7d4
测试页面,修复bug
8个文件已修改
99 ■■■■ 已修改文件
Admin.NET/WCS.Application/Hub/PlcHub.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCUtil.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Service/WcsPlc/WcsPlcService.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/api/wcs/wcsPlc.ts 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/device/alarmManage/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/device/deviceInfo/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/device/deviceMonitor/index.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | 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)
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,7 +25,8 @@
                        </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-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="起始工位">
@@ -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,12 +114,12 @@
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: '',
@@ -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>