From 3ffab7f6a185733f87a79222d3a54dcfff8af3ad Mon Sep 17 00:00:00 2001 From: r2k-in-the-vortex <30666740+r2k-in-the-vortex@users.noreply.github.com> Date: Sun, 3 Dec 2023 23:27:58 +0200 Subject: [PATCH] Wideregistersupport (#5) * DINT and LINT IO added * wide register support, 32, 64bit * ff submodule pointer for ethercat_src --------- authored-by: r2k --- utils/ethercat_src | 2 +- utils/glue_generator_src/glue_generator.cpp | 20 ++++++++++++++++++++ webserver/core/ladder.h | 8 ++++++++ webserver/core/main.cpp | 14 +++++++++++++- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/utils/ethercat_src b/utils/ethercat_src index 6b2697d..f9c636d 160000 --- a/utils/ethercat_src +++ b/utils/ethercat_src @@ -1 +1 @@ -Subproject commit 6b2697d6038123e7c945e9a10545a73e44166ced +Subproject commit f9c636d01327f1800750fcd5917fd81cc23aaa25 diff --git a/utils/glue_generator_src/glue_generator.cpp b/utils/glue_generator_src/glue_generator.cpp index 4b1822c..2454d49 100755 --- a/utils/glue_generator_src/glue_generator.cpp +++ b/utils/glue_generator_src/glue_generator.cpp @@ -59,6 +59,14 @@ IEC_BYTE *byte_output[BUFFER_SIZE];\r\n\ IEC_UINT *int_input[BUFFER_SIZE];\r\n\ IEC_UINT *int_output[BUFFER_SIZE];\r\n\ \r\n\ +//32bit I/O\r\n\ +IEC_DINT *dint_input[BUFFER_SIZE];\r\n\ +IEC_DINT *dint_output[BUFFER_SIZE];\r\n\ +\r\n\ +//64bit I/O\r\n\ +IEC_LINT *lint_input[BUFFER_SIZE];\r\n\ +IEC_LINT *lint_output[BUFFER_SIZE];\r\n\ +\r\n\ //Memory\r\n\ IEC_UINT *int_memory[BUFFER_SIZE];\r\n\ IEC_DINT *dint_memory[BUFFER_SIZE];\r\n\ @@ -176,6 +184,12 @@ void glueVar(ostream& glueVars, char *varName, char *varType) case 'W': glueVars << "\tint_input[" << pos1 << "] = " << varName << ";\r\n"; break; + case 'D': + glueVars << "\tdint_input[" << pos1 << "] = (IEC_DINT *)" << varName << ";\r\n"; + break; + case 'L': + glueVars << "\tlint_input[" << pos1 << "] = (IEC_LINT *)" << varName << ";\r\n"; + break; } } else if (varName[2] == 'Q') @@ -192,6 +206,12 @@ void glueVar(ostream& glueVars, char *varName, char *varType) case 'W': glueVars << "\tint_output[" << pos1 << "] = " << varName << ";\r\n"; break; + case 'D': + glueVars << "\tdint_output[" << pos1 << "] = (IEC_DINT *)" << varName << ";\r\n"; + break; + case 'L': + glueVars << "\tlint_input[" << pos1 << "] = (IEC_LINT *)" << varName << ";\r\n"; + break; } } else if (varName[2] == 'M') diff --git a/webserver/core/ladder.h b/webserver/core/ladder.h index f646f96..fc0402c 100644 --- a/webserver/core/ladder.h +++ b/webserver/core/ladder.h @@ -69,6 +69,14 @@ extern IEC_BYTE *byte_output[BUFFER_SIZE]; extern IEC_UINT *int_input[BUFFER_SIZE]; extern IEC_UINT *int_output[BUFFER_SIZE]; +//32bit I/O +extern IEC_DINT *dint_input[BUFFER_SIZE]; +extern IEC_DINT *dint_output[BUFFER_SIZE]; + +//64bit I/O +extern IEC_LINT *lint_input[BUFFER_SIZE]; +extern IEC_LINT *lint_output[BUFFER_SIZE]; + //Memory extern IEC_UINT *int_memory[BUFFER_SIZE]; extern IEC_DINT *dint_memory[BUFFER_SIZE]; diff --git a/webserver/core/main.cpp b/webserver/core/main.cpp index 19be638..6f84ceb 100644 --- a/webserver/core/main.cpp +++ b/webserver/core/main.cpp @@ -216,6 +216,10 @@ u_int8_t *byte_input_call_back(int a){ return byte_input[a]; } u_int8_t *byte_output_call_back(int a){ return byte_output[a]; } u_int16_t *int_input_call_back(int a){ return int_input[a]; } u_int16_t *int_output_call_back(int a){ return int_output[a]; } +u_int32_t *dint_input_call_back(int a){ return dint_input[a]; } +u_int32_t *dint_output_call_back(int a){ return dint_output[a]; } +u_int64_t *lint_input_call_back(int a){ return lint_input[a]; } +u_int64_t *lint_output_call_back(int a){ return lint_output[a]; } void logger_callback(unsigned char *msg){ log(msg);} int main(int argc,char **argv) @@ -327,6 +331,10 @@ int main(int argc,char **argv) int8var_call_back byte_output_callback = byte_output_call_back; int16var_call_back int_input_callback = int_input_call_back; int16var_call_back int_output_callback = int_output_call_back; + int32var_call_back dint_input_callback = dint_input_call_back; + int32var_call_back dint_output_callback = dint_output_call_back; + int64var_call_back lint_input_callback = lint_input_call_back; + int64var_call_back lint_output_callback = lint_output_call_back; #endif updateBuffersIn(); //read input image @@ -341,7 +349,11 @@ int main(int argc,char **argv) byte_input_callback, byte_output_callback, int_input_callback, - int_output_callback)){ + int_output_callback, + dint_input_call_back, + dint_output_call_back, + lint_input_call_back, + lint_output_call_back)){ printf("EtherCAT cyclic failed\n"); break; }