我按儀表通訊協議output后,input一直為空,請高手幫忙看看:附通信協議:二、通讯指令 AI仪表采用16进制数据格式来表示各种指令代码及数据。AI仪表软件通讯指令经过优化设计,只有两条,一条为读指令,一条为写指令,两条指令使得上位机软件编写容易。不过却能100%完整地对仪表进行操作。 地址代号:为了在一个通讯接口上连接多台AI仪表,需要给每台AI仪表编一个互不相同的代号。AI有效的地址为0—100。所以一条通讯线路上最多可连接101台AI仪表。仪表的地址代号由参数Addr决定。 仪表内部采用整型数据表示参数及测量值等,数据最大范围为:-2999—+32767。因此采用-32768—-7160之间的数值来表示地址代号,来降低因数据与地址重复造成冲突的可能性。AI仪表通讯协议规定,地址代号为两个字节,其数值范围(16进制数)是80H—BFH,两个字节必需相同,数值为(仪表地址+80H)。例如,仪表参数Addr=10(16进制数为0AH,0A+80H=8AH),则该仪表的地址表示为: 8AH 8AH参数代号:仪表的参数用1个8位二进制数(一个字节,写为16进制数)的参数代号来表示。它在指令中表示要读/写的参数名。参数代号见下表: AI 仪表可读/写的参数代号表:参数
调节器
AI-708M巡检仪
流量积算仪
AI-338频率调节器
代号
(AI-708/808/708P/808P)
(AI-708H/Y)
/IO模块
00H
状态位
(空)
SV批量控制给定值
SV/SteP给定值/程
给定值/程序段
序段
01H
HIAL上限报警
HIA(X)
FHIA
HIAL上限报警
02H
LoAL下限报警
LoA(X)
FLoA
LoAL下限报警
03H
DHAL正偏差报警
(空)
SPE
DHAL正偏差报警
04H
DLAL负偏差报警
(空)
Act
DLAL负偏差报警
05H
dF回差
dF(X)
Esn
dF回差
06H
Ctrl控制方式
(空)
FSc
CtrL控制方式
07H
M5保持参数
(空)
PdIH
M5保持参数
08H
P速率参数
(空)
CSc
P速率参数
09H
t滞后参数
(空)
CdIH
t滞后参数
0AH
CtI控制周期
(空)
Cut
CtI控制周期
0BH
Sn输入规格
Sn(X)-34(只读)
FdIH
0CH
dIP小数点位置
Sn(X)-1(只读)
FdIP
dIP小数点位置
0DH
dIL下限显示值
dIL(X)
PA
0EH
dIH上限显示值
dIH(X)
Po
0FH
ALP报警输出选择
ALP(X)
Co
10H
Sc传感器修正
(空)
Frd
11H
OP1输出方式
(空)
CF
12H
OPL输出下限
(空)
bc
13H
OPH输出上限
(空)
IoL
14H
CF功能选择
Cn功能选择
Foh
15H
仪表型号特征
仪表型号特征
仪表型号特征
仪表型号特征
16H
addr仪表地址
addr仪表地址
addr仪表地址
addr仪表地址
17H
dL数字滤波
Sn(X)-2(只读)
IoH
18H
run运行参数
nonc常开/常闭
dL
19H
Loc参数封锁
Loc参数封锁
Loc
1AH
C01
无
备用
1BH
t01
无
FDF
1CH
C02
无
CHIA
1DH
t02
无
CLOA
1EH
C03
无
PHIA
1FH
t03
无
PLOA
20H
C04
无
ALP
21H
t04
无
FSB
22H
C05
无
CDIP
23H
t05
无
PDIP
24H
C06
无
PSc
25H
t06
无
CLN
26H
C07
无
FLJH
27H
t07
无
FLJL
28H
C08
无
EJH(补前流量高)
29H
t08
无
EJL(补前流量低)
2AH-
C09-C31程序数据
无
无
55H
56H
运行时间
说明:1、仪表测量值PV没有参数代号,但是只要有对仪表操作,即无任读还是写都会返回测量值,具体见后文。 2、如果向仪表读取参数代号在表格中参数以外,则仪表不会返回任何数据。 3、AI—808系列1AH为手动输出值MV。当参数run=0时,可通过写该参数来调节手动输出值。为保持兼容性,写 AI-808型仪表1AH也为手动输出值,但建议目前编程统一到16H。 4、AI-708P型另有60个参数(30个时间及30个温度),其参数代号从1AH-55H,第1段温度为1AH,第一段时间为1BH,第二段温度为1CH,依此排列,程序段号参数SteP为00H,无SV参数。代号56H为当前段已运行时间,只许读,不能写。5、15H为仪表型号的特征:V5.0-V6.0版仪表开始,15H将逐步用于表示仪表的型号特征,这样从上位机软件就能实现对下位机仪表的自动识别。为了尽量与旧有仪表保持兼容,特作以下约定:(1)虽然AI系列仪表允许设置很低的通讯波特率,但1200及以下波特率的使用基本上没有,对于AI-708/808型仪表,15H仍返回波特率,这样其高位字节数通常应大于或等于5,当在软件中识别 15H高字节大于5时,上位机软件可识别为AI-708/808型仪表。(2)对于AI-708/808P型仪表,15H仍返回程序控制字,其高位字节数值为0,低位字节数据如下: (X)(X)(X)(X)(STOP)(HOLD)(EV1)(EV2)前4位( BIT)目前暂不用,程序中应允许起为任意值。HOLD 及STOP=0,则程序运行。STOP=0,HOLD=1则程序暂停,STOP=1,HOLD=1,则程序停止EV1,EV2表示事件输出状态,为1时表示事件输出动作,为0时表示事件输出无效。(3)AI-708H./Y型仪表,15H的高字节为1低字节备用,应允许其为任意值。(4)AI-708M型仪表,15H的高字节为3低字节备用,应允许其为任意值。 读/写指令分别如下: 读: 地址代号+52H(82)+要读参数的代号+0+0+CRC校验码 写: 地址代号+43H(67)+要写参数的代号+写入数低字节+写入数高字节+CRC校验码 读指令的CRC校验码为:要读参数的代号*256+82+ADDRADDR为仪表地址参数值,范围是0-100(注意不要加上80H)。CRC为以上数做二进制16位整数加法后得到的余数(溢出部分不处理),余数为2个字节,其低字节在前,高字节在后。写指令的CRC校验码则为:要写的参数代号*256+67+要写的参数值+ADDR。要写得参数值用16位二进制整数表示。 无论是读还是写,仪表都返回以下数据 测量值PV+给定值SV+输出值MV及报警状态+所读/写参数值+CRC校验码 其中PV、SV及所读参数值均为整数格式,各占2个字节,MV占一个字节,数值范围0-220,报警状态占一个字节,CRC校验码占2个字节,共10个字节。 CRC校验码为PV+SV+(报警状态*256+MV)+参数值+ADDR,按整数加法相加后得到的余数。 每2个8位数据代表一个16位整形数,低位字节在前,高位字节在后,各温度值采用补码表示,热电偶或热电阻输入时其单位都是0.1℃,1—5V或0—5V等线性输入时,单位都是线性最小单位。因为传递的是16位二进制数,所以无法表示小数点,要求用户在上位机处理。 输出值和报警状态各占1个字节,报警状态采用二进制代码表示各报警信号,如下: 位0 为0则上限报警(HIAL)不成立,为1为上限报警成立。 位1 为0则下限报警(LoAL)不成立,为1为下限报警成立。 位2 为0则正偏差报警(dHAL)不成立,为1为正偏差报警成立。 位3 为0则负偏差报警(dLAL)不成立,为1为负偏差报警成立。 位4 为0则输入超量程报警(orAL)不成立,为1则输入超量程报警成立。 位5 为0则事件输出1不成立,为1则事件输出1成立(仅AI—708P使用)。 位6 为0则事件输出2不成立,为1则事件输出2成立(仅AI—708P使用)。 位7 固定为0。 上位机通过分析可得到仪表当前的工作状态。 上位机每向仪表发一个指令,仪表返回一个数据。编写上位机软件时,注意每条有效指令,仪表在0—0.1秒内作出应答,而上位机也必须等仪表返回数据后,才能发新的指令,否则将引起错误。如果仪表超过最大响应时间仍没有应答,则原因可能无效指令、通讯线路故障,仪表没有开机,通讯地址不合等,此时上位机应重发指令。
调节器
AI-708M巡检仪
流量积算仪
AI-338频率调节器
代号
(AI-708/808/708P/808P)
(AI-708H/Y)
/IO模块
00H
状态位
(空)
SV批量控制给定值
SV/SteP给定值/程
给定值/程序段
序段
01H
HIAL上限报警
HIA(X)
FHIA
HIAL上限报警
02H
LoAL下限报警
LoA(X)
FLoA
LoAL下限报警
03H
DHAL正偏差报警
(空)
SPE
DHAL正偏差报警
04H
DLAL负偏差报警
(空)
Act
DLAL负偏差报警
05H
dF回差
dF(X)
Esn
dF回差
06H
Ctrl控制方式
(空)
FSc
CtrL控制方式
07H
M5保持参数
(空)
PdIH
M5保持参数
08H
P速率参数
(空)
CSc
P速率参数
09H
t滞后参数
(空)
CdIH
t滞后参数
0AH
CtI控制周期
(空)
Cut
CtI控制周期
0BH
Sn输入规格
Sn(X)-34(只读)
FdIH
0CH
dIP小数点位置
Sn(X)-1(只读)
FdIP
dIP小数点位置
0DH
dIL下限显示值
dIL(X)
PA
0EH
dIH上限显示值
dIH(X)
Po
0FH
ALP报警输出选择
ALP(X)
Co
10H
Sc传感器修正
(空)
Frd
11H
OP1输出方式
(空)
CF
12H
OPL输出下限
(空)
bc
13H
OPH输出上限
(空)
IoL
14H
CF功能选择
Cn功能选择
Foh
15H
仪表型号特征
仪表型号特征
仪表型号特征
仪表型号特征
16H
addr仪表地址
addr仪表地址
addr仪表地址
addr仪表地址
17H
dL数字滤波
Sn(X)-2(只读)
IoH
18H
run运行参数
nonc常开/常闭
dL
19H
Loc参数封锁
Loc参数封锁
Loc
1AH
C01
无
备用
1BH
t01
无
FDF
1CH
C02
无
CHIA
1DH
t02
无
CLOA
1EH
C03
无
PHIA
1FH
t03
无
PLOA
20H
C04
无
ALP
21H
t04
无
FSB
22H
C05
无
CDIP
23H
t05
无
PDIP
24H
C06
无
PSc
25H
t06
无
CLN
26H
C07
无
FLJH
27H
t07
无
FLJL
28H
C08
无
EJH(补前流量高)
29H
t08
无
EJL(补前流量低)
2AH-
C09-C31程序数据
无
无
55H
56H
运行时间
说明:1、仪表测量值PV没有参数代号,但是只要有对仪表操作,即无任读还是写都会返回测量值,具体见后文。 2、如果向仪表读取参数代号在表格中参数以外,则仪表不会返回任何数据。 3、AI—808系列1AH为手动输出值MV。当参数run=0时,可通过写该参数来调节手动输出值。为保持兼容性,写 AI-808型仪表1AH也为手动输出值,但建议目前编程统一到16H。 4、AI-708P型另有60个参数(30个时间及30个温度),其参数代号从1AH-55H,第1段温度为1AH,第一段时间为1BH,第二段温度为1CH,依此排列,程序段号参数SteP为00H,无SV参数。代号56H为当前段已运行时间,只许读,不能写。5、15H为仪表型号的特征:V5.0-V6.0版仪表开始,15H将逐步用于表示仪表的型号特征,这样从上位机软件就能实现对下位机仪表的自动识别。为了尽量与旧有仪表保持兼容,特作以下约定:(1)虽然AI系列仪表允许设置很低的通讯波特率,但1200及以下波特率的使用基本上没有,对于AI-708/808型仪表,15H仍返回波特率,这样其高位字节数通常应大于或等于5,当在软件中识别 15H高字节大于5时,上位机软件可识别为AI-708/808型仪表。(2)对于AI-708/808P型仪表,15H仍返回程序控制字,其高位字节数值为0,低位字节数据如下: (X)(X)(X)(X)(STOP)(HOLD)(EV1)(EV2)前4位( BIT)目前暂不用,程序中应允许起为任意值。HOLD 及STOP=0,则程序运行。STOP=0,HOLD=1则程序暂停,STOP=1,HOLD=1,则程序停止EV1,EV2表示事件输出状态,为1时表示事件输出动作,为0时表示事件输出无效。(3)AI-708H./Y型仪表,15H的高字节为1低字节备用,应允许其为任意值。(4)AI-708M型仪表,15H的高字节为3低字节备用,应允许其为任意值。 读/写指令分别如下: 读: 地址代号+52H(82)+要读参数的代号+0+0+CRC校验码 写: 地址代号+43H(67)+要写参数的代号+写入数低字节+写入数高字节+CRC校验码 读指令的CRC校验码为:要读参数的代号*256+82+ADDRADDR为仪表地址参数值,范围是0-100(注意不要加上80H)。CRC为以上数做二进制16位整数加法后得到的余数(溢出部分不处理),余数为2个字节,其低字节在前,高字节在后。写指令的CRC校验码则为:要写的参数代号*256+67+要写的参数值+ADDR。要写得参数值用16位二进制整数表示。 无论是读还是写,仪表都返回以下数据 测量值PV+给定值SV+输出值MV及报警状态+所读/写参数值+CRC校验码 其中PV、SV及所读参数值均为整数格式,各占2个字节,MV占一个字节,数值范围0-220,报警状态占一个字节,CRC校验码占2个字节,共10个字节。 CRC校验码为PV+SV+(报警状态*256+MV)+参数值+ADDR,按整数加法相加后得到的余数。 每2个8位数据代表一个16位整形数,低位字节在前,高位字节在后,各温度值采用补码表示,热电偶或热电阻输入时其单位都是0.1℃,1—5V或0—5V等线性输入时,单位都是线性最小单位。因为传递的是16位二进制数,所以无法表示小数点,要求用户在上位机处理。 输出值和报警状态各占1个字节,报警状态采用二进制代码表示各报警信号,如下: 位0 为0则上限报警(HIAL)不成立,为1为上限报警成立。 位1 为0则下限报警(LoAL)不成立,为1为下限报警成立。 位2 为0则正偏差报警(dHAL)不成立,为1为正偏差报警成立。 位3 为0则负偏差报警(dLAL)不成立,为1为负偏差报警成立。 位4 为0则输入超量程报警(orAL)不成立,为1则输入超量程报警成立。 位5 为0则事件输出1不成立,为1则事件输出1成立(仅AI—708P使用)。 位6 为0则事件输出2不成立,为1则事件输出2成立(仅AI—708P使用)。 位7 固定为0。 上位机通过分析可得到仪表当前的工作状态。 上位机每向仪表发一个指令,仪表返回一个数据。编写上位机软件时,注意每条有效指令,仪表在0—0.1秒内作出应答,而上位机也必须等仪表返回数据后,才能发新的指令,否则将引起错误。如果仪表超过最大响应时间仍没有应答,则原因可能无效指令、通讯线路故障,仪表没有开机,通讯地址不合等,此时上位机应重发指令。
解决方案 »
- 用ADOData控件作了一个窗体,后来再次打开时发现,要我输入用户密码等,点击否的话还不能直接看到窗体了.....
- VB datagrid绑定了adodc.修改了datagrid数据后能不能不更新.具体代码
- 我用VB收RS232传送过来的字符串,但是每次传过来的开头总有一个很奇怪字符,好象是个“|_"或者反过来
- 新人:Inet和webbrowser控件的问题各一个,谢谢
- 有没有这样的工具软件。
- 如何获得收藏夹的路径!
- *********alsen 在这吗?你发给我的只是题目 : (,没有正文呀!!!
- 奇怪:!!!生成可执行文件问题 <<<<<<<<<<<<<<<急急>>>>>>>>>>>>>>>>
- 高分征求解答!怎么把一个窗体的标题从任务栏里拿掉?
- 修改表结构,MyTXT = txtFields(0),cn.Execute "Alter Table PersonResult Add '" & MyTXT & "' numeric(18,0) null",这样为何不行?
- 有没有朋友对IIS开发的资料啊???
- 求救,一个在ORACLE中插入数据的问题?在线等待......
"1"代表儀表地址: 執行下面代碼后確沒有返回任何數據:
Private Sub Form_Load()MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End Sub
Private Sub Command2_Click()
Dim instring As String
MSComm1.Output = "1" + "52H" + "00H" + "0" + "0" + "00H*256+82+1"
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 1
instring = MSComm1.Input
MsgBox instring
MSComm1.PortOpen = FalseEnd Sub
分不夠的話我再加,謝了!
Dim instring As String
MSComm1.Output = "1" + "52H" + "00H" + "0" + "0" + "00H*256+82+1"
Do
===============
应该不对啦人家要你发送数值你却发送了字符串。。还有,建议再重新仔细的看看那个协议。。我粗略看了一下协议。。觉得楼主很多地方好像还没搞清楚。
Private Sub Command1_Click()
Dim a(6) As Integer
a(0) = 80
a(1) = 80
a(2) = 82
a(3) = 86
a(4) = 0
a(5) = 0
a(6) = 82
MSComm1.Output = a
End Sub
不是太明白
“读指令的CRC校验码为:要读参数的代号*256+82+ADDR
ADDR为仪表地址参数值,范围是0-100(注意不要加上80H)。CRC为以上数做二进制16位整数加法后得到的余数(溢出部分不处理),余数为2个字节,其低字节在前,高字节在后。
”
的意思。试试再说吧