Не удается подключить макрос 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