|
|
@@ -679,6 +679,61 @@ int dido_di_update(uint32_t _value_new, uint8_t _index, struct timespec *ts)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+/**
|
|
|
+ * @brief Get the shm didata object
|
|
|
+ * @return * int
|
|
|
+ * @retval none
|
|
|
+ *
|
|
|
+ * @warning none
|
|
|
+ * @note none
|
|
|
+ */
|
|
|
+int get_shm_dintdata(void)
|
|
|
+{
|
|
|
+ uint8_t b_on = 0;
|
|
|
+ u32 ul_di_state = 0, dt = 0;
|
|
|
+ int l_read_ret = 0, l_cnt = 0;
|
|
|
+ struct t_shmdata_dint shm_data_dint = {0};
|
|
|
+ static uint8_t suca_dint[DI_MAX] = {0}, suca_dint_bk[DI_MAX] = {0}; /* 数据 */
|
|
|
+ struct timespec ts;
|
|
|
+ struct di_struct *pt_di = NULL;
|
|
|
+
|
|
|
+ l_read_ret = shm_packet_read_v2(SHM_ADDR_W_DI_NT, sizeof(shm_data_dint), (uint8_t *)&shm_data_dint, sizeof(struct t_shmdata_dint));
|
|
|
+
|
|
|
+ if (l_read_ret < 0)
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (l_read_ret > 0)
|
|
|
+ {
|
|
|
+ memcpy((void *)&suca_dint, (void *)&shm_data_dint.di, sizeof(uint8_t) * DI_MAX);
|
|
|
+
|
|
|
+ for (uint8_t i = 0; i < DI_MAX; i++)
|
|
|
+ {
|
|
|
+ pt_di = &g_di_st[g_di_slot][i];
|
|
|
+ b_on = suca_dint[i];
|
|
|
+ if (g_di[g_di_slot].inv[0] & (1 << i))
|
|
|
+ {
|
|
|
+ b_on = !b_on;
|
|
|
+ }
|
|
|
+ pt_di->b_on = b_on;
|
|
|
+ ul_di_state |= b_on << i;
|
|
|
+
|
|
|
+ if (suca_dint_bk[i] != suca_dint[i])
|
|
|
+ {
|
|
|
+ // 更新记录
|
|
|
+ dt = g_adc_dots_count;
|
|
|
+ g_di[g_di_slot].ts_t[i][g_di[g_di_slot].ts_i[i].n] = dt;
|
|
|
+ g_di[g_di_slot].ts_v[i][g_di[g_di_slot].ts_i[i].n] = b_on;
|
|
|
+ g_di[g_di_slot].ts_i[i].n++;
|
|
|
+ suca_dint_bk[i] = suca_dint[i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return l_read_ret;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* @brief Get the shm didata object
|
|
|
* @return * int
|
|
|
@@ -726,10 +781,13 @@ int get_shm_didata(void)
|
|
|
b_on ? SW_DI_TYPE_ON : SW_DI_TYPE_OFF);
|
|
|
// 双点的值也需要重新初始化
|
|
|
plc_db_init_value(g_di_slot, i, b_on);
|
|
|
- // 遥信时标
|
|
|
- g_di[g_di_slot].ts_t[i][g_di[g_di_slot].ts_i[i].n] = 0;
|
|
|
- g_di[g_di_slot].ts_v[i][g_di[g_di_slot].ts_i[i].n] = b_on;
|
|
|
- g_di[g_di_slot].ts_i[i].n++;
|
|
|
+ if (!pRunSet->lb_dint)
|
|
|
+ {
|
|
|
+ // 遥信时标
|
|
|
+ g_di[g_di_slot].ts_t[i][g_di[g_di_slot].ts_i[i].n] = 0;
|
|
|
+ g_di[g_di_slot].ts_v[i][g_di[g_di_slot].ts_i[i].n] = b_on;
|
|
|
+ g_di[g_di_slot].ts_i[i].n++;
|
|
|
+ }
|
|
|
}
|
|
|
memcpy((void *)&smt_di_bk, (void *)&shm_data_di.di, sizeof(struct t_sd_di_status) * DI_MAX);
|
|
|
g_di[g_di_slot].bInited = TRUE;
|
|
|
@@ -758,12 +816,15 @@ int get_shm_didata(void)
|
|
|
pt_di->type,
|
|
|
(b_on) ? SW_DI_TYPE_ON : SW_DI_TYPE_OFF);
|
|
|
|
|
|
- // 更新记录
|
|
|
- dt = g_adc_dots_count;
|
|
|
- g_di[g_di_slot].ts_t[i][g_di[g_di_slot].ts_i[i].n] = dt;
|
|
|
- g_di[g_di_slot].ts_v[i][g_di[g_di_slot].ts_i[i].n] = b_on;
|
|
|
- g_di[g_di_slot].ts_i[i].n++;
|
|
|
- smt_di_bk[i].uc_state = smt_di[i].uc_state;
|
|
|
+ if (!pRunSet->lb_dint)
|
|
|
+ {
|
|
|
+ // 更新记录
|
|
|
+ dt = g_adc_dots_count;
|
|
|
+ g_di[g_di_slot].ts_t[i][g_di[g_di_slot].ts_i[i].n] = dt;
|
|
|
+ g_di[g_di_slot].ts_v[i][g_di[g_di_slot].ts_i[i].n] = b_on;
|
|
|
+ g_di[g_di_slot].ts_i[i].n++;
|
|
|
+ smt_di_bk[i].uc_state = smt_di[i].uc_state;
|
|
|
+ }
|
|
|
// dp_err_n_c_rt("change smt_di[%02d].uc_state = %d", i, b_on);
|
|
|
// dp_err_n_c_rt("dt = %d", dt);
|
|
|
}
|