• Content Count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About SteveMyres

  • Rank
    Advanced Member

Recent Profile Visitors

9,720 profile views
  1. SteveMyres

    Email error 80040211

    Suggest the following. These settings look closest to what the working settings are called in that note I directed you to. semail.strAuthenticate = "LoginPlain" semail.strConnectionType = "SSL_TLS" semail.strSSLProtocol = "SSLv2orv3"
  2. SteveMyres

    Email error 80040211

    Or build an SMTP server. And yeah, I think you have to enable 2FA to get it working.
  3. SteveMyres

    Email error 80040211

    Host created an FAQ that includes screenshots for the steps at They did the FAQ earlier this week and were of course testing it as they went, so I know it still works.
  4. SteveMyres

    Email error 80040211

    Yes, I'm using a GMail.Com address and that process is what I'm using with all my emailing PLCs, and they're all still working as of last night.
  5. SteveMyres

    Email error 80040211

    It actually does, it's just more roundabout than before. You have to set up the GMail account to use 2 Factor authentication. Then, while logged into your account, you can get GMail to generate a new password to use with "less secure" devices (or software) that can only do username + password. I guess GMail assumes that if you're logged in using 2FA to generate the password, then the necessary enhanced security wonderfulness will rub off on that password. I do this with PLCs quite a bit, and there's a step by step instructions on how to set GMail up for this at ttps:// Scroll all the way down to the bottom of the page.
  6. SteveMyres

    Table expression

    Quickest interim solution -- just added a VLOOKUP() to the Excel file, so the name is actually in the CSV verbatim.
  7. SteveMyres

    Table expression

    Right, I had used parens. Just typed from scratch and messed it up in the post. OK thanks for the explanation!
  8. I'm retrieving from a CSV file a 2D array where the fields are a mix of strings, numbers, booleans (encoded as "TRUE" and "FALSE") and one field containing a number that's a list index. So I'm displaying the array in a table where all the column definitions are MyArray[][FieldNumber], and they all work fine. The list index doesn't work. I tried the following expressions TypeList[ConfigurationArray[][10]] //and TypeList[StrToDouble[ConfigurationArray[][10]] but what I get instead is a list of TypeList[0..n], even though ConfigurationArray has all "5"s in the 10th column.
  9. It would be cool (my apologies if this already exists) to have compact syntax to directly extract a smaller size value from a variable/channel value without having to do an inline To.Bit() or whatever, and also to aggregate multiple consecutive values in an array as a larger type. For example, if MyVariable is 64-bit, MyVariable:UW0 might return the most/least significant 16 bits, interpreted as an unsigned word. MyVariable:37 might be the 37th least significant bit, and so on. As a delimiter, I'd suggest a period or a colon if available. If you had an array of smaller values, even if stored in 64-bit registers, you might be able to cast two consecutive ones into a single 64-bit value, interpreting each of the individual registers as 32-bit. This is probably less useful than the other application, in a DAQ Factory context, where all numbers are automatically stored as 64-bit.
  10. SteveMyres

    CFR 21 Part 11

    Has anyone used DAQ Factory to archive data logs that comply with CFR 21 Part 11? (FDA Electronic Data Records standards) How about compliance for the entire software system?
  11. SteveMyres

    Save As older version CTL

    Slick idea! Is there a way to tell a CTL version by direct inspection?
  12. 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?
  13. 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!
  14. 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.
  15. 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?