您现在所在的是:

人机界面

回帖:1个,阅读:487 [上一页] [1] [下一页]
1702
czhaii
文章数:280
年度积分:138
历史总积分:1702
注册时间:2016/3/13
发站内信
发表于:2024/1/8 6:05:02
#0楼

附件 1.jpg

附件 2.jpg
教程分四个部分
1:昆仑通态与单片机通信一:工程界面的设计
2:昆仑通态与单片机通信二:脚本驱动的设计
3:昆仑通态与单片机通信三:脚本驱动与HDMI工程的关联
4:昆仑通态与单片机通信四:单片机程序的设计
按照教程第二章内容,在脚本驱动软件中建立输入输入变量X0-07,
X10-X17.Y0-Y7,Y10-Y17.
到下一步就蒙了。
教材里是这么写的:
////////////////////////////////////////////////////////////////////////
我们为了和后面的输出控制Y00-Y07、Y10-Y17做一个区分,我们在用于“状态显示”
的这些通道变量名前面加一个“r”,也就是read变量类型,然后在用于按键控制输出
的通道变量名前面加一个“w”,也就是write变量类型,这样,这些用作输入输出状态
显示和输出控制的通道我们就设置好了,这里需要注意一下,用于输出控制的
w_Y00- w_Y07、w_Y10- w_Y17通道的“通道类型”要设置为“浮点数”,
因为我们在HDMI工程中,用的是“数值型”。

////////////////////////////////////////////////////////////////////////
我不明白是要把这些输入输出刚刚定义好的变量全部修改呢,
还是在另一个地方再另外定义。



1702
czhaii
文章数:280
年度积分:138
历史总积分:1702
注册时间:2016/3/13
发站内信
发表于:2024/1/10 7:40:00
#1楼

通过最近几天摸索,总算有点眉目了
就是将脚本程序将触摸屏使用的控件
和单片机输入输出变量关联起来。
包装成一个类似于单片机头文件一样的函数。
使用的时候加载到组态软件。
附件 mcgs1.jpg

附件 mcgs2.jpg



'———————————————————————
'驱动脚本:采集函数脚本,MCGS将定时调用这个函数
'这个函数需要完成从设备获取数据,并将数据根据协议
'进行解析,最后赋值到相应通道上的功能。
'这部分是注释,请在下面编辑采集脚本的内容:
'———————————————————————
DIM r_DATA01 AS SINGLE '0X5A 帧头
DIM r_DATA02 AS SINGLE '0XA5 帧头
DIM r_DATA03 AS SINGLE '0X06 数据长度 从长度位后一位开始的数据总长
DIM r_DATA04 AS SINGLE '0X80 读指令
DIM r_DATA05 AS SINGLE '0X00输入状态 0X00-0X07
DIM r_DATA06 AS SINGLE '0X00输入状态 0X10-0X17
DIM r_DATA07 AS SINGLE '0X00输出状态 Y0-Y7
DIM r_DATA08 AS SINGLE '0X00输出状态 Y10-Y17
DIM r_DATA09 AS SINGLE '0X86 和检验
'-----输入状态(开关型)-----
DIM rBit_X00 AS INTEGER
DIM rBit_X01 AS INTEGER
DIM rBit_X02 AS INTEGER
DIM rBit_X03 AS INTEGER
DIM rBit_X04 AS INTEGER
DIM rBit_X05 AS INTEGER
DIM rBit_X06 AS INTEGER
DIM rBit_X07 AS INTEGER

DIM rBit_X10 AS INTEGER
DIM rBit_X11 AS INTEGER
DIM rBit_X12 AS INTEGER
DIM rBit_X13 AS INTEGER
DIM rBit_X14 AS INTEGER
DIM rBit_X15 AS INTEGER
DIM rBit_X16 AS INTEGER
DIM rBit_X17 AS INTEGER

'-----输出状态(开关型)-----
DIM rBit_Y00 AS INTEGER
DIM rBit_Y01 AS INTEGER
DIM rBit_Y02 AS INTEGER
DIM rBit_Y03 AS INTEGER
DIM rBit_Y04 AS INTEGER
DIM rBit_Y05 AS INTEGER
DIM rBit_Y06 AS INTEGER
DIM rBit_Y07 AS INTEGER

