整个数采数据添加的闭环如下
- 设备添加
- 在大屏看板中添加设备
- 点位添加
- 点位数据生成
数采数据添加的前提是
1.设备添加
设备添加有两种方式通过网页添加和数据库添加,二选一即可
方式1 : 在页面上添加

新增设备的时候 下面的“网关设备名”必须填写,具体的网关设备名找数采工程师拿。

方式2:直接在数据库添加但一定要记得添加gateway_dev_name 也就是网关设备名

2.在大屏看板中添加设备
如果是真实数采他会自动添加,如果是需要造假数据,直接到machine_state表里面添加

machine_id 就是前面我们添加的设备,在machine表里面取他的id即可
state就是设备状态 1:离线 2:在线 3:故障 4:待机 5:停机 6:保养 7:维修
last_update就是设备状态变更时间
至于“设备编号”就是你在最前面添加的 网关设备名 他会自动调用
1.点位添加
直接在网页上添加,如果没有点位管理,记得添加权限

没有点位管理的入口时添加权限方式
权限名称 mes.machine.point_dic
路由 machine.point_dic.index

你也可以直接在数据库中添加

4.点位数据生成
可以手动在device_parameter_points 表里面添加数据,在设备实时数据看板里面,同一设备中,同一点位取的是他最后一条也就是最新的一条数据

