@@ -0,0 +1,539 @@
< template >
<!-- 标准版 - 输送机 - 控制点 -- >
< div >
< el-card class = "box-card" shadow = "never" >
< div slot = "header" class = "clearfix" >
< span class = "role-span" > 设备协议 : < / span >
< / div >
< el-row >
< el-col :span = "12" >
OpcServer :
< el-select
v-model = "opc_id"
placeholder = "无"
clearable
filterable
@change ="changeOpc"
>
< el-option
v-for = "item in dataOpcservers"
:key = "item.opc_id"
:label = "item.opc_name"
:value = "item.opc_id"
/ >
< / el-select >
< / el-col >
< el-col :span = "12" >
PLC :
< el-select
v-model = "plc_id"
placeholder = "无"
clearable
@change ="changePlc"
>
< el-option
v-for = "item in dataOpcPlcs"
:key = "item.plc_id"
:label = "item.plc_name"
:value = "item.plc_id"
/ >
< / el-select >
< / el-col >
< / el-row >
< / el-card >
< el-card class = "box-card" shadow = "never" >
< div slot = "header" class = "clearfix" >
< span class = "role-span" > 输送系统 : < / span >
< / div >
< el-form ref = "form" :inline = "true" :model = "form" :rules = "rules" size = "small" label -width = " 78px " >
< el-row >
< el-col :span = "8" >
< el-form-item label = "电气调度号" label -width = " 150px " >
< el-input v-model = "form.address" / >
< / el-form-item >
< / el-col >
< / el-row >
< / el-form >
< / el-card >
< el-card class = "box-card" shadow = "never" >
< div slot = "header" class = "clearfix" >
< span class = "role-span" > 指令相关 : < / span >
< / div >
< el-form ref = "form" :inline = "true" :model = "form" :rules = "rules" size = "small" label -width = " 78px " >
< el-row >
< el-col :span = "8" >
< el-form-item label = "检验有货" >
< el-switch v-model = "form.inspect_in_stocck" / >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "取货校验" label -width = " 150px " >
< el-switch v-model = "form.ignore_pickup_check" / >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "放货校验" label -width = " 150px " >
< el-switch v-model = "form.ignore_release_check" / >
< / el-form-item >
< / el-col >
< / el-row >
< el-row >
< el-col :span = "8" >
< el-form-item label = "呼叫" >
< el-switch v-model = "form.apply_task" / >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "响应" label -width = " 150px " >
< el-switch v-model = "form.manual_create_task" / >
< / el-form-item >
< / el-col >
< / el-row >
< el-row >
< el-col :span = "8" >
< el-form-item label = "关联设备" prop = "device_code" >
< el-select
v-model = "form.link_device_code"
filterable
multiple
placeholder = "请选择"
>
< el-option
v-for = "item in deviceList"
:key = "item.device_code"
:label = "item.device_name"
:value = "item.device_code"
/ >
< / el-select >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "关联三色灯" prop = "device_code" label -width = " 100px " >
< el-select
v-model = "form.link_three_lamp"
filterable
clearable
placeholder = "请选择"
>
< el-option
v-for = "item in deviceList"
:key = "item.device_code"
:label = "item.device_name"
:value = "item.device_code"
/ >
< / el-select >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "是否输入物料" label -width = " 150px " >
< el-switch v-model = "form.input_material" / >
< / el-form-item >
< / el-col >
< / el-row >
< el-row >
< el-col :span = "8" >
< el-form-item label = "是否需要反馈光电" label -width = " 150px " >
< el-switch v-model = "form.ship_device_update" / >
< / el-form-item >
< / el-col >
< / el-row >
< / el-form >
< / el-card >
< el-card class = "box-card" shadow = "never" >
< div slot = "header" class = "clearfix" >
< span class = "role-span" > AGV相关 : < / span >
< / div >
< el-form ref = "form" :inline = "true" :model = "form" :rules = "rules" size = "small" label -width = " 78px " >
< el-row >
< el-col :span = "8" >
< el-form-item label = "取货" >
< el-switch v-model = "form.is_pickup" / >
< / el-form-item >
< / el-col >
< el-col :span = "8" >
< el-form-item label = "放货" >
< el-switch v-model = "form.is_release" / >
< / el-form-item >
< / el-col >
< / el-row >
< / el-form >
< / el-card >
< el-card class = "box-card" shadow = "never" >
< div slot = "header" class = "clearfix" >
< span class = "role-span" > PLC读取字段 : < / span >
< / div >
< el-form ref = "form" :inline = "true" :model = "form" :rules = "rules" size = "small" label -width = " 78px " >
< el-table
v-loading = "false"
:data = "data1"
:max-height = "550"
size = "small"
style = "width: 100%;margin-bottom: 15px"
>
< el-table-column prop = "name" label = "用途" / >
< el-table-column prop = "code" label = "别名要求" / >
< el-table-column prop = "db" label = "DB块" >
< template slot -scope = " scope " >
< el-input
v-model = "data1[scope.$index].db"
size = "mini"
class = "edit-input"
@input ="finishReadEdit(data1[scope.$index])"
/ >
< / template >
< / el-table-column >
< el-table-column prop = "dbr_value" >
< template slot = "header" >
< el-link type = "primary" :underline = "false" @click.native ="test_read1()" > 测试读 < / el -link >
< / template >
< template slot -scope = " scope " >
< el-input v-model = "data1[scope.$index].dbr_value" size="mini" class="edit-input" / >
< / template >
< / el-table-column >
< / el-table >
< / el-form >
< / el-card >
< el-card class = "box-card" shadow = "never" >
< div slot = "header" class = "clearfix" >
< span class = "role-span" > PLC写入字段 : < / span >
< / div >
< el-form ref = "form" :inline = "true" :model = "form" :rules = "rules" size = "small" label -width = " 78px " >
< el-table
v-loading = "false"
:data = "data2"
:max-height = "550"
size = "small"
style = "width: 100%;margin-bottom: 15px"
>
< el-table-column prop = "name" label = "用途" / >
< el-table-column prop = "code" label = "别名要求" / >
< el-table-column prop = "db" label = "DB块" >
< template slot -scope = " scope " >
< el-input
v-model = "data2[scope.$index].db"
size = "mini"
class = "edit-input"
@input ="finishWriteEdit(data2[scope.$index])"
/ >
< / template >
< / el-table-column >
< el-table-column prop = "dbr_value2" >
< template slot = "header" >
< el-link type = "primary" :underline = "false" @click.native ="test_read2()" > 测试读 < / el -link >
< / template >
< template slot -scope = " scope " >
< el-input v-model = "data2[scope.$index].dbr_value" size="mini" class="edit-input" / >
< / template >
< / el-table-column >
< el-table-column prop = "dbw_value" >
< template slot = "header" >
< el-link type = "primary" :underline = "false" @click.native ="test_write1()" > 测试写 < / el -link >
< / template >
< template slot -scope = " scope " >
< el-input v-model = "data2[scope.$index].dbw_value" size="mini" class="edit-input" / >
< / template >
< / el-table-column >
< / el-table >
< / el-form >
< / el-card >
< el-card class = "box-card" shadow = "never" >
< div slot = "header" class = "clearfix" >
< span class = "role-span" / >
< el-button
:loading = "false"
icon = "el-icon-check"
size = "mini"
style = "float: right; padding: 6px 9px"
type = "primary"
@click ="doSubmit"
> 保存
< / el-button >
< / div >
< / el-card >
< / div >
< / template >
< script >
import {
queryDriverConfig ,
updateConfig ,
testRead ,
testwrite
} from '@/api/acs/device/driverConfig'
import { selectOpcList } from '@/api/acs/device/opc'
import { selectPlcList } from '@/api/acs/device/opcPlc'
import { selectListByOpcID } from '@/api/acs/device/opcPlc'
import crud from '@/mixins/crud'
import deviceCrud from '@/api/acs/device/device'
export default {
name : 'StandardConveyorControl' ,
mixins : [ crud ] ,
props : {
parentForm : {
type : Object ,
required : true
}
} ,
data ( ) {
return {
device _code : '' ,
device _id : '' ,
plc _id : '' ,
plc _code : '' ,
address : '' ,
opc _id : '' ,
opc _code : '' ,
configLoading : false ,
dataOpcservers : [ ] ,
dataOpcPlcs : [ ] ,
deviceList : [ ] ,
data1 : [ ] ,
data2 : [ ] ,
form : {
inspect _in _stocck : true ,
ignore _pickup _check : true ,
ignore _release _check : true ,
apply _task : true ,
link _three _lamp : '' ,
manual _create _task : true ,
is _pickup : true ,
is _release : true ,
link _device _code : [ ] ,
ship _device _update : true
} ,
rules : { }
}
} ,
created ( ) {
this . $nextTick ( ( ) => {
// 从父表单获取设备编码
this . device _id = this . $props . parentForm . device _id
this . device _code = this . $props . parentForm . device _code
queryDriverConfig ( this . device _id , this . $props . parentForm . driver _code ) . then ( data => {
// 给表单赋值,并且属性不能为空
if ( data . form ) {
const arr = Object . keys ( data . form )
// 不为空
if ( arr . length > 0 ) {
this . form = data . form
}
}
// 给表单赋值,并且属性不能为空
if ( data . parentForm ) {
const arr = Object . keys ( data . parentForm )
// 不为空
if ( arr . length > 0 ) {
this . opc _code = data . parentForm . opc _code
this . plc _code = data . parentForm . plc _code
}
}
this . data1 = data . rs
this . data2 = data . ws
this . sliceItem ( )
} )
selectPlcList ( ) . then ( data => {
this . dataOpcPlcs = data
this . plc _id = this . $props . parentForm . opc _plc _id
} )
selectOpcList ( ) . then ( data => {
this . dataOpcservers = data
this . opc _id = this . $props . parentForm . opc _server _id
} )
deviceCrud . selectDeviceList ( ) . then ( data => {
this . deviceList = data
} )
} )
} ,
methods : {
finishReadEdit ( data ) {
// 编辑的是code列,并且值包含mode
if ( data . code . indexOf ( 'mode' ) !== - 1 ) {
const dbValue = data . db
// .之前的字符串
const beforeStr = dbValue . match ( /(\S*)\./ ) [ 1 ]
// .之后的字符串
const afterStr = dbValue . match ( /\.(\S*)/ ) [ 1 ]
// 取最后数字
const endNumber = afterStr . substring ( 1 )
// 最后为非数字
if ( isNaN ( parseInt ( endNumber ) ) ) {
return
}
for ( const val in this . data1 ) {
if ( this . data1 [ val ] . code . indexOf ( 'mode' ) !== - 1 ) {
this . data1 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 0 )
}
if ( this . data1 [ val ] . code . indexOf ( 'move' ) !== - 1 ) {
this . data1 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 1 )
}
if ( this . data1 [ val ] . code . indexOf ( 'carrier_direction' ) !== - 1 ) {
this . data1 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 2 )
}
if ( this . data1 [ val ] . code . indexOf ( 'error' ) !== - 1 ) {
this . data1 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 4 )
}
if ( this . data1 [ val ] . code . indexOf ( 'task' ) !== - 1 ) {
this . data1 [ val ] . db = beforeStr + '.' + 'D' + ( parseInt ( endNumber ) + 8 )
}
}
}
} ,
finishWriteEdit ( data ) {
// 编辑的是code列,并且值包含mode
if ( data . code . indexOf ( 'to_command' ) !== - 1 ) {
const dbValue = data . db
// .之前的字符串
const beforeStr = dbValue . match ( /(\S*)\./ ) [ 1 ]
// .之后的字符串
const afterStr = dbValue . match ( /\.(\S*)/ ) [ 1 ]
// 取最后数字
const endNumber = afterStr . substring ( 1 )
// 最后为非数字
if ( isNaN ( parseInt ( endNumber ) ) ) {
return
}
console . log ( endNumber )
for ( const val in this . data2 ) {
if ( this . data2 [ val ] . code . indexOf ( 'to_command' ) !== - 1 ) {
this . data2 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 0 )
}
if ( this . data2 [ val ] . code . indexOf ( 'to_target' ) !== - 1 ) {
this . data2 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 2 )
}
if ( this . data2 [ val ] . code . indexOf ( 'to_container_type' ) !== - 1 ) {
this . data2 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 4 )
}
if ( this . data2 [ val ] . code . indexOf ( 'to_task' ) !== - 1 ) {
this . data2 [ val ] . db = beforeStr + '.' + 'D' + ( parseInt ( endNumber ) + 6 )
}
if ( this . data2 [ val ] . code . indexOf ( 'to_strap_times' ) !== - 1 ) {
this . data2 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 10 )
}
if ( this . data2 [ val ] . code . indexOf ( 'to_length' ) !== - 1 ) {
this . data2 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 12 )
}
if ( this . data2 [ val ] . code . indexOf ( 'to_weight' ) !== - 1 ) {
this . data2 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 14 )
}
if ( this . data2 [ val ] . code . indexOf ( 'to_height' ) !== - 1 ) {
this . data2 [ val ] . db = beforeStr + '.' + afterStr . substring ( 0 , 1 ) + ( parseInt ( endNumber ) + 16 )
}
}
}
} ,
changeOpc ( val ) {
this . dataOpcservers . forEach ( item => {
if ( item . opc _id === val ) {
this . opc _code = item . opc _code
}
} )
selectListByOpcID ( val ) . then ( data => {
this . dataOpcPlcs = data
this . plc _id = ''
this . plc _code = ''
if ( this . dataOpcPlcs && this . dataOpcPlcs . length > 0 ) {
this . plc _id = this . dataOpcPlcs [ 0 ] . plc _id
this . plc _code = this . dataOpcPlcs [ 0 ] . plc _code
}
this . sliceItem ( )
} )
} ,
changePlc ( val ) {
this . dataOpcPlcs . forEach ( item => {
if ( item . plc _id === val ) {
this . plc _code = item . plc _code
this . sliceItem ( )
return
}
} )
} ,
test _read1 ( ) {
testRead ( this . data1 , this . opc _id ) . then ( data => {
this . data1 = data
console . log ( this . data1 )
this . notify ( '操作成功!' , 'success' )
} ) . catch ( err => {
console . log ( err . response . data . message )
} )
} ,
test _write1 ( ) {
testwrite ( this . data2 , this . opc _id ) . then ( data => {
this . notify ( '操作成功!' , 'success' )
} ) . catch ( err => {
console . log ( err . response . data . message )
} )
} ,
test _read2 ( ) {
testRead ( this . data2 , this . opc _id ) . then ( data => {
this . data2 = data
console . log ( this . data2 )
this . notify ( '操作成功!' , 'success' )
} ) . catch ( err => {
console . log ( err . response . data . message )
} )
} ,
doSubmit ( ) {
this . $refs [ 'form' ] . validate ( ( valid ) => {
if ( valid ) {
this . configLoading = true
// 根据驱动类型判断是否为路由设备
const parentForm = this . parentForm
parentForm . is _route = true
parentForm . plc _id = this . plc _id
parentForm . opc _id = this . opc _id
updateConfig ( parentForm , this . form , this . data1 , this . data2 ) . then ( res => {
this . notify ( '保存成功' , 'success' )
this . configLoading = false
} ) . catch ( err => {
this . configLoading = false
console . log ( err . response . data . message )
} )
}
} )
} ,
sliceItem ( ) { // 拼接DB的Item值
this . data1 . forEach ( item => {
const str = item . code
// 是否包含.
if ( str . search ( '.' ) !== - 1 ) {
// 截取最后一位
item . code = this . opc _code + '.' + this . plc _code + '.' + this . device _code + '.' + str . slice ( str . lastIndexOf ( '.' ) + 1 )
} else {
item . code = this . opc _code + '.' + this . plc _code + '.' + this . device _code + '.' + item . code
}
} )
this . data2 . forEach ( item => {
const str = item . code
// 是否包含.
if ( str . search ( '.' ) !== - 1 ) {
// 截取最后一位
item . code = this . opc _code + '.' + this . plc _code + '.' + this . device _code + '.' + str . slice ( str . lastIndexOf ( '.' ) + 1 )
} else {
item . code = this . opc _code + '.' + this . plc _code + '.' + this . device _code + '.' + item . code
}
} )
}
}
}
< / script >
< style scoped >
< / style >