DIM rBit_Y10 AS INTEGER
DIM rBit_Y11 AS INTEGER
DIM rBit_Y12 AS INTEGER
DIM rBit_Y13 AS INTEGER
DIM rBit_Y14 AS INTEGER
DIM rBit_Y15 AS INTEGER
DIM rBit_Y16 AS INTEGER
DIM rBit_Y17 AS INTEGER

'-----输出控制(数值型)-----
DIM rByte_Y00 AS SINGLE
DIM rByte_Y01 AS SINGLE
DIM rByte_Y02 AS SINGLE
DIM rByte_Y03 AS SINGLE
DIM rByte_Y04 AS SINGLE
DIM rByte_Y05 AS SINGLE
DIM rByte_Y06 AS SINGLE
DIM rByte_Y07 AS SINGLE

DIM rByte_Y10 AS SINGLE
DIM rByte_Y11 AS SINGLE
DIM rByte_Y12 AS SINGLE
DIM rByte_Y13 AS SINGLE
DIM rByte_Y14 AS SINGLE
DIM rByte_Y15 AS SINGLE
DIM rByte_Y16 AS SINGLE
DIM rByte_Y17 AS SINGLE

'-----串口收发(数值型)-----
DIM nSendByteArr(7) AS BYTE
DIM nRecvByteArr(9) AS BYTE

DIM nReturn AS INTEGER
'-----触摸屏指令发送-----
IF Send_Busy=0 THEN

nSendByteArr[1]=&H37
nSendByteArr[2]=&H73
nSendByteArr[3]=&H04
nSendByteArr[4]=&H80
nSendByteArr[5]=&H00
nSendByteArr[6]=&H00
nSendByteArr[7]=!SvrByteArraySum(nSendByteArr,3,4)'和检验
!DevClearBuff()'清缓冲
nReturn =!DevWriteAndReadByteArr(nSendByteArr,7,nRecvByteArr,9,通讯延时)
'-----串口数据检验及解析-----
ENDIF
IF (nReturn=9)AND(nRecvByteArr[1]=&H5A)AND(nRecvByteArr[1]=&H5)AND(nSendByteArr[9]=!SvrByteArraySum(nRecvByteArr,3,6))THEN
'-----串口数据缓存-----
r_DATA01=nRecvByteArr[1] '0X5A 帧头
r_DATA02=nRecvByteArr[2] '0XA5 帧头
r_DATA02=nRecvByteArr[3] '0X06 数据长度 从长度位后一位开始的数据总长
r_DATA02=nRecvByteArr[4] '0X80 读指令
r_DATA02=nRecvByteArr[5] '0X00输入状态 0X00-0X07
r_DATA02=nRecvByteArr[6] '0X00输入状态 0X10-0X17
r_DATA02=nRecvByteArr[7] '0X00输出状态 Y0-Y7
r_DATA02=nRecvByteArr[8] '0X00输出状态 Y10-Y17
r_DATA02=nRecvByteArr[9] '0X86 和检验

'-----按位解析数据-----


'输入状态一:
rBit_X00 =!Bin2I(!mid(!I2Bin(r_DATA05),32,1)) '第0位
rBit_X01 =!Bin2I(!mid(!I2Bin(r_DATA05),31,1)) '第1位
rBit_X02 =!Bin2I(!mid(!I2Bin(r_DATA05),30,1)) '第2位
rBit_X03 =!Bin2I(!mid(!I2Bin(r_DATA05),29,1)) '第3位
rBit_X04 =!Bin2I(!mid(!I2Bin(r_DATA05),28,1)) '第4位
rBit_X05 =!Bin2I(!mid(!I2Bin(r_DATA05),27,1)) '第5位
rBit_X06 =!Bin2I(!mid(!I2Bin(r_DATA05),26,1)) '第6位
rBit_X07 =!Bin2I(!mid(!I2Bin(r_DATA05),25,1)) '第7位

