wu
2023-09-07 477b4071ccf45b6d15280d37a4a002307aa2271c
Merge branch 'master' of ssh://10.153.19.150:29418/CanadaMes
13个文件已修改
1388 ■■■■■ 已修改文件
CanadaMes-ui/src/api/home.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json 296 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 260 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Action.vue 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Parameter.vue 274 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Sign.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/State.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/alarm.vue 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 190 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java 158 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/api/home.js
@@ -43,9 +43,17 @@
    })
}
export function UpdateTask(types,shelf_rack) {
export function UpdateTask(types,shelfrack) {
    return request({
        url: '/home/UpdateTask?types=' + types + '&shelf_rack'+shelf_rack,
        url: '/home/UpdateTask?types=' + types + '&shelfrack='+shelfrack,
        method: 'get',
        data :""
    })
}
export function SelectAlarmmgInfo() {
    return request({
        url: '/home/SelectAlarmmgInfo',
        method: 'get',
        data :""
    })
CanadaMes-ui/src/lang/locales/en-US.json
@@ -1,125 +1,173 @@
{
    "systemTitle": "Login System",
    "usernamePlaceholder": "Please enter username",
    "passwordPlaceholder": "Please enter password",
    "loginButton": "Login",
    "registerButton": "Register",
    "resetButton": "Reset",
    "usernameRequired": "Please enter username",
    "usernameLength": "Username must be between 5 and 15 characters",
    "passwordRequired": "Please enter password",
    "passwordLength": "Password must be between 5 and 15 characters",
    "loginSuccess": "Login successful",
    "langBtnCN": "Chinese",
    "langBtnEN": "English",
    "langHome": "Home",
    "langUserManagement": "User Management",
    "langUserList": "User List",
    "langUsernamePlaceholder": "Please enter username",
    "langEmailPlaceholder": "Please enter email",
    "langSearch": "Search",
    "langAddUser": "Add User",
    "langUsername": "Username",
    "langEmail": "Email",
    "langCreateTime": "Create Time",
    "langDisabled": "Disabled",
    "langAction": "Action",
    "langEdit": "Edit",
    "langDelete": "Delete",
    "langAddUserTitle": "Add User",
    "langPassword": "Password",
    "langState": "State",
    "langSelect": "Please select",
    "langCancel": "Cancel",
    "langConfirm": "Confirm",
    "langEditUserTitle": "Edit User",
    "northglassMESsystem":"NorthGlassMesSystem",
    "exit":"exit",
    "changePassword":"changePassword",
    "resetPassword": "resetPassword",
    "home":"Home",
    "role":"role",
    "langRoleManagement": "Role Management",
    "langRoleList": "Role List",
    "langEnterRoleName": "Please enter role name",
    "langAddRole": "Add Role",
    "langName": "Name",
    "langIsValid": "Is Valid",
    "langOperation": "Operation",
    "langPleaseSelect": "Please select",
    "langValid": "Valid",
    "langInvalid": "Invalid",
    "langAddRoleSuccess": "Add role successfully",
    "langEnterName": "Please enter name",
    "langLengthBetween": "Length should be between",
    "langAnd": "and",
    "langCharacters": "characters",
    "langEnterState": "Please enter state",
    "langUpdateState": "Update state successfully",
    "langEditRole": "Edit Role",
    "langEditRoleSuccess": "Edit role successfully",
    "langDeleteRoleConfirm": "Are you sure you want to delete this role?",
    "langPrompt": "Prompt",
    "langDeleteRoleSuccess": "Delete role successfully",
    "langCancelDelete": "Cancelled deleting",
    "langRoleName":"langRoleName",
    "updateSuccessMessage":"updateSuccessMessage",
    "paginationTotal": "Total {total}",
    "paginationSizes": "Items per page",
    "paginationPrev": "Previous",
    "paginationPager": "{currentPage}/{pageCount}",
    "paginationNext": "Next",
    "paginationJumper": "Jump to",
    "breadcrumb": {
      "home": "Home",
      "permissionManagement": "Permission Management",
      "permissionList": "Permission List"
    },
    "search": {
      "placeholder": "Enter keywords"
    },
    "button": {
      "addPermission": "Add Permission",
      "cancel": "Cancel",
      "confirm": "Confirm"
    },
    "table": {
      "role": "Role",
      "permissionDescription": "Permission Description",
      "permissionValue": "Permission Value",
      "createTime": "Create Time",
      "isActive": "Is Active",
      "operation": "Operation"
    },
    "tooltip": {
      "edit": "Edit",
      "delete": "Delete"
    },
    "dialog": {
      "addPermission": "Add Permission",
      "editPermission": "Edit Permission"
    },
    "form": {
      "role": "Role",
      "select": "Please Select",
      "permission": "Permission",
      "isActive": "Is Active"
    },
    "操作": "Operation",
    "有效": "Valid",
    "无效": "Invalid",
    "请输入名称": "Please enter a name",
    "长度在 2 到 15 个字符": "Length between 2 and 15 characters",
    "请输入状态": "Please enter the status",
    "添加角色": "Add Role",
    "修改角色": "Edit Role",
    "删除角色": "Delete Role",
    "此操作将永久删除该角色, 是否继续?": "This operation will permanently delete the role. Continue?",
    "提示": "Reminder",
    "确定": "Confirm",
    "取消": "Cancel",
    "添加角色成功": "Successfully added role",
    "更新状态成功": "Successfully updated status",
    "修改角色成功": "Successfully modified role",
    "删除角色成功": "Successfully deleted role"
  }
  "systemTitle": "Login System",
  "usernamePlaceholder": "Please enter username",
  "passwordPlaceholder": "Please enter password",
  "loginButton": "Login",
  "registerButton": "Register",
  "resetButton": "Reset",
  "usernameRequired": "Please enter username",
  "usernameLength": "Username must be between 5 and 15 characters",
  "passwordRequired": "Please enter password",
  "passwordLength": "Password must be between 5 and 15 characters",
  "loginSuccess": "Login successful",
  "langBtnCN": "Chinese",
  "langBtnEN": "English",
  "langHome": "Home",
  "langUserManagement": "User Management",
  "langUserList": "User List",
  "langUsernamePlaceholder": "Please enter username",
  "langEmailPlaceholder": "Please enter email",
  "langSearch": "Search",
  "langAddUser": "Add User",
  "langUsername": "Username",
  "langEmail": "Email",
  "langCreateTime": "Create Time",
  "langDisabled": "Disabled",
  "langAction": "Action",
  "langEdit": "Edit",
  "langDelete": "Delete",
  "langAddUserTitle": "Add User",
  "langPassword": "Password",
  "langState": "State",
  "langSelect": "Please select",
  "langCancel": "Cancel",
  "langConfirm": "Confirm",
  "langEditUserTitle": "Edit User",
  "northglassMESsystem": "NorthGlassMesSystem",
  "exit": "exit",
  "changePassword": "changePassword",
  "resetPassword": "resetPassword",
  "home": "Home",
  "role": "role",
  "langRoleManagement": "Role Management",
  "langRoleList": "Role List",
  "langEnterRoleName": "Please enter role name",
  "langAddRole": "Add Role",
  "langName": "Name",
  "langIsValid": "Is Valid",
  "langOperation": "Operation",
  "langPleaseSelect": "Please select",
  "langValid": "Valid",
  "langInvalid": "Invalid",
  "langAddRoleSuccess": "Add role successfully",
  "langEnterName": "Please enter name",
  "langLengthBetween": "Length should be between",
  "langAnd": "and",
  "langCharacters": "characters",
  "langEnterState": "Please enter state",
  "langUpdateState": "Update state successfully",
  "langEditRole": "Edit Role",
  "langEditRoleSuccess": "Edit role successfully",
  "langDeleteRoleConfirm": "Are you sure you want to delete this role?",
  "langPrompt": "Prompt",
  "langDeleteRoleSuccess": "Delete role successfully",
  "langCancelDelete": "Cancelled deleting",
  "langRoleName": "langRoleName",
  "updateSuccessMessage": "updateSuccessMessage",
  "paginationTotal": "Total {total}",
  "paginationSizes": "Items per page",
  "paginationPrev": "Previous",
  "paginationPager": "{currentPage}/{pageCount}",
  "paginationNext": "Next",
  "paginationJumper": "Jump to",
  "breadcrumb": {
    "home": "Home",
    "permissionManagement": "Permission Management",
    "permissionList": "Permission List"
  },
  "search": {
    "placeholder": "Enter keywords"
  },
  "button": {
    "addPermission": "Add Permission",
    "cancel": "Cancel",
    "confirm": "Confirm"
  },
  "table": {
    "role": "Role",
    "permissionDescription": "Permission Description",
    "permissionValue": "Permission Value",
    "createTime": "Create Time",
    "isActive": "Is Active",
    "operation": "Operation"
  },
  "tooltip": {
    "edit": "Edit",
    "delete": "Delete"
  },
  "dialog": {
    "addPermission": "Add Permission",
    "editPermission": "Edit Permission"
  },
  "form": {
    "role": "Role",
    "select": "Please Select",
    "permission": "Permission",
    "isActive": "Is Active"
  },
  "操作": "Operation",
  "有效": "Valid",
  "无效": "Invalid",
  "请输入名称": "Please enter a name",
  "长度在 2 到 15 个字符": "Length between 2 and 15 characters",
  "请输入状态": "Please enter the status",
  "添加角色": "Add Role",
  "修改角色": "Edit Role",
  "删除角色": "Delete Role",
  "此操作将永久删除该角色, 是否继续?": "This operation will permanently delete the role. Continue?",
  "提示": "Reminder",
  "确定": "Confirm",
  "取消": "Cancel",
  "添加角色成功": "Successfully added role",
  "更新状态成功": "Successfully updated status",
  "修改角色成功": "Successfully modified role",
  "删除角色成功": "Successfully deleted role",
  "translation": {
    "D01 VFD error": "D01 VFD error",
    "D02 VFD error": "D02 VFD error",
    "D03 VFD error": "D03 VFD erro",
    "D04 VFD error": "D04 VFD error",
    "D05 VFD error": "D05 VFD error",
    "D06 VFD error": "D06 VFD error",
    "B01 VFD error": "B01 VFD error",
    "B02 VFD error": "B02 VFD error",
    "A01 VFD error": "A01 VFD error",
    "A02 VFD error": "A02 VFD error",
    "A01 servo turn error": "A01 servo turn error",
    "A02 servo turn error": "A02 servo turn error",
    "A01 servo travel error": "A01 servo travel error",
    "A02 servo travel error": "A02 servo travel error",
    "B01 servo travel error": "B01 servo travel error",
    "B02 servo travel error": "B02 servo travel error",
    "D01 DEC error": "D01 DEC error",
    "D01 pos error": "D01 pos error",
    "D02 DEC error": "D02 DEC error",
    "D02 pos error": "D02 pos error",
    "D03 DEC error": "D03 DEC error",
    "D03 pos error": "D03 pos error",
    "D04 DEC error": "D04 DEC error",
    "D04 pos error": "D04 pos error",
    "D05 DEC error": "D05 DEC error",
    "D05 pos error": "D05 pos error",
    "D06 DEC error": "D06 DEC error",
    "D06 pos error": "D06 pos error",
    "A01 DEC error": "A01 DEC error",
    "A01 pos error": "A01 pos error",
    "A02 DEC error": "A02 DEC error",
    "A02 pos error": "A02 pos error",
    "B01 IN DEC error": "B01 IN DEC error",
    "B01 IN pos error": "B01 IN pos error",
    "B01 OUT DEC error": "B01 OUT DEC error",
    "B01 OUT pos error": "B01 OUT pos error",
    "B02 IN DEC error": "B02 IN DEC error",
    "B02 IN pos error": "B02 IN pos error",
    "B02 OUT DEC error": "B02 OUT DEC error",
    "B02 OUT pos error": "B02 OUT pos error"
  },
  "Parameter": "Parameter",
  "Action": "Action",
  "Sign": "Sign",
  "State": "State",
  "Alarm": "Alarm",
  "Distribute": "Distribute"
}
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -1,17 +1,16 @@
  {
    "systemTitle": "登录系统",
    "usernamePlaceholder": "请输入用户名",
    "passwordPlaceholder": "请输入密码",
    "loginButton": "登录",
    "registerButton": "注册",
    "resetButton": "重置",
    "usernameRequired": "请输入用户名",
    "usernameLength": "用户名长度在5-15个字符之间",
    "passwordRequired": "请输入密码",
    "passwordLength": "密码长度在5-15个字符之间",
    "loginSuccess": "登录成功",
    "langBtnCN": "中文",
{
  "systemTitle": "登录系统",
  "usernamePlaceholder": "请输入用户名",
  "passwordPlaceholder": "请输入密码",
  "loginButton": "登录",
  "registerButton": "注册",
  "resetButton": "重置",
  "usernameRequired": "请输入用户名",
  "usernameLength": "用户名长度在5-15个字符之间",
  "passwordRequired": "请输入密码",
  "passwordLength": "密码长度在5-15个字符之间",
  "loginSuccess": "登录成功",
  "langBtnCN": "中文",
  "langBtnEN": "English",
  "langHome": "首页",
  "langUserManagement": "用户管理",
@@ -31,99 +30,144 @@
  "langPassword": "密码",
  "langState": "状态",
  "langSelect": "请选择",
  "langEditUserTitle": "修改用户",
  "northglassMESsystem":"北玻MES系统",
  "exit":"退出",
  "changePassword":"修改密码",
  "northglassMESsystem": "北玻MES系统",
  "exit": "退出",
  "changePassword": "修改密码",
  "resetPassword": "重置密码",
  "home":"主页",
  "role":"角色",
    "langRoleManagement": "角色管理",
    "langRoleList": "角色列表",
    "langEnterRoleName": "请输入角色名称",
    "langAddRole": "添加角色",
    "langName": "名称",
    "langIsValid": "是否有效",
    "langOperation": "操作",
    "langPleaseSelect": "请选择",
    "langValid": "有效",
    "langInvalid": "无效",
    "langConfirm": "确定",
    "langCancel": "取消",
    "langAddRoleSuccess": "添加角色成功",
    "langEnterName": "请输入名称",
    "langLengthBetween": "长度在",
    "langAnd": "和",
    "langCharacters": "个字符之间",
    "langEnterState": "请输入状态",
    "langUpdateState": "状态更新成功",
    "langEditRole": "编辑角色",
    "langEditRoleSuccess": "编辑角色成功",
    "langDeleteRoleConfirm": "确定要删除该角色吗?",
    "langPrompt": "提示",
    "langDeleteRoleSuccess": "删除角色成功",
    "langCancelDelete": "已取消删除",
    "langRoleName":"角色名称",
    "updateSuccessMessage":"更新成功",
    "paginationTotal": "共 {total} 条",
    "paginationSizes": "每页显示",
    "paginationPrev": "上一页",
    "paginationPager": "{currentPage}/{pageCount}",
    "paginationNext": "下一页",
    "paginationJumper": "跳至",
    "breadcrumb": {
      "home": "首页",
      "permissionManagement": "权限管理",
      "permissionList": "权限列表"
    },
    "search": {
      "placeholder": "请输入关键字"
    },
    "button": {
      "addPermission": "添加权限",
      "cancel": "取消",
      "confirm": "确认"
    },
    "table": {
      "role": "角色",
      "permissionDescription": "权限描述",
      "permissionValue": "权限值",
      "createTime": "创建时间",
      "isActive": "是否激活",
      "operation": "操作"
    },
    "tooltip": {
      "edit": "修改",
      "delete": "删除"
    },
    "dialog": {
      "addPermission": "添加权限",
      "editPermission": "编辑权限"
    },
    "form": {
      "role": "角色",
      "select": "请选择",
      "permission": "权限",
      "isActive": "是否激活"
    },
    "操作": "操作",
    "有效": "有效",
    "无效": "无效",
    "请输入名称": "请输入名称",
    "长度在 2 到 15 个字符": "长度在 2 到 15 个字符",
    "请输入状态": "请输入状态",
    "添加角色": "添加角色",
    "修改角色": "修改角色",
    "删除角色": "删除角色",
    "此操作将永久删除该角色, 是否继续?": "此操作将永久删除该角色, 是否继续?",
    "提示": "提示",
    "确定": "确定",
    "取消": "取消",
    "添加角色成功": "添加角色成功",
    "更新状态成功": "更新状态成功",
    "修改角色成功": "修改角色成功",
    "删除角色成功": "删除角色成功"
  }
  "home": "主页",
  "role": "角色",
  "langRoleManagement": "角色管理",
  "langRoleList": "角色列表",
  "langEnterRoleName": "请输入角色名称",
  "langAddRole": "添加角色",
  "langName": "名称",
  "langIsValid": "是否有效",
  "langOperation": "操作",
  "langPleaseSelect": "请选择",
  "langValid": "有效",
  "langInvalid": "无效",
  "langConfirm": "确定",
  "langCancel": "取消",
  "langAddRoleSuccess": "添加角色成功",
  "langEnterName": "请输入名称",
  "langLengthBetween": "长度在",
  "langAnd": "和",
  "langCharacters": "个字符之间",
  "langEnterState": "请输入状态",
  "langUpdateState": "状态更新成功",
  "langEditRole": "编辑角色",
  "langEditRoleSuccess": "编辑角色成功",
  "langDeleteRoleConfirm": "确定要删除该角色吗?",
  "langPrompt": "提示",
  "langDeleteRoleSuccess": "删除角色成功",
  "langCancelDelete": "已取消删除",
  "langRoleName": "角色名称",
  "updateSuccessMessage": "更新成功",
  "paginationTotal": "共 {total} 条",
  "paginationSizes": "每页显示",
  "paginationPrev": "上一页",
  "paginationPager": "{currentPage}/{pageCount}",
  "paginationNext": "下一页",
  "paginationJumper": "跳至",
  "breadcrumb": {
    "home": "首页",
    "permissionManagement": "权限管理",
    "permissionList": "权限列表"
  },
  "search": {
    "placeholder": "请输入关键字"
  },
  "button": {
    "addPermission": "添加权限",
    "cancel": "取消",
    "confirm": "确认"
  },
  "table": {
    "role": "角色",
    "permissionDescription": "权限描述",
    "permissionValue": "权限值",
    "createTime": "创建时间",
    "isActive": "是否激活",
    "operation": "操作"
  },
  "tooltip": {
    "edit": "修改",
    "delete": "删除"
  },
  "dialog": {
    "addPermission": "添加权限",
    "editPermission": "编辑权限"
  },
  "form": {
    "role": "角色",
    "select": "请选择",
    "permission": "权限",
    "isActive": "是否激活"
  },
  "操作": "操作",
  "有效": "有效",
  "无效": "无效",
  "请输入名称": "请输入名称",
  "长度在 2 到 15 个字符": "长度在 2 到 15 个字符",
  "请输入状态": "请输入状态",
  "添加角色": "添加角色",
  "修改角色": "修改角色",
  "删除角色": "删除角色",
  "此操作将永久删除该角色, 是否继续?": "此操作将永久删除该角色, 是否继续?",
  "提示": "提示",
  "确定": "确定",
  "取消": "取消",
  "添加角色成功": "添加角色成功",
  "更新状态成功": "更新状态成功",
  "修改角色成功": "修改角色成功",
  "删除角色成功": "删除角色成功",
  "translation": {
    "D01 VFD error": "D01 VFD 错误",
    "D02 VFD error": "D02 VFD 错误",
    "D03 VFD error": "D03 VFD 错误",
    "D04 VFD error": "D04 VFD 错误",
    "D05 VFD error": "D05 VFD 错误",
    "D06 VFD error": "D06 VFD 错误",
    "B01 VFD error": "B01 VFD 错误",
    "B02 VFD error": "B02 VFD 错误",
    "A01 VFD error": "A01 VFD 错误",
    "A02 VFD error": "A02 VFD 错误",
    "A01 servo turn error": "A01 servo turn 错误",
    "A02 servo turn error": "A02 servo turn 错误",
    "A01 servo travel error": "A01 servo travel 错误",
    "A02 servo travel error": "A02 servo travel 错误",
    "B01 servo travel error": "B01 servo travel 错误",
    "B02 servo travel error": "B02 servo travel 错误",
    "D01 DEC error": "D01 DEC 错误",
    "D01 pos error": "D01 pos 错误",
    "D02 DEC error": "D02 DEC 错误",
    "D02 pos error": "D02 pos 错误",
    "D03 DEC error": "D03 DEC 错误",
    "D03 pos error": "D03 pos 错误",
    "D04 DEC error": "D04 DEC 错误",
    "D04 pos error": "D04 pos 错误",
    "D05 DEC error": "D05 DEC 错误",
    "D05 pos error": "D05 pos 错误",
    "D06 DEC error": "D06 DEC 错误",
    "D06 pos error": "D06 pos 错误",
    "A01 DEC error": "A01 DEC 错误",
    "A01 pos error": "A01 pos 错误",
    "A02 DEC error": "A02 DEC 错误",
    "A02 pos error": "A02 pos 错误",
    "B01 IN DEC error": "B01 IN DEC 错误",
    "B01 IN pos error": "B01 IN pos 错误",
    "B01 OUT DEC error": "B01 OUT DEC 错误",
    "B01 OUT pos error": "B01 OUT pos 错误",
    "B02 IN DEC error": "B02 IN DEC 错误",
    "B02 IN pos error": "B02 IN pos 错误",
    "B02 OUT DEC error": "B02 OUT DEC 错误",
    "B02 OUT pos error": "B02 OUT pos 错误"
  },
  "Parameter": "参数下发",
  "Action": "开关控制",
  "Sign": "IO状态",
  "State": "State",
  "Alarm": "报警信息",
  "Distribute": "下发"
}
CanadaMes-ui/src/views/Electrical/Action.vue
@@ -3,7 +3,7 @@
    <!--面包屑导航区域-->
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
      <el-button type="text">设备管理</el-button>
      <el-button type="text">Electrical</el-button>
      <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
      <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
      <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
@@ -19,8 +19,8 @@
      <div class="kuai_div" v-for="(item, index) in record.xyData" :key="index">
        <el-input v-model="item.name" style="width: 240px;" class="in_mc" readonly></el-input>
        <el-switch v-model="item.value" active-value="1" inactive-value="0"  @change="send()"></el-switch>
    </div>
        <el-switch v-model="item.value" active-value="1" inactive-value="0" @change="send()"></el-switch>
      </div>
    </el-form>
@@ -28,10 +28,11 @@
</template>
<script >
import LanguageMixin from '../../lang/LanguageMixin'
let socket;
export default {
  name: "action",
  mixins: [LanguageMixin],
  data () {
    return {
      record: {
@@ -65,34 +66,34 @@
          'B02 YV UP DOWN',
        ],
        xyData: [
  { name: 'D01 VFD conveyor', value: "0" },
  { name: 'D02 VFD conveyor', value: "0" },
  { name: 'D03 VFD conveyor', value: "1" },
  { name: 'D04 VFD conveyor', value: "0" },
  { name: 'D05 VFD conveyor', value: "0" },
  { name: 'D06 VFD conveyor', value: "0" },
  { name: 'A01 VFD conveyor', value: "0" },
  { name: 'A02 VFD conveyor', value: "0" },
  { name: 'B01 VFD conveyor', value: "0" },
  { name: 'B02 VFD conveyor', value: "0" },
  { name: 'A01 SERVE TURN JOG+', value: "0" },
  { name: 'A02 SERVE TURN JOG-', value: "0" },
  { name: 'A01 SERVE TRAVEL JOG+', value: "0" },
  { name: 'A02 SERVE TRAVEL JOG-', value: "0" },
  { name: 'B01 SERVE TRAVEL JOG+', value: "0" },
  { name: 'B02 SERVE TRAVEL JOG-', value: "0" },
  { name: 'A01 SERVE TURN POS', value: "0" },
  { name: 'A02 SERVE TURN POS', value: "0" },
  { name: 'A01 SERVE TRAVEL POS', value: "0" },
  { name: 'A02 SERVE TRAVEL POS', value: "0" },
  { name: 'B01 SERVE TRAVEL POS', value: "0" },
  { name: 'B02 SERVE TRAVEL POS', value: "0" },
  { name: 'B01 YV TURN', value: "0" },
  { name: 'B01 YV UP DOWN', value: "0" },
  { name: 'B02 YV TURN', value: "0" },
  { name: 'B02 YV UP DOWN', value: "0" },
]
,
          { name: 'D01 VFD conveyor', value: "0" },
          { name: 'D02 VFD conveyor', value: "0" },
          { name: 'D03 VFD conveyor', value: "1" },
          { name: 'D04 VFD conveyor', value: "0" },
          { name: 'D05 VFD conveyor', value: "0" },
          { name: 'D06 VFD conveyor', value: "0" },
          { name: 'A01 VFD conveyor', value: "0" },
          { name: 'A02 VFD conveyor', value: "0" },
          { name: 'B01 VFD conveyor', value: "0" },
          { name: 'B02 VFD conveyor', value: "0" },
          { name: 'A01 SERVE TURN JOG+', value: "0" },
          { name: 'A02 SERVE TURN JOG-', value: "0" },
          { name: 'A01 SERVE TRAVEL JOG+', value: "0" },
          { name: 'A02 SERVE TRAVEL JOG-', value: "0" },
          { name: 'B01 SERVE TRAVEL JOG+', value: "0" },
          { name: 'B02 SERVE TRAVEL JOG-', value: "0" },
          { name: 'A01 SERVE TURN POS', value: "0" },
          { name: 'A02 SERVE TURN POS', value: "0" },
          { name: 'A01 SERVE TRAVEL POS', value: "0" },
          { name: 'A02 SERVE TRAVEL POS', value: "0" },
          { name: 'B01 SERVE TRAVEL POS', value: "0" },
          { name: 'B02 SERVE TRAVEL POS', value: "0" },
          { name: 'B01 YV TURN', value: "0" },
          { name: 'B01 YV UP DOWN', value: "0" },
          { name: 'B02 YV TURN', value: "0" },
          { name: 'B02 YV UP DOWN', value: "0" },
        ]
        ,
      },
@@ -131,24 +132,24 @@
        };
        //  浏览器端收消息,获得从服务端发送过来的文本消息
        socket.onmessage = (msg) => {
  if (!msg.data) {
    return; // 如果收到空数据,则直接返回,不执行后续逻辑
  }
          if (!msg.data) {
            return; // 如果收到空数据,则直接返回,不执行后续逻辑
          }
  let obj = JSON.parse(msg.data);
  this.record.params[0] = obj.params[0];
          let obj = JSON.parse(msg.data);
          this.record.params[0] = obj.params[0];
  for (let a = 0; a <= this.record.params[0].length - 1; a++) {
    if (!this.record.xyData[a]) {
      this.record.xyData[a] = { name: this.record.canshu[a], value: this.record.params[0][a].toString() };
    } else {
      this.record.xyData[a].value = this.record.params[0][a].toString();
    }
  }
          for (let a = 0; a <= this.record.params[0].length - 1; a++) {
            if (!this.record.xyData[a]) {
              this.record.xyData[a] = { name: this.record.canshu[a], value: this.record.params[0][a].toString() };
            } else {
              this.record.xyData[a].value = this.record.params[0][a].toString();
            }
          }
  console.log(this.record.xyData);
  this.$forceUpdate();
};
          console.log(this.record.xyData);
          this.$forceUpdate();
        };
        //关闭事件
        socket.onclose = function () {
@@ -161,11 +162,11 @@
      }
    },
    send() {
  this.messagepack.data = this.record.xyData.map(item => parseInt(item.value)); // 转换为整数数组
  console.log(this.messagepack);
  socket?.send(JSON.stringify(this.messagepack));
}
    send () {
      this.messagepack.data = this.record.xyData.map(item => parseInt(item.value)); // 转换为整数数组
      console.log(this.messagepack);
      socket?.send(JSON.stringify(this.messagepack));
    }
  }
