功能需求:
有一个药柜,药柜上有36个LED灯,需要实现上位机发送指令个药柜控制器实现亮灯和灭灯操作。协议说明:
1、采用RS-232C格式通讯。控制字写入COMx口,其中x为RS-232C/RS-485转换器所接入的上位机标准串行接口。
2、串行通讯波特率为9600,1个bit起始位,8个bit数据,一个bit停止位。
3、上位机控制指令格式为2字节,其中第一个字节为节点编号,即为药柜编号;第二个字节为该药柜的灯编号及灯的"亮"和"灭"指令。两字节格式如下:
第一字节:
D7 D6 D5 D4 D3 D2 D1 D0
8bit全部为药柜编号,编号范围是1-127(01H-7FH)号。第二个字节:
D7 D6 D5 D4 D3 D2 D1 D0
D7控制灯的"亮"或"灭",D7=1,灯亮,D7=0,灯灭。
D6-D0为药柜的灯编号,范围是1-127(01H-7FH)。
例如:10000100B表示编号为04的灯亮,00000011B表示编号为03的灯灭。4、上位机自己的RS-485协议编号为00H。5、下位机(药柜控制器)在接到上位机控制指令后,即回复一个2字节的指令。
第一个字节:00H(上位机编号),呼叫上位机。
第二个字节:上位机传给该药柜控制器的第二字节指令。6、上位机发出控制指令后,即等待下位机(药柜控制器)回复,若接收到的第一字节为00H,第二字节等于本机所发的第二字节,则表示控制指令传输成功。######################################################################################################按照上面描述的规则,我写了一段通讯代码,发送过去指令对应LED灯不会亮,通讯是成功的,应该是指令发送代码不正确,请各位有经验的大虾指点一下,应该如何写发送这两个字节的代码。自己写的一段代码:
serialPortDemo.PortName = "COM2";
serialPortDemo.BaudRate = 9600;
serialPortDemo.DataBits = 8;
serialPortDemo.Parity = Parity.Mark;
serialPortDemo.StopBits = StopBits.One;
serialPortDemo.Open();//转换药柜和药柜灯字节模式
serialPortDemo.WriteLine("00000001 00111111");serialPortDemo.Close();*******************************************************************************************************
可用分只有78了,不好意思。
有一个药柜,药柜上有36个LED灯,需要实现上位机发送指令个药柜控制器实现亮灯和灭灯操作。协议说明:
1、采用RS-232C格式通讯。控制字写入COMx口,其中x为RS-232C/RS-485转换器所接入的上位机标准串行接口。
2、串行通讯波特率为9600,1个bit起始位,8个bit数据,一个bit停止位。
3、上位机控制指令格式为2字节,其中第一个字节为节点编号,即为药柜编号;第二个字节为该药柜的灯编号及灯的"亮"和"灭"指令。两字节格式如下:
第一字节:
D7 D6 D5 D4 D3 D2 D1 D0
8bit全部为药柜编号,编号范围是1-127(01H-7FH)号。第二个字节:
D7 D6 D5 D4 D3 D2 D1 D0
D7控制灯的"亮"或"灭",D7=1,灯亮,D7=0,灯灭。
D6-D0为药柜的灯编号,范围是1-127(01H-7FH)。
例如:10000100B表示编号为04的灯亮,00000011B表示编号为03的灯灭。4、上位机自己的RS-485协议编号为00H。5、下位机(药柜控制器)在接到上位机控制指令后,即回复一个2字节的指令。
第一个字节:00H(上位机编号),呼叫上位机。
第二个字节:上位机传给该药柜控制器的第二字节指令。6、上位机发出控制指令后,即等待下位机(药柜控制器)回复,若接收到的第一字节为00H,第二字节等于本机所发的第二字节,则表示控制指令传输成功。######################################################################################################按照上面描述的规则,我写了一段通讯代码,发送过去指令对应LED灯不会亮,通讯是成功的,应该是指令发送代码不正确,请各位有经验的大虾指点一下,应该如何写发送这两个字节的代码。自己写的一段代码:
serialPortDemo.PortName = "COM2";
serialPortDemo.BaudRate = 9600;
serialPortDemo.DataBits = 8;
serialPortDemo.Parity = Parity.Mark;
serialPortDemo.StopBits = StopBits.One;
serialPortDemo.Open();//转换药柜和药柜灯字节模式
serialPortDemo.WriteLine("00000001 00111111");serialPortDemo.Close();*******************************************************************************************************
可用分只有78了,不好意思。
==========================>byte[] b = new byte[2];
b[0] = 1;
b[1] = 63;//如果要开,则为63+0x80
serialPortDemo.Write(b, 0, 2);试一下
serialPortDemo.BaudRate = 9600;
serialPortDemo.DataBits = 8;
serialPortDemo.Parity = Parity.Mark;
serialPortDemo.StopBits = StopBits.One;
serialPortDemo.Open();
//10000100B表示编号为04的灯亮,00000011B表示编号为03的灯灭。
//04灯亮 转化为16进制 0x84,03灯灭转化为16进制为0x03
byte[]Request=new byte[2];
Request.Add((byte)0x84);
Request.Add((byte)0x03);
serialPortDemo.Write(Request,0,2);