1.2.4. Style guide¶
1.2.4.1. Project organization¶
Every project should have:
- README.md
- CHANGELOG.md
- Flowchart with yed, and converted in image(png or jpg)
The backup is projectName-Type-year-month-day-version-ProgrammerName.zip For example :
- Excersice01-PLC-2019-05-09-v0.0.1-Abed.zip
- A-JC-18-003-PLC-2019-05-09-v0.0.1-Abed.zip
- A-JC-18-003-ROBOT-2019-05-09-v0.0.1-Abed.zip
If in the same line have more than one robot, the robot id number should be the same as electrical drawings:
- A-JC-18-003-ROBOT01-2019-05-09-v0.0.1-Abed.zip
- A-JC-18-003-ROBOT02-2019-05-09-v0.0.1-Abed.zip
- A-JC-18-003-ROBOT03-2019-05-09-v0.0.1-Abed.zip
- A-JC-18-003-ROBOT04-2019-05-09-v0.0.1-Abed.zip
1.2.4.1.1. README¶
General informations about the project.
References
Special equipments
Short description about the workflow
1.2.4.1.2. CHANGELOG¶
The version is : major.minor.patch
The date is year-mont-day
## [X.Y.Z] - aaaa-mm-dd Name(who) ### Added for new features. ### Changed for changes in existing functionality. ### Deprecated for soon-to-be removed features. ### Removed for now removed features. ### Fixed for any bug fixes. ### Security in case of vulnerabilities.
1.2.4.1.3. Flowchart or UML¶
Software used: https://www.yworks.com/products/yed/download
Every state machine should be illustrated in a chart (flowchart, uml,…).
1.2.4.2. Abbreviations¶
- Push button : pb, btn
- Lamp : lmp
- Limit switch : lsw
- Command : cmd
- Cylinder: cyl
- Table : tab
- Rotate : rot
- Robot : rob
- Machine : mach
- Panel view : hmi
- Actual : act
- Previous : prev
- Emergency : emrg, emr
1.2.4.2.1. Prefixes¶
- Input : i
- Output : q or o
- Analog input : ai
- Analog output : ao or aq
- Ethernet : eth
- Function block : FB
- Function : FC
- User data type: udt
- Structure: st
1.2.4.3. Names¶
S7 plc languages are not case sensitive, Button and button are the same variable.
Use camelCase for primitive data types: bool, word, dword, int, dint, real.
Use PascalCase for complex data types, and prefix them with the type:
- User defined data (udt, structures): udtConveyor, stConveyor
- AOI: AOI_Conveyor, AOI_Cylinder
- Function Block : FB_Conveyor, FB_Conveyor
The name of a variable should begin with the machine name, station name, component then function. For example: conveyorMotorRun, conveyorMotorStop, conveyorLswPartPresent.
CONSTANT variables in capital letters
Data blocks:
- Global data block: dbConveyor, dbRobot, dbCylinder
- Instance data block: idbConveyor, idbCylinder.
1.2.4.4. Rules¶
Rungs or segments must have a title
Rungs or segments should be commented in English, no Chinese nor other languages.
Every variable should have:
- Clear name
- Clear description
- If the variable is a signal, it should have the signal number as electrical drawing.
Every station have its own Function block, or own program in case of ControlLogix PLC.
Use state machine:
- Make state chart using OpenOffice draw or Yed software..
- Use unique numbers for states, use enumerations not numbers directly.
Cylinder:
Cylinder states are: Opened, Closed. Cylinder commands are: Open, close. Don’t use Forward, backward, up, down, left, right,…
1.2.4.5. Software organization¶
Functions (FB, FC) are the main building block of any program. The start point of S7 PLC is OB1, in OB1 we should find only function calls. In OB1 There is no business logic.
Every station should have is own main FB and global DB and instance DB.
If the station have more then one component, every component should have its own FB. The components’s FB should be instantiated in the STAT section of the parent FB. All functions and DBs of a station should be grouped in a folder.
FB that can be reused in different projects, should be placed in the _Library folder. A library with FB should be used.
Note
Follow example after training