@@ -188,18 +189,18 @@
  border: none;
}
.el-input__inner {
    border: 1 solid black;
  }
.in_mc {
}
.el-input__inner {
    border: none;
  }
  border: 1 solid black;
}
.in_mc {}
.el-input__inner {
  border: none;
}
</style>
CanadaMes-ui/src/views/Electrical/Parameter.vue
@@ -1,155 +1,159 @@
<template>
  <div class="app">
  <!--面包屑导航区域-->
  <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
  <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
  <el-button type="text">设备管理</el-button>
  <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
  <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
  <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
  <router-link to="/Electrical/State" tag="el-button" type="text">State</router-link>
  <router-link to="/Electrical/alarm" tag="el-button" type="text">Alarm</router-link>
  </el-breadcrumb>
  <div>Parameter</div>
  <el-form label-width="100px" style="display: flex;flex-wrap: wrap;" :model="messagepack.data">
    <div id="btn_div">
      <el-button type="primary" @click="send()">下发参数</el-button>
    </div>
    <div class="kuai_div" v-for="(item, index) in record.xyData" :key="index">
      <el-input style="width: 280px;" class="in_mc" v-model="item.name" readonly></el-input>
      <el-input v-model.number="item.value" style="width: 80px;" @input="handleChange(index, $event.target.value)"></el-input>
    </div>
  </el-form>
    <!--面包屑导航区域-->
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
      <el-button type="text">{{ $t('Distribute') }}</el-button>
      <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
      <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
      <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
      <router-link to="/Electrical/State" tag="el-button" type="text">State</router-link>
      <router-link to="/Electrical/alarm" tag="el-button" type="text">Alarm</router-link>
    </el-breadcrumb>
    <div>Parameter</div>
    <el-form label-width="100px" style="display: flex;flex-wrap: wrap;" :model="messagepack.data">
      <div id="btn_div">
        <el-button type="primary" @click="send()">{{ $t('Distribute') }}</el-button>
      </div>
      <div class="kuai_div" v-for="(item, index) in record.xyData" :key="index">
        <el-input style="width: 280px;" class="in_mc" v-model="item.name" readonly></el-input>
        <el-input v-model.number="item.value" style="width: 80px;"
          @input="handleChange(index, $event.target.value)"></el-input>
      </div>
    </el-form>
  </div>
  </template>
