概述
初次接触HostLink,比较难理解:Fins、FinsTcp、HostLink的区别和关系。个人理解:Fins 同FinsTcp是两个不同的协议,Fins(factory interface network service)是一个单独的协议,可以在主机和PLC通讯中,利用HostLink协议收发Fins指令(FINS commands can be sent and received using the Host Link protocol between interconnected host computers and PLCs)。
通讯格式为:来源官网通讯手册
发送包格式:
@+ 2字节PLC站号+FA (Header Code)+ 000000000 (固定9个0)+2字节FINS命令 +正文 + 2字符FCS校验码+ * +CR(回车)
响应包格式:
以上指令通过ASCII码字符发送。
实战:
1:读取W102.10 的bool值:true
回应数据:
2:读取D102.50 的 short值:
指令文本:@00FA000000000010182006902000171* D
回应数据:
3: 写入Float: 123.45, 地址:D1102.170
其中PLC地址的计算过程为:
//地址的计算
string plcAddress = "D1102.170";
var reg = new Regex(@"(?<A>^[A-Z]{1,3})(?<B>[0-9]{1,4})*.*(?<C>[0-9]{1,4})*");
var match = reg.Match(plcAddress.ToUpper());
//地址的开始部分
ushort beginAddress = ushort.Parse(match.Groups["B"].Value);
//地址的偏移部分
ushort offSetNumber = ushort.Parse(match.Groups["C"].Value);
byte leftOffSet = (byte)(offSetNumber % 0x10);//取偏移量未溢出的部分,对16取模
//实际地址开始位置
beginAddress += (ushort)(offSetNumber / 0x10);//取偏移量溢出的部分,对16取整
byte[] dataOffsetByts = BitConverter.GetBytes(beginAddress);
string address = $"{ dataOffsetByts[1].ToString("X2") }{ dataOffsetByts[0].ToString("X2")}{ leftOffSet.ToString("X2")}";
测试地址的计算:例如:D1102.170 结果为:04580A
协议中FCS栏位:占用两个字符,取值为:从@开始到正文结束的所有字符的ASCⅡ码按位异或运算的结果。具体计算过程为:
byte sumByte = 0;
for (int i = 0; i < array.Length; i++)
{
sumByte ^= array[i];
}
常用的存储区域代码:
IO区: 字:B0,位:30
工作W区:字:B1,位:31
H保持区:字:B2,位:32
D区: 字:82,位:02
最后
以上就是时尚果汁为你收集整理的基于HostLink协议的Fins命令读写的全部内容,希望文章能够帮你解决基于HostLink协议的Fins命令读写所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复