Post by ofey on Modbus TCP communication
CODESYS Forge
talk
(Post)
Hi! I tried setting up the PLC I'm working with (Beijer GN-9373) to connect to a modbus master running on a laptop. I have an ethernet connection (via USB-C to ethernet) between the laptop and the controller. I have tried following tutorial on how to set this up. I have added an ethernet device with the IP-address of the PLC. Further I added a ModbusTCP_Slave_Device with default settings. I get the error "Failed to open TCP Port: 1" when I try to go online with the PLC. Earlier I tested the exact same set up with the soft PLC from codesys. I can then read/write values correctly with the Modbus master i have running on the laptop. Hope anybody can help me with this, thanks in advance!
Last updated: 2023-10-06
Post by joanm on Programmatically change the IP addresses of the Modbus TCP slave devices
CODESYS Forge
talk
(Post)
Hello all, I am working in a project in which there are multiple Modbus TCP slaves. I need to be able to change the IP addresses of those devices from the HMI and I was planning to use the process depicted here: https://faq.codesys.com/display/CDSFAQ/Modbus+TCP+Slave%3A+Dynamic+Setting+of+the+IP+Address I can see the port number is what is used to specify which slave device we want to modify the IP address of. This said, can I freely set arbitrary port numbers to each device? I mean, can I set the first device to be at port 502, the second one at port 503... Any drawback or restriction? Is there any other way to reference to the device without having to change the port numbers? Thank you all in advance.
Last updated: 2024-01-04
Post by timl on Application has invalid license metrics
CODESYS Forge
talk
(Post)
Hallo, ich habe eine Control for Linux SL auf der ich einen TCP Modbus Master anlege, mit dem ich einen Slave auslesen möchte. Das Anlegen funktioniert soweit alles, sobald ich beim ModbusTCPSlaveE/A-Abbild in den Channel eine Variable einfüge, damit ich den Channel auslesen kann, kommt es beim übertragen auf die SPS zu einem Ausnahmefehler. Im Anhang noch eine Bilder der Fehlermeldung und der installierten Lizenzen. CODESYS Version ist V3.5 SP19 Patch 4 Meinem Verständnis nach ist die Modbus Lizenz mit in der Control Standard L inbegriffen und auch in der Lizensierten Softwaremetrik sehe ich keine überschreitung meiner Lizenzbegrenzungen. Daher verstehe ich nicht wieso ich diesen Fehler bekomme und eine auslesung via Modbus nicht möglich ist. Gruß Tim
Last updated: 2024-05-08
Post by jens on Modbus tcp - channel
CODESYS Forge
talk
(Post)
Help wanted This is the first time i'm doing a Modbus Tcp project. I have some VLT with a extension module MCA-122. i'm currently unable to write to the VLT slave, but i can read from status word parameter=1603 and address := 16029 where the address is calculated from parameter is ((id x 10)-1). in the manual the functions that are supported are 3 hex, 6 hex, 10 hex, b hex and 11 hex. read holdin registers, write single register, write multiple registers, get comm. event counter, report slave id. i'm only using the Modbus Slave Channel is this wrong when trying to write to the vlt ?
Last updated: 2024-06-13
Post by jacobwago on v3.5 SP19 - Modbus TCP Devices - Channel Limit?
CODESYS Forge
talk
(Post)
Hello, I have experienced the same issue as described above but for the Modbus Serial configurator. Looking for a solution. In v3.5 SP19 Patch 7 the Modbus Serial Master Slave configurator has a "virtual" limit of 10 channels. In v3.5 SP18 Patch 5 this virtual limit does not exist. I can successfully copy back and forth from 18 to 19 with out any build error. However, this is not a good solution for our customers. What is even more confusing is that the IoDrvModbus library is the same version (4.3.0.0) for both SP18 and SP19. Please help in providing a fix to the virtual channel limit of 10 in SP19. Thanks,
Last updated: 2024-09-29
Post by testlogic on Sending Sequential Modbus TCP Packets
CODESYS Forge
talk
(Post)
I have a Modbus TCP slave device where I need to do sequential writes to the same register. The register I'm writing to is kind of like a command line, each packet is a command word encoded in Hexadecimal. I am having difficulty implementing this system in CoDeSys 3.5 SP19. I feel like the structure of the program should be something along the lines of (Pseudocode): ModbusTCPSend(Command Register, Command1) ModbusTCPSend(Command Register, Command2) ModbusTCPSend(Command Register, Command3) I have tried to implement this with a rising edge trigger wMot1OPCode := 16#E1; //Stop Motor & Kill Program xMot1SendOP := TRUE; //Send OP on rising edge xMot1SendOP := FALSE; //Reset wMot1OPCode := 16#9E; //Disable Motor xMot1SendOP :=TRUE; //Send OP on rising edge xMot1SendOP := FALSE; //Reset Where "wMot1OPCode" is the IO map for writing to the command register, and "xMot1SendOP" is the rising edge trigger for that modbus channel. However, this doesn't work. The device never responds to the modbus commands. It seems like the trigger variable is switched too quickly for modbus to send the packet. I know the modbus register is working, because I can set the channel to cyclic and the device will respond. However, I can't use this reliably because I need each command to be sent once, in order. Cyclic keeps re-sending the commands and seems like it could miss a command as well if one was sent in-between cycle time. I have also trying using the Application trigger as described by https://faq.codesys.com/pages/viewpage.action?pageId=24510480, but this is also not working for me. See attached picture for my FBD code. This seems like a simple function, I can't tell what I'm doing wrong here. Thanks for the help.
Last updated: 2024-03-06
Post by solidlogicguy on Little endian to Float from Modbus RTU
CODESYS Forge
talk
(Post)
Hello, I got a device from which I require to read values from I am using a WAGO PLC 750-8212 and I am communicating through Modbus Master FUNCTION BLOCK from library WagoAppPLCModbus in Codesys 3.5 to this device. I already receive data from the device that is a CVM to monitor voltage from a fuel cell. The technical support of the company that makes these devices says that the data is sent in little endian form. And I want to convert it to a float value. The tech support sent me the next instructions of how to do it but I am new using codesys, so any advice or help I will really appreciate so much. Message from tech support: The process is complicated, better to do it with already implemented library in the language/program you use. Basically the process should be next: To convert the two Modbus registers containing parts of a 32-bit float in little-endian byte order to a floating-point number using mathematical operations, you first need to combine the two 16-bit integers (assuming reg1 is the lower word and reg2 is the higher word) and then interpret the result according to the IEEE 754 standard. Given: - Register 192 (reg1) = 4096 - Register 193 (reg2) = 14884 Step 1: Combine the two registers. Since we are dealing with little-endian byte order, reg2 is the high word, and reg1 is the low word: combined = reg2 * 2^16 + reg1 combined = 14884 * 65536 + 4096 combined = 975175680 + 4096 combined = 975179776 Step 2: Convert the combined value to binary: combined_binary = '1110101101011100000000000000000' Step 3: Split the binary into IEEE 754 components: Sign bit (1 bit): 0 Exponent (8 bits): 11101011 Mantissa (23 bits): 01011100000000000000000 Step 4: Convert the binary exponent to decimal and subtract the bias (127 for 32-bit floats): exponent = int('11101011', 2) - 127 exponent = 235 - 127 exponent = 108 Step 5: Calculate the mantissa as a fraction: The mantissa in IEEE 754 format is the fractional part after the leading 1 (which is implicit). Therefore, we need to convert the binary mantissa to decimal and add the implicit leading 1: mantissa_fractional = 1 + int('01011100000000000000000', 2) / 2^23 mantissa_fractional = 1 + 18688 / 8388608 mantissa_fractional = 1 + 0.002227783203125 mantissa_fractional ≈ 1.002227783203125 Step 6: Combine the sign, exponent, and mantissa to get the float value: float_value = (-1)^0 * mantissa_fractional * 2^exponent float_value = 1 * 1.002227783203125 * 2^108 Because the exponent is quite large, the resulting float value is a very large number.
Last updated: 2023-12-15
Post by timvh on ernesto881124
CODESYS Forge
talk
(Post)
You will need a USB to RS485 converter to connect the PC to the Modbus RTU Slave Device. In Windows this converter will be recognized as Serial COM poort (e.g. COM2, or COM3, see the windows device manager to find this out). Select this port in your CODESYS application. On the PC you need to use the CODESYS Control Win (SoftPLC) to run your application. It will not work in simulation mode, because then the Modbus Communication will not be activated.
Last updated: 2023-09-14
Post by ofey on Device parameter - ‘ModbusTCP Configuration’
CODESYS Forge
talk
(Post)
Hi! Do anybody know how I can add and enable the parameter 'Default Modbus TCP slave' on a device? I am currently writing a program where the PLC shall be set up as a Modbus TCP client, but I dont know how to add parameters to devices in codesys. I'm pretty new to the codesys environment. The picture in the attachment is on a similar PLC project where I have not written the code. my goal is to add this parameter in another project.
Last updated: 2023-10-04
Post by ofey on Symbol configuration / GVL
CODESYS Forge
talk
(Post)
Hi! I have som variables that I communicate to a Modbus Master. These variables are declared in a "Global Variable List" where I have assigned them memory addresses. To organize this mapping I want to make a MODBUS list where I show all the variable names together with the memory address. Is there an easy way to export this list from CODESYS? Either through script or some export function maybe?
Last updated: 2023-10-11
Post by ofey on Symbol configuration / GVL
CODESYS Forge
talk
(Post)
Hi! I have som variables that I communicate to a Modbus Master. These variables are declared in a "Global Variable List" where I have assigned them memory addresses. To organize this mapping I want to make a MODBUS list where I show all the variable names together with the memory address. Is there an easy way to export this list from CODESYS? Either through script or some export function maybe?
Last updated: 2023-10-11
Post by ofey on EtherCAT fieldbus
CODESYS Forge
talk
(Post)
Okey, thank you! Do you think it is something in this library, that makes it possible to do the configuration in a PRG? https://content.helpme-codesys.com/en/libs/IODrvEtherCATDriver/Current/IoDrvEtherCAT.html#id1 I think the codesys modbus libraries support configuration and connection to modbus slaves without having to add the slave devices in the device tree. Just do it from function blocks inside the program. I was hoping for something similar with EtherCAT.
Last updated: 2024-04-10
Post by nano on Issues with Modbus Slave with Raspberry Pi
CODESYS Forge
talk
(Post)
in the codesyscontrol.cfg or codesyscontrol_user.cfg you have to declare whoch comport-ports from runtime are used. please tell us how the comport is called in linux an post the codesyscontrol.cfg files also write down here, which parameters are used in the python-script and what is parameteized in the modbus-master-comport of your codesys-application. mostly the errors occurs in ine of these areas
Last updated: 2024-07-11
Post by winki on Modbus TCP Client
CODESYS Forge
talk
(Post)
Hello, I am new on CODESYS env. I would like to do some Modbus TCP, but I am wondering If using codesys you must use the device "Modbus_TCP_Client" & "Modbus_TCP_Server". I would like to do it without device, only using ST. Is that possible ? I try the example : MODBUS_master_example, but it is not working. If it is possible to dot it without any Device I will show my code. Thx a lot
Last updated: 2024-10-25
Post by duvanmoreno24 on Modbus writing on value change
CODESYS Forge
talk
(Post)
Yes, I tried to do what you put in the first code. However, I have a problem with that and that is that the inputs must be declared with the type. I have many data types running in my code (real, int, uint, bool) and I can't put them in the same function, another thing is that I need to instantiate that function for everything I want to write to the slave. You put a for to 200 but it means that it has to be the same data type and inside the array, but I want to get them individually. I'm struggling to do it in a good and efficient way like wago's E-cockpit does. in the first screenshot you can see, you simply type in value, change the package of things you want to write in value change and it does everything by itself automatically, without comparing any old and new values and even less having the need to activate a bool. , it is perfect.
Last updated: 2024-04-03
Post by anonymous on Hi, I try to send and receive data using a UDP connection via SysSocket 3.5.17.0. While sending data works fine, I have problems with the receiving part. I am able to capture the received data of client side in wireshark But unable to capture it on the codesys
CODESYS Forge
talk
(Post)
Hi, I try to send and receive data using a UDP connection via SysSocket 3.5.17.0. While sending data works fine, I have problems with the receiving part.I am able to capture the data of client side in wireshark but i am unable to capture it in the codesys. Heres the below part of code of client side. PROGRAM POU_udpclient_program VAR istep : INT := 1;//step variable for state machine xStart: BOOL;// Flag to start the UDP protocol iecSocketId: syssocket_interfaces.RTS_IEC_HANDLE;//socket handle for receiving iecCreateResult: syssocket_interfaces.RTS_IEC_RESULT; ipAddr: syssocket.SOCKADDRESS;//Socket address structure for receiving sIpAddress : STRING := '192.168.0.2'; wPort: WORD:= 12346; iecConnectResult : syssocket_interfaces.RTS_IEC_RESULT;//connect paramters sDataRec : STRING[255];//Buffer for received data xiRecBytes : __XINT;//number of bytes received iecRecResult : syssocket_interfaces.RTS_IEC_RESULT;//receive data parameters iecCloseResult : syssocket_interfaces.RTS_IEC_RESULT; END_VAR syssocket.SysSockInetAddr(sIpAddress,ADR(ipAddr.sin_addr)); ipAddr.sin_family := syssocket.SOCKET_AF_INET; ipAddr.sin_port := syssocket.SysSockHtons(wPort); CASE istep OF 1: //create socket IF xStart THEN iecSocketId:= syssocket.SysSockCreate(syssocket.SOCKET_AF_INET,syssocket.SOCKET_DGRAM,syssocket.SOCKET_IPPROTO_IP,ADR(iecCreateResult)); IF iecSocketId = syssocket_interfaces.RTS_INVALID_HANDLE THEN xStart := FALSE; istep := 1; ELSE istep := 2; END_IF END_IF 2: //connect to socket server using setoption iecConnectResult := syssocket.SysSockSetOption(iecSocketId,syssocket.SOCKET_SOL,syssocket.SOCKET_SO_REUSEADDR,ADR(ipAddr),SIZEOF(ipAddr)); istep := 3; 3: //receive data xiRecBytes := syssocket.SysSockRecvFrom(iecSocketId,ADR(sDataRec),SIZEOF(sDataRec),0,ADR(ipAddr),SIZEOF(ipAddr),ADR(iecRecResult)); istep := 4; 4: //close socket iecCloseResult:= syssocket.SysSockClose(iecSocketId); xStart := FALSE; istep := 1; END_CASE
Last updated: 2024-06-03
Post by timvh on Management of a PLC network from a remote station
CODESYS Forge
talk
(Post)
Maybe the CODESYS HMI is a good solution. https://store.codesys.com/en/codesys-hmi-sl-bundle.html Run this on the remote main control station. In the HMI application you can add the data source manager and to this manager you can add Data sources. A data source has a reference to the PLC you want to connect to and can get access to the variables of the PLC application. You can then use these variables in the visualization of the HMI application.
Last updated: 2023-12-04
Post by lsislsis on Alarms Placeholder
CODESYS Forge
talk
(Post)
Hello. When i put placeholders at "/etc/codesyscontrol/CODESYSControl.cfg" : [SysFile] FilePath.1=/etc/codesyscontrol/, 3S.dat IecFilePath.1=/proc/, cpuinfo IecFilePath.2=/proc/, iomem PlaceholderFilePath.1=/sys/devices/w1_bus_master1, $OneWire$ PlcLogicPrefix=1 PlaceholderFilePath.2=/data/persistence, $ac_persistence$ PlaceholderFilePath.2.Volatile=1 PlaceholderFilePath.2.View=1 PlaceholderFilePath.3=/data/alarms, $alarms$ PlaceholderFilePath.3.Volatile=1 PlaceholderFilePath.3.View=1 Where "Data" are my USB Flash. I take these attachment errors at run time. What i am doing wrong.
Last updated: 2024-10-15
Post by damian177 on Delete PLC Log
CODESYS Forge
talk
(Post)
You already know how clear log ? In codesys I am reading twenty Modbus TCP Devices. When several of those doesn't response , the logs is grovs very fast and my PLC hangs.
Last updated: 2023-10-16
Post by bossjosh21 on Codesys Modbus RTU (Modbus_Slave_Com_Port Not Running)
CODESYS Forge
talk
(Post)
Can someone help me about my problem of my Modbus_Slave_Com_Port Not Running. I am using RevPiConnect 4 and I connected my actuator to the RS485 of my RevPI.
Last updated: 2023-12-05
Post by mavitia on Application based license problem - Modbus TCP
CODESYS Forge
talk
(Post)
raspberry pi is running ubuntu, so it has the codesys control for linux arm 64 bit, IDE is 3.5.19, both were installed last week from the latest versions online, im currently out of the PC but will upload some evidence ASAP
Last updated: 2023-12-18
Post by yelshebani on Add device greyed out
CODESYS Forge
talk
(Post)
Hi Add device is greyed out, havent connected to the PLC yet. what do I need to do to have ability to add devices, I want to add a Modbus TCP Master device
Last updated: 2023-12-19
Post by marekxc on Little endian to Float from Modbus RTU
CODESYS Forge
talk
(Post)
Maybe try going back to step one and: Var Reg1: WORD; Reg2: WORD; Reg12: DWORD; Value: REAL; end_var // program Reg1:= 4096; Reg2:= 14884; Reg12:= (reg2 * 65536) + reg1; Value:= DWORD_TO_REAL(Reg12);
Last updated: 2023-12-28
Post by forest on SM Drive license error
CODESYS Forge
talk
(Post)
Hi, when it comes about license, I used INVTmatic Studio, which uses Codesys, for programming INVT plc. I bought Codesys Modbus license, it was not expensive, and then realised that INVT didn't have License Manager option (greyed out in program) which is needed for using of Codesys License. I contacted support from INVT, but developers told me that option is still not available. So depending on environment for programming Codesys, you can or not use Modbus license. Good thing about this version of Modbus TCP it works both direction. I could send commands and receive feedbacks from drive. But communication stops after 30 mins. So I used simple version of ethernet modbus which is somewhere in INVT or Condesys library (I can check tomorrow) which works only one way. I could send cmd to drive, and control it, but didn't have any feedback, like some readings back in PLC. which is bad, but at least I could start it and it didn't fail after 30 mins.
Last updated: 2024-01-10
Post by mozburg on v3.5 SP19 - Modbus TCP Devices - Channel Limit?
CODESYS Forge
talk
(Post)
Has there been any progress on this issue? Currently running sp19 patch 5 with all packages updated but unable to add more channels...
Last updated: 2024-01-18
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
.