pos机串口号,小迈网关功能——通过VBScript脚本实现串口通信

 新闻资讯2  |   2023-06-09 09:15  |  投稿人:pos机之家

网上有很多关于pos机串口号,小迈网关功能——通过VBScript脚本实现串口通信的知识,也有很多人为大家解答关于pos机串口号的问题,今天pos机之家(www.poszjia.com)为大家整理了关于这方面的知识,让我们一起来看下吧!

本文目录一览:

1、pos机串口号

pos机串口号

本例以读取Modbus RTU中的9个保持型寄存器为例,演示如何通过脚本实现串口通信。

目标:实现站号为1,波特率9600,8位数据位,无校验,1位停止位,保持型寄存器,起始地址为0,数量为9。

根据ModbusRTU协议算出需要发出的报文:

01 03 00 00 00 09 85 CC

正确返回的报文字节数为9*2=5=23个字节。

第一步:生成多个内存变量。

Com1Connection为串口是否打开标志。

RecvBuf为收到报文。

RecvBuf1到RecvBuf256,将收到的报文存放到这256个内存变量。

VAL1到VAL9,实际采集到的数值。

第二步:本例需要2个脚本

第一个脚本为发Modbus报文,接受从站返回的报文,并解析到RecvBuf1到RecvBuf256的内存变量中。

脚本内容如下:

Dim rcBuf '接收到的报文

Dim sendBuf '发送的报文

Dim sendBuf1

Dim sendBuf2

Dim sendBuf3

Dim sendBuf4

Dim sendBuf5

Dim sendBuf6

Dim sendBuf7

Dim sendBuf9

Dim sendCode

Dim value_rcBuf

Dim dataNum

'modbus 读,需要发送8个字节

Function GetValue(x)

b = rcBuf

MyPos = 0

i = 1

Do Until i = x

MyPos = InStr(1, b, " ", 1)

b = Right(b, (len(b) - MyPos))

i = i + 1

Loop

MyPos = InStr(1, b, " ", 1)

If MyPos > 0 Then

b = Left(b, MyPos)

MyPos = InStr(1, b, " ", 1)

If MyPos > 0 Then

b = Left(b, MyPos - 1)

End If

End If

value_rcBuf= b

End Function

'Com1Connection用于判断是否串口打开,打开串口后设置为True,后续无需再打开

If document.GetPointValue("Com1Connection") =False Then

document.SetupConnection 1,9600,8,0,0 '串口1,波特率9600,数据位8位,无校验,停止位1

document.OpenConnection 1,0

document.SetPointValue "Com1Connection",CBool(True),False

End If

sendCode=3

sendBuf1=CLng("&H" & 01) '站号 这里需要根据实际需求修改

sendBuf2=CLng("&H" & 03) '功能码03 读保持型寄存器 这里需要根据实际需求修改

sendBuf3=CLng("&H" & 00) '起始地址高字节 这里需要根据实际需求修改

sendBuf4=CLng("&H" & 00) '起始地址低字节 这里需要根据实际需求修改

sendBuf5=CLng("&H" & 00) '数据个数高8位 这里需要根据实际需求修改

sendBuf6=CLng("&H" & 09) '数据个数低8位 这里需要根据实际需求修改

dataNum=9

sendBuf7=CLng("&H" & 85)

sendBuf8 = CLng("&H" & CStr("CC"))

sendBuf=""

sendBuf= sendBuf1& " " & sendBuf2& " " & sendBuf3& " " & sendBuf4& " " & sendBuf5& " " & sendBuf6& " " & sendBuf7& " " & sendBuf8

document.WriteCommBlock 1,sendBuf,len(sendBuf)

rcBuf=document.ReadCommBlock ( 1,dataNum*2+5,500) '串口号,长度 超时时间(单位毫秒)

For i=1 To dataNum*2+5

GetValue(i)

document.SetPointValue "RecvBuf" & i,CInt(value_rcBuf),False

Next

document.SetPointValue "RecvBuf",CStr(rcBuf),False'总的报文

第二个脚本功能为将RecvBuf1到RecvBuf256中对应的数据写入到VAL1到VAL9

returnAddr=document.GetPointValue("RecvBuf1") '返回的站号

returnCode=document.GetPointValue("RecvBuf2") '返回的功能码

If returnAddr=1 And returnCode=3 Then

For i=0 To 8

v1=document.GetPointValue("RecvBuf" & i*2+4 ) '4为第一个数据的高字节

v2=document.GetPointValue("RecvBuf" & i*2+5) '5为第一个数据的低字节

v=v1*256+v2

document.SetPointValue "VAL" & i+1,CInt(v),False

Next

End If

实际测试效果如下:采用Modbus Slave测试软件测试,数值准确。

函数简介:

打开串口

BOOL OpenConnection(int m_sPort,int m_sProtocolNo)。

m_sPort:串口号,1~N,支持的最大串口数。

m_sProtocolNo:协议号,0,默认,1,厂家1,2,厂家2

例程:打开串口1,协议号0

document.OpenConnection 1,0

设置串口通讯参数

BOOL SetupConnection(int m_sPort,long m_nBaud, int m_nDataBits, int m_nParity, int m_nStopBits)。

m_sPort:串口号,1~N,支持的最大串口数。

m_nBaud:波特率,300,600,1200,4800,9600,19200,38400,57600,115200。

m_nDataBits:数据位,7,8。

m_nParity:校验位,0,无校验,1,奇校验,2,偶校验。

m_nStopBits:0,1位,1,1.5位,2,2位。

例程:设置串口1,波特率9600,数据位8位,无校验,停止位1

document.SetupConnection 1,9600,8,0,0

操作串口发送数据

BOOL WriteCommBlock(int m_sPort,LPSTR block,long num)。

m_sPort:串口号,1~N,支持的最大串口数。

block:发送的数据

num:发送的数据长度,字节数。

例程:

v="1 3 0 0 0 1 132 10" '16进制 01 03 00 00 00 01 84 0A

document.WriteCommBlock 1,v,len(v)

操作串口接收数据

VARIANT ReadCommBlock(int m_sPort,int nMaxLength,int timeout)。

m_sPort:串口号,1~N,支持的最大串口数。

nMaxLength:要接收的数据长度,字节数。

timeout:超时,毫秒。

例程:

v="1 3 0 0 0 1 132 10" '16进制 01 03 00 00 00 01 84 0A

document.WriteCommBlock 1,v,len(v)

rtnBuf= document.ReadCommBlock(1,7,500)

关闭串口

CloseConnection(int m_sPort)。

m_sPort:串口号,1~N,支持的最大串口数。

例程:关闭串口1

document.CloseConnection(1)

更多脚本函数可以查看迈思德物联网网关用户手册。

以上就是关于pos机串口号,小迈网关功能——通过VBScript脚本实现串口通信的知识,后面我们会继续为大家整理关于pos机串口号的知识,希望能够帮助到大家!

转发请带上网址:http://www.poszjia.com/newsone/65436.html

你可能会喜欢:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 babsan@163.com 举报,一经查实,本站将立刻删除。