vb.net - 从 Siemens PLC S7-200(COM 协议)读取 M0 字节
问题描述
我正在使用一个Siemens PLC SIMATIC S7-200
和一个VB.NET
与之通信的程序(并libnodave
为此使用库)。我对这一切都很熟悉,但我无法弄清楚一些事情,我希望你们中的一些人能帮助我。让我试着解释一下:
建立所有通讯后
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
Return ((InByte And (2 ^ InBit)) > 0)
End Function
这是我收到错误的地方(在某些情况下)。我将问题定位PCNCTR.getS8
在-81
. 我怎样才能变成-81
一个字节?我正在使用M02FNC001
函数来做到这一点,但这是我不太了解的部分。
那么,为了澄清一些事情,-81
输出的正常值是PCNCTR.getS8
什么?而且,如果是这样,我怎样才能将它转换为一个字节?
谢谢。
解决方案
推荐阅读
- php - php strtok 替代拆分字符串
- php - 如何使用 PHP 从这个数组中得到“计数”?
- node.js - 会话未在节点 js 上维护
- dsl - 每次在空手道 dsl 中运行测试时如何创建随机字符串
- php - 如何使用嵌套的foreach循环获取索引的每个值并保存到数据库php
- sockets - 如何在服务器端读取和解压缩 protobuf c 打包消息(使用套接字)
- python - 使用 json 显示 json 模式中的所有错误 使用 python 验证
- go - 选择语句选择没有数据
- android - 如何将一个适配器之间的数据发送到另一个适配器?
- sharding - Akka Cluster Sharding 中无法访问的节点