-
Content count
1714 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Calendar
Everything posted by IO_Rack
-
edit time variable in Recipe NA HMI
IO_Rack replied to marcinmrag's topic in NJ Series / Sysmac Studio
This is correct. For the purposes of reading and writing time to/from the HMI, I create the following custom Functions: REAL_TO_TIME REAL_tmp:=In*REAL#1000000000; LINT_tmp:=REAL_TO_LINT(REAL_tmp); Out:=NanoSecToTime(LINT_tmp); TIME_TO_REAL LINT_tmp:=TimeToNanoSec(In); REAL_tmp:=LINT_TO_REAL(LINT_tmp); Out:=REAL_tmp/REAL#1000000000; -
edit time variable in Recipe NA HMI
IO_Rack replied to marcinmrag's topic in NJ Series / Sysmac Studio
I'm not aware of an elegant method. I don't use the TimeSpan data type in the NA. I create Functions in the controller that will convert REAL to TIME and TIME to REAL (in seconds), then enter my time in [Seconds].[Fraction of a Second]. -
View Designer 7.01 - Project Explorer display issue
IO_Rack replied to scotty134's topic in Allen Bradley / Rockwell Automation
It is but unfortunately, this is usually the problem. A colleague of mine just fixed an older version of AutoCAD due to the newer touch screen drivers. I had this issue on FactoryTalk View some time ago. It turned out to be the Windows screen 'scaling'. Try setting your display to 1:1 scaling or 100%. This particular fix was called out in the RA knowledge base. -
I'm not sure I understand the question. Do you want to move D200 (Gross Weight) to D1010? If so, this is performed with the MOV(021) instruction. MOV D220 D1010
-
First, perform the Omron Automation Software AutoUpdate. If there are on new updates then uninstall CX One completely and reinstall. CX Programmer is trying open Position Control Unit (Support for EtherCAT) Setting Component. This is integrated software for CX Programmer. There is no separate download for it that I'm aware of.
-
00 is Zero Zero. Just write it to the location. Keep in mind that your string may end on an Even or Odd byte. You'll have to determine which then do something like ANDW in Hex. ANDW, #FF00 to write zeros to the lower byte and preserve the higher byte. ANDW, #00FF to write zeros to the higher byte and preserve the lower byte.
-
One of the points I was trying to make is that you can use any MOV or XFER type instruction to move your string. It doesn't have to be a "$" instruction. The special thing about the "$" instructions is that it will operate on the byte data up to and including the "00" or Null character. Using MOV or XFER, you would have to know how many to move. The important thing is displaying. The HMI will take care of interpreting the data as String so long as it is set to read the data as "String", "ASCII" or "Text" or whatever the setting is. (I'm not that well versed on the NBs).
-
It looks like you may have your answer. I don't know because I haven't explored the function block in your link. If you decide to do the CF writing discretely, you can have a look at this example: https://forums.mrplc.com/index.php?/files/file/276-compact-flash-memory-write/ If you are required to do the shifting discretely, think about this. MOV$ will move a string, or bytes starting from your address specification up to (and including) the first null character. So the length is indeterminate until it is executed. For this reason, if you would need to know that maximum possible length of the strings you are using. Then you can shift using the Block Transfer instruction (XFER 070). The XFER will move the data byte for byte and bit for bit, so it will remain unchanged. For example: If your string length is less than 200 characters (100 Words), then you could do an XFER, N: &100, S: D100, D: D200. Now you would most likely require a table. To do this you would Indirectly Address D100 and D200 where you could control the locations. If you function block doesn't work out, we could provide a simple example for this method.
-
CX One has been updated a few times since the start of this post. You didn't mention what version you are trying to install. Have you tried the Auto Update? Did you try to uninstall CX One then reinstall?
-
Our plant used to standardize on Omron PLCs. We've since acquired several different brands but still use about 200 or more in our plant. Why do you ask?
-
RSLogix5000, Codemeter & Studio 5000
IO_Rack replied to IO_Rack's topic in Allen Bradley / Rockwell Automation
Yes, that article explains pretty much what I was told. I was able to open v20. I had to dig into the C:\Program Files (x86)\Rockwell Software\RSLogix 5000\ENU\v20\Bin directory to do it. I'm assuming the Loader or Launcher was trying to load an older version when I clicked on the RSLogix5000 icon. I'm still unable to upgrade my v19 project. -
RSLogix5000, Codemeter & Studio 5000
IO_Rack replied to IO_Rack's topic in Allen Bradley / Rockwell Automation
Do you have a TechConnect contract? I find it interesting that my TechConnect keeps me automatically upgraded and shows a version number. Where one that is version locked does not.... but then Rockwell is usually counter-intuitive. -
Now that's funny!
-
Have a look at CP1E CPU Unit Software User’s Manual(W480). There are lengthy sections on High Speed Inputs and Pulse Outputs. - Make sure you have the correct CP1E. Relay outputs will not perform Pulse Output. - Use the P_ER (Instruction Error) contact after your pulse output instructions. I've found this is helpful when determining if I have a data (programming) issue or a wiring issue. - Use very slow pulses at first. You can watch the outputs LEDs turn ON and OFF. This can also be helpful when troubleshooting.
-
RSLogix5000, Codemeter & Studio 5000
IO_Rack replied to IO_Rack's topic in Allen Bradley / Rockwell Automation
Ah! you are correct. That completely eluded me as I was focusing on Software versions rather than Firmware versions. Now I just need to get my Software version 20.05 to open... -
The PLC Backup Tool is a relatively new function in CX Programmer. As Crossbow as mentioned, the C200HE is an old platform. The PLC Backup Tool did not exist even when C200HE was current. You can do a complete backup manually. 1) Transfer From PLC from the PLC > Transfer menu. 2) Transfer from the PLC in the IO Table (Project Tree). Include SIOU unit parameters if you have any. 3) Transfer from PLC from the PLC Settings (Project Tree). 4) Double click Memory from the project tree. Double click HR and DM (These are your retentive memory). Perform a Transfer data from PLC. Make sure you have "ALL" selected. Then perform a Save in Project. There may be options to transfer IO Table and Settings from the PLC > Transfer dialog but I never trust it. It may not be a problem now in CX Programmer but It became a habit for me to at least compare everything individually.
-
From the project tree, select 'Symbols'. Perform a select all (Ctl + A). Copy and paste into Excel or some other spreadsheet program. Make your changes. Take note to the number of columns for when you copy and paste back to CX Programmer Symbol table. It should be 6 columns. (A-F). Also, make sure you delete all the symbols in CX Programmer before pasting them back. CX Programmer allows multiple symbols for the same address.
-
Assuming you are using a serial connection: - Do you have the correct cable? The cable diagram can be found in the NS Series Programmable Terminals Setup Manual. - CQM1 serial port settings must match NS serial port settings. In CX Programmer, from the project tree, select 'Settings' > 'Serial Port'. - For the NS, in CX Designer.... From the menu, select 'PT' > 'Communication Settings'. You'll need an item under 'Serial PortA'. Set it to 'PLC', 'SYSMAC-PLC". The easiest method is to use 'Host Link'. Default settings (in both NS and CQM1) are 9600, 7, 2, Even. Again, make sure they match.
-
The programming cable for the NT is different than the programming cable for the CJ2. Specifications for the 'Connecting Cable' can be found here: https://forums.mrplc.com/index.php?/files/file/1003-nt-series-support-software-v47-for-windows-manual/
-
Is the CQM1H in error? I've seen where an upload will not compile from an old PLC. Most likely it was programmed with an older software package. Maybe LSS or CPT. Are you able to post your CX Programmer project here? If not, are you able to host it on a site like DropBox? This website has been troublesome for posting items in the forums lately. Alternatively, open the project in CX Programmer, select the rung with the error, right click "Show Rung As" > "Statement List. Then you can copy the text and paste it here in the forums.
-
An image would be nice here but I still can't seem to upload one. You'll need to use a Union found under Data Types. A Union will share the same space between the specified Data Types. Example: u_DWORD Union data DWORD bit ARRAY[0...31] of BOOL Create your variable: MyDWORD of Data Type u_DWORD Use in programming: MyDWORD.data as DWORD MyDWORD.bit[3] as BOOL
-
TCP SOCKET NEEDS TO CLOSE and REOPEN FOR EACH MESSAGE
IO_Rack replied to Mariangela Camarda's topic in NJ Series / Sysmac Studio
I don't see where you are clearing the buffer. Here is an example that I've used to receive bytes on an NX102. I haven't tried the NX102 as a server. // Start sequence when Trigger changes to TRUE. IF ((Trigger=TRUE) AND (DoTCP=FALSE) AND (_EIP2_EtnOnlineSta=TRUE)) THEN DoTCP :=TRUE; Stage :=INT#1; SktTCPConnect_instance(Execute:=FALSE); // Initialize instance. SktClearBuf_instance(Execute:=FALSE); // Initialize instance. SktGetTCPStatus_instance(Execute:=FALSE); // Initialize instance. SktTCPSend_instance( // Initialize instance. Execute :=FALSE, SendDat :=SendSocketDat[0]); // Dummy SktTCPRcv_instance( // Initialize instance. Execute :=FALSE, RcvDat :=RcvSocketDat[0]); // Dummy SktClose_instance(Execute:=FALSE); // Initialize instance. END_IF; IF (DoTCP=TRUE) THEN CASE Stage OF 1 : // Connection request SktTCPConnect_instance( Execute :=TRUE, SrcTcpPort :=UINT#0, // Local TCP port number Automatically assigned DstAdr :='192.168.251.57', // Remote IP address DstTcpPort :=UINT#6000, // Destination TCP port number Socket =>WkSocket); // Socket IF (SktTCPConnect_instance.Done=TRUE) THEN Stage :=INT#2; // Normal end ELSIF (SktTCPConnect_instance.Error=TRUE) THEN Stage :=INT#10; // Error end END_IF; 2 : // Receive buffer clear SktClearBuf_instance( Execute :=TRUE, Socket :=WkSocket); // Socket IF (SktClearBuf_instance.Done=TRUE) THEN Stage :=INT#3; //Normal end ELSIF (SktClearBuf_instance.Error=TRUE) THEN Stage :=INT#20; //Error end END_IF; 3 : // Status read request SktGetTCPStatus_instance( Execute :=TRUE, Socket :=WkSocket); // Socket IF (SktGetTCPStatus_instance.Done=TRUE) THEN Stage :=INT#4; // Normal end ELSIF (SktGetTCPStatus_instance.Error=TRUE) THEN Stage :=INT#30; // Error end END_IF; 4 : // Send request SktTCPSend_instance( Execute :=TRUE, Socket :=WkSocket, // Socket SendDat :=SendSocketDat[0], // Send data Size :=UINT#2000); // Send data size IF (SktTCPSend_instance.Done=TRUE) THEN Stage :=INT#5; // Normal end ELSIF (SktTCPSend_instance.Error=TRUE) THEN Stage :=INT#40; // Error end END_IF; 5 : // Receive request SktTCPRcv_instance( Execute :=TRUE, Socket :=WkSocket, // Socket TimeOut :=UINT#0, // Timeout value Size :=UINT#2000, // Receive data size RcvDat :=RcvSocketDat[0]); // Receive data IF (SktTCPRcv_instance.Done=TRUE) THEN Stage :=INT#6; // Normal end ELSIF (SktTCPRcv_instance.Error=TRUE) THEN Stage :=INT#50; // Error end END_IF; 6 : // Request to close the socket SktClose_instance( Execute :=TRUE, Socket :=WkSocket); // Socket IF (SktClose_instance.Done=TRUE) THEN Stage :=INT#0; // Normal end ELSIF (SktClose_instance.Error=TRUE) THEN Stage :=INT#60; // Error end END_IF; 0 : // Normal end DoTCP :=FALSE; Trigger :=FALSE; ELSE // Interrupted by error. DoTCP :=FALSE; Trigger :=FALSE; END_CASE; END_IF; -
In my experience, this method did not work very well unless it was completely tested. The files you show will restore the user program. What may be missing is any SIOU setup. I did this once a very long time ago. What I mean is, I created a backup then completely restored the PLC to factory condition by clearing the program, memory areas, I/O Table, SIOU setup and PLC Settings. My CF backup did not work. To fix it, I had to program the SIOU setup in PLC Ladder. If any setup is done using dialog boxes in CX Programmer, the appropriate memory areas will be set. When those memory areas are cleared, your setup is gone.
-
Omron PLC cs / cj2 read / write data over Python
IO_Rack replied to TBLLC's topic in Other Omron Software
These are always interesting and fun projects to play around with. By today's standards, you can get HMIs, SCADA and/or PC drivers to accomplish what you are trying to do. The costs will vary. You can communicate with Omron PLCs in a few different methods depending upon the PLC hardware. Almost any programming language will work. I've done a few in the old days using BASIC language and Omron's Host Link commands (RS232C). You are using Ethernet so you have found the options are FINS and Ethernet/IP. Ethernet/IP will prove to be very difficult. Unless you are well versed in EtherNet/IP protocol, it will consume your time in understanding it, deciding on the type of EIP method use, then establishing communications with the PLC. FINS will be your best bet if you wish to pursue your quest. There are several examples using DotNet and ActiveX in the downloads section here at MrPLC. https://forums.mrplc.com/index.php?/files/category/48-utilities/ It should be easy enough to see exactly what the programming is sending the PLC. You'll just need to change your code to Python. Along with the examples, you'll also want to use the FINS Command Reference Manual W227 to better understand what these programs are doing. -
As Michael has suggested, a Union would be the easiest method to view it in different Data Types. Where is the data coming from? Maybe we can help you simplify the process. If it is part of a group of data (EtherNet/IP for example) then a Structure may be helpful.