PC与PLC通讯求解!~~
需求:PC将十进制数2010以byte数组形式发送给PLC
PLC接收设置:PLC哪边只能接收二进制数据或是十六进制,二进制每次接收的长度是双字(也就是32bit)。
比如十进制2010,plc格式会是(00000000 00000000 00000111 11011010),plc读的长度可以设置(字,双字)
PC发送过程:使用用PC端TcpClinetSend(byte[] var)函数发送出去。
问题:请问该怎么将2010转换byte数组,一次性发32位长度的数据给他,如果高位没有就补0我试过:如果我两位给他好像可以:byte[] date= new byte[] { 11 };byte[] date= new byte[] { 2, 1, 0, 1, 0 };Plc解出来的数据很大。
------解决思路----------------------byte[] byData = BitConverter.GetByte((int)2010)
------解决思路----------------------byte[] byData = BitConverter.GetByte(2010)
------解决思路----------------------你自己不会看 GetByte 的重载吗?
还有 不知道你是要分五次发送完成还是 一次发送完成
如果是五次 你调用五次 GetByte 然后Send 不就可以了?
如果你是要一次 发送完成 那么 把5个byte[] 合并成 一个 byte[] 都不会吗?
那么 你还是 重新去看看书吧。。。
------解决思路----------------------二进制 只是一堆数据 不存在什么 + - 之类的符号不符号
11111111 如果你把它当作无符号 那么他就是 255 如果你当作有符号 那么他就是 -1
就像 165只是一个数字 可能是一个人的身高 也可能是一个公交车牌 取决于你把它当作什么来处理 记得以前看 数据结构 里面说的一样 计算机内存中所有的数据 如果你不赋予他一个结构 他都是没有意义的数据
还有你那个拷贝数据的函数 是不是写的太死板 只能组合3个?如果我要四个怎么办?或者 自由两个怎么办
写成 CopyByte(List<byte[]>) 这样 好歹要合理一点吧?
其实 还有一个很简单的方式
List<byte> lst = new List<byte>
lst.AddRange(BitConverter.GetByte(2010))
lst.Add......
byte[] byData = lst.ToArray();