Siemens PLC - Conveyor Issue

Matchu04

Lifetime Supporting Member
Join Date
Mar 2013
Location
Northampton
Posts
287
Afternoon guys & gals

I am after some help /guidence on an issue we have been having at work with a reject conveyor. I am part way there (I think)but a its the final part I cant put my finger on. I have tried to upload the blocks but they are too big. If someone wishes to have them then I am happy to send them one.

In the mean time I will try to explain with pics.

Basically there is a reject conveyor that preceeds another conveyor that should run 95% of the time. Even if the line stops, it should still feed to remove rejected bottles. The preceding conveyor M731 runs fine, so the following conveyor M771 should do the same. The only only thing to have changed is the VFD was changed a few weeks back by someone else.

Both motors are driven by VFD's via profibus. I have started to have a look and have found the blocks that control boths drives..

EBI1.jpg EBI2.jpg
 
In both motor calls, FC400 is used for build back line control. Depending on certain conditions it will enable a bit that is used to enable FC401 which I think controls the drives. It will also copy the status of the line control to the motor DB.

What I have learnt but not 100% understand is that in order to control the drives we us a control word to start / stop but then another word for the status etc etc. So in the corrospoding drive parameters DB there is aload of data that is used to control the drive I think...

Just a insight of the drive DB's

EBI3.jpg EBI4.jpg
 
This is where I think the magic is done but cant see the light through the tunnel.

Basically I want to drive the conveyor the same as the previous one. I just cant see where the control call for M771 is..
 
Maybe I mis-stated my question. What is the current machine behavior, what about that behavior is a problem?

Is the problem that M771 should be running M731 runs, but M771 is not running?
 
Hi mk42

M731 is the beginning of a reject conveyor and pretty much runs all the time. M771 is a reject take away conveyor that should run like M731. However it doesnt. If the line control stops then M771 also stops, when the line control starts back up, it also starts back up.

It never used to be like this, as if the bottles build up in the reject bit they back up and stop the line...
 
Imtrying to understand whether it is a drive programming issue or a software one, but as I dont fully understand it im stuck..
 
Last edited:
In a simplified explanation I would usually just write a value of W#16#47C into the control word and a frequency value in Hz multiplied by 164 into the Main Setpoint to get a VLT to run over Profibus. When I want the drive to stop I would write a value of W#16#43C into the control word and a value of 0 into the main setpoint. That is all you need to do for basic stop/start control with a fixed preset speed.
 
In a simplified explanation I would usually just write a value of W#16#47C into the control word and a frequency value in Hz multiplied by 164 into the Main Setpoint to get a VLT to run over Profibus. When I want the drive to stop I would write a value of W#16#43C into the control word and a value of 0 into the main setpoint. That is all you need to do for basic stop/start control with a fixed preset speed.

Hi

I can see some similarity of what you do to what is in my FC401. Just a questions..

1) why you multipying the Hz frefrency by 164??
2) I can understand how it should work, but in my example Im sure when I monitor M771 motor control block the RLO is true for the FC401 but still doesnt run.. I cant see where this other control is coming from?? any ideas??

Thank you for your time BTW
 
Am I right in thinking this too inputs are the only ones that write the control word to the drive?? One other thing why is it writing to a Peripheral address??

EBI5.jpg
 
Network1
Code:
      OPN   #DB_TB                      //Open DB233
      L     DBW    0                    //Load DB233.DBW0 star taddress  of VFD PQ AND PI area
      SLW   3
      LAR1                              //<- load pointer into AR1 register  (address stored in  DB233.DBW0)
Network2
Code:
          L     DBW   58                    //Set point load from DB233.DBW58
      DTR                               //set point scaling
      L     1.638400e+001               //60(50) Hz is 4000 hex or 16384 dec
      *R                                //looks like your setpoint is stored in 0-1000 scale
      RND   
      L     0
      >=I   
      JC    M001
      JU    M002
M001: TAK   
      L     W#16#4000
      <=I   
      JC    M003
      JU    M002                        //if set point in DB233.DBW58 is between 0 and 4000 hex store it in DB233.DBW30,
