jingshengzhi 发表于 2023-5-13 15:34:47

西门子200smart和智能电表通讯

通讯协议为DL/T645协议
读取电表的电量
smart为自由口通讯协议

chatGPT_小智 发表于 2023-5-13 15:35:04

实现西门子200smart和DL/T645协议的智能电表通讯,可以采用以下步骤:

1. 确认通讯接口和协议
- 通过串口或以太网口连接智能电表和西门子200smart。
- 确认智能电表支持DL/T645协议,并了解其数据格式和通讯方式。
- 确认西门子200smart支持自由口通讯协议,并了解其数据格式和通讯方式。

2. 编写通讯程序
- 在西门子200smart上编写程序,实现与智能电表的通讯。可以使用VBS或C+等编程语言。
- 根据DL/T645协议规定,发送读取电表电量的指令(如0x11),并处理电表返回的数据。
- 将读取到的电量存储到指定的变量中,以便在其他程序中使用。

3. 配置界面和按钮
- 在西门子200smart的界面上添加相应的按钮和显示控件,方便用户调用和查看读取电表电量的功能。
- 配置界面,使得用户可以输入电表的地址、串口或以太网口等参数。
- 将通讯程序和界面进行绑定,确保用户点击按钮后能够正确地触发通讯程序,并在界面上显示读取到的电量。

需要注意的是,由于不同厂家的PLC和自动化产品可能存在差异,以上步骤仅供参考。在实际操作中,应根据具体的产品和需求进行相应的调整。

jingshengzhi 发表于 2023-5-13 15:35:39

可以提供程序吗

chatGPT_小智 发表于 2023-5-13 15:36:13

jingshengzhi 发表于 2023-05-13 15:35
可以提供程序吗

由于具体的电表型号和通讯接口可能存在差异,所以无法提供通用的程序。但是,以下是一个可能适用于某些DL/T645协议的智能电表的VBS示例代码,可以供您参考:

' 建立串口通讯对象
Dim objSerialPort As Object
Set objSerialPort = CreateObject("MSCommLib.MSComm")
objSerialPort.CommPort = 1   ' 设置串口号
objSerialPort.Settings = "9600,N,8,1"' 设置波特率、数据位、校验位和停止位
objSerialPort.RThreshold = 51   ' 设置接收缓冲区阈值,大于等于数据帧长度

' 发送读取电量指令
Dim arrReadPower(11) As Byte
arrReadPower(0) = &H68' 帧起始符
arrReadPower(1) = &H32' 地址域,可根据电表地址设置
arrReadPower(2) = &H32' 地址域,可根据电表地址设置
arrReadPower(3) = &H32' 地址域,可根据电表地址设置
arrReadPower(4) = &H32' 地址域,可根据电表地址设置
arrReadPower(5) = &H32' 地址域,可根据电表地址设置
arrReadPower(6) = &H0   ' 控制码
arrReadPower(7) = &H1   ' 数据长度
arrReadPower(8) = &H11' 命令码,表示读取电量数据
arrReadPower(9) = &H0   ' 数据域
arrReadPower(10) = &HE5 ' 帧结束符
objSerialPort.Output arrReadPower' 发送指令

' 等待并处理返回数据
Dim arrRecvData() As Byte
Do While True
    While objSerialPort.InBufferCount < objSerialPort.RThreshold
      WScript.Sleep 100   ' 等待串口接收数据
    Wend
    arrRecvData = objSerialPort.Input' 读取接收的数据
    If UBound(arrRecvData) >= 12 Then
      ' 判断帧头和帧尾是否正确
      If arrRecvData(0) = &H68 And arrRecvData(UBound(arrRecvData)) = &HE5 Then
            ' 根据协议规定从数据域中解析电量信息
            Dim dblPower As Double
            dblPower = arrRecvData(10) * 65536 + arrRecvData(9) * 256 + arrRecvData(8)
            ' 在控件中显示读取的电量
            txtPower.Text = CStr(dblPower)
            Exit Do
      End If
    End If
Loop

' 关闭串口通讯对象
objSerialPort.PortOpen = False
Set objSerialPort = Nothing

以上是一个简单的VBS程序示例,在实际使用时需要根据具体情况进行修改和调试。同时,注意在PLC或上位机编程软件中将程序代码进行适当的封装和调用,以便在界面上正确显示读取到的电量信息。
页: [1]
查看完整版本: 西门子200smart和智能电表通讯