'输入状态二:
rBit_X10 =!Bin2I(!mid(!I2Bin(r_DATA05),32,1)) '第0位
rBit_X11 =!Bin2I(!mid(!I2Bin(r_DATA05),31,1)) '第1位
rBit_X12 =!Bin2I(!mid(!I2Bin(r_DATA05),30,1)) '第2位
rBit_X13 =!Bin2I(!mid(!I2Bin(r_DATA05),29,1)) '第3位
rBit_X14 =!Bin2I(!mid(!I2Bin(r_DATA05),28,1)) '第4位
rBit_X15 =!Bin2I(!mid(!I2Bin(r_DATA05),27,1)) '第5位
rBit_X16 =!Bin2I(!mid(!I2Bin(r_DATA05),26,1)) '第6位
rBit_X17 =!Bin2I(!mid(!I2Bin(r_DATA05),25,1)) '第7位

'输出状态一:
rBit_Y00 =!Bin2I(!mid(!I2Bin(r_DATA07),32,1)) '第0位
rBit_Y01 =!Bin2I(!mid(!I2Bin(r_DATA07),31,1)) '第1位
rBit_Y02 =!Bin2I(!mid(!I2Bin(r_DATA07),30,1)) '第2位
rBit_Y03 =!Bin2I(!mid(!I2Bin(r_DATA07),29,1)) '第3位
rBit_Y04 =!Bin2I(!mid(!I2Bin(r_DATA07),28,1)) '第4位
rBit_Y05 =!Bin2I(!mid(!I2Bin(r_DATA07),27,1)) '第5位
rBit_Y06 =!Bin2I(!mid(!I2Bin(r_DATA07),26,1)) '第6位
rBit_Y07 =!Bin2I(!mid(!I2Bin(r_DATA07),25,1)) '第7位

'输出状态二:
rBit_Y10 =!Bin2I(!mid(!I2Bin(r_DATA08),32,1)) '第0位
rBit_Y11 =!Bin2I(!mid(!I2Bin(r_DATA08),31,1)) '第1位
rBit_Y12 =!Bin2I(!mid(!I2Bin(r_DATA08),30,1)) '第2位
rBit_Y13 =!Bin2I(!mid(!I2Bin(r_DATA08),29,1)) '第3位
rBit_Y14 =!Bin2I(!mid(!I2Bin(r_DATA08),28,1)) '第4位
rBit_Y15 =!Bin2I(!mid(!I2Bin(r_DATA08),27,1)) '第5位
rBit_Y16 =!Bin2I(!mid(!I2Bin(r_DATA08),26,1)) '第6位
rBit_Y17 =!Bin2I(!mid(!I2Bin(r_DATA08),25,1)) '第7位

'-----通道绑定-----
'-----输入通道-----
!SetIntChannelValueByName("r_X00",rBit_X00)
!SetIntChannelValueByName("r_X01",rBit_X01)
!SetIntChannelValueByName("r_X02",rBit_X02)
!SetIntChannelValueByName("r_X03",rBit_X03)
!SetIntChannelValueByName("r_X04",rBit_X04)
!SetIntChannelValueByName("r_X05",rBit_X05)
!SetIntChannelValueByName("r_X06",rBit_X06)
!SetIntChannelValueByName("r_X07",rBit_X07)

!SetIntChannelValueByName("r_X10",rBit_X10)
!SetIntChannelValueByName("r_X11",rBit_X11)
!SetIntChannelValueByName("r_X12",rBit_X12)
!SetIntChannelValueByName("r_X13",rBit_X13)
!SetIntChannelValueByName("r_X14",rBit_X14)
!SetIntChannelValueByName("r_X15",rBit_X15)
!SetIntChannelValueByName("r_X16",rBit_X16)
!SetIntChannelValueByName("r_X17",rBit_X17)
'-----输出通道-----
!SetIntChannelValueByName("r_Y00",rBit_Y00)
!SetIntChannelValueByName("r_Y01",rBit_Y01)
!SetIntChannelValueByName("r_Y02",rBit_Y02)
!SetIntChannelValueByName("r_Y03",rBit_Y03)
!SetIntChannelValueByName("r_Y04",rBit_Y04)
!SetIntChannelValueByName("r_Y05",rBit_Y05)
!SetIntChannelValueByName("r_Y06",rBit_Y06)
!SetIntChannelValueByName("r_Y07",rBit_Y07)

