j.brophy@corkillsystems

MrPLC Member
  • Content count

    39
  • Joined

  • Last visited

Posts posted by j.brophy@corkillsystems


  1. I'm wanting to use the Danfoss mct10 software to directly program the drives via Eithercat.

    Ethercat over MCT10 is possible but it is not like in Ethernet IP, where the MCT10 connection runs in parallel to the bus with multicast packets. In Ethercat the information is implemented in the bus telegrams and It seems omron does not suport EoE messaging.

    I would have to capture multicast packets convert them and send them over Eithercat as telegrams in honesty i dont know if this is a thing I have access to with omron.

    The Danfoss option card (MCA123) when fitted to a FC automation drive supports EIP to Eithercat (EoE messaging) by bridging multicast packets using the plc as a gateway problem is omron does not support it yet and I don't know if it is in their plans.

    You can see a video here of it in operation with a Bechoff plc using a EL6601 terminal as a bridge:

    https://www.dropbox.com/s/27csm7z3m1861hr/MCT10_TC3_Ethercat.mp4?dl=0

    Yes I can use EIP to program the drives but there is a lot of advantages in using Eithercat with a large network but doing it directly with the plc results in scaling issues number formats hex codes bla bla... so much nicer to do it with native danfoss tools because of this.

    ON a side note the danfoss software codes are free if you talk to Danfoss rep just they won't give you feature unlocker codes such as firmware flashing/ editing and oss creator tooling unless you are oem or partner like us.

    The feature unlocker codes require you signing some documents as you can create drives firmware exceeding 500hz that would class them as dual/ military use and if ended up in a country making enriched uranium you likely would get in big trouble so there is some security measures they ask you to implement.

    I was involved in some of the features in firmware with the software developers in Estonia when the FC series drives come out and also with the wifi based LCP's and to some extent the fc280 but more with feedback and bugs.

     

     

     

     

     

     

     

     

     

     

     


  2. sorry for the late reply missed this.

     

    The touch screen is 192.168.250.10

    The plc is 192.168.250.1

    The router is set to 192.168.250.254

    The gate way is set to 192.16.250.254 if it was not the hosted web page would not work on the touch screen from the vpn over the wan.


  3. Hi

    In the NB and NS screens there was the ability to have a multi function button operating as a button and as a data lamp in the NA screen there does not seem to be this function or am i missing something?

    I can't create a button with more than two feedback states by the look of it and I can't add a variable to a datalamp.

     

    ultimately I'm after the following for example :

    No image or colour (shows valve is offline)
    red open
    green closed
    blue opening
    orange closing
    yellow open fault
    purple close fault.

    Flashing to show it is in manual mode (in any of the above states)

    touch indication to my plc

     


     

     

     

     

     


  4. On 7/8/2021 at 9:19 AM, Crossbow said:

    Someone provided a link earlier to a large library of graphics for NA.  

     

    Yes Omron France and one of the screen demos online have these graphics there is also a NS library that was provided by my local Omron people. i have heaps of buttons and switches lamps  and generic stuff but it would be nice to use my own created objects or some way to export them to an image

     


  5. Yes that works for an image but not for graphics created in Sysmac studio I cant add events to graphics as it seems.

    I have drawn an object grouped it and stored it as a custom library object but I cant seem to use my graphics or the built in graphics for that matter.

    I'm guessing the only way to do it is to create a subroutine or event for the page specify the element or object name for custom graphics but I'm not really sure how to do this or if I can.

    As you see below I have the grist case object highlighted and showing the events and property's but I can't add events and actions to it. I can make it visible based on an variable in the properties window but i cant add events to it.

    I cant use the created graphics as an image either from creating a button or image object

    what I could do is print screen the graphics save it as a png /jpeg etc but in this case it wont work.

    As the image is square and my mill auger on an angle would overlap the gristcase image button as I cant just use the image as the button the background of the image also becomes part of the button.

    For an example If I just create a single graphics element (a circle for instance) I can create an event and action but if I grouped two circles together into a grouped object I can't create an event for the object.

     

    gristcase.thumb.jpg.80584077050db222f432 

    can create event:

    circle.jpg.b4e7de1134a3f80fab858d4a6cb72

    Can't create event:

    60e5110a49ead_circle-Copy.jpg.43ae7a48e9


  6. So I have created created some graphics for my display but it seems I cant use them as buttons directly.

    It looks like I can only use images or create image-less buttons on top of my graphics but I'm unable to actually use them as buttons directly or am I missing something ?

    I see that I can view code of the background page and maybe assign a subroutine or event to that grouped object but it seems like a long winded stupid option.

     

    image.jpg.00bd9f09fb424e46902341ad423227

     


  7. Previously on my pc I had installed Sysmac studio but with the latest installer 1.43 it says I need a directx 11 capable video card when trying to install from fresh.

    Is this a new requirement as it worked previously on the same computer I was installing from an older installer is there a way to bypass this?


  8. ok so the title says it all I have made a program to transmit data to a datamax or zebra printer using socket service but I can't seem to get it to work. It has to be something silly as the code looks robust enough. I believe there is a software called multiway that i was told to download to capture tha packets but im not getting that far as i'm unable to sucessfully open a socket and I don't know why. would someone be able to help me ? socket service printer.cxp

  9. That is not really what I'm asking for if I could type in a web address into the Omron software instead of an IP address the dns could forward it to the correct dynamic IP with cellular networks the IP address can change multiple times a day making connection and monitoring a nightmare. all of my sites have a dns server to log in to the touch screens and operate them over the net it would be nice to do the same to program/ monitor from CX programmer. as a work around could I use the lmhosts file in windows to redirect a made up IP Address to a web page?

  10. hand shake is used by the reverse command rxd i believe it also uses bits in the AR area request to send and clear to send it all ties together. I used txd_cpu commands in structured text to a zebra printer but and did not use any handshake what so ever and it worked fine. just be sure to fill in blanks in the text string worth ascii spaces or it will fail. As the txd_cpu command sends at the scan rate of the plc you could overflow the buffer of the serial port and truncate data as a quick hack I just added a program in ladder to step/ step next with diff up bits driving the txd commands in st and put a .2 second delay between steps. there is heaps of better ways to do this but it works as a hack and is suitable for our purpose. if someone else has a better idea i'd be intrested in this to make the code more robust. I used the plug in rs232 module in the front of a cj2. (* ascii print string setup*) IF P_On=P_On THEN; START_PRINT_STRING_DELIMITER:= 'N$N'; TITLE_STRING:= 'A50,20,0,2,2,1,N,"Dynes Transport Docket"$N'; TRUCK_NUMBER_STRING:= 'A100,40,0,2,2,1,N,"Truck Number AA"$N'; TANKER_NUMBER_STRING:= 'A100,40,0,2,2,1,N,"Truck Number BB"$N'; TRAILER_NUMBER_STRING:= 'A150,60,0,2,2,1,N,"Trailer Number CC"$N'; MONTH_NUMBER_STRING:= 'A200,80,0,2,2,1,N,"Month DD"$N'; DAY_NUMBER_STRING:= 'A250,100,0,2,2,1,N,"Day EE"$N'; HOUR_NUMBER_STRING:= 'A300,120,0,2,2,1,N,"Hour FF"$N'; SILOTEMP1_NUMBER_STRING:= 'A350,120,0,2,2,1,N,"Silo Temp GG"$N'; SILOTEMP2_NUMBER_STRING:= 'A400,120,0,2,2,1,N,"Silo Temp HH"$N'; LITRE_TRUCK_STRING:= 'A450,140,0,2,2,1,N,"Litre Truck II "$N'; LITRE_TRAILER_STRING:= 'A500,140,0,2,2,1,N,"Litre Trailer JJ"$N'; SEAL1_NUMBER_STRING:= 'A550,140,0,2,2,1,N,"Seal Number KK"$N'; SEAL2_NUMBER_STRING:= 'A550,140,0,2,2,1,N,"Seal Number LL"$N'; BARCODE_STRING:= 'B600,180,0,3,3,7,50,B," MM"$N'; END_PRINT_STRING_DELIMITER:= 'P2$N'; ELSE; END_IF; (*insert data into string*) (* truck number string insersion*) TRUCK_NUMBER_STRING_INSERSION_POINT:= FIND(TRUCK_NUMBER_STRING,'AA'); TRUCK_NUMBER_STRING_OUTPUT:= REPLACE(TRUCK_NUMBER_STRING,TRUCK_NUMBER,2,TRUCK_NUMBER_STRING_INSERSION_POINT); (* trailer number string insersion*) TANKER_NUMBER_STRING_INSERSION_POINT:= FIND(TANKER_NUMBER_STRING,'BB'); TANKER_NUMBER_STRING_OUTPUT:= REPLACE(TANKER_NUMBER_STRING,TANKER_NUMBER,2,TANKER_NUMBER_STRING_INSERSION_POINT); (* trailer number string insersion*) TRAILER_NUMBER_STRING_INSERSION_POINT:= FIND(TRAILER_NUMBER_STRING,'BB'); TRAILER_NUMBER_STRING_OUTPUT:= REPLACE(TRAILER_NUMBER_STRING,TRAILER_NUMBER,2,TRAILER_NUMBER_STRING_INSERSION_POINT); (* month number string insersion*) MONTH_NUMBER_STRING_INSERSION_POINT:= FIND(MONTH_NUMBER_STRING,'CC'); MONTH_NUMBER_STRING_OUTPUT:= REPLACE(MONTH_NUMBER_STRING,MONTH_NUMBER,2,MONTH_NUMBER_STRING_INSERSION_POINT); (* day number string insersion*) DAY_NUMBER_STRING_INSERSION_POINT:= FIND(DAY_NUMBER_STRING,'DD'); DAY_NUMBER_STRING_OUTPUT:= REPLACE(DAY_NUMBER_STRING,DAY_NUMBER,2,DAY_NUMBER_STRING_INSERSION_POINT); (* hour number string insersion*) HOUR_NUMBER_STRING_INSERSION_POINT:= FIND(HOUR_NUMBER_STRING,'EE'); HOUR_NUMBER_STRING_OUTPUT:= REPLACE(HOUR_NUMBER_STRING,HOUR_NUMBER,2,HOUR_NUMBER_STRING_INSERSION_POINT); (* silotemp1 string insersion*) SILOTEMP1_STRING_INSERSION_POINT:= FIND(SILOTEMP1_NUMBER_STRING,'FF'); SILOTEMP1_STRING_OUTPUT:= REPLACE(SILOTEMP1_NUMBER_STRING,SILOTEMP1_NUMBER,2,SILOTEMP1_STRING_INSERSION_POINT); (* silotemp2 string insersion*) SILOTEMP2_STRING_INSERSION_POINT:= FIND(SILOTEMP2_NUMBER_STRING,'GG'); SILOTEMP2_STRING_OUTPUT:= REPLACE(SILOTEMP2_NUMBER_STRING,SILOTEMP2_NUMBER,2,SILOTEMP2_STRING_INSERSION_POINT); (* litre truck string insersion*) LITRE_TRUCK_STRING_INSERSION_POINT:= FIND(LITRE_TRUCK_STRING,'HH'); LITRE_TRUCK_STRING_OUTPUT:= REPLACE(LITRE_TRUCK_STRING,LITRE_TRUCK_NUMBER,2,LITRE_TRUCK_STRING_INSERSION_POINT); (* litre trailer string insersion*) LITRE_TRAILER_STRING_INSERSION_POINT:= FIND(LITRE_TRAILER_STRING,'II'); LITRE_TRAILER_STRING_OUTPUT:= REPLACE(LITRE_TRAILER_STRING,LITRE_TRAILER_NUMBER,2,LITRE_TRAILER_STRING_INSERSION_POINT); (*seal1 number string insersion*) SEAL1_NUMBER_STRING_INSERSION_POINT:= FIND(SEAL1_NUMBER_STRING,'JJ'); SEAL1_NUMBER_STRING_OUTPUT:= REPLACE(SEAL1_NUMBER_STRING,SEAL1_NUMBER_ASCII,2,SEAL1_NUMBER_STRING_INSERSION_POINT); (*seal2 number string insersion*) SEAL2_NUMBER_STRING_INSERSION_POINT:= FIND(SEAL2_NUMBER_STRING,'KK'); SEAL2_NUMBER_STRING_OUTPUT:= REPLACE(SEAL2_NUMBER_STRING,SEAL2_NUMBER_ASCII,2,SEAL2_NUMBER_STRING_INSERSION_POINT); (* barcode string insersion join strings together for barcode*) BARCODE_NUMBER:=CONCAT(TRUCK_NUMBER,TANKER_NUMBER,TRAILER_NUMBER,LITRE_TRUCK_NUMBER,LITRE_TRAILER_NUMBER,SEAL1_NUMBER_ASCII,SEAL2_NUMBER_ASCII); BARCODE_NUMBER_STRING_INSERSION_POINT:= FIND(BARCODE_STRING,'LL'); BARCODE_STRING_OUTPUT:= REPLACE(BARCODE_STRING,BARCODE_NUMBER,2,BARCODE_NUMBER_STRING_INSERSION_POINT); (* end string insersion*) (* Send print string contents to printer*) IF PRINT_STEP_NUMBER>10 THEN; if TRUE=TRUE THEN; ELSIF PRINT_STEP_NUMBER=20 THEN; TXD_CPU(START_PRINT_STRING_DELIMITER); ELSIF PRINT_STEP_NUMBER=30 THEN; TXD_CPU(TITLE_STRING); ELSIF PRINT_STEP_NUMBER=40 THEN; TXD_CPU(TRUCK_NUMBER_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=50 THEN; TXD_CPU(TANKER_NUMBER_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=60 THEN; TXD_CPU(TRAILER_NUMBER_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=70 THEN; TXD_CPU(MONTH_NUMBER_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=80 THEN; TXD_CPU(DAY_NUMBER_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=90 THEN; TXD_CPU(HOUR_NUMBER_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=100 THEN; TXD_CPU(SILOTEMP1_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=110 THEN; TXD_CPU(SILOTEMP1_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=120 THEN; TXD_CPU(LITRE_TRUCK_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=130 THEN; TXD_CPU(LITRE_TRAILER_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=140 THEN; TXD_CPU(SEAL1_NUMBER_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=150 THEN; TXD_CPU(SEAL2_NUMBER_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=160 THEN; TXD_CPU(BARCODE_STRING_OUTPUT); ELSIF PRINT_STEP_NUMBER=170 THEN; TXD_CPU(END_PRINT_STRING_DELIMITER); ELSE; END_IF; ELSE; END_IF;

  11. Has any one written a program to control a danfoss drive via 485 using non protocol based communications of the serial port for the built in danfoss vlt protocol? Im looking at linking multiple plc's with a danfoss drive using one serial port per node and if someone has done it before it would make easy to just add to it and have non protocol comms between the plc's. is omron going to have this protocol added to there plc line up? as i see some of their screen software supports the built in danfoss vlt protocol for comms.

  12. I under stand that you can use task and break points to ignore parts of the program then it wont effect any thing as it will miss the part of the program with the local output on the nodes recieving the broadcast. from what i understand i may be able to use a jump command or tasks but i have no experience with either (we have just moved from the cpm1a plc) and i beleve i cant put my program into a jump because i are using steps in the program as i tried to put my program into function blocks but i had that problem. I dont really see a way around this problem unless the adresses were transcribed to different locations upon recieving them on another plc apart from skipping code some how. i have attached my sample program i have tided it up dramitically if i pull out the stuff specific to each node from the program and write to individual nodes it operates but as one program in all it fails to read or write inputs or outputs from either device. many thanks for your help but i may be at an end at least im not going mad and thaught i was doing something wrong. SAMPLE_2WAY_.cxp

  13. i see what you are doing a bit smarter than what i come up with but it will still logic race as mine does after the end instruction you have the output 3109.00 as a output to broadcast to all the other nodes if the program were in the master node. if that program were in any other node it would still have that coil in it for the master node but it wont be operated so it reads the network 3109.00 and then scans down to the master part of the program and will turn off again as the coil for the master part output of the program in the slave node wont be on (turn the coil off locally). this is what i beleve is happening in my case. if you output 3109.00 from the master but read it as 3509.00 (for example) in the other nodes this would not happen but you cant do that. as you could turn on 3109.00 on the slave and not effect the transmission from the master broadcast on 3109.00 but recieved on 3509.00. im not trying to operate my adress 3109.00 locally but it is in the program for the use by the specific master node and will be turned off in all others locally. how i see it is that the program will read the input in the slave (from the master) then it will scan through the program and get to the master part and turn it off again. correct me if i am wrong but effectivly i have 2 coils in the program (theritically) one being network operated and one being local both having the 3109.00.