网上有很多关于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机串口号的知识,希望能够帮助到大家!
