Browse Source

plc连接逻辑修改

master
忱 沈 3 days ago
parent
commit
cf65689558
  1. 2
      .settings/language.settings.xml
  2. 26
      applications/PLC_link.c

2
.settings/language.settings.xml

@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-1141698828038963161" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT ARM Cross GCC Built-in Compiler Settings " parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1336382746191491235" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT ARM Cross GCC Built-in Compiler Settings " parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>

26
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,16 +67,27 @@ 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);
int mrd = mb_read_regs(hinst, 6000, AI_TABLE_SIZE, r_regsD);
if (mrd > 0)
{
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
u16 w_regsD [AO_TABLE_SIZE];
@ -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)//线程服务函数

Loading…
Cancel
Save