vb.net的rs232通讯

wangxin5576 2009-08-11 09:48:04
各位朋友:
我有一个地磅:RS-232C标准接口,波特率为1200、偶校验、7个数据位、1个停止位。所有字符均发送18位字节,一个起始位。
请问如何编写vb.net程序,(我用的是vb9.)显示所称重量。
先谢谢了
...全文
495 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdingyun 2009-08-17
  • 打赏
  • 举报
回复
给段经修改的HEX-BIN的代码:
    Dim sHex
Dim BinData
Dim sBin As String
Const s1 = "0000101001101111000", s2 = "0125A4936DB7FEC8"
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox4.Text = "F12B"
Call HexToBin(TextBox4.Text)
TextBox5.Text = BinData
End Sub

Public Function HexToBin(ByVal sHex As String) As String
Dim i As Integer
sHex = UCase(sHex)
For i = 1 To Len(sHex)
sBin = sBin & Mid(s1, InStr(1, s2, Mid(sHex, i, 1)), 4)
Next i
HexToBin = sBin
BinData = sBin
End Function
wangxin5576 2009-08-17
  • 打赏
  • 举报
回复

zdingyun
能帮我做zhuanhuan这段的例子吗?先谢谢了。
wangxin5576 2009-08-17
  • 打赏
  • 举报
回复
比较郁闷,我还是不会做,能做成代码例子吗?
wangxin5576 2009-08-17
  • 打赏
  • 举报
回复
谢谢各位,问题解决了。
zdingyun 2009-08-16
  • 打赏
  • 举报
回复
接收每帧字节长度似乎是17字节,请LZ仔细核对产品的说明书,接收按2进制接收,按首字节0X02尾字节0X0D,数据帧长度17字节判断,然后进行数据处理.
按LZ现在的数据VB6的代码:
Option Explicit
Dim sj As String
Dim i As Integer

Private Sub Command1_Click()
For i = 1 To Len(sj) Step 4
Text2 = Text2 & Chr(Val(" &H" & Mid(sj, i, 2)))
Next
End Sub

Private Sub Form_Load()
sj = "02 32 30 20 20 30 30 30 30 38 20 30 30 30 30 30 0D "
Text1 = sj
Text2 = ""
End Sub

得到:
20 00008 00000
wangxin5576 2009-08-16
  • 打赏
  • 举报
回复
今天看了,是奇偶校验错了。
当称重量为8kg时接收到的数据为:
02 32 30 20 20 30 30 30 30 38 20 30 30 30 30 30 0D
02 32 30 20 20 30 30 30 30 38 20 30 30 30 30 30 0D
02 32 30 20 20 30 30 30 30 38 20 30 30 30 30 30 0D
02 32 30 20 20 30 30 30 30 38 20 30 30 30 30 30 0D
当称重量为0时接收到的数据为:
02 32 30 20 20 30 30 30 30 30 20 30 30 30 30 30 0D
02 32 30 20 20 30 30 30 30 30 20 30 30 30 30 30 0D
02 32 30 20 20 30 30 30 30 30 20 30 30 30 30 30 0D
02 32 30 20 20 30 30 30 30 30 20 30 30 30 30 30 0D
02 32 30 20 20 30 30 30 30 30 20 30 30 30 30 30 0D
查ascii对应关系也是正确的。
可是如何编写代码进行显示呢?
各位帮帮忙吧!
zdingyun 2009-08-16
  • 打赏
  • 举报
回复
关于状态字节由16进制转换为2进制的代码参阅下列链接.
http://topic.csdn.net/u/20080108/14/67783c1e-1a7e-4613-904c-dda5e08a380b.html
在将"323020"的16进制字符号串按上述链接提供的方法转换为0或1组成的2进制字符串后分别获得.
注意上述链接的代码是VB6的,在VB.NET中要进行修改使用.
wangxin5576 2009-08-16
  • 打赏
  • 举报
回复
能否在说详细点呢?
02为起始字符,0D为结束字符。02后跟状态字A(32),在后为状态字B(30),在后为状态字C(20),在后六位(20 30 30 30 30 38)为磅的当前重量,在后六位(20 30 30 30 30 30)为皮重。
状态字A表示的意思是:

0 1 2 小数点位置 Bits3,4 分度值因子 BIT5 BIT6
1 0 0 Xxxxx0 1 0 X1 1 1
0 1 0 XXXXXX 0 1 X2
1 1 0 XXXXX.X 1 1 X5
0 0 1 XXXX.XX
1 0 1 XXX.XXX

状态字B
Bits 功能
Bit0 毛重=0,净重=1
Bit1 符号:正=0,负=1
Bit2 超载(或小于0)=1
Bit3 动态=1
Bit4 单位:1b=0.kg=1
Bit5 恒为1
Bit6 恒为1

