最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

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

[复制链接]
查看3726 | 回复3 | 2023-5-13 15:34:47 | 显示全部楼层 |阅读模式
通讯协议为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 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=3691&ptid=1549][color=#999999]jingshengzhi 发表于 2023-05-13 15:35[/color][/url][/size]
可以提供程序吗[/quote]

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

[code]' 建立串口通讯对象
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[/code]

以上是一个简单的VBS程序示例,在实际使用时需要根据具体情况进行修改和调试。同时,注意在PLC或上位机编程软件中将程序代码进行适当的封装和调用,以便在界面上正确显示读取到的电量信息。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则