I am trying to model Ethernet switches (Moxa EDS-508), and remote I/O (Wago Coupler 750-352) with an OOP approach thanks to Codesys. I am a beginner in Automation in general. Firstly, I succeed to fill these objects with different information through Modbus/TCP Slaves. Which are present in the Codesys Device Tree.
But I wanted to have more flexibility with the modeling. So I imported both libraries OSCAT BASIC v3.3.3 and OSCAT NETWORK v1.2 in Codesys v3.5 SP9.
My client is the target PLC a Raspberry-Pi, and it sends a Modbus TCP/IP request to the server, a Moxa switch. The switch only works with FC4 and UDP doesn't seem to work. (Error of timeout,16#FF00, is returned).
I choose to make an ST FB based on MB_CLIENT, from Oscat Network. I will use it to read registers and fill the objects. Moreover, I decided to make different FB with different size of data output.
Read_Channel_FB_0 reads a unique Modbus TCP/IP register and release a word output (data_out). It possesses two methods: Read_Parameters_Affec() and Data_Builder().
Read_Channel_FB_1 reads a Modbus TCP/IP register and release an array of two words output (data_out). It possesses two methods: Data_Builder() and Read_Parameters_Affec() (Same method as Read_Channel_FB_0).
A Moxa is modelled by a FB, and composed with two structures: REFERENCE TO Minor_Information, REFERENCE TO Primary_Information. The information represent data more or less important from the Moxa, so the request Modbus TCP/IP are not at the same speed rate between information. Plus Moxa_FB gets a FB_Init to initialize its parameters from a GVL.
Now we build the object Moxa in a program thanks to IP_CONTROL2, from Oscat Network:
When I call the different Read_Channel_FB in a program, there is no error code. And the Moxa_FB is filled correctly.
I wanted to add the Read_Channel_FB inside a new FB: Moxa_new_FB. There are two methods Primary_meth() and Minor_meth().
Plus I removed the use of a GVL for a FB_Init in this FB.
Here is the call in a program:
But the affection didnβt occur. And I donβt have any errors.
I need help, can someone explain me why the object doesn't fill correctly??
Sorry for the length of the post, but I tried to explain as much as possible the project.
Mox.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2016-11-11
Originally created by: scott_cunningham
Variables defined in methods are temporary is scope. As soon as the method ends, they disappear. So in your new FB, the variables IP_CONTROL2_1 and Channel_1_P in Primary_meth and Minor_meth are actually temporary.
Declare them in FUNCTION_BLOCK Moxa_new_FB instead. Then they will maintain existence from PLC scan to PLC scan.
(I learned this the hard way when I tried to declare a counter inside a method - always started at 0, incremented to 1 and repeated).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I moved the declaration of all variable from both methods Minor_meth and Primary_meth inside the FB Moxa_new_FB. And it works my object was filled correctly.
Thanks a lot scott.
Regards,
Mox.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello,
I am trying to model Ethernet switches (Moxa EDS-508), and remote I/O (Wago Coupler 750-352) with an OOP approach thanks to Codesys. I am a beginner in Automation in general. Firstly, I succeed to fill these objects with different information through Modbus/TCP Slaves. Which are present in the Codesys Device Tree.
But I wanted to have more flexibility with the modeling. So I imported both libraries OSCAT BASIC v3.3.3 and OSCAT NETWORK v1.2 in Codesys v3.5 SP9.
http://store.codesys.com/oscat-basic.html
http://store.codesys.com/oscat-network.html
My client is the target PLC a Raspberry-Pi, and it sends a Modbus TCP/IP request to the server, a Moxa switch. The switch only works with FC4 and UDP doesn't seem to work. (Error of timeout,16#FF00, is returned).
I choose to make an ST FB based on MB_CLIENT, from Oscat Network. I will use it to read registers and fill the objects. Moreover, I decided to make different FB with different size of data output.
Read_Channel_FB_0 reads a unique Modbus TCP/IP register and release a word output (data_out). It possesses two methods: Read_Parameters_Affec() and Data_Builder().
Read_Channel_FB_1 reads a Modbus TCP/IP register and release an array of two words output (data_out). It possesses two methods: Data_Builder() and Read_Parameters_Affec() (Same method as Read_Channel_FB_0).
A Moxa is modelled by a FB, and composed with two structures: REFERENCE TO Minor_Information, REFERENCE TO Primary_Information. The information represent data more or less important from the Moxa, so the request Modbus TCP/IP are not at the same speed rate between information. Plus Moxa_FB gets a FB_Init to initialize its parameters from a GVL.
Now we build the object Moxa in a program thanks to IP_CONTROL2, from Oscat Network:
When I call the different Read_Channel_FB in a program, there is no error code. And the Moxa_FB is filled correctly.
I wanted to add the Read_Channel_FB inside a new FB: Moxa_new_FB. There are two methods Primary_meth() and Minor_meth().
Plus I removed the use of a GVL for a FB_Init in this FB.
Here is the call in a program:
But the affection didnβt occur. And I donβt have any errors.
I need help, can someone explain me why the object doesn't fill correctly??
Sorry for the length of the post, but I tried to explain as much as possible the project.
Mox.
Originally created by: scott_cunningham
Variables defined in methods are temporary is scope. As soon as the method ends, they disappear. So in your new FB, the variables IP_CONTROL2_1 and Channel_1_P in Primary_meth and Minor_meth are actually temporary.
Declare them in FUNCTION_BLOCK Moxa_new_FB instead. Then they will maintain existence from PLC scan to PLC scan.
(I learned this the hard way when I tried to declare a counter inside a method - always started at 0, incremented to 1 and repeated).
Hello scott and thanks for your reply.
I moved the declaration of all variable from both methods Minor_meth and Primary_meth inside the FB Moxa_new_FB. And it works my object was filled correctly.
Thanks a lot scott.
Regards,
Mox.