这个也是一样,先找到你要造数据的那台设备的machine_id
然后就是 点位名point_name 最后就是 点位数据point_value
其他的可填可不填
上面是手动造数据的方法,下面是批量造数据的方法
需要执行sql
第一个 用与处理浮点型数据
CREATE DEFINER=`root`@`%` PROCEDURE `generate_device_data_precision_float`(
IN p_machine_id INT,
IN p_point_name VARCHAR(100),
IN p_base_value DECIMAL(10,2),
IN p_float_range DECIMAL(10,2),
IN p_start_datetime DATETIME,
IN p_end_datetime DATETIME
)
BEGIN
DECLARE v_current_date DATE;
DECLARE v_days_count INT DEFAULT 0;
DECLARE v_day_index INT DEFAULT 0;
DECLARE v_record_index INT;
DECLARE v_random_datetime DATETIME;
DECLARE v_next_id BIGINT;
DECLARE v_random_seconds INT;
DECLARE v_random_value DECIMAL(10,2);
DECLARE v_min_value DECIMAL(10,2);
DECLARE v_max_value DECIMAL(10,2);
DECLARE v_start_date DATE;
DECLARE v_end_date DATE;
DECLARE v_start_seconds INT;
DECLARE v_end_seconds INT;
DECLARE v_total_seconds INT;
DECLARE v_total_records INT DEFAULT 0;
-- 获取下一个可用的ID
SELECT COALESCE(MAX(id), 0) + 1 INTO v_next_id FROM device_parameter_points;
-- 计算数值范围
SET v_min_value = p_base_value;
SET v_max_value = p_base_value + p_float_range;
-- 提取日期部分和秒数部分
SET v_start_date = DATE(p_start_datetime);
SET v_end_date = DATE(p_end_datetime);
SET v_start_seconds = TIME_TO_SEC(TIME(p_start_datetime));
SET v_end_seconds = TIME_TO_SEC(TIME(p_end_datetime));
-- 计算总天数
SET v_days_count = DATEDIFF(v_end_date, v_start_date);
-- 主循环:遍历每一天
WHILE v_day_index <= v_days_count DO
SET v_current_date = DATE_ADD(v_start_date, INTERVAL v_day_index DAY);
SET v_record_index = 1;
-- 内循环:每天生成50条记录
WHILE v_record_index <= 50 DO
-- 处理第一天和最后一天的边界时间
IF v_day_index = 0 THEN
-- 第一天:从指定的开始时间到23:59:59
SET v_total_seconds = 86400 - v_start_seconds;
IF v_total_seconds > 0 THEN
SET v_random_seconds = v_start_seconds + FLOOR(RAND() * v_total_seconds);
ELSE
SET v_random_seconds = v_start_seconds;
END IF;
ELSEIF v_day_index = v_days_count THEN
-- 最后一天:从00:00:00到指定的结束时间
IF v_end_seconds > 0 THEN
SET v_random_seconds = FLOOR(RAND() * v_end_seconds);
ELSE
SET v_random_seconds = 0;
END IF;
ELSE
-- 中间天数:全天24小时
SET v_random_seconds = FLOOR(RAND() * 86400);
END IF;
-- 生成随机时间
SET v_random_datetime = TIMESTAMPADD(SECOND, v_random_seconds, v_current_date);
-- 确保时间在指定范围内(边界检查)
IF v_random_datetime >= p_start_datetime AND v_random_datetime <= p_end_datetime THEN
-- 生成随机数值(在基础值到基础值+浮动范围内)
SET v_random_value = p_base_value + (RAND() * p_float_range);
-- 插入数据
INSERT INTO device_parameter_points (
id,
machine_id,
point_name,
point_value,
stamp,
unit,
created_at,
updated_at
) VALUES (
v_next_id,
p_machine_id,
p_point_name,
v_random_value, -- 使用随机生成的值
v_random_datetime, -- stamp字段使用随机生成的时间
'',
v_random_datetime, -- created_at也使用相同的时间戳
v_random_datetime -- updated_at也使用相同的时间戳
);
SET v_next_id = v_next_id + 1;
SET v_record_index = v_record_index + 1;
SET v_total_records = v_total_records + 1;
END IF;
END WHILE;
SET v_day_index = v_day_index + 1;
END WHILE;
-- 返回成功信息
SELECT CONCAT(
'成功为机器 ', p_machine_id,
' 的数据点 ''', p_point_name,
''' 插入了 ', v_total_records,
' 条记录,',
'基础值: ', p_base_value,
', 浮动范围: +', p_float_range,
', 数值范围: ', ROUND(v_min_value, 2), ' - ', ROUND(v_max_value, 2),
', 时间范围: ',
DATE_FORMAT(p_start_datetime, '%Y-%m-%d %H:%i:%s'),
' 到 ',
DATE_FORMAT(p_end_datetime, '%Y-%m-%d %H:%i:%s')
) AS result;
END
第二个用与处理整形数据
CREATE DEFINER=`root`@`%` PROCEDURE `generate_device_data_precision_int`(
IN p_machine_id INT,
IN p_point_name VARCHAR(100),
IN p_base_value INT,
IN p_float_range INT,
IN p_start_datetime DATETIME,
IN p_end_datetime DATETIME
)
BEGIN
DECLARE v_current_date DATE;
DECLARE v_days_count INT DEFAULT 0;
DECLARE v_day_index INT DEFAULT 0;
DECLARE v_record_index INT;
DECLARE v_random_datetime DATETIME;
DECLARE v_next_id BIGINT;
DECLARE v_random_seconds INT;
DECLARE v_random_value INT;
DECLARE v_min_value INT;
DECLARE v_max_value INT;
DECLARE v_start_date DATE;
DECLARE v_end_date DATE;
DECLARE v_start_seconds INT;
DECLARE v_end_seconds INT;
DECLARE v_total_seconds INT;
DECLARE v_total_records INT DEFAULT 0;
-- 获取下一个可用的ID
SELECT COALESCE(MAX(id), 0) + 1 INTO v_next_id FROM device_parameter_points;
-- 计算数值范围
SET v_min_value = p_base_value;
SET v_max_value = p_base_value + p_float_range;
-- 提取日期部分和秒数部分
SET v_start_date = DATE(p_start_datetime);
SET v_end_date = DATE(p_end_datetime);
SET v_start_seconds = TIME_TO_SEC(TIME(p_start_datetime));
SET v_end_seconds = TIME_TO_SEC(TIME(p_end_datetime));
-- 计算总天数
SET v_days_count = DATEDIFF(v_end_date, v_start_date);
-- 主循环:遍历每一天
WHILE v_day_index <= v_days_count DO
SET v_current_date = DATE_ADD(v_start_date, INTERVAL v_day_index DAY);
SET v_record_index = 1;
-- 内循环:每天生成50条记录
WHILE v_record_index <= 50 DO
-- 处理第一天和最后一天的边界时间
IF v_day_index = 0 THEN
-- 第一天:从指定的开始时间到23:59:59
SET v_total_seconds = 86400 - v_start_seconds;
IF v_total_seconds > 0 THEN
SET v_random_seconds = v_start_seconds + FLOOR(RAND() * v_total_seconds);
ELSE
SET v_random_seconds = v_start_seconds;
END IF;
ELSEIF v_day_index = v_days_count THEN
-- 最后一天:从00:00:00到指定的结束时间
IF v_end_seconds > 0 THEN
SET v_random_seconds = FLOOR(RAND() * v_end_seconds);
ELSE
SET v_random_seconds = 0;
END IF;
ELSE
-- 中间天数:全天24小时
SET v_random_seconds = FLOOR(RAND() * 86400);
END IF;
-- 生成随机时间
SET v_random_datetime = TIMESTAMPADD(SECOND, v_random_seconds, v_current_date);
-- 确保时间在指定范围内(边界检查)
IF v_random_datetime >= p_start_datetime AND v_random_datetime <= p_end_datetime THEN
-- 生成随机数值(在基础值到基础值+浮动范围内)
SET v_random_value = p_base_value + FLOOR(RAND() * p_float_range);
-- 插入数据
INSERT INTO device_parameter_points (
id,
machine_id,
point_name,
point_value,
stamp,
unit,
created_at,
updated_at
) VALUES (
v_next_id,
p_machine_id,
p_point_name,
v_random_value, -- 使用随机生成的值
v_random_datetime, -- stamp字段使用随机生成的时间
'',
v_random_datetime, -- created_at也使用相同的时间戳
v_random_datetime -- updated_at也使用相同的时间戳
);
SET v_next_id = v_next_id + 1;
SET v_record_index = v_record_index + 1;
SET v_total_records = v_total_records + 1;
END IF;
END WHILE;
SET v_day_index = v_day_index + 1;
END WHILE;
-- 返回成功信息
SELECT CONCAT(
'成功为机器 ', p_machine_id,
' 的数据点 ''', p_point_name,
''' 插入了 ', v_total_records,
' 条记录,',
'基础值: ', p_base_value,
', 浮动范围: +', p_float_range,
', 数值范围: ', ROUND(v_min_value, 2), ' - ', ROUND(v_max_value, 2),
', 时间范围: ',
DATE_FORMAT(p_start_datetime, '%Y-%m-%d %H:%i:%s'),
' 到 ',
DATE_FORMAT(p_end_datetime, '%Y-%m-%d %H:%i:%s')
) AS result;
END
执行方法
-- 设备id 1:点位DI2 :值35.0,浮动5.0,数值范围35.0-40.0,起止时间,采集的值有小数
设备id 就是machine表的machine_id
CALL generate_device_data_precision_float(1, 'DI2', 35.0, 5.0, '2025-07-25 08:30:00', '2025-08-25 12:45:00');
这代表着你批量生成的是设备id为1,点位为DI2 且带有小数的数据日期是2025-07-25 08:30:00到 2025-08-25 12:45:00,而且值不会低于35.0 最高不超过40.0 如果你想保持这个值一直是35.0 那么可以把浮动值5.0改成0.0 这样生成的数据就一直是35.0
CALL generate_device_data_precision_float(1, 'DI2', 35.0, -5.0, '2025-07-25 08:30:00', '2025-08-25 12:45:00');
这代表着你批量生成的是带有小数的数据,而且值不会低于30.0 最高不超过35.0
-- 设备id 2:点位DI2 : 值10,浮动5,数值范围10-15,起止时间,采集的值为整型
CALL generate_device_data_precision_int(2, 'DI2', 10, 5, '2025-07-25 08:30:00', '2025-08-25 12:45:00');
这代表你生成的是设备id为2 点位为DI2 最低值为 整形10 最高值为整形15的数据
CALL generate_device_data_precision_int(2, 'DI2', 10, -5, '2025-07-25 08:30:00', '2025-08-25 12:45:00');
这代表你生成的是设备id为2 点位为DI2 最低值为 整形5 最高值为整形10的数据
如果是本地执行的时候发现没权限可以修改一下权限将主机改成%

解决方法

发表回复
要发表评论,您必须先登录。