</template>
  
  <script>
  let socket;
  export default {
<script>
import LanguageMixin from '../../lang/LanguageMixin'
let socket;
export default {
  name: "Parameter",
  data() {
  return {
  record: {
  params: [100, 200, 10, 10, 10, 10],
  xyData: [
  { name: "conveyor Velocity(Auto FAST)", value: 0 },
  { name: "conveyor Velocity(Auto SLOW)", value: 0 },
  { name: "conveyor Velocity(Manual)", value: 0 },
  { name: "A01 A02 TURN JOG Velocity", value: 0 },
  { name: "A01 A02 TRAVEL JOG Velocity", value: 0 },
  { name: "B01 B02 TRAVEL JOG Velocity", value: 0 },
  { name: "A01 A02 TURN POS Velocity AUTO", value: 0 },
  { name: "A01 A02 TURN POS Velocity manual", value: 0 },
  { name: "A01 A02 TRAVEL POS Velocity AUTO", value: 0 },
  { name: "A01 A02 TRAVEL POS Velocity manual", value: 0 },
  { name: "B01 B02 TRAVEL POS Velocity AUTO", value: 0 },
  { name: "B01 B02 TRAVEL POS Velocity manual", value: 0 }
  ],
  canshu: []
  mixins: [LanguageMixin],
  data () {
    return {
      record: {
        params: [100, 200, 10, 10, 10, 10],
        xyData: [
          { name: "conveyor Velocity(Auto FAST)", value: 0 },
          { name: "conveyor Velocity(Auto SLOW)", value: 0 },
          { name: "conveyor Velocity(Manual)", value: 0 },
          { name: "A01 A02 TURN JOG Velocity", value: 0 },
          { name: "A01 A02 TRAVEL JOG Velocity", value: 0 },
          { name: "B01 B02 TRAVEL JOG Velocity", value: 0 },
          { name: "A01 A02 TURN POS Velocity AUTO", value: 0 },
          { name: "A01 A02 TURN POS Velocity manual", value: 0 },
          { name: "A01 A02 TRAVEL POS Velocity AUTO", value: 0 },
          { name: "A01 A02 TRAVEL POS Velocity manual", value: 0 },
          { name: "B01 B02 TRAVEL POS Velocity AUTO", value: 0 },
          { name: "B01 B02 TRAVEL POS Velocity manual", value: 0 }
        ],
        canshu: []
      },
      messagepack: {
        data: { taskname: "" }
      },
      queryInfo: {
        data: "1",
        pageSize: 10
      }
    };
  },
  messagepack: {
  data: { taskname: "" }
  },
  queryInfo: {
  data: "1",
  pageSize: 10
  }
  };
  },
  created() {
  this.initWebSocket();
  created () {
    this.initWebSocket();
  },
  methods: {
  initWebSocket() {
  let viewname = "Parameter";
    if (typeof WebSocket === "undefined") {
      console.log("您的浏览器不支持WebSocket");
    } else {
      let socketUrl = "ws://" + "localhost:8888" + "/springboot-vue3/api/talk/" + viewname;
      if (socket != null) {
        socket.close();
        socket = null;
      }
      // 开启一个websocket服务
      socket = new WebSocket(socketUrl);
      // 打开事件
      socket.onopen = function () {
        console.log("websocket已打开");
      };
      // 收到消息
      socket.onmessage = (msg) => {
        if (!msg.data) {
          return; // 如果收到空数据,则直接返回,不执行后续逻辑
    initWebSocket () {
      let viewname = "Parameter";
      if (typeof WebSocket === "undefined") {
        console.log("您的浏览器不支持WebSocket");
      } else {
        let socketUrl = "ws://" + "localhost:8888" + "/springboot-vue3/api/talk/" + viewname;
        if (socket != null) {
          socket.close();
          socket = null;
        }
        let obj = JSON.parse(msg.data);
        this.record.params[0] = obj.params[0];
        for (let a = 0; a <= this.record.params[0].length - 1; a++) {
          if (!this.record.xyData[a]) {
            this.record.xyData[a] = { name: this.record.canshu[a], value: this.record.params[0][a] };
          } else {
            this.record.xyData[a].value = this.record.params[0][a];
        // 开启一个websocket服务
        socket = new WebSocket(socketUrl);
        // 打开事件
        socket.onopen = function () {
          console.log("websocket已打开");
        };
        // 收到消息
        socket.onmessage = (msg) => {
          if (!msg.data) {
            return; // 如果收到空数据,则直接返回,不执行后续逻辑
          }
        }
        console.log(this.record.xyData);
        this.$forceUpdate();
      };
      // 关闭事件
      socket.onclose = function () {
        console.log("websocket已关闭");
      };
      // 发生错误事件
      socket.onerror = function () {
        console.log("websocket发生了错误");
      };
          let obj = JSON.parse(msg.data);
          this.record.params[0] = obj.params[0];
          for (let a = 0; a <= this.record.params[0].length - 1; a++) {
            if (!this.record.xyData[a]) {
              this.record.xyData[a] = { name: this.record.canshu[a], value: this.record.params[0][a] };
            } else {
              this.record.xyData[a].value = this.record.params[0][a];
            }
          }
          console.log(this.record.xyData);
          this.$forceUpdate();
        };
        // 关闭事件
        socket.onclose = function () {
          console.log("websocket已关闭");
        };
        // 发生错误事件
        socket.onerror = function () {
          console.log("websocket发生了错误");
        };
      }
    },
    send () {
      this.messagepack.data = this.record.xyData.map((item) => parseInt(item.value)); // 转换为整数数组
      console.log(this.messagepack);
      socket?.send(JSON.stringify(this.messagepack));
    },
    handleChange (index, value) {
      this.record.xyData[index].value = value;
    }
  },
  send() {
    this.messagepack.data = this.record.xyData.map((item) => parseInt(item.value)); // 转换为整数数组
    console.log(this.messagepack);
    socket?.send(JSON.stringify(this.messagepack));
  },
  handleChange(index, value) {
    this.record.xyData[index].value = value;
  }
  }
  };
  </script>
};
</script>
  
  <style>
  .kuai_div {
<style>
.kuai_div {
  width: 30%;
  margin-bottom: 15px;
  }
  .el-input {
}
.el-input {
  border: none;
  }
  .el-input__inner {
}
.el-input__inner {
  border: 1px solid black;
  }
  .in_mc .el-input__inner {
}
.in_mc .el-input__inner {
  border: none;
  }
  #btn_div {
}
#btn_div {
  width: 100%;
  }
  #btn_div .el-button {
}
#btn_div .el-button {
  float: right;
  }
  </style>
}
</style>
CanadaMes-ui/src/views/Electrical/Sign.vue
@@ -3,7 +3,7 @@
    <!--面包屑导航区域-->
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
      <el-button type="text">设备管理</el-button>
      <el-button type="text">Electrical</el-button>
      <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
      <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
      <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
CanadaMes-ui/src/views/Electrical/State.vue
@@ -3,7 +3,7 @@
    <!--面包屑导航区域-->
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
      <el-button type="text">设备管理</el-button>
      <el-button type="text">Electrical</el-button>
      <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
      <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
      <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
CanadaMes-ui/src/views/Electrical/alarm.vue
@@ -3,7 +3,7 @@
    <!--面包屑导航区域-->
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
      <el-button type="text">设备管理</el-button>
      <el-button type="text">Electrical</el-button>
      <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
      <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
      <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
@@ -18,7 +18,7 @@
        </div>
      </el-form> -->
    <el-table :data="tableData" style="width: 100%;" height="590">
    <el-table :data="localizedRoles" style="width: 100%;" height="590">
      <el-table-column prop="id" label="id" width="80">
      </el-table-column>
      <el-table-column prop="content" label="content">
@@ -33,9 +33,11 @@
<script >
import { setAll } from "../../api/alarm";
import LanguageMixin from '../../lang/LanguageMixin'
let socket;
export default {
  name: "alarm",
  mixins: [LanguageMixin],
  data () {
    return {
      record: {
@@ -44,8 +46,8 @@
        // xyData: [],
      },
      tableData: [],
      roles: [],
      localizedRoles: [],
      messagepack: {
        data: { taskname: "" }
      },
@@ -59,15 +61,28 @@
  created () {
    this.init();
    this.load();
  },
  methods: {
    load () {
      setAll().then(res => {
        this.tableData = res.data.list;
        //console.log(this.tableData);
        this.roles = res.data.list;
        const language = this.$i18n.locale;
        if (language === 'zh-CN') {
          this.replaceChineseWithEnglish();
        } else {
          this.localizedRoles = [...this.roles];
        }
        console.log(this.localizedRoles);
      });
    },
    replaceChineseWithEnglish () {
      const translation = this.$t('translation');
      this.localizedRoles = this.roles.map(role => ({
        ...role,
        content: translation[role.content] || role.content
      }));
    },
    init () {
      let viewname = "alarm";
CanadaMes-ui/src/views/home/index.vue
@@ -73,7 +73,7 @@
.blocks {
    min-height: 50vh;
    min-height: 49vh;
    max-width: 100vw;
    background-image: url('../../img/xmjc.png');
    margin: 0 auto;
@@ -110,36 +110,74 @@
.el-table__empty-text {
    line-height: 41px;
}
.box {
    width: 90%;
    margin-left: 5%;
    height: 35px;
    color: red;
    font-size: 12px;
    overflow: hidden;
}
.text {
    width: auto;
    line-height: 35px;
    white-space: nowrap;
    animation: textScroll 20s linear infinite;
    margin: 0 auto;
}
@keyframes textScroll {
    0% {
        transform: translateX(100%);
    }
    100% {
        transform: translateX(-150%);
    }
}
</style>
<template>
    <el-container>
        <!-- <el-header style="padding: 10px;"></el-header> -->
        <el-main>
            <div class="box">
                <div class="text">
                    Alarm:
                    <label v-for="item in this.alarm" :key="item['id']">
                        {{ item['content'] }}
                    </label>
                </div>
            </div>
            <div style="display:flex;justify-content: space-around;width: 95%;margin: 0 auto;">
                <el-input style="width:15%;" placeholder="Enter the glass lD" v-model="glassid"></el-input>
                <el-button type="primary" @click="showform()">Manually feed the glass</el-button>
                <el-input style="width:15%;" placeholder="Enter the order number" v-model="order"></el-input>
                <el-button type="warning" @click="getOrder()">Exit the glass by order number</el-button>
                <el-button type="warning" @click="showform1();">Exit the glass by order number</el-button>
            </div>
            <div>
                <el-table :data="this.tasklist1" border style="width: 100%" >
                <el-table :data="this.tasklist1" border style="width: 100%">
                    <el-table-column prop="glassId" label="Coming out glass ID"></el-table-column>
                    <el-table-column :width="250" prop="cage" label="The Grille number being used"></el-table-column>
                    <el-table-column :width="250" prop="cell" label="The Grille number being used"></el-table-column>
                    <el-table-column prop="orderId" label="Order Nmuber"></el-table-column>
                    <el-table-column prop="lengthwidth" label="Length and width"></el-table-column>
                    <el-table-column prop="coating" label="coating"></el-table-column>
                    <el-table-column label="Operate">
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;">end task</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;" @click="endtask(0)">end
                            task</el-button>
                    </el-table-column>
                </el-table>
                <el-table :data="this.tasklist2" border style="width: 100%">
                    <el-table-column prop="glassId" label="Incoming glass ID"></el-table-column>
                    <el-table-column :width="250" prop="cage" label="The Grille number being used"></el-table-column>
                    <el-table-column :width="250" prop="cell" label="The Grille number being used"></el-table-column>
                    <el-table-column prop="orderId" label="Order Nmuber"></el-table-column>
                    <el-table-column prop="lengthwidth" label="Length and width"></el-table-column>
                    <el-table-column prop="coating" label="coating"></el-table-column>
                    <el-table-column label="Operate">
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;">end task</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;" @click="endtask(1)">end
                            task</el-button>
                    </el-table-column>
                </el-table>
            </div>
@@ -180,7 +218,7 @@
        </el-footer>
        <el-dialog :visible.sync="dialogFormVisible" title="Please confirm the information">
            <el-form :model="form" label-width="100px" style="padding-right: 30px">
                <el-form-item label="Order">
                <el-form-item label="order">
                    <el-input v-model="form.orderno" autocomplete="off" />
                </el-form-item>
                <el-form-item label="length">
@@ -200,12 +238,28 @@
                </span>
            </template>
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible1" title="Ordering Information">
            <el-form :model="form1" label-width="100px" style="padding-right: 30px">
                <el-form-item label="order">
                    <el-input v-model="form1.order" autocomplete="off" />
                </el-form-item>
                <el-form-item label="number">
                    <el-input v-model="form1.number" autocomplete="off" />
                </el-form-item>
            </el-form>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="cancal1()">cancal</el-button>
                    <el-button @click="getOrder();" type="primary">confirm</el-button>
                </span>
            </template>
        </el-dialog>
    </el-container>
</template>
  
<script>
import { home, home2, loadtask, InsertOrder, Addglassid } from "../../api/home";
import { home, home2, loadtask, InsertOrder, Addglassid, UpdateTask, SelectAlarmmgInfo } from "../../api/home";
let socket;
export default {
@@ -213,12 +267,18 @@
    data() {
        return {
            dialogFormVisible: false,
            dialogFormVisible1: false,
            form: {
                orderno: "NG2210210",
                length: 800,
                width: 1000,
                coating: "red",
            },
            form1: {
                order: "NG2210210",
                number: 800,
            },
            alarm: [],
            tableData: [],
            cagelist1: [],
            cagelist2: [],
@@ -232,7 +292,9 @@
            glassid: "",
            url: "../../img/bigcar01.png",
            car1: 116,
            car2: 187
            car2: 187,
            incell: "",
            outcell: ""
        };
    },
    created() {
@@ -268,14 +330,20 @@
                    this.car1 = 116 + 18.88 * obj.params[0][0];
                    this.car2 = 187 + 18.8 * obj.params[0][1];
                    this.tableData=obj.tableData[0];
                    this.cagelist1=obj.cagelist1[0];
                    this.cagelist2=obj.cagelist2[0];
                    this.cagelist3=obj.cagelist3[0];
                    this.cagelist4=obj.cagelist4[0];
                    this.tasklist1=obj.tasklist1[0];
                    this.tasklist2=obj.tasklist2[0];
                    this.tableData = obj.tableData[0];
                    this.cagelist1 = obj.cagelist1[0];
                    this.cagelist2 = obj.cagelist2[0];
                    this.cagelist3 = obj.cagelist3[0];
                    this.cagelist4 = obj.cagelist4[0];
                    this.tasklist1 = obj.tasklist1[0];
                    this.tasklist2 = obj.tasklist2[0];
                    if (this.tasklist1.length > 0) {
                        this.incell = this.tasklist1[0]['cell'];
                    }
                    if (this.tasklist1.length > 0) {
                        this.outcell = this.tasklist2[0]['cell'];
                    }
                    this.alarm = obj.alarmmg[0];
                    // for (let a = 0; a <= this.record.params.length - 1; a++) {
                    //     // this.record.xyData[a] = [this.record.canshu[a], this.record.params[0][a]];
                    //     // this.record.xyData[a] = { name: this.record.canshu[a], value: this.record.params[0][a] };
@@ -311,14 +379,23 @@
            });
            loadtask(this.task1).then(res => {
                this.tasklist1 = res.data.list;
                console.log(this.tasklist1);
                if (res.data.list.length > 0) {
                    this.incell = this.tasklist1[0]['cell'];
                }
            });
            loadtask(this.task2).then(res => {
                this.tasklist2 = res.data.list;
                if (res.data.list.length > 0) {
                    this.outcell = this.tasklist2[0]['cell'];
                }
            });
            loadtask(this.task2).then(res => {
                this.tasklist2 = res.data.list;
            });
            SelectAlarmmgInfo().then(res => {
                this.alarm = res.data.alarmmg;
            });
        },
        //根据格子状态修改颜色
@@ -337,7 +414,7 @@
        },
        //按订单出片
        getOrder() {
            if (this.order != "") {
            if (this.form1.order != "") {
                InsertOrder(this.order).then(res => {
                    if (res.data.message == 200) {
                        this.$message.success("Operation successful");
@@ -349,23 +426,9 @@
            }
        },
        showform() {
            this.form =
            {
                orderno: "NG2210210",
                length: 800,
                width: 1000,
                coating: "red",
            };
            this.dialogFormVisible = true;
        },
        cancal() {
            this.dialogFormVisible = false;
            this.form = {};
        },
        //手动上片
        sbumitglassid() {
            if (this.glassid != "") {
            if (this.form.order != "") {
                Addglassid(this.glassid).then(res => {
                    if (res.data.message2 == 200) {
                        this.$message.success("Operation successful");
@@ -376,12 +439,59 @@
                });
            }
        },
        endtask(type,shelfrack) {
            alert(type);
            alert(shelfrack);
        showform() {
            if (this.glassid != "") {
                this.form =
                {
                    orderno: "NG2210210",
                    length: 800,
                    width: 1000,
                    coating: "red",
                };
                this.dialogFormVisible = true;
            }
        },
        showform1() {
            if (this.order != "") {
                this.form1 =
                {
                    order: "NG2210210",
                    number: 800,
                };
                this.dialogFormVisible1 = true;
            }
        },
        cancal() {
            this.dialogFormVisible = false;
            this.form = {};
        },
        cancal1() {
            this.dialogFormVisible1 = false;
            this.form1 = {};
        },
        endtask(type) {
            if (type == 0) {
                UpdateTask(type, this.incell).then(res => {
                    if (res.data.message3 == 200) {
                        this.$message.success("Operation successful");
                    }
                });
            } else {
                UpdateTask(type, this.outcell).then(res => {
                    if (res.data.message3 == 200) {
                        this.$message.success("Operation successful");
                    }
                });
            }
        }
    }
};
}
</script>
springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java
@@ -6,96 +6,94 @@
import java.util.List;
public class Plcaction extends Thread {
    private static final long SEND_INTERVAL = 2000; // 发送消息的时间间隔
    private static final long WRITE_INTERVAL = 100; // 写入PLC的时间间隔
  private static final long SEND_INTERVAL = 2000; // 发送消息的时间间隔
  private static final long WRITE_INTERVAL = 100; // 写入PLC的时间间隔
    @Override
    public void run() {
        try {
            // 发送一次消息
            sendMessages();
  @Override
  public void run() {
    try {
      // 发送一次消息
      sendMessages();
            // 延迟一段时间
            Thread.sleep(SEND_INTERVAL);
      // 延迟一段时间
      Thread.sleep(SEND_INTERVAL);
            while (true) {
                // 写入PLC
                writeToPlc();
                Thread.sleep(WRITE_INTERVAL);
      while (true) {
        // 写入PLC
        writeToPlc();
        Thread.sleep(WRITE_INTERVAL);
                // 发送消息
                sendMessages();
                Thread.sleep(SEND_INTERVAL);
            }
        // 发送消息
        sendMessages();
        Thread.sleep(SEND_INTERVAL);
      }
        } catch (InterruptedException e) {
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
  private void sendMessages() {
    WebSocketServer sendwServer = WebSocketServer.sessionMap.get("action");
    if (sendwServer != null) {
      List<Boolean> paramlist = S7control.getinstance().ReadBits("DB100.DBW", 12);
      // new short[]{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
      // 1, 0}
      JSONObject jsonObject = new JSONObject();
      jsonObject.append("params",
          new short[] { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 });
      sendwServer.sendMessage(jsonObject.toString());
    }
  }
  private void writeToPlc() {
    WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("action");
    if (webSocketServer != null) {
      List<String> messages = webSocketServer.getMessages();
      String addressList = "DB100.DBW0";
      if (!messages.isEmpty()) {
        // 将最后一个消息转换为整数类型的列表
        String lastMessage = messages.get(messages.size() - 1);
        System.out.println("messages:" + messages);
        String[] parts = lastMessage.split(",");
        List<Integer> messageValues = new ArrayList<>();
        for (String part : parts) {
          try {
            // 使用正则表达式清除非数字字符
            String cleanedPart = part.replaceAll("[^0-9-]", "");
            Integer value = Integer.parseInt(cleanedPart.trim());
            messageValues.add(value);
          } catch (NumberFormatException e) {
            // 如果无法解析为整数类型,则忽略该部分
            e.printStackTrace();
        }
    }
    private void sendMessages() {
        WebSocketServer sendwServer = WebSocketServer.sessionMap.get("action");
        if (sendwServer != null) {
            List<Boolean> paramlist = S7control.getinstance().ReadBits("DB100.DBW", 12);
            //        new short[]{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}
            JSONObject jsonObject = new JSONObject();
            jsonObject.append("params", new short[]{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0});
            sendwServer.sendMessage(jsonObject.toString());
          }
        }
    }
    private void writeToPlc() {
        WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("action");
        if (webSocketServer != null) {
            List<String> messages = webSocketServer.getMessages();
            String addressList = "DB100.DBW0";
            if (!messages.isEmpty()) {
                // 将最后一个消息转换为整数类型的列表
                String lastMessage = messages.get(messages.size() - 1);
                System.out.println("messages:" + messages);
                String[] parts = lastMessage.split(",");
                List<Integer> messageValues = new ArrayList<>();
                for (String part : parts) {
                    try {
                        // 使用正则表达式清除非数字字符
                        String cleanedPart = part.replaceAll("[^0-9-]", "");
                        Integer value = Integer.parseInt(cleanedPart.trim());
                        messageValues.add(value);
                    } catch (NumberFormatException e) {
                        // 如果无法解析为整数类型,则忽略该部分
                        e.printStackTrace();
                    }
                }
                // 将消息值转换为布尔列表
                List<Boolean> messageBooleans = new ArrayList<>();
                for (Integer value : messageValues) {
                    messageBooleans.add(value == 0 ? true : false);
                }
                // 将布尔列表写入 PLC
                S7control.getinstance().WriteBit(addressList, messageBooleans);
                System.out.println("messageValues:" + messageBooleans);
                System.out.println("addressList:" + addressList);
                // 清空消息列表
                webSocketServer.clearMessages();
            }
        // 将消息值转换为布尔列表
        List<Boolean> messageBooleans = new ArrayList<>();
        for (Integer value : messageValues) {
          messageBooleans.add(value == 0 ? true : false);
        }
    }
    private List<Boolean> paramList() {
        // 获取参数列表的逻辑
        // 将布尔列表写入 PLC
        S7control.getinstance().WriteBit(addressList, messageBooleans);
        System.out.println("messageValues:" + messageBooleans);
        System.out.println("addressList:" + addressList);
        return new ArrayList<>(); // 假设返回空列表
        // 清空消息列表
        webSocketServer.clearMessages();
      }
    }
  }
  private List<Boolean> paramList() {
    // 获取参数列表的逻辑
    return new ArrayList<>(); // 假设返回空列表
  }
}
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -7,6 +7,7 @@
import org.springframework.context.ConfigurableApplicationContext;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import com.example.springboot.mapper.HomeMapper;
public class Plchome extends Thread {
@@ -42,7 +43,9 @@
            List<StorageCage> tasklist2=homeMapper.selectinout(3);
            jsonObject.append("tasklist1", tasklist1);
            jsonObject.append("tasklist2", tasklist2);
            //查询报警信息
            List<alarmmg> alarmmg=homeMapper.SelectAlarmmgInfo();
            jsonObject.append("alarmmg", alarmmg);
            //读去Plc进片车与出片车位置
            // List<String> addressList = new ArrayList<>();
            // addressList.add("DB100.DBW0");
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -10,6 +10,7 @@
import com.example.springboot.service.HomeService;
import com.example.springboot.common.Result;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import org.springframework.web.bind.annotation.*;
@@ -81,12 +82,24 @@
    }
    @GetMapping("/UpdateTask")
    public Result UpdateTask(Integer types,Integer shelf_rack){
    public Result UpdateTask(Integer types,Integer shelfrack){
        Map<String, Object> map = new HashMap<>();
        homeMapper.UpdateTask(types,shelf_rack);
        map.put("message2","200");
        homeMapper.UpdateTask(types,shelfrack);
        if(types==0){
            homeMapper.UpdateCageTask1(shelfrack);
        }else{
            homeMapper.UpdateCageTask2(shelfrack);
        }
        map.put("message3","200");
        return Result.success(map);
    }
    @GetMapping("/SelectAlarmmgInfo")
    public Result SelectAlarmmgInfo(){
        List<alarmmg> alarmmg=homeMapper.SelectAlarmmgInfo();
        Map<String, Object> map = new HashMap<>();
        map.put("alarmmg",alarmmg);
        return Result.success(map);
    }
    
}
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -3,11 +3,13 @@
import org.apache.ibatis.annotations.*;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import java.util.List;
@Mapper
public interface HomeMapper {
  //查询每个笼子的使用情况
  @Select("SELECT cage,round(round(sum(state)/42,2)*100) as cell,42-sum(state) as state FROM storage_cage group by cage")
  List<StorageCage> selectAll();
@@ -48,6 +50,18 @@
  short SelectOutTask();
  // 手动完成任务
  @Select("update storage_task set state=1 where shelf_rack=#{shelf_rack} and task_type=#{task_type} and task_state=0")
  short UpdateTask(@Param("task_type") Integer task_type, @Param("shelf_rack") Integer shelf_rack);
  @Update("update storage_task set task_state=1 where shelf_rack=#{shelf_rack} and task_type=#{task_type} and task_state=0")
  void UpdateTask(@Param("task_type") Integer task_type, @Param("shelf_rack") Integer shelf_rack);
  // 手动完成进片任务修改笼子数据
  @Update("update storage_cage set state=1 where cell=#{cell} and state=2")
  void UpdateCageTask1(@Param("cell") Integer cell);
  // 手动完成出片任务修改笼子数据
  @Update("update storage_cage set state=0,glass_id=null,order_id=null,glasswidth=null,glassheight=null,coating=null where cell=#{cell} and state=2")
  void UpdateCageTask2(@Param("cell") Integer cell);
  //获取报警信息
  @Select("select * from alarmmg where endTime is null")
  List<alarmmg> SelectAlarmmgInfo();
}