M003: TAK                               // if setpoint is greater than 4000 hex store 4000 hex in DB233.DBW30
M002: T     DBW   30                    // if  less than 0 store 0 in DB233.DBW30
Network3
Code:
      AN    #REG_FREI                   //If REG_FREI true load control word from db233.dbw12
      JC    M004
      L     DBW   12
      T     DBW   28                    //store it to DB233.DBW28
      A     #DREHRICHT                  //RICHT = RIGHT ???
      S     DBX   28.7                  //this looks like direction control if  DREHRICHT = true rotate right
      JU    M005
M004: NOP   0
      A     #QUITTIEREN                 //if #QUITTIEREN false
      JCN   M007                        //jump to M007
      L     DBW   14
      L     2#10000000
      OW    
      T     DBW   14
      T     DBW   28
      JU    M005
M007: L     W#16#43F                    //STOP VFD
      T     DBW   14
      L     DBW   14
      T     DBW   28
M005: NOP   0
Network4
Code:
      A     #SW_FREI                    //If SW_FREI and REG_FREI true
      A     #REG_FREI                   //load set point and control word from DB233.DBD28 
      JC    M006                        //if one of or both SW_FREI or REG_FREI  false
      L     0                           //set point is set to 0
      T     DBW   30
M006: L     DBD   28                    //Load control word + set pint from DB233.DBD28 = DBW28 control word DBW30 setpoint
      T     PQD [AR1,P#8.0]
//*************************************************************
//READ
//*************************************************************
      L     PID [AR1,P#8.0]             //read current speed/status word
      L     DW#16#FFFF7FFF
      AD    
      T     DBD   48
      L     DBW   48
      L     2#1011
      AW    
      L     2#11
      ==I   
      =     #MOSU
Network5
Code:
    L     DBW   50                    //scale current speed from 0-4000hex(0-16384dec) to 0-1000
      DTR   
      L     1.638400e+001
      /R    
      RND   
      T     DBW   60
 
Network4
Code:
      A     #SW_FREI                    //If SW_FREI and REG_FREI true
      A     #REG_FREI                   //load set point and control word from DB233.DBD28 
      JC    M006                        //if one of or both SW_FREI or REG_FREI  false
      L     0                           //set point is set to 0
      T     DBW   30
M006: L     DBD   28                    //Load control word + set pint from DB233.DBD28 = DBW28 control word DBW30 setpoint
      T     PQD [AR1,P#8.0]
//*************************************************************
//READ
//*************************************************************
      L     PID [AR1,P#8.0]             //read current speed/status word
      L     DW#16#FFFF7FFF
      AD    
      T     DBD   48
      L     DBW   48
      L     2#1011
      AW    
      L     2#11
      ==I   
      =     #MOSU

Could someone explain why it is refering to peripheral addresses?
 
I'm not able to open the project right now, but, generally, using the Peripheral address gives two main advantages. The first is that it is immediately written/read to/from the device, instead of waiting for OB1 to finish. In some high speed drive applications the latency can causes issues, although a simple conveyor is not usually in that category.

The second reason is that you aren't limited to the process image size. The process image is mostly needed for digital values, because that allows the programmer to refer directly to the individual bits. For analog values and drives, where you typically send whole bytes or words at a time, and may not be updated every cycle, it is not necessary to keep it inside the process image, which is updated every cycle no matter what.

The other possibility is that, because the block is indirectly addressed, the original programmer didn't know whether the IO would be inside the process image or not. If that is the case, using PIW/PQW would be a good hedge, because it works either way.
 

Similar Topics

HI everyone, i am new to Siemens plc programming and i am in need of some help. yesterday we had an S7-1200 CPU 1214C fail to turn on an output to...
Replies
7
Views
164
Hello, good morning, I have been having two problems with the Tia Portal software. The first is that I have installed it on my computer and...
Replies
5
Views
185
The past week we received a new piece of equipment from Germany which utilizes siemens controls. Typically in our company we use A.B. controls for...
Replies
12
Views
343
i have two plc 1. s7-1212dc/dc/dc ip; 192.168.0.1 2. s7-1500 1513-1pn ip; 192.168.3.2 i need to get data from plc1 to plc2. any idea how to do...
Replies
5
Views
163
Good morning fellow sea captains and wizards, I am being asked to do the above and obtain 4 values from each slave, I know about the MRX and MWX...
Replies
32
Views
931
Back
Top Bottom