• Content Count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About SteveMyres

  • Rank
    Advanced Member

Recent Profile Visitors

9,576 profile views
  1. SteveMyres

    Save As older version CTL

    Slick idea! Is there a way to tell a CTL version by direct inspection?
  2. SteveMyres

    Save As older version CTL

    Oh OK, thanks! Didn't realize the EXEs could share all the same support files. Well, to some degree, but didn't realize it would span across all releases. Cool. So I'd need to maintain a log of what customer was at what release, and I can see that getting out of date. Is there a way to tell directly from the CTL file what version it is so I don't inadvertently update it to a newer release?
  3. I have a bunch of customers in the field running DF applications I've done for them, and when they make changes or upgrades, I do the programming and create a new CTL for them. If I upgrade versions (and only maintain the latest version), then my editing the CTL forces them to update their DF runtime install version for compatibility. I guess I could maintain a copy of all older versions (presumably one per in virtual machines), and just do edits for customer X natively in the version that he has. Seems like it would be helpful if in the latest version I could do a Save As, say to v16 or whatever. Thanks!
  4. Originally, DF WAS a TCP server, but Wonderware for whatever reason was having trouble getting a response to the polled registers. Round 2: Installing a Modbus RTU (slave) to Modbus/TCP (server) gateway. I want DF to be the RTU master, so that I can control the frequency and timing of data transfer to the gateway. What I didn't realize is that outgoing (write) channels are ONLY event driven on a write (which most times is what you want). You can't enter timing and offset in the channel table, and there's no WriteGroup() equivalent to ReadGroup(). So my problem was that as I calculated the 20-25 values in sequence, each time I calculate one, DF is going to generate a one-channel write, which is not what I want. What I want is to write all 25 or whatever on a timed interval, analogous to the way reads are done. I ended up using option (2) above. Create a new array variable, execute MyArray.Append(CalcedVarNN) as I calculate the variables, then do a single write of the entire array from sequence on a time schedule.
  5. I have a channel group that contains a mixture of user-input values and values computed by DF with the user inputs and measured process values, about 20 channels total. This group is set up to be read by a remote Wonderware instance, and the channels have been set up as Modbus slave registers. I can [usually] read the channels but for some reason Wonderware has issues with it. If I set the channels up as writes (SetRegister) I find that I cannot set a timing nor offset. Typically writes are event-driven, so that's expected, but I'd like to write the group en-masse periodically. There doesn't exist a WriteGroup() analgous to ReadGroup(), and even if there were, I don't want the individual channels writing event-triggered as they're computed in script. Two approaches have occurred to me: (1) Disable the comm device before the computations (which are close together in script) and reenable when complete, but I doubt that the group would then automatically write, just from having been reenabled, or (2) leave the channels as Test Channels in the channel table, and create a new array variable. As the variables are calculated, append them to the array, then when complete, execute the write from script. Any other approaches that seem viable?
  6. SteveMyres

    Remote DF Modbus/TCP Server won't open TCP connection

    Another curiosity. My remote access is via a Cisco Anyconnect VPN administered by the customer. Wireshark lists the Radmin VPN virtual adapter I use for remote access sites I manage, but does not seem to be aware of the Cisco one. If I could Wireshark the queries, I could see if there's any difference between the DF ones and the Modbus Poll or Baseblock ones.
  7. SteveMyres

    Remote DF Modbus/TCP Server won't open TCP connection

    OK, so changing the port worked, partially. Can't imagine what could have been added to the DF PC using port 502, but changing to 510 allows both my DF test client and Modbus Poll to connect. However, DF polls successfully and Modbus Poll does not. It times out, even though both clients have generous timeout setting far longer than the typical response delay of 80ms. Baseblock ComTest Pro also times out and claims not to have received a response. DF and the other two clients have all worked in the past. I've been at this point before, as well as the case where all clients I used would work, when the plant SCADA guy could not get a response with Wonderware or Modbus Poll. I'm baffled.
  8. SteveMyres

    Remote DF Modbus/TCP Server won't open TCP connection

    Wellp, can't test locally. Could try another port, though it hasn't changed since it worked [for me but not for him], but it means I'll have to edit the CTL and resend. That's doable. Oh, and the SCADA guy hasn't physically been local when he's testing but requests have been sent from his WW machines which are local, in addition to using Modbus clients local to him via VPN like I'm doing, and the local ones did no better.
  9. At a customer site, I have an instance of DAQ Factory running, that's serving about 20 variables via Modbus. The plant SCADA integrator is trying to read these variables from two Wonderware Intouch instances, but can't make a connection to the DF server. Until recently, I could poll the DF slave registers with no issue, both with ModbusPoll and an instance of DF at my location, so I was inclined to blame the SCADA, perhaps the firewall settings on the machines. Now, however, I'm unsuccessful reading the registers with either ModbusPoll or DF (either in channels or sequence). I get P-ModbusTCP 0010: Timeout 05/25/20 12:55:01.140 Both the SCADA guy and I can ping the DF machine, and I'm not aware of any changes that have been made to the DF PC (firewall, for example) between when I could read and now, nor have any idea why I could read before when he could not.
  10. ParseString() shows in the autocomplete as an HTTP.x function, but I can't find any documentation in the user guide, nor is there a popup prototype call as there is with most calls as you enter the arguments. Is there some documentation for it, or can you do some here? Thanks!
  11. SteveMyres

    Text Rotation

    Me three.
  12. SteveMyres

    AscA not working as expected in execute()

    Oh! Duh, don't know why I was doing that. Just in the habit of evaluating everything down to a final answer before concatenating (primarily for the creation of display strings and so on). Thanks!
  13. Manually entering MyChannelName.Addvalue(AscA(MyString)) works (it pushes all the ASCII codes in as consecutive channel points), but if I place it in an execute(), it seems to build the script string with only the ASCII value for the first character, rather than AscA(strArg) evaluating to a numeric array (as if I used Asc()) execute(ChannelName + ".Addvalue(" + AscA(strArg) + ")") Evaluate does the same thing -- treats the AscA() as if the string were only one character.
  14. SteveMyres

    Calculate rms value of an an array

    I thought 'Root Mean Square' WAS the formula?
  15. SteveMyres

    File Preferences not saving

    Well, I don't object too strongly to there being another level, but they should name it more descriptively, like "Run As SuperAdmin" or something. The nomenclature is poor.