From f23451be3160a2f8ad00e3e929c78197707c4f93 Mon Sep 17 00:00:00 2001 From: hear <70554662+Wzyyy98@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:22:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9ES7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(s7): 数据采集增加S7协议 * fix: s7点位死区校验 --- public/images/DataCollect/gateway.png | Bin 0 -> 4141 bytes public/images/DataCollect/s7.png | Bin 0 -> 5986 bytes src/api/data-collect/collector.ts | 9 +- src/utils/consts.ts | 1 + src/views/DataCollect/Channel/Save/index.vue | 14 +- src/views/DataCollect/Channel/data.ts | 1 + src/views/DataCollect/Channel/index.vue | 13 +- src/views/DataCollect/Channel/type.d.ts | 1 + .../Collector/Point/Save/DeathArea.vue | 254 +++++++++++++ .../Collector/Point/Save/SaveS7.vue | 337 ++++++++++++++++++ .../DataCollect/Collector/Point/index.vue | 46 ++- .../DataCollect/Collector/Tree/Save/index.vue | 49 ++- src/views/DataCollect/Collector/data.ts | 104 +++++- 13 files changed, 805 insertions(+), 24 deletions(-) create mode 100644 public/images/DataCollect/gateway.png create mode 100644 public/images/DataCollect/s7.png create mode 100644 src/views/DataCollect/Collector/Point/Save/DeathArea.vue create mode 100644 src/views/DataCollect/Collector/Point/Save/SaveS7.vue diff --git a/public/images/DataCollect/gateway.png b/public/images/DataCollect/gateway.png new file mode 100644 index 0000000000000000000000000000000000000000..50fc4f636872f23a7f3540f03ba97722632c8f14 GIT binary patch literal 4141 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 literal 0 HcmV?d00001 diff --git a/public/images/DataCollect/s7.png b/public/images/DataCollect/s7.png new file mode 100644 index 0000000000000000000000000000000000000000..5707d4ec135f8acaff00068e9368c7d1b2dfa0c2 GIT binary patch literal 5986 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 Q2LJ#707*qoM6N<$f<%RFRR910 literal 0 HcmV?d00001 diff --git a/src/api/data-collect/collector.ts b/src/api/data-collect/collector.ts index 8ab956f5..84234c06 100644 --- a/src/api/data-collect/collector.ts +++ b/src/api/data-collect/collector.ts @@ -54,8 +54,7 @@ export const queryPointNoPaging = (data: any) => export const scanOpcUAList = (data: any) => server.get( - `/data-collect/opc/channel/${data.id}/nodes?nodeId=${ - data?.nodeId || '' + `/data-collect/opc/channel/${data.id}/nodes?nodeId=${data?.nodeId || '' }`, ); @@ -63,4 +62,8 @@ export const queryTypeList = () => server.get(`/data-collect/opc/data-types`); export const getProviders = () => server.get('/data-collect/channel/gateway/codec/providers') -export const getStates = () => server.get('/dictionary/running-state/items') \ No newline at end of file +export const getStates = () => server.get('/dictionary/running-state/items') + +export const getSnapTypes = () => server.get('/s7/client/s7codecs/list') + +export const getArea = () => server.get('/s7/client/s7area/list') \ No newline at end of file diff --git a/src/utils/consts.ts b/src/utils/consts.ts index c2561832..c87d2cae 100644 --- a/src/utils/consts.ts +++ b/src/utils/consts.ts @@ -57,4 +57,5 @@ export const protocolList = [ { label: 'OPC_UA', value: 'OPC_UA', alias: 'opc-ua' }, { label: 'MODBUS_TCP', value: 'MODBUS_TCP', alias: 'Modbus/TCP' }, { label: 'COLLECTOR_GATEWAY', value: 'COLLECTOR_GATEWAY', alias: 'GATEWAY' }, + { label: 'S7', value: 'snap7', alias: 'snap7' }, ] diff --git a/src/views/DataCollect/Channel/Save/index.vue b/src/views/DataCollect/Channel/Save/index.vue index 2b63c814..42ee9a87 100644 --- a/src/views/DataCollect/Channel/Save/index.vue +++ b/src/views/DataCollect/Channel/Save/index.vue @@ -171,6 +171,12 @@ v-model:value="formData.configuration.password" /> + { params.configuration.deviceName = formData.value.configuration.deviceName } + if(params?.provider === 'snap7'){ + params.configuration={ + connect : false + } + } + params.circuitBreaker = { type: 'Ignore' } @@ -304,7 +316,7 @@ const getProvidersList = async () => { if (resp.status === 200) { const arr = resp.result .filter( - (item: any) => ['GATEWAY', 'Modbus/TCP', 'opc-ua'].includes(item.name), + (item: any) => ['GATEWAY', 'Modbus/TCP', 'opc-ua','snap7'].includes(item.name), ) .map((it: any) => it.name); const providers: any = protocolList.filter((item: any) => diff --git a/src/views/DataCollect/Channel/data.ts b/src/views/DataCollect/Channel/data.ts index 68a8fe0c..61f0f3d6 100644 --- a/src/views/DataCollect/Channel/data.ts +++ b/src/views/DataCollect/Channel/data.ts @@ -17,6 +17,7 @@ export const FormState: FormDataType = { password: '', deviceId: undefined, deviceName: undefined, + connect:false, }, description: '', }; diff --git a/src/views/DataCollect/Channel/index.vue b/src/views/DataCollect/Channel/index.vue index 3e27726b..2b857813 100644 --- a/src/views/DataCollect/Channel/index.vue +++ b/src/views/DataCollect/Channel/index.vue @@ -43,7 +43,7 @@ >