Не удается подключить макрос vba из Excel с KEPServer. Ошибка DDERequest 2023

У меня есть макросы Excel, которые не могут подключиться к KEPServer с помощью Visual Basic.

Дело в том, что для некоторых версий Windows компьютеры могут подключаться к нему, а для других - нет. В настоящее время я использую Windows 10, Excel 2010 и KEPServer 5.13. Макросы раньше работали отлично, поэтому какое-то обновление Windows должно было привести к сбою.

Программа выдает ошибку при выполнении DDERequest и возвращает ошибку 2023. Я также заметил, что KEPServer продолжает выдавать следующую ошибку:

Date        Time         Level        Source                      Event
21/01/2020  16:57:23     Error        DDE                         Attempt to add DDE item 'TOOL1.PLC.MESCADA_BoxProductionCounter' failed.

Используемый код Vba:

Private Sub Establish_Connection_Click()


  Dim Tmp_Old_BoxProductionCounter As Variant


  RSIchan = DDEInitiate("kepdde", "_ddedata")

  Estat_Conexio.Text = " Connected to hardware "

  Mode = "Automatic"


  Tmp_Old_BoxProductionCounter = DDERequest(RSIchan, "TOOL1.PLC.MESCADA_BoxProductionCounter")'<-- It fails here   


  Old_BoxProductionCounter = Tmp_Old_BoxProductionCounter(1)

  Call Worksheet_Activate
  collected_rows = 2

  Initiate_Study.Enabled = False
  ...

Он использует NetDDE для подключения к KEPServer. Я знаю, что он устарел, и думаю, что это может быть проблемой, и есть более современный способ сделать это, используя OLE, но я действительно не знаю, как это сделать, и будет ли это вообще работать.

Как вы думаете, что я могу сделать, чтобы исправить это, или существует ли способ подключить их с помощью OLE?

1 ответ

По моему ограниченному опыту работы с iot:P, использование OPCUA или OPCDA требует использования разумных компонентов DDE, и при обновлении этих компонентов могут возникнуть проблемы с координацией между версиями.

Вы можете использовать MQTT или HTTP, что является более простым и распространенным способом получения данных ПЛК, например, с помощью LECPServer (аналогично Kepserver), но он может использовать протокол HTTP для чтения и записи содержимого ПЛК.

https://github.com/xeden3/LECPServerhttps://lecpserver.com/feature/

Код VBA выглядит следующим образом

      Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://172.10.26.11"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send "{""action"":""plc_read_node"", ""node"":""NODES.DEV01.D100""}"
sResp = oHttp.ResponseText
Другие вопросы по тегам