Чтение байта M0 от Siemens PL C S7-200 (протокол COM) - PullRequest
0 голосов
/ 21 апреля 2020

Я работаю с Siemens PLC SIMATIC S7-200, а также с VB.NET программой для связи с ней (и для этого использую библиотеку libnodave). Я довольно знаком со всем этим, но я не могу понять пару вещей, и я надеюсь, что некоторые из вас могли бы помочь мне. Позвольте мне попытаться объяснить:

После установления sh всех сообщений

Public POSERL As libnodave.daveOSserialType   
Public PINRTF As libnodave.daveInterface
Public PCNCTR As libnodave.daveConnection
Public PRES00 As Integer = 0

Public Sub M02SUB000()
    POSERL.rfd = libnodave.setPort("COM1", 9600, AscW("E"))
    PRES00 = POSERL.rfd
    PINRTF = New libnodave.daveInterface(POSERL, "IF1", 0, libnodave.daveProtoPPI, libnodave.daveSpeed93k)
    PINRTF.setTimeout(1000000)
    PCNCTR = New libnodave.daveConnection(PINRTF, 2, 0, 0)
End Sub

Я пытаюсь прочитать байт M0 со следующим:

Public PRES01 As Integer = 0
Public PBUF01() As Byte
Public PM0 As Byte
Public PFLG00 As Boolean = False
Public PFLG01 As Boolean = False
Public PFLG02 As Boolean = False
'...
Public PFLG07 As Boolean = False

Public Sub M02SUB001()
    PRES01 = PCNCTR.readBytes(libnodave.daveFlags, 0, 0, 1, PBUF01)
    If PRES01 = 0 Then 
        PM0 = Str(PCNCTR.getS8)
        If M02FNC000(PM0, 0) Then PFLG00 = True Else PFLG00 = False
        If M02FNC000(PM0, 1) Then PFLG01 = True Else PFLG01 = False
        If M02FNC000(PM0, 2) Then PFLG02 = True Else PFLG02 = False
        '...
        If M02FNC000(PM0, 7) Then PFLG07 = True Else PFLG07 = False
    End If
End Sub

Public Function M02FNC001(ByVal InByte As Byte, ByVal InBit As Byte) As Boolean
     M02FNC000 = ((InByte And (2 ^ InBit)) > 0)
End Function

Здесь я получаю сообщение об ошибке (при некоторых обстоятельствах). Я определил проблему с кодом PCNCTR.getS8, который -81. Как я могу превратить -81 в байт ?? Для этого я использую функцию M02FNC001, но эту часть я не очень хорошо понимаю.

Итак, чтобы прояснить некоторые моменты, -81 является нормальным значением для вывода PCNCTR.getS8? И, если так, как я могу преобразовать это в байт?

Спасибо.

...