205 blocktype = blocktype_infos["blocktype"] |
205 blocktype = blocktype_infos["blocktype"] |
206 ucase_blocktype = blocktype.upper() |
206 ucase_blocktype = blocktype.upper() |
207 blockname = "_".join([ucase_blocktype, location_str]) |
207 blockname = "_".join([ucase_blocktype, location_str]) |
208 |
208 |
209 extract_inputs = "\n".join(["""\ |
209 extract_inputs = "\n".join(["""\ |
210 __SET_VAR(%s->, %s, %s);""" % (blockname, input_name, input_value) |
210 __SET_VAR(%s->, %s,, %s);""" % (blockname, input_name, input_value) |
211 for (input_name, input_value) in [ |
211 for (input_name, input_value) in [ |
212 ("EXECUTE", "__GET_VAR(data__->EXECUTE)")] + [ |
212 ("EXECUTE", "__GET_VAR(data__->EXECUTE)")] + [ |
213 (input["name"].upper(), |
213 (input["name"].upper(), |
214 "__GET_VAR(data__->%s)" % input["name"].upper()) |
214 "__GET_VAR(data__->%s)" % input["name"].upper()) |
215 for input in blocktype_infos["inputs"]] |
215 for input in blocktype_infos["inputs"]] |
216 ]) |
216 ]) |
217 |
217 |
218 |
218 |
219 return_outputs = "\n".join(["""\ |
219 return_outputs = "\n".join(["""\ |
220 __SET_VAR(data__->,%(output_name)s, |
220 __SET_VAR(data__->,%(output_name)s,, |
221 __GET_VAR(%(blockname)s->%(output_name)s));""" % locals() |
221 __GET_VAR(%(blockname)s->%(output_name)s));""" % locals() |
222 for output_name in ["DONE", "BUSY", "ERROR"] + [ |
222 for output_name in ["DONE", "BUSY", "ERROR"] + [ |
223 output["name"].upper() |
223 output["name"].upper() |
224 for output in blocktype_infos["outputs"]] |
224 for output in blocktype_infos["outputs"]] |
225 ]) |
225 ]) |
227 fieldbus_interface_declaration.append(""" |
227 fieldbus_interface_declaration.append(""" |
228 extern void ETHERLAB%(ucase_blocktype)s_body__(ETHERLAB%(ucase_blocktype)s* data__); |
228 extern void ETHERLAB%(ucase_blocktype)s_body__(ETHERLAB%(ucase_blocktype)s* data__); |
229 void __%(blocktype)s_%(location_str)s(MC_%(ucase_blocktype)s *data__) { |
229 void __%(blocktype)s_%(location_str)s(MC_%(ucase_blocktype)s *data__) { |
230 __DECLARE_GLOBAL_PROTOTYPE(ETHERLAB%(ucase_blocktype)s, %(blockname)s); |
230 __DECLARE_GLOBAL_PROTOTYPE(ETHERLAB%(ucase_blocktype)s, %(blockname)s); |
231 ETHERLAB%(ucase_blocktype)s* %(blockname)s = __GET_GLOBAL_%(blockname)s(); |
231 ETHERLAB%(ucase_blocktype)s* %(blockname)s = __GET_GLOBAL_%(blockname)s(); |
232 __SET_VAR(%(blockname)s->, POS, AxsPub.axis->NetworkPosition); |
232 __SET_VAR(%(blockname)s->, POS,, AxsPub.axis->NetworkPosition); |
233 %(extract_inputs)s |
233 %(extract_inputs)s |
234 ETHERLAB%(ucase_blocktype)s_body__(%(blockname)s); |
234 ETHERLAB%(ucase_blocktype)s_body__(%(blockname)s); |
235 %(return_outputs)s |
235 %(return_outputs)s |
236 }""" % locals()) |
236 }""" % locals()) |
237 |
237 |