Запись байтов на устройство ПЛК - PullRequest
0 голосов
/ 01 апреля 2019

Я работаю вокруг соединения между PLC устройством и моими компаниями PC. PLC является известным Siemens S7-200, и я использую vb.NET. Вероятно, я должен использовать другой язык, но vb.NET мне больше нравится. Для этого я также использую протокол PPI через библиотеку COM1 и LibNoDave для установления соединения.

Программа, которую я тестирую, должна иметь Input 0.0 On, поэтому я подключил переключатель, чтобы это произошло. Также я сделал vb console для чтения (и записи) состояния Inputs и Outputs (как физические индикаторы LED на устройстве), а также состояния Bit memories:

console

Консольный ридер (раздел LEITOR - извините) работает так, как я планировал, и все Q, I и M правильно загораются, если это так.

Проблема в том, что для запуска программы PLC мне также нужно загореться Q 1.1. Ladder Network, который описывает это, имеет следующую логическую карту:

Ladder Network

Я знаю, что должен использовать код:

Public FDS As libnodave.daveOSserialType             'Serial type
Public DI As libnodave.daveInterface                 'Interface
Public DC As libnodave.daveConnection                'Connection
Public lPPI As Integer = 0                           'Local
Public pPPI As Integer = 2                           'PLC
Public RES As Integer = 0                            'Response
Public REP As Integer = 0                            'Response
Public buf(100) As Byte

Sub Code()
    FDS.rfd = libnodave.setPort("COM1", "9600", AscW("E"))
    DI = New libnodave.daveInterface(FDS, "IF1", lPPI, libnodave.daveProtoPPI, libnodave.daveSpeed93k)
    DI.setTimeout(1000000)
    DC = New libnodave.daveConnection(DI, pPPI, 0, 0)
    RES = DC.connectPLC

    'Write on PLC:
    RES = DC.writeBytes(...
End sub

Код работает нормально, без ошибок и установления соединения (до последнего RESponse).

Вот проблема: Я могу зажечь Output 1.1 (на устройстве и на console), выполнив следующие действия:

    RES = DC.writeBytes(libnodave.daveDB, 1, 1500, 16, buf)

где

    buf = BitConverter.GetBytes(libnodave.daveSwapIed_16(30))

, повторив эти два шага еще пять раз (в другой раз с 30 снова, еще два раза с 50 и, наконец, еще два раза с 50).

Я почти уверен, что делаю что-то не так, но в интернете не так много описаний этих команд для такого парня, как я (который только начал).

Может кто-нибудь объяснить, что происходит? А также, Как я могу зажечь Q 1.1 всего одним шагом?

...