状态字C可暂时不管。

那么"转换"该怎么写呢?
zdingyun 2009-08-16
  • 打赏
  • 举报
回复
Public Class Form1
Dim mSTR As String
Dim strData As String
Dim strDat As String
Dim mRecvByte() As Byte
Dim Hexsj As String
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim mSize As Integer = Me.SerialPort1.BytesToRead
ReDim mRecvByte(mSize - 1)
SerialPort1.Read(mRecvByte, 0, mSize)
BeginInvoke(New EventHandler(AddressOf zhuanhuan), SerialPort1.BytesToRead()) '使用委托方式显示接收到的字符串
End Sub
Sub zhuanhuan(ByVal sender As System.Object, ByVal e As System.EventArgs) '委托
strDat = ""
TextBox1.Text = ""
Dim i As Integer
For i = 0 To UBound(mRecvByte) 'mSize - 1
strData = strData & IIf(mRecvByte(i) > 15, Hex(mRecvByte(i)), "0" & Hex(mRecvByte(i))) '& " "
Next
If Mid(strData, 1, 2) = "02" And Mid(strData, 33, 2) = "0D" Then
For i = 1 To Len(strData) Step 2
TextBox1.Text = TextBox1.Text & Chr(Val(" &H" & Mid(strData, i, 2)))
Next
'此处添加状态字节处理代码,涉及2-16进制转换和位操作
TextBox1.Text = strData
strData = ""
End If
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.BaudRate = 1200 '波特率设为
SerialPort1.PortName = "com1" '端口为串口COM1
SerialPort1.ReceivedBytesThreshold = 1
SerialPort1.Parity = IO.Ports.Parity.Even
SerialPort1.DataBits = 7
If SerialPort1.IsOpen = False Then SerialPort1.Open() '打开串口
TextBox1.Text = ""
End Sub
End Class
zdingyun 2009-08-15
  • 打赏
  • 举报
回复
LZ:你的问题在于你所获得的数据(16进制)与你描述的通信协议确定的数据帧对不上号.
请LZ明确说明你的地磅型号,类似的地磅VB6的代码有.VB.NET应该问题不大.
wangxin5576 2009-08-15
  • 打赏
  • 举报
回复
明天我再看看,以上设置应该是该表默认值
zdingyun 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 wangxin5576 的回复:]
我是按说明书上设置的,波特率1200,7位数据位,偶校验。
[/Quote]
那地磅本身是否设置在同样参数上?
wangxin5576 2009-08-15
  • 打赏
  • 举报
回复
我是按说明书上设置的,波特率1200,7位数据位,偶校验。
zdingyun 2009-08-15
  • 打赏
  • 举报
回复
想了解,你在20楼所读的数据是如何设置你的测试软件的设置参数的.
特别是波特率是否设置在1200上?
wangxin5576 2009-08-15
  • 打赏
  • 举报
回复
磅的型号为XK3130型(kingbird)。
我也看到接收到的数据与说明书不同,不知道怎么回事。如果按通讯协议又该怎么实现呢。
晓轩 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wangxin5576 的回复:]
重量为0:

6A  7C  02  32  30  01  03  0D  26  18  30  41  02  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26  18  30  41  02  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26  18  30  41  02  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26  18  30  41  02  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26  18  30  41  02  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26  18  30  41 


重量为:70
7C  02  32  30  01  03  0D  26  18  30  5D  03  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26  18  30  5D  03  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26  18  30  5D  03  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26  18  30  5D  03  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26  18  30  5D  03  02  0D  26  18  30  41  02  6A  7C  02  32  30  01  03  0D  26 
[/Quote]
啥叫一直再循环???难道你接收的array每次不清空么?

这两串数是单次接收的数据么?
wangxin5576 2009-08-14
  • 打赏
  • 举报
回复
联系厂家了,他们没有例子程序。
yanlongwuhui 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wangxin5576 的回复:]
说明书上只是如12楼的说明,我没有接触过这块,你能给我解释解释吗?
[/Quote]
联系下供应商,具体到通讯数据的协议,一般设备的供应商都有提供资料的,甚至提供例程
wangxin5576 2009-08-14
  • 打赏
  • 举报
回复
重量为0时接收到的十六进制为:

6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41
一直在循环

重量为70kg时接收到的十六进制为
7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 一直在循环
wangxin5576 2009-08-14
  • 打赏
  • 举报
回复
重量为0:

6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41 02 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 41



重量为:70
7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26 18 30 5D 03 02 0D 26 18 30 41 02 6A 7C 02 32 30 01 03 0D 26
加载更多回复(22)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