Post by fleaplc on CPU + EtherCAT redundancy
CODESYS Forge
talk
(Post)
Hi all, for a new project I'm looking for a redundant controller with EtherCAT fieldbus I/O. Actually I'm using Beckhoff and it works great! but there's not a solid redundancy yet... Does someone get experience for industrial application (not raspberry) for a redundant Codesys system? If yes please share some info (CPU / OS type, bus, number of managed I/O,... and especially feeling feedback (stability, bugs, performance)... Every suggestion is kindly appreciated!! Fabrizio
Last updated: 2026-01-27
Post by zeljko2212 on Seeking a Code-Based Solution for EtherCAT Slave Dropout or Master Errors in Production (Beyond Software Hot Reset)
CODESYS Forge
talk
(Post)
PROGRAM RES_ECAT VAR xMP1: INT; xRESTART: BOOL; xFinish: BOOL; xStop: BOOL; pSlave: POINTER TO ETCSlave; TP1 : TP; STS11: WORD; pSlave6: POINTER TO IoDrvEthercatDriverLib.ETCSlave; MP1: INT; TON1 : TON; xSTAT: BOOL; TP_1 :standard.TP; END_VAR TON1(IN:= NOT TON1.Q, PT:= T#300mS ); TP_1(IN:= ton1.Q, PT:= t#2s ); EtherCAT_Master.xRestart := xRESTART; EtherCAT_Master(); EtherCAT_Master(); xFinish := EtherCAT_Master.xConfigFinished; EtherCAT_Master.xStopBus := xSTOP; EtherCAT_Master(); pSlave := EtherCAT_Master.FirstSlave; WHILE pSlave <> 0 DO pSlave^(); IF pSlave^.wState = ETC_SLAVE_STATE.ETC_SLAVE_OPERATIONAL THEN xRESTART := FALSE; ELSE xRESTART := TP_1.Q; END_IF pSlave := pSlave^.NextInstance; END_WHILE
Last updated: 2026-02-14
Post by tommyk-mar on Smooth path is not working with SMC_NCInterpreter
CODESYS Forge
talk
(Post)
Hello, Im using SMC_NCInterpreter and SMC_NCReadFile2 to read gcode program for CNC machine and what I have observed is that G51 and G52 is not smoothing the path. Machine stops in every point, what could I do to make machine pass through the points without stopping or what could allow me to use smooth path corretly if I use NCInterpreter. Im using it because I want to add variables to my gcode and its not possible directly from the CNC editor thats why I do use external file. Any ideas?
Last updated: 2026-03-26
Post by confre on Combo box drop-down invisible
CODESYS Forge
talk
(Post)
Hi, I created a combo box and I need to know when the drop‑down menu is open, in order to avoid hiding the combo box while the drop‑down is visible. Alternatively, if it’s not possible to detect whether the drop‑down is open, I would like to know how to close or hide the drop‑down programmatically when the combo box is made invisible. I'm using Codesys 3.5 SP19 on IFM CR1074 without touch screen (with standard keyboard handling) Thanks.
Last updated: 2026-04-09
Post by reinier-geers on draw 1000 nails the easy way
CODESYS Forge
talk
(Post)
Because codesys dont has a draw command like Circle in Qbasic ( 20 years ago ) i want to draw 1000 nails, and then move them in the screen when they needed. I dont know if codesys can handle this. But is ther an easy way to draw 1000 nails with every single one has a pointer for movement, color and invisable. Of is there a linux command to draw a circle so i can do it with a process command
Last updated: 2026-05-06
Post by eschwellinger on cannot connect ot linux runtime: device does not answer the scanrequest
CODESYS Forge
talk
(Post)
for me looks like you do not use latest CODESYS IDE version, there is a known bug if you use a newer runtime your are forced to use a more complex password as user for the login. The old IDE version does not show this problem on login. so either update CODESYS or use a pw which meet the complexity requirements.
Last updated: 2026-06-11
Post by rcaponi on Codesys Control RTE V3. Remote Control
CODESYS Forge
talk
(Post)
Hello, I would like to have, if possible, some clarification on this function. That is, I would like to understand if it is useful for managing, fom my development PC, the RTE runtime executed on a remote control. This is what the help says: Remote PLC: Opens the Remote Configuration dialog. By enabling or disabling the Control remote PC, not local option, you determine whether a PLC is used that is on a remote or local PC. Accordingly, the menu commands Start PLC, Stop PLC, and PLC Configuration refer to the local PC or a PC reached on the network. For the remote PC, specify the Target PC address, Port number, and a Timeout value (in ms) for the connection (Remote Timeout [ms]). But does this mean that I also need to install the RTE runtime on my development PC? Is it possible to have some more information? Best regards Roberto Caponi
Last updated: 2023-09-22
Post by moksan on Unconnected_Send Explicit message with Route Path
CODESYS Forge
talk
(Post)
I have been trying out Unconnected_Send Explicit Message with route path.(The Unconnected_Send service shall use the Connection Manager object in each router to forward the message and to remember the return path. Vol 1.3 / 3-5.6.7) However, I could not see the correct path on Wireshark. I want to see the Unconnected_Send Message Service Code as 0x52 and also the last of the message should have the route path. I want to ask some questions about this topic. The IIoDrvEIPAcylicServices Interface has the IoDrvSendUnconnectedMessage Method. And there is a struct (EIP_SendUnconnectedMessage) for this service. But there is no information about how to implement to project, and if it is successful, does it send a message with 0x52 Unconnected_Send Service Code or not? If that is not a solution, how can I set the Unconnected_Send Explicit Message struct on Codesys? Also how can I send explicit message with route path?
Last updated: 2023-10-17
Post by andrej on Write to File on soft PLC winV3x64
CODESYS Forge
talk
(Post)
Hello all, I would like to store some data in text file. I use the soft PLC Win V3x64, on Windows 10. I use the SysFile Library 3.5.17.0. If I store the file directly in the in the directory of the PLC i.e. in '/CODESYSControlWinV3x64/E1FA7ABE/PlcLogic/LogAU.txt' the file is correctly filled with the data. However, If I use an absolute path to a different directory no data is stored in the respective file. Despite the fact that the respective file exists and the Filehandler is correctly opened (see in picture _fdSysFHandle <> -1). // sFileName : STRING := 'LogAU.txt'; // STORES FILE IN ../CODESYSControlWinV3x64/../PlcLogic/LogAU.txt' sFileName : STRING := 'C/Temp/LogAU.txt'// DOES NOT WORK --------------------- // FILE DESCRIPTOR _fdSysFHandle := SysFile.SysFileOpen( szFile:= sFileName,am:= SysFile.AM_APPEND,pResult := ADR(_Result)); Does some have an idea where the problem is, resp. how I can get store a file in an arbitrary directory. Thanks a lot and kind regards Andreas
Last updated: 2023-10-24
Post by tariq on Using Hilscher CIFX Cards as EtherCAT Masters in CODESYS
CODESYS Forge
talk
(Post)
Dear Codesys Support Team, I hope this message finds you well. I am currently working on a project that involves using a Hilscher CIFX card to act as an EtherCAT master within the CODESYS environment. Despite following the available documentation and setup guides, I have encountered some challenges and require assistance to ensure proper configuration and operation. Questions: 1- Could you please confirm if the Hilscher CIFX card is supported as an EtherCAT master in CODESYS? If so, are there specific drivers or configuration files that need to be installed? 2- Are there detailed setup guides or example projects available that demonstrate the integration of Hilscher CIFX cards with CODESYS for EtherCAT communication? 3- Is there any additional software or plugins required for ensuring seamless communication between the CIFX card and the EtherCAT slaves within CODESYS? Your support and guidance on these matters would be greatly appreciated, as it is crucial for the success of our project. Thank you for your time and assistance. I look forward to your prompt response. Best regards, TB
Last updated: 2024-07-02
Post by xgongx on What is the insights of IoDrvEtherCAT.DCInSyncWindow?
CODESYS Forge
talk
(Post)
It is well known that you need to increase the value of IoDrvEtherCAT.DCInSyncWindow to solve the "Fieldbus lost synchronicity" issue. In the official document, IoDrvEtherCAT.DCInSyncWindow is explained as the toleration of a certain jitter. But the official document doesn't explain what kind of the jitter is. Is it the jitter of DC sync deviation, master timer or something else? It is very important to know the insights of IoDrvEtherCAT.DCInSyncWindow. For example, if it is the toleration of DC sync deviation, and the official recommending value is 200us for CODESYS SoftMotion. It means maximum of DC sync deviation is 200us. It is unacceptable for some high precision motion control tasks, for example high speed gear task, etc. Increasing the value of IoDrvEtherCAT.DCInSyncWindow will increase the deviation of motor rotation sync if it is the toleration of DC sync deviation. So, would anyone tell me what the insights of IoDrvEtherCAT.DCInSyncWindow is? Thanks.
Last updated: 2024-07-09
Post by to-ke on Errors with VisuUserManagement library
CODESYS Forge
talk
(Post)
Hallo zusammen, hi all, ich habe den gleichen Fehler. Auf einem Raspberry Pi geht der Fehler weg, wenn ich alles bereinige und dann vollständig übersetze. Wenn das Projekt im Codesys Development System wieder neu geladen wird ist der Fehler aber wieder da. Mit eine Win V3 x64 PLC kann ich den Fehler nur unterbinden wenn ich auf der HMI das VUM_Login einbinde. Dieses brauche ich aber nicht, da ich die HMI für das User Management selbst gestaltet habe. Das funktioniert auch. I have the same error. On a Raspberry Pi the error goes away if I clean everything and then compile completely. When the project is reloaded in the Codesys Development System, the error returns. With a Win V3 x64 PLC I can only prevent the error if I integrate the VUM_Login on the HMI. But I don't need this because I designed the HMI for user management myself. That works too. Anyone have an idea to fix this problem. Many thanks
Last updated: 2024-07-09
Post by bruceae on Ethernet/IP Scan
CODESYS Forge
talk
(Post)
Hello, I have a robot configured as a Generic Ethernet Module under Ethernet/IP Scanner. I can not see the change of state of the outputs coming from the robot on the codesys side in real-time. (The robot has it's own internal program that would changes the values of remote outputs 0-3 off and on). Also when I send data down to the inputs of the robot it doesn't transfer over as expected. As an example I'll send to the robot's input bit 0 a value of 1. It doesn't see that value change. However, when I write that input bit 0 back to a value of 0, the robot changes state and shows a value of 1. And if I change the state of a different bit, the other bits update properly, except for the bit that I changed. Any advice would be greatly appreciated, and if anything else is needed let me know.
Last updated: 2024-09-10
Post by julianramirez on ModbusFB write update
CODESYS Forge
talk
(Post)
Hello everyone, I am testing the ModbusFB library tcp server and so far I am able to create holding registers successfully, however, I am trying to identify after each write which registers got updated (i.e. function code, write value). I can even see the var udiNumWriteRequests, which increases with every write. I noticed that there is logging with the LogStatusInfo method. After I call it I am able to read in the console stuff that I want. Nevertheless, this is only available at the logs and is not easy to decode because it consists on several messages, I would like to know if there is a way for me to retrieve this information from the function itself with pointers or if there is any way to copy the logs messages (assuming that I can filter them with the LoggingOptions to only show what I need) inside the runtime code and not in the console. Thanks for your help :)
Last updated: 2024-09-16
Post by struccc on Bibliothek: floatingpointutils
CODESYS Forge
talk
(Post)
The issue s the byte order typically in this case. Can be especially problematic with floating point numbers - even more tricky if transferred with a word based protocol. It is a peasant way to try out the alternatives, dword order can be a-b-c-d, b-a-d-c, c-d-a-b, d-c-b-a where a is the most significant, d is the least significant byte. So all you need is to swap the bytes in your dword, until you get the expected result. If you don't want to mess writing code for this, I'd recommend CAA_Memory library for that: MEM.ReverseBYTEsInDWORD and MEM.ReverseWORDsInDWORD functions would definitively do the trick. Otherwise, can do like this: VAR dwIn : DWORD := 16#11223344; dwOut : DWORD; rOut : REAL; pIN : POINTER TO BYTE; pOUT : POINTER TO BYTE; END_VAR pIN := ADR(dwIn); //pOUt := ADR(dwOut); pOUt := ADR(rOut); pOut[0] := pIN[3]; pOut[1] := pIN[2]; pOut[2] := pIN[1]; pOut[3] := pIN[0]; Ugly, but does the job...
Last updated: 2024-11-19
Post by etienneneu on loading delay with the option "check client animations and overlay of native elements"
CODESYS Forge
talk
(Post)
Hey NicolaG_89, thanks for the tip. But I have seen in the developer tools of the Webclient that a multiple fetching of the image and script data occurs when changing frames (HTTP code 304 NOT Modified), although these are already in the clients cache, which leads to unnecessary loading of resources from the web server. This behavior can also be found if the option “Support client animations and overlay of native elements” is deactivated, but this does not lead to such long delays. I had already tested loading all Visu elements so that everything was fetched once before they could be used. But that didn't help either. To prevent this behavior (permanent fetching), I have used a different way of switching the Visu elements in the VisuDemo Project, which also uses HTML5 control elements. I implemented this with the visibility of entire Visu elements. As a result, it only has to be fetched once and does not have to be fetched again when reloading. But I am still unsure about this implementation if the scope of the visualization becomes larger, as the Codesys visualization documentation advises against using many invisible elements. Best regards Etienne
Last updated: 2024-11-19
Post by dogulas on OPC UA C# client connecting to OPC UA CODESYS server
CODESYS Forge
talk
(Post)
Ok, I have a simple test environment. From C#, using OPC UA, I can read DINTs, write DINTs, read Structs, but when I try to write a struct I get BadNotWritable. I am using Communication Manager, OPC UA Server, and IEC Symbol Publishing. I have a struct defined with one single DINT in it. The instance of the struct is in GVL. The struct is marked read/write in IEC Symbol Publishing. Any ideas? Pointers are welcome. public static async Task WriteStructA(byte[] structAData) { if (_session == null) throw new Exception("session is null"); // create a RequestHeader RequestHeader requestHeader = new RequestHeader { Timestamp = DateTime.UtcNow, TimeoutHint = 30000 // timeout in milliseconds }; // create an ExtensionObject to wrap the value to be written ExtensionObject extensionObject = new ExtensionObject( new ExpandedNodeId("GVL_StructA", 5), structAData ); // create a WriteValue object to hold the value to be written WriteValue writeValue = new WriteValue { NodeId = _structANodeId, AttributeId = Attributes.Value, Value = new DataValue(extensionObject) }; // put the WriteValue object into a WriteValueCollection object WriteValueCollection writeValueCollection = new WriteValueCollection() { writeValue }; // perform the write operation asynchronously WriteResponse writeResponse = await _session.WriteAsync( requestHeader, writeValueCollection, CancellationToken.None ); // check the result of the write operation if (writeResponse.Results[0] != StatusCodes.Good) throw new Exception("Write failed: " + writeResponse.Results[0]); }
Last updated: 2024-12-17
Post by imdatatas on Auto Declare window disappears by itself in the Ladder editor
CODESYS Forge
talk
(Post)
Hello Everyone, The "Auto Declare" window disappears by itself in the Ladder editor. For example, a new function block is wanted to be added to the Ladder editor. (For example; MC_Jog block and instance name will be fbMcJog). To do this, "Empty box with EN/ENO" is added to the ladder line from the Toolbox on the right and when you type MC_Jog in the empty box and press enter, normally the "Auto Declare" window appears and you are expected to be asked to write the instance name here. However, this "Auto Declare" window closes itself immediately, it does not wait for the user to enter a value or close the window. I often encounter this situation in many IDE versions. Does this seem like a bug? If anyone has encountered a similar problem while creating a new program name, function or function block instance name regarding the "Auto Declare" window and knows a solution, I would be glad if you could share it. Best wishes Imdat
Last updated: 2025-03-06
Post by pikebuster on Help for a newbie
CODESYS Forge
talk
(Post)
Can somebody help me with this? I have problem with the button! This task must be solved using Sequential Function Chart (SFC), IEC 61131-3. TASK Create an SFC program to control a traffic light at an intersection. Description: You will program a traffic light that has three phases: Green, Yellow, and Red. The traffic light must follow these rules: Green light is on for 10 seconds. Yellow light is on for 3 seconds. Red light is on for 10 seconds. If the pedestrian button is pressed, the system must keep the red light on for 20 seconds during the next cycle. After the pedestrian has “crossed,” the system should return to its normal cycle. Basic Steps: Initialization: Start by setting the traffic light to Red. Green Phase: After 10 seconds, switch to Green. Yellow Phase: After 10 seconds in the Green phase, switch to Yellow. Red Phase: After 3 seconds in the Yellow phase, switch back to Red. Loop: Repeat the cycle. Use, for example, lamp symbols in the visualization module to simulate the traffic light. You may also add a simple pedestrian light if desired.
Last updated: 2025-03-11
Post by timvh on Active alarm access in ST
CODESYS Forge
talk
(Post)
See https://forge.codesys.com/forge/talk/Engineering/thread/280fdf4806/#9fe5 And https://forge.codesys.com/prj/codesys-example/alarm-manager/home/Home/ The application should contain: - an FB which implements AlarmManager.IAlarmFilterCriteria (see example - FB_AlarmFilterCriteria) - an FB which implements AlarmManager.IAlarmManagerClient (see example - FB_AlarmManagerClient) Then register the client and get the information through this client. VAR xInit : BOOL := TRUE; udiResult : UDINT; fbAlarmFilterCriteriaAll : FB_AlarmFilterCriteria; fbAlarmManagerClientAll : FB_AlarmManagerClient; itfAlarmManagerClientAll : IAlarmManagerClient := fbAlarmManagerClientAll; xAlarm1 : BOOL; xAlarm2 : BOOL; xWarning : BOOL; iNrOfAlarmsInAlarmList : INT; iNrOfActiveAlarmsInAlarmList : INT; paitfAlarm: POINTER TO ARRAY [0..0] OF AlarmManager.IAlarm; iAlarmIndex : INT; eAlarmState: AlarmManager.AlarmState; END_VAR IF xInit THEN xInit := FALSE; fbAlarmManagerClientAll.m_itfAlarmFilterCriteria := fbAlarmFilterCriteriaAll; // register alarm client to get updated about alarm status / changes udiResult := AlarmManager.g_AlarmHandler.RegisterClient(itfAlarmManagerClientAll, 0, 0); END_IF // Polling the number of alarms udiResult := AlarmManager.g_AlarmHandler.GetActiveAlarms(itfAlarmManagerClientAll, parritfActiveAlarms => paitfAlarm, iCountActiveAlarms => iNrOfAlarmsInAlarmList); iAlarmIndex := 0; iNrOfActiveAlarmsInAlarmList := 0; WHILE iAlarmIndex < iNrOfAlarmsInAlarmList DO eAlarmState := paitfAlarm^[iAlarmIndex].GetState(); IF eAlarmState = AlarmManager.AlarmState.Active OR eAlarmState = AlarmManager.AlarmState.ActiveAcknowledged THEN iNrOfActiveAlarmsInAlarmList := iNrOfActiveAlarmsInAlarmList + 1; END_IF iAlarmIndex := iAlarmIndex + 1; END_WHILE
Last updated: 2025-04-23
Post by rene-h on ClientFilter used the same Client ID 2 times - Bug?
CODESYS Forge
talk
(Post)
Hello, like the topic name says, i have a problem on one Visu which i cannot reproduce on another Visu. We filter buttons with input locks and visible items with [CURRENTCLIENTID] on different WebVisu's with different ID's, and one time the itfClient used the same Client ID for 2 Clients, so the Visualization on the first ID was wrong, because that one which connected after did not have the same permissions like the first, so the first one was blocked. We read the Clients with the VisuClientIteration project: //count active clients gCli.iNumberOfClients:=gCli.iNumberOfClients+1; // if client is active write data to global struct IF gCli.iNumberOfClients > 0 THEN gCli.astClientInfo[gCli.iNumberOfClients-1].iClientID:=itfClient.ClientId ; gCli.astClientInfo[gCli.iNumberOfClients-1].stCurrentVisu:=itfClient.CurrentVisuName; gCli.astClientInfo[gCli.iNumberOfClients-1].wsUserName:=itfClient.UserName; gCli.astClientInfo[gCli.iNumberOfClients-1].sIpAddress:=itfClient.GetIPv4Address(); gCli.astClientInfo[gCli.iNumberOfClients-1].ClientType:=itfClient.ClientType; END_IF Runtime from the device: 3.5.19.20 Codesys we use: 3.5.20.10 I added a screenshot where the same ID exists 2 times. Thanks for your answers.
Last updated: 2025-05-14
Post by shaunvdm on Canbus Slave SDO Read from Object
CODESYS Forge
talk
(Post)
Busy testing a solution to use Canbus Slave to replace a physical device and convert to Ethercat device but keep the Canbus Master in place. Master needs to Read SDO object 5FA2. In the Master PLC if i send the SDO with 8 bytes in message IE: 60B 40 A2 5F 00 00 00 00 00 i get my expected 58B 43 A2 5F 00 00 68 36 02 containing data back. Problem is if we issue a 4 byte command can send 60B 40 A2 5F. Surely the canbus slave should respond with a 58B 43 A2 5F 00 00 68 36 02 but it comes back as 80 A2 5F 00 00 00 00 08 - meaning this OBJECT does not exist. Is there a setting in the canbus slave driver for Canbus to allow the 4 byte command to read the SDO OBJECTS ?
Last updated: 2025-05-27
Post by laurits on Max lines of code, codesys CNC ?
CODESYS Forge
talk
(Post)
Hi, okay here's the project, it's a modified version of "CNC Example 10: Programming Dynamic CNC Paths", no need for G Code text file (i have also tried with G code text file, same problem) in "PROGRAM PLC_PRG" you can set bStart to true, and the program should start running, go to "PROGRAM CNC" and you can see axis moving. lrXpos := IoConfig_Globals.XAixs.fSetPosition; lrYpos := IoConfig_Globals.YAxis.fSetPosition; Now you can can change the number of movements in the the "PROGRAM PLC_PRG" From this number of movements in "program PLC_PRG" BUF : ARRAY[0..32010] OF SMC_GEOINFO; xp : ARRAY[1..32000] OF REAL; yp : ARRAY[1..32000] OF REAL; to this number to this number of movements BUF : ARRAY[0..132010] OF SMC_GEOINFO; xp : ARRAY[1..132000] OF REAL; yp : ARRAY[1..132000] OF REAL; Now if you start the program again you should see an error in the "sMC_Interpolator: SM3_CNC.SMC_Interpolator;" function block Let me know if you can not get it running.
Last updated: 2025-06-03
Post by astutoski on No Motion with SM3_RaspiStepper (GPIO 23/24 Show No Pulses)
CODESYS Forge
talk
(Post)
Hi everyone, I’m completely new to CODESYS and have been teaching myself. And i Want to control an Axis using SM3RaspiStepper. Following the example on the RaspiStepper home page, I set up an axis through a POU and tied the SMC_StartupDrive (Visu) template to my axis instance (sud). Unfortunately, the motor never moves and I don’t see any pulses on the PULSE pin (GPIO 23). Hardware -Raspberry Pi 4 B -Nema 17 stepper motor -A4988 stepper driver (EN pin permanently tied to GND) Software / Runtime -CODESYS 3.5 SP21 Patch 1 – Raspberry Pi runtime (demo) -SoftMotion in demo mode -Package: SM3_RaspiStepper 0.0.0.6 Axis parameters: Pulse pin GPIO 23 Direction pin GPIO 24 Enable pin 0 (unused) Disable pin 0 (unused) Whether I start the axis from the visualization template or through Online Config Mode, the motor never spins. In Online Config Mode I press Power → the state changes from Standstill to Discrete_Motion, but the motor shaft is still locked and no step pulses appear on GPIO 23 (checked with a scope). I can provide screenshots of the Visualization, PLC logs, or wiring pictures if that helps. Any ideas on what I might be missing? Happy to provide screenshots, project files, or scope captures if that helps. Thanks in advance!
Last updated: 2025-06-25
Post by timvh on Codesys virtual control redundancy
CODESYS Forge
talk
(Post)
I think it depends on what you consider as redundant. Is it allowed to plug the network cable in another device (server), move the USB key with license to the other device (server) and then start it up? Or should it automatically switch over within msec and take over the communication with the I/O flawlessly without noticing the switchover? We helped several customers setting up the CODESYS Redundancy functionality and the nice thing is that when you have it up and running, you can easily switchover from active to passive and when you download a new applicaiton, CODESYS handles the update of boot project on the passive controller automatically. Sure this will require an additional license and the license for redundancy, but if your installation is that critical it should be worth it. Please contact us (Extend Smart Coding) if you need any further information. We could help you setup the configuration and possibly provide the licenses for it (I noticed you are situated in the Netherlands).
Last updated: 2025-09-04
To search for an exact phrase, put it in quotes. Example: "getting started docs"
To exclude a word or phrase, put a dash in front of it. Example: docs -help
To search on specific fields, use these field names instead of a general text search. You can group with AND or OR.