!SetIntChannelValueByName("r_Y10",rBit_Y10)
!SetIntChannelValueByName("r_Y11",rBit_Y11)
!SetIntChannelValueByName("r_Y12",rBit_Y12)
!SetIntChannelValueByName("r_Y13",rBit_Y13)
!SetIntChannelValueByName("r_Y14",rBit_Y14)
!SetIntChannelValueByName("r_Y15",rBit_Y15)
!SetIntChannelValueByName("r_Y16",rBit_Y16)
!SetIntChannelValueByName("r_Y17",rBit_Y17)
ENDIF


'———————————————————————
'驱动脚本:单通道写脚本。当MCGS中通道连接的变量
'发生改变的时候,MCGS将自动调用本脚本。本脚本要
'实现的功能是:如果该通道是一个写通道,则将通道变
'化后的值写入物理设备中去。参考函数:!GetCurrentChannelNum
'这部分是注释,请在下面编辑单通道写函数的内容:
'———————————————————————
DIM NumChannel AS INTEGER
DIM Addr AS SINGLE
DIM Value AS SINGLE

DIM nSendByteArr(7) AS BYTE
DIM nRecvByteArr(9) AS BYTE

NumChannel=!GetCurrentChannelNum()
!GetsingleChannelValueByNum(NumChannel,Value )
nSendByteArr[1]=&H37 '帧头
nSendByteArr[2]=&H73 '帧头
nSendByteArr[3]=&H06 '长度
nSendByteArr[4]=&H81 '功能码
'数据写通道从33开始,因为前面有X0-X7 X10-X17 Y0-Y7 Y10-Y17
'输出控制Y00--写寄存器地址:0X0000
IF NumChannel=33 THEN
Addr=&H0000
ENDIF
'输出控制Y01--写寄存器地址:0X0001
IF NumChannel=34 THEN
Addr=&H0001
ENDIF
'输出控制Y02--写寄存器地址:0X0002
IF NumChannel=35 THEN
Addr=&H0002
ENDIF
'输出控制Y03--写寄存器地址:0X0003
IF NumChannel=36 THEN
Addr=&H0003
ENDIF
'输出控制Y04--写寄存器地址:0X0004
IF NumChannel=37 THEN
Addr=&H0004
ENDIF
'输出控制Y05--写寄存器地址:0X0005
IF NumChannel=38 THEN
Addr=&H00035
ENDIF
'输出控制Y06--写寄存器地址:0X0006
IF NumChannel=39 THEN
Addr=&H0006
ENDIF
'输出控制Y07--写寄存器地址:0X0007
IF NumChannel=40 THEN
Addr=&H0007
ENDIF
'输出控制Y10--写寄存器地址:0X0008
IF NumChannel=41 THEN
Addr=&H0008
ENDIF
'输出控制Y11--写寄存器地址:0X0009
IF NumChannel=42 THEN
Addr=&H0009
ENDIF
'输出控制Y12--写寄存器地址:0X000A
IF NumChannel=43 THEN
Addr=&H000A
ENDIF
'输出控制Y13--写寄存器地址:0X000B
IF NumChannel=44 THEN
Addr=&H000B
ENDIF
'输出控制Y14--写寄存器地址:0X000C
IF NumChannel=45 THEN
Addr=&H000C
ENDIF
'输出控制Y15--写寄存器地址:0X000D
IF NumChannel=46 THEN
Addr=&H000D
ENDIF
'输出控制Y16--写寄存器地址:0X000E
IF NumChannel=47 THEN
Addr=&H000E
ENDIF
'输出控制Y17--写寄存器地址:0X000F
IF NumChannel=48 THEN
Addr=&H000F
ENDIF
Send_Busy=1

nSendByteArr[5]=!BitRShift(Addr,8)
nSendByteArr[6]=Addr
nSendByteArr[7]=!BitRShift(Value,8)
nSendByteArr[8]=Value
nSendByteArr[8]=!SvrByteArraySum(nSendByteArr,3,6)'和检验
!DevClearBuff()'清缓冲
!DevWriteAndReadByteArr(nSendByteArr,9,nRecvByteArr,9,通讯延时)

Send_Busy=0

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003