我需要开发的一个软网关,需要实现的功能是: #1. Web API调用接口获取数据,使用RestSharp调用: ##1.1. 要求文档示例如下: #### 一、适用范围 本标准适用于机车检修段工控设备与段内其他系统平台的数据共享,数据类型包括但不限于部件二维码、部件编号、下车号、位别、试验数据、试验时间、设备状态数据。 二、调用方案 1.功能说明 原则上产生试验数据的工控设备均应具备请求段内二维码信息的能力,试验软件界面应配备部件二维码字符串的输入框,用于建立机车配件与试验数据间的 绑定关系,需同步存入本地及服务器端数据库中。通过扫码枪将二维码信息录入至输入框后,软件自动请求段内API接口进而获得该部件对应的部件编号、下车号、下车位别等信息并填入对应输入框内,具备请求失败可手动录入的功能。 2.设备扫描获取信息示例 用途:通过设备扫描二维码可以获取该工序的信息:车型、车号、位别、修程、部件名称、部件编码。 1.接口url http://172.16.3.203:2324/mes/order/iotPartInfo/getPartInfo 2.请求参数:PartQRCodeId(二维码零件id),DeviceCode(设备编码) 3.请求方式:GET 4.返回参数 { "status":200 "msg":"success" "data":{ "vehicle_model": "HXD1D", //机型 "locomotive_number": "0001",//下车号 "repair_process": "C5",//修程 "component_name": "车轴"//部件名称 "part_position": "1" //位别 "part_num": "部件编号"//部件编号 "part_qrCode": "0280828b20b14dae9989f7a633eb6adc" //部件二维码id ........... //需要返回更多参数请提交字段说明 } } 三、接入方案 1.接入架构 设备厂商负责建立统一的数据采集组件,于工控设备端部署本地数据库、数据发送服务或设备,服务器端部署数据接收服务,将接受到的数据写入相应数据库中,同时在服务器端部署API,用于段内各应用获取相应数据。 2.接入组件功能 接口应具备下列功能: a)传输实时的设备状态数据,如运行状态、实时电流、电压、传感器数据等。 b)传输设备故障、报警数据。 c)传输设备产生的所有试验数据。 d)具备断点续传和数据缓存能力,防止网络不稳定。 e)提供修改采集设备及服务端IP地址的入口,防止IP地址变更后无法通讯。 3.数据内容 a)设备状态数据 设备的实时工作状态,比如开启/关闭状态、运行中、待机。 b)试验测试数据(详细查看附件)  尺寸、重量、温度、流量、转速、振动、光学测量。  静态压力、动态压力、差压、峰值压力、压力脉冲、环境压力。  实时电压和电流监测,包括运行曲线及上下限值。  运行、待机、停机、故障时间统计。  设备利用率计算。  故障件次统计。  环境温度、湿度监测,液位、系统压力、VOC浓度、粉尘指数检测。  液压站状态、附属计量部件状态提示。  机体水平度、振动检测。  作业次数统计。 c)设备故障信息 故障设备:发生故障的设备,小件故障,以大部件上报。 故障时间:故障发生时间 故障描述:故障原因 4.数据规范及接口协议 a)设备状态、故障信息对接采用WebSocket、MQTT协议。 b)试验数据上传采用。 c)数据库结构应符合三大范式。 d)支持配置多SecretKey,防止非法请求 e)返回数据的格式采用json格式,返回的数据中应包含请求成功、失败的状态码。 5.接口规范示例 示例一 用途:通过试验配件的二维码id、设备编号(支持多个同类型设备)获取对应的试验数据。 1.接口url http://厂家服务器地址:端口号/getTestdata 2.请求参数:PartQRCodeId(二维码零件id),DeviceCode(设备编码) 3.请求方式:GET 4.返回参数 { "status": 200, "msg":"请求成功/失败原因", "data":, { "vehicle_model": "HXD1D", //车型 "locomotive_number": "0001", //下车号 "repair_process": "C5", //修程 "component_name": "车轴" //部件名称 "process_id": "1231231231231311312321" "part position"::"1"//位别 "part num:"部件编号"//部件编号 "part_qrCode": "0280828b20b14dae9989f7a633eb6adc" //部件二维码id "date": "2023-12-22 15:00:34" 试验数据… } } 示例二 用途:通过设备编号获取相应工控设备状态信息,如运行时间、待机时间、停机时间、故障时间、作业次数统计、设备利用率。 1.接口url http://厂家服务器地址:端口号/getTestBenchstatus 2.请求参数: DeviceCode(设备编码) 3.请求方式:GET 4.返回参数 { "status": 200, "msg":"请求成功/失败原因", "data":, { "running_time": "10345", "running _number": "36", …… } } 四、部署方案 同一厂家的设备应建立统一的数据接收组件或平台,部署在该厂家服务器上,对部分设备少且资源消耗小的可向物资设备科(信息)申请虚拟机部署。 五、文档交接要求 1.提供服务端数据接受组件或平台的部署文档。 2.提供API开发文档及示例接口说明。 3.提供数据库用户名、密码及字段说明文档。 ### ##1.2. 帮我封装这些功能供我使用,我还有其他的逻辑调用这些 #2. 设备实时状态推送数据,使用HslCommunication WebSocket ##2.1. 接口标准示例如下: ### 1.协议:WebSocket 2.推送频次:1秒/次,支持通过工控软件或配置文件自定义设置。 3.推送内容: (1)设备基础信息:含设备编号、设备名称、设备厂商(规范全称)。 (2)设备实时状态:含待机、运行、故障。 (3)设备故障信息:含故障发生时间、故障代码、故障说明,无故障返回空值。 (4)被试部件信息:含车型、修程、车号、位别、部件名称、部件编号、部件二维码id,若为多个部件返回多个部件信息,若非运行状态则返回空值。 (5)实时试验数据:即各设备工控软件界面的所有实时数据、目标数据。 (6)实时传感器数据:除实时试验数据以外,其他可以反应设备状态的传感器数据,如电流、电压、压力、位移、扭矩、角度等,根据各自设备特性,应传尽传。 4.接口示例: 就多功能轮轴组装机举例: (1)既有工控软件界面: (2)示例推送JSON内容: { "status": 200, // 状态码, 200表示成功 "msg": "success", // 状态信息, 成功时为"success", 失败时为具体错误信息 "data": { "DeviceCode": "1234567890", // 设备编号 "DeviceName": "多功能轮轴组装机1", // 设备名称 "DeviceManufacturer": "北京新联铁集团股份有限公司", // 设备厂商 "Status": 1, // 设备状态, 代码含义自定 "FaultDetails": { "code": 101, // 错误代码, 无错误为空 "description": "压力传感器故障,请检查电源电压是否正确。", // 错误描述,无错误为空 "time": "2021-01-01 12:00:00" // 错误发生时间,无错误为空 }, "ComponentsInfo": [{ // 不论多部件还是单部件均采用数组,若为单部件则数组中仅有一个对象 "vehicle_model": "HXD1D", // 车型 "locomotive_number": "0001", // 车号 "repair_process": "C5", // 修程 "part_position": 3, // 位别 "component_name": "车轴", // 部件名称 "part_num": "123154412", // 部件编号 "part_qrid1": "145sdfsdsdfsd4ff5sdfwe1gd2sdfg", // 二维码id }, { "vehicle_model": "HXD1D", // 车型 "locomotive_number": "0001", // 车号 "repair_process": "C5", // 修程 "part_position": 3, // 位别 "component_name": "轮饼", // 部件名称2 "part_num": "1234567890", // 部件编号2 "part_qrid": "145sdf422342sd4ff5sdfwe1gd2sdfg", // 二维码id }], "TestData": { "current_process": "小车前进到压装位", // 当前工序 "next_process": "小车运行到压装位", // 下一工序 "top_pressure_left": 100, // 左顶尖压力 "top_offset_left": 0, // 左顶尖位移 "top_offset_target_left": 190.38, // 左顶尖位移目标值 "measuring_offset_left": 0, // 左测量臂位移 "measuring_offset_target_left": 305.11, // 左测量臂位移目标值 "ultimate_pressure_left": 100, // 左最终压力 "top_pressure_right": 100, // 右顶尖压力 "top_offset_right": 0, // 右顶尖位移 "top_offset_target_right": 190.38, // 右顶尖位移目标值 "measuring_offset_right": 0, // 右测量臂位移 "measuring_offset_target_right": 1608.31, // 右测量臂位移目标值 "ultimate_pressure_right": 100, // 右最终压力 }, "SensorData": { "electric_current": 0.001, // 电流 "electric_voltage": 230, // 电压 ... // 其他传感器数据 } } } 二、设备健康状态数据采集 1.功能说明:设备运行状态下,以一定的频次记录设备可采集的传感器数据,在试验结束后将传感器数据以“,”分隔的形式写入数据库中,用于后期对设备健康状态的分析评估。 2.采集频次:1秒/次,支持通过工控软件或配置文件自定义设置。 3.采集内容:如电流、电压、压力、位移、扭矩、角度等,根据各自设备特性,应采尽采。 4.数据库结构示例: 字段名 字段含义 内容示例 Id 索引id 1 Pid 父级id,关联试验信息的数据表,即试验数据表 3518 frequency 采样频次,秒/次 1 electric_current_A A相电流 0.13,0.54,0.56,0.28,0.59,0.63… electric_current_B B相电流 0.23,0.14,0.56,0.28,0.59,0.63… electric_current_C C相电流 0.43,0.52,0.56,0.28,0.59,0.63… electric_voltage 电压 220.01,220.56,210.23,201.12… … 其他传感器数据 ### ##2.2. 帮我封装这些功能供我使用,我还有其他的逻辑调用这些