SolidRio

FX Invertor communication

12 posts in this topic

Hello everyone.

When i was working with FX3U and did Inverter communication (Mitsubishi) by 485 (485-BD and 485-ADP) i've faced really slow connection when there was many Inverters (2-3+). Then i was thinking its because low speed of connection 19200 or 38400. Right now i am making project with 9 Inverters and FX5U. Speed 115,200. And still connection really slow (about 2-3 seconds on refresh data from FR). I divided inverters on 2 groups (5 on CPU's-485 and 4 on 485-ADP) - connection improved, but still about 1 sec. In the program i am only taking data (FREQ/CURRENT/VOLTAGE and DIGITAL OUTPUTS) so there is not so many operators that load connection.

I need your advice. Can i improve speed of taking data? 

Edited by SolidRio

Share this post


Link to post
Share on other sites

Which Inverters are you using ?

The new FR-E,  FR-A, FR-F can be bought with integrated ethernet which support CC-Link IE Field basic which is also supported on the FX5U standard ethernet port.

Share this post


Link to post
Share on other sites

I am using the old versions of A/F-800 without Ethernet port.

Share this post


Link to post
Share on other sites

Are you using the Mitsubishi function blocks and if so which ones?

 

Share this post


Link to post
Share on other sites

Are you sending one telegram for send/receive data, or multiple telegrams for sending/receiving data? Normally the best option is to have one telegram per send/receive for multiple areas even if it means a total of more devices than actually needed if there are gaps in between the data you want to receive or send. To put it simple: If possible, create one telegram for send and one for receive per inverter, nothing more!

1 person likes this

Share this post


Link to post
Share on other sites
14 hours ago, Veganic said:

Are you using the Mitsubishi function blocks and if so which ones?

 

I am using IVCK (multiple times) and IVDR (once for special monitor parameter).

8 hours ago, kaare_t said:

Are you sending one telegram for send/receive data, or multiple telegrams for sending/receiving data? Normally the best option is to have one telegram per send/receive for multiple areas even if it means a total of more devices than actually needed if there are gaps in between the data you want to receive or send. To put it simple: If possible, create one telegram for send and one for receive per inverter, nothing more!

Sorry but i dont fully understand you. As i said, I am using multiple IVCK (read) for each inverter and one IVDR (send). Can you describe it with example? 

Share this post


Link to post
Share on other sites

Per inverter: How many instructions do you execute in sequence? For example: 3 IVCK and one IVDR per inverter? Or other?

What I believe is happening is the following sequence (based on 3/1):

  1. IVCK1 (frequency)
  2. IVCK2 (current)
  3. IVCK3 (voltage)
  4. IVDR1 (setfrequency)

