From cf65689558356938a82d029b1341b784954adad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BF=B1=20=E6=B2=88?= <2401809606@qq.com> Date: Sun, 18 Jan 2026 18:57:36 +0800 Subject: [PATCH] =?UTF-8?q?plc=E8=BF=9E=E6=8E=A5=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/language.settings.xml | 2 +- applications/PLC_link.c | 30 +++++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 4b8021f..65cd202 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/applications/PLC_link.c b/applications/PLC_link.c index d32ded6..94ba06f 100644 --- a/applications/PLC_link.c +++ b/applications/PLC_link.c @@ -47,6 +47,10 @@ static void mb_plc_read_regs(mb_inst_t *hinst) for (int i = 0; i < DI_TABLE_SIZE; i++) { di_table[i].current_state = (r_buffer[i / 8] >> (i % 8)) & 1; } + }else + { + rt_thread_mdelay(500); + return; } // 输出 m0256 -> RTU 2256 @@ -63,15 +67,26 @@ static void mb_plc_read_regs(mb_inst_t *hinst) } } // 写入 Modbus - mb_write_bits(hinst, 2256, DO_TABLE_SIZE, w_buffer); + int mwy = mb_write_bits(hinst, 2256, DO_TABLE_SIZE, w_buffer); + if (mwy <= 0) + { + rt_thread_mdelay(500); + return; + } //输入寄存器d0->6000 u16 r_regsD[AI_TABLE_SIZE]; // 读 Modbus - mb_read_regs(hinst, 6000, AI_TABLE_SIZE, r_regsD); - for (int i = 0; i < AI_TABLE_SIZE; i++) + int mrd = mb_read_regs(hinst, 6000, AI_TABLE_SIZE, r_regsD); + if (mrd > 0) { - ai_table[i].current_Value = r_regsD[i]; + for (int i = 0; i < AI_TABLE_SIZE; i++) + { + ai_table[i].current_Value = r_regsD[i]; + } + }else { + rt_thread_mdelay(500); + return; } //输出寄存器d100->6100 @@ -81,7 +96,12 @@ static void mb_plc_read_regs(mb_inst_t *hinst) w_regsD [i] = ao_table[i].current_Value; } // 写入 Modbus - mb_write_regs(hinst, 6100, AO_TABLE_SIZE, w_regsD); + int mwd = mb_write_regs(hinst, 6100, AO_TABLE_SIZE, w_regsD); + if (mwd > 0) + { + rt_thread_mdelay(500); + return; + } } static void mb_plc_thread(void *args)//线程服务函数