question

Craig DIckson avatar image
0 Likes"
Craig DIckson asked Jordan Johnson commented

Motor won't restart conveyor if connected to two+ non accumulating conveyors

It appears that if a motor is connected to more than one conveyor, it will not restart all of them on resume() if more than one of the conveyors is non-accumulating. The attached model illustrates the problem.

motor-restart-problem-with-belts.fsm

I used process flow to stop and start 12 different motors. Each motor is attached to two conveyors. They are all fed from a source and a separator so they get the exact same workload.

Motors 1 and 2 illustrate the basic problem. The only difference is the sequence of the conveyors in the motor's "Motor" tab (i.e. the order that the A-connects were made).

Motors 3 and 4 are the same as 1 and 2 respectively except that the first conveyor was changed to accumulating. These both work. Similarly 5 and 6 have the second conveyor changed to accumulating, These work also.

7 and 8 add a small section of accumulating conveyor at the infeed to the two belts; these do not work. Similarly, 9 and 10 have a section of accumulation between the 2 belts; these did not work either.

Motor 11 controls 2 belts that are not connected to each other at all; they are side-by-side with independent flows. It doesn't work.Motor 12 controls 1 accumulating and one non-accumulating side-by-side and it does work.

My real world equipment is literally 2 belts controlled by 1 motor (actually, 1 belt driven by the motor and the second one driven by chain by the first (at a different speed to pull a gap). Ordinarily I could work around this with process flow, but we plan to use this as emulation, to debug a PLC before installation.

FlexSim 19.1.1
conveyorsmotors
· 3
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

tannerp avatar image tannerp commented ·

Hi @Craig DIckson,

I can't speak to all the reasons why this doesn't work, but I do know that there are specific Conveyor controls that are built-in to the Custom Code Process Flow activities. They were created because the stop object functions don't work with conveyors like they do processors and other fixed objects. Have you tried using them before?

I updated your model to use the stop/start activities in Process Flow. They are only controlling conveyors 7 and 8 (right in the middle). Watch and see if they do what you're looking for.

conveyor-control-pf.fsm

0 Likes 0 ·
Craig DIckson avatar image Craig DIckson tannerp commented ·

Tanner, I'll look at your models.

FWIW I initially found the problem in an emulation model where the motors are restarted by a Resume object Action in a PLC Emulation output variable, not in a Custom Code PF activity.

0 Likes 0 ·
Craig DIckson avatar image Craig DIckson tannerp commented ·

@Tanner Poulton I did try your model, and those conveyors seem to stop at about 55 seconds?

0 Likes 0 ·

1 Answer

Jordan Johnson avatar image
0 Likes"
Jordan Johnson answered Jordan Johnson commented

Thanks for reporting this bug, and for providing an excellent test case. I'll get this on the dev list.

In the mean time, for your project, you can use an FR process flow that listens to stop/start the way the motor is supposed to:

The above flow even makes sure that the number of stop/resume calls match. Then you just have to center-connect the instance object to all the conveyors you need.

motor-restart-problem-with-belts-custom-motor.fsm


· 2
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Craig DIckson avatar image Craig DIckson commented ·

@jordan.johnson Well, TIL about using basic FR and process flow. Thanks!

I assume I can use the new FR motor just like a regular motor in an emulation model output variable?

Craig

0 Likes 0 ·
Jordan Johnson avatar image Jordan Johnson ♦♦ Craig DIckson commented ·

I don't know much about emulation, but it looks like it should just work as a replacement for the motor. The code for the action when the value changes just needs to call stopobject() or object.stop().

0 Likes 0 ·