The problem here is most likely the number of transmissions or transactions. Each of them takes processing time, and many small is worse than one large most often. I would suggest you to consider changing to ModbusRTU which I believe all your units supports by default (alternatively if you're not sure then list all your equipment with full names). By using ModbusRTU you can probably read a complete block of data (e.g. above, you can put all 3 IVCK in one transaction).

Can you specify a bit more regarding what your reading (all parameters/values)? You only have one IVDR, what is it for?

1 person likes this

Share this post


Link to post
Share on other sites
17 hours ago, kaare_t said:

Per inverter: How many instructions do you execute in sequence? For example: 3 IVCK and one IVDR per inverter? Or other?

What I believe is happening is the following sequence (based on 3/1):

  1. IVCK1 (frequency)
  2. IVCK2 (current)
  3. IVCK3 (voltage)
  4. IVDR1 (setfrequency)

The problem here is most likely the number of transmissions or transactions. Each of them takes processing time, and many small is worse than one large most often. I would suggest you to consider changing to ModbusRTU which I believe all your units supports by default (alternatively if you're not sure then list all your equipment with full names). By using ModbusRTU you can probably read a complete block of data (e.g. above, you can put all 3 IVCK in one transaction).

Can you specify a bit more regarding what your reading (all parameters/values)? You only have one IVDR, what is it for?

I will share FB that i using in this project in this post. I dont need control in this application, only monitoring. 

I will try ModbusRTU next week. 

List of equipment: nine FR-A840 inverters and FX5U with 2 485 channels.

I am using IVDR for writing special monitor parameter type. I want to monitor Temperature in inverter (HF3 - 96).

Thanks for your response.

FR_BLOCK.gx3

Share this post


Link to post
Share on other sites

You are using a total of 7 IVCK and 1 IVDR. I see that you have noe sequence control over them, I'm not sure if this will work since all of them will be triggered at the "exact same time", but since you are testing it right now it obviously works. I'm not sure how Mitsubishi has implemented the two instructions in the CPU, but since you got it working it seems OK. In Modbus you will have to make a sequence that runs through each telegram one by one, and not all at the same time.

But if we look at what you've got working now, I suspect you only send the IVDR once, and the 7 IVCK are sent all the time. You've got 4 inverters in your best case and 7 IVCK per inverter. That's a total of 28 telegrams for a cycle. Now, if we divide 1 second cycle time by 4 inverters we got 250ms per inverter. Then, divide 250 by 7 and you've got 35,71ms per instruction. I would say it's within the normal range.

Now, your problem here isn't directly connected to the serial bus speed. It's more the number of transmissions per inverter. Even with Gbit TCP/IP you would have a problem if you sequenced 28 transmissions due to the time it takes to initiate, communicate and break down the link. What I'm saying is that the problem here is Mitsubishi's implementation of the IVCK instruction and that you can only handle one data at a time. Since you want to read out 7 different values, you should look at ModbusRTU and read all those 7 values in one single telegram. Let's say that the seven values are located at 30001, 30010, 30011, 30012, 30017, 30020, 30030. They are spread out, but what you do is to initiate i single read multiple inputs, with starting address 30001 and a count of 30. Then you will receive all the values between 30001 and 30030 and you simply only MOV the values that are interesting.

Of course, sometimes we need to use multiple telegrams because the data we want to read are spread across large areas, but the whole point here is to avoid many small telegrams. It's better to transmit one large block of data than many small. IF it's possible to read out the values you need in one ModbusRTU telegram, then I would guess that you can lower the complete cycle time from 1s to about 150ms or so (this is only a guess).

1 person likes this

Share this post


Link to post
Share on other sites
20 hours ago, kaare_t said:

You are using a total of 7 IVCK and 1 IVDR. I see that you have noe sequence control over them, I'm not sure if this will work since all of them will be triggered at the "exact same time", but since you are testing it right now it obviously works. I'm not sure how Mitsubishi has implemented the two instructions in the CPU, but since you got it working it seems OK. In Modbus you will have to make a sequence that runs through each telegram one by one, and not all at the same time.

But if we look at what you've got working now, I suspect you only send the IVDR once, and the 7 IVCK are sent all the time. You've got 4 inverters in your best case and 7 IVCK per inverter. That's a total of 28 telegrams for a cycle. Now, if we divide 1 second cycle time by 4 inverters we got 250ms per inverter. Then, divide 250 by 7 and you've got 35,71ms per instruction. I would say it's within the normal range.

Now, your problem here isn't directly connected to the serial bus speed. It's more the number of transmissions per inverter. Even with Gbit TCP/IP you would have a problem if you sequenced 28 transmissions due to the time it takes to initiate, communicate and break down the link. What I'm saying is that the problem here is Mitsubishi's implementation of the IVCK instruction and that you can only handle one data at a time. Since you want to read out 7 different values, you should look at ModbusRTU and read all those 7 values in one single telegram. Let's say that the seven values are located at 30001, 30010, 30011, 30012, 30017, 30020, 30030. They are spread out, but what you do is to initiate i single read multiple inputs, with starting address 30001 and a count of 30. Then you will receive all the values between 30001 and 30030 and you simply only MOV the values that are interesting.

Of course, sometimes we need to use multiple telegrams because the data we want to read are spread across large areas, but the whole point here is to avoid many small telegrams. It's better to transmit one large block of data than many small. IF it's possible to read out the values you need in one ModbusRTU telegram, then I would guess that you can lower the complete cycle time from 1s to about 150ms or so (this is only a guess).

I really misscounted number of telegrams (forgot about PU/EXT/NET and Special monitor, and in last version i deleted Voltage part).

There is now need to make sequence over them, they are working one after another. Like this - https://prnt.sc/mcrlp1

But i get your point, there is still to many telegram (even if they working) to inverters. With the one or two inverters its works really well, but if its 2+ inverters....

So i will tryout Modbus and will write results here. 

Thanks for your response.

Share this post


Link to post
Share on other sites

So, i tested MODBUS.

First, my previous problem was only when some of inverters is offline. I think i have some problem with program sequence or with response time waiting, i will find out.

Second, Its seems when you use small amount of commands (IVCK/IVDR etc) - mitsubishi inverter protocol is winning at speed. 

I dont know who will win in case full control of inverter (full monitor and control), i will try it when i will have time.

MODBUS (in case of Mitsubishi inverters) not so good as i thought at start. Inverters data divided between many ranges of memory and you cant cover that by 1-2 ADPRWs which can only cover 125 points of memory. Because of this amount of telegrams between plc and inverters not that small. And MODBUS master can be only one in one PLC, so you cant divide your Inverters between 485-modules (like mitsubishi protocol). 

 

Edited by SolidRio

Share this post


Link to post
Share on other sites

Little update on this old topic.

Project ended up with CC-Link IE Basis (Thanks to someone in our office who bought FR-A840-E by mistake). In the manual was written that only 6 inverters  can be connected to 1 plc. But accidentally i faced on mitsubishi site notes to new firmware of fx5u (FX5 Firmware 1.110): "Expanded number of CC-Link IE Field Basic slaves (6->16)". I updated plc firmware and CC-Link IE basis inverter connection works flawless. 

